Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(423)

Side by Side Diff: tools/testing/dart/environment.dart

Issue 2901923003: Replace the configuration map with a typed object. (Closed)
Patch Set: Revise. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/testing/dart/drt_updater.dart ('k') | tools/testing/dart/expectation_set.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'configuration.dart';
6
7 typedef String _LookUpFunction(Configuration configuration);
8 typedef bool _BoolLookUpFunction(Configuration configuration);
9
10 // TODO(29756): Instead of synthesized negated variables like "unchecked",
11 // consider adding support for "!" to status expressions.
12 final _variables = {
13 "analyzer": new _Variable.bool((c) => c.compiler == Compiler.dart2analyzer),
14 "arch": new _Variable((c) => c.architecture.name, Architecture.names),
15 "browser": new _Variable.bool((c) => c.runtime.isBrowser),
16 "builder_tag": new _Variable((c) => c.builderTag ?? "", const []),
17 "checked": new _Variable.bool((c) => c.isChecked),
18 "compiler": new _Variable((c) => c.compiler.name, Compiler.names),
19 "csp": new _Variable.bool((c) => c.isCsp),
20 "dart2js_with_kernel": new _Variable.bool((c) => c.useDart2JSWithKernel),
21 "fast_startup": new _Variable.bool((c) => c.useFastStartup),
22 "host_checked": new _Variable.bool((c) => c.isHostChecked),
23 "host_unchecked": new _Variable.bool((c) => !c.isHostChecked),
24 "hot_reload": new _Variable.bool((c) => c.hotReload),
25 "hot_reload_rollback": new _Variable.bool((c) => c.hotReloadRollback),
26 "ie": new _Variable.bool((c) => c.runtime.isIE),
27 "jscl": new _Variable.bool((c) => c.runtime.isJSCommandLine),
28 "minified": new _Variable.bool((c) => c.isMinified),
29 "mode": new _Variable((c) => c.mode.name, Mode.names),
30 "runtime": new _Variable((c) => c.runtime.name, Runtime.names),
31 "strong": new _Variable.bool((c) => c.isStrong),
32 "system": new _Variable((c) => c.system.name, System.names),
33 "unchecked": new _Variable.bool((c) => !c.isChecked),
34 "unminified": new _Variable.bool((c) => !c.isMinified),
35 "use_sdk": new _Variable.bool((c) => c.useSdk)
36 };
37
38 /// Defines the variables that are available for use inside a status file
39 /// section header.
40 ///
41 /// These mostly map to command line arguments with the same name, though this
42 /// is only a subset of the full set of command line arguments.
43 class Environment {
44 /// Validates that the variable with [name] exists and can be compared
45 /// against [value].
46 ///
47 /// If any errors are found, adds them to [errors].
48 static void validate(String name, String value, List<String> errors) {
49 var variable = _variables[name];
50 if (variable == null) {
51 errors.add('Unknown variable "$name".');
52 return;
53 }
54
55 // The "builder_tag" variable doesn't have an enumerated set of values.
56 if (variable.allowedValues.isEmpty) return;
57
58 if (!variable.allowedValues.contains(value)) {
59 errors.add(
60 'Variable "$name" cannot have value "$value". Allowed values are:\n' +
61 variable.allowedValues.join(', ') +
62 '.');
63 }
64 }
65
66 /// The configuration where variable data is found.
67 final Configuration _configuration;
68
69 Environment(this._configuration);
70
71 /// Looks up the value of the variable with [name].
72 String lookUp(String name) {
73 var variable = _variables[name];
74 if (variable == null) {
75 // This shouldn't happen since we validate variables before evaluating
76 // expressions.
77 throw new ArgumentError('Unknown variable "$variable".');
78 }
79
80 return variable.lookUp(_configuration);
81 }
82 }
83
84 // TODO(rnystrom): There's some overlap between these and _Option in
85 // options.dart. Unify?
86 /// Describes a variable name whose value can be tested in a status file.
87 ///
88 /// Each variable is an enumerated string type that only accepts a limited range
89 /// of values. Each instance of this class defines one variable, the values it
90 /// permits, and the logic needed to look up the variable's value from a
91 /// [Configuration]
92 class _Variable {
93 final _LookUpFunction _lookUp;
94 final List<String> allowedValues;
95
96 _Variable(this._lookUp, Iterable<String> allowed)
97 : allowedValues = allowed.toList();
98
99 /// Creates a Boolean variable with allowed values "true" and "false".
100 _Variable.bool(_BoolLookUpFunction lookUp)
101 : _lookUp = ((configuration) => lookUp(configuration).toString()),
102 allowedValues = const ["true", "false"];
103
104 String lookUp(Configuration configuration) => _lookUp(configuration);
105 }
OLDNEW
« no previous file with comments | « tools/testing/dart/drt_updater.dart ('k') | tools/testing/dart/expectation_set.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698