blob: e10969d9013e913a3892f3526dcc8a31c26e72af [file] [log] [blame]
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import "package:expect/expect.dart";
import "package:status_file/environment.dart";
import "package:status_file/src/expression.dart";
class TestEnvironment implements Environment {
final Map<String, String> _values;
TestEnvironment(this._values);
void validate(String name, String value, List<String> errors) {
throw new UnimplementedError();
}
/// Looks up the value of the variable with [name].
String lookUp(String name) => _values[name];
operator []=(String key, String value) => _values[key] = value;
}
main() {
testExpression();
testSyntaxError();
testBoolean();
testNotBoolean();
testNotEqual();
}
void testExpression() {
var expression = Expression
.parse(r" $mode == debug && ($arch == chromium || $arch == dartc) ");
Expect.equals(r"$mode == debug && ($arch == chromium || $arch == dartc)",
expression.toString());
// Test BooleanExpression.evaluate().
var environment = new TestEnvironment({"arch": "dartc", "mode": "debug"});
Expect.isTrue(expression.evaluate(environment));
environment["mode"] = "release";
Expect.isFalse(expression.evaluate(environment));
environment["arch"] = "ia32";
Expect.isFalse(expression.evaluate(environment));
environment["mode"] = "debug";
Expect.isFalse(expression.evaluate(environment));
environment["arch"] = "chromium";
Expect.isTrue(expression.evaluate(environment));
}
void testSyntaxError() {
var input = r"($arch == (-dartc || $arch == chromium) && $mode == release";
Expect.throws(() {
Expression.parse(input);
}, (e) => e.toString() == "FormatException: Syntax error in '$input'");
}
void testBoolean() {
var expression =
Expression.parse(r" $arch == ia32 && $checked || $mode == release ");
Expect.equals(
r"$arch == ia32 && $checked || $mode == release", expression.toString());
// Test BooleanExpression.evaluate().
var environment =
new TestEnvironment({"arch": "ia32", "checked": "true", "mode": "debug"});
Expect.isTrue(expression.evaluate(environment));
environment["mode"] = "release";
Expect.isTrue(expression.evaluate(environment));
environment["checked"] = "false";
Expect.isTrue(expression.evaluate(environment));
environment["mode"] = "debug";
Expect.isFalse(expression.evaluate(environment));
environment["arch"] = "arm";
Expect.isFalse(expression.evaluate(environment));
environment["checked"] = "true";
Expect.isFalse(expression.evaluate(environment));
}
void testNotBoolean() {
var expression =
Expression.parse(r" $arch == ia32 && ! $checked || $mode == release ");
Expect.equals(
r"$arch == ia32 && !$checked || $mode == release", expression.toString());
var environment = new TestEnvironment(
{"arch": "ia32", "checked": "false", "mode": "debug"});
Expect.isTrue(expression.evaluate(environment));
environment["mode"] = "release";
Expect.isTrue(expression.evaluate(environment));
environment["checked"] = "true";
Expect.isTrue(expression.evaluate(environment));
environment["mode"] = "debug";
Expect.isFalse(expression.evaluate(environment));
environment["arch"] = "arm";
Expect.isFalse(expression.evaluate(environment));
environment["checked"] = "false";
Expect.isFalse(expression.evaluate(environment));
}
void testNotEqual() {
// Test the != operator.
var expression = Expression.parse(r"$compiler == dart2js && $runtime != ie9");
Expect.equals(
r"$compiler == dart2js && $runtime != ie9", expression.toString());
// Test BooleanExpression.evaluate().
var environment = new TestEnvironment({
"compiler": "none",
"runtime": "ie9",
});
Expect.isFalse(expression.evaluate(environment));
environment["runtime"] = "chrome";
Expect.isFalse(expression.evaluate(environment));
environment["compiler"] = "dart2js";
environment["runtime"] = "ie9";
Expect.isFalse(expression.evaluate(environment));
environment["runtime"] = "chrome";
Expect.isTrue(expression.evaluate(environment));
}