blob: 04044745df3e83093fb58ae59954b29d67aeadbf [file] [log] [blame]
Damien Martin-Guillerezf88f4d82015-09-25 13:56:55 +00001// Copyright 2015 The Bazel Authors. All rights reserved.
Florian Weikert28da3652015-07-01 14:52:30 +00002//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14package com.google.devtools.build.lib.testutil;
15
cparsons6622e6f2018-10-17 15:00:09 -070016import com.google.common.collect.ImmutableMap;
17import com.google.devtools.build.lib.analysis.skylark.SkylarkModules;
Florian Weikert28da3652015-07-01 14:52:30 +000018import com.google.devtools.build.lib.events.EventHandler;
laurentlb92c43cd2019-02-18 08:27:55 -080019import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
Florian Weikert28da3652015-07-01 14:52:30 +000020import com.google.devtools.build.lib.syntax.Environment;
cparsons6622e6f2018-10-17 15:00:09 -070021import com.google.devtools.build.lib.syntax.Environment.GlobalFrame;
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000022import com.google.devtools.build.lib.syntax.Mutability;
laurentlb6659b4c2019-02-18 07:23:36 -080023import com.google.devtools.build.lib.syntax.StarlarkSemantics;
vladmosa6ad2d52017-05-03 19:24:18 +020024import com.google.devtools.common.options.OptionsParser;
cparsons6622e6f2018-10-17 15:00:09 -070025import java.util.Map;
Florian Weikert28da3652015-07-01 14:52:30 +000026
27/**
28 * Describes a particular testing mode by determining how the
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000029 * appropriate {@code Environment} has to be created
Florian Weikert28da3652015-07-01 14:52:30 +000030 */
31public abstract class TestMode {
laurentlb6659b4c2019-02-18 07:23:36 -080032 private static StarlarkSemantics parseSkylarkSemantics(String... skylarkOptions)
vladmosa6ad2d52017-05-03 19:24:18 +020033 throws Exception {
jcater06d624a2019-06-18 09:07:58 -070034 OptionsParser parser =
35 OptionsParser.builder().optionsClasses(StarlarkSemanticsOptions.class).build();
vladmosa6ad2d52017-05-03 19:24:18 +020036 parser.parse(skylarkOptions);
laurentlb92c43cd2019-02-18 08:27:55 -080037 return parser.getOptions(StarlarkSemanticsOptions.class).toSkylarkSemantics();
vladmosa6ad2d52017-05-03 19:24:18 +020038 }
39
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000040 public static final TestMode BUILD =
41 new TestMode() {
42 @Override
cparsons6622e6f2018-10-17 15:00:09 -070043 public Environment createEnvironment(EventHandler eventHandler,
44 Map<String, Object> builtins,
45 String... skylarkOptions)
vladmosa6ad2d52017-05-03 19:24:18 +020046 throws Exception {
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000047 return Environment.builder(Mutability.create("build test"))
cparsons6622e6f2018-10-17 15:00:09 -070048 .setGlobals(createGlobalFrame(builtins))
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000049 .setEventHandler(eventHandler)
brandjon617f8ff2017-10-06 06:07:13 +020050 .setSemantics(TestMode.parseSkylarkSemantics(skylarkOptions))
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000051 .build();
52 }
53 };
Florian Weikert28da3652015-07-01 14:52:30 +000054
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000055 public static final TestMode SKYLARK =
56 new TestMode() {
57 @Override
cparsons6622e6f2018-10-17 15:00:09 -070058 public Environment createEnvironment(EventHandler eventHandler,
59 Map<String, Object> builtins, String... skylarkOptions)
vladmosa6ad2d52017-05-03 19:24:18 +020060 throws Exception {
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000061 return Environment.builder(Mutability.create("skylark test"))
cparsons6622e6f2018-10-17 15:00:09 -070062 .setGlobals(createGlobalFrame(builtins))
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000063 .setEventHandler(eventHandler)
brandjon617f8ff2017-10-06 06:07:13 +020064 .setSemantics(TestMode.parseSkylarkSemantics(skylarkOptions))
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000065 .build();
66 }
67 };
Florian Weikert28da3652015-07-01 14:52:30 +000068
cparsons6622e6f2018-10-17 15:00:09 -070069 private static GlobalFrame createGlobalFrame(Map<String, Object> builtins) {
70 ImmutableMap.Builder<String, Object> envBuilder = ImmutableMap.builder();
71
72 SkylarkModules.addSkylarkGlobalsToBuilder(envBuilder);
73 envBuilder.putAll(builtins);
74 return GlobalFrame.createForBuiltins(envBuilder.build());
75 }
76
77 public abstract Environment createEnvironment(EventHandler eventHandler,
78 Map<String, Object> builtins,
79 String... skylarkOptions) throws Exception;
Francois-Rene Rideau89312fb2015-09-10 18:53:03 +000080}