blob: 7940c468ab52841a73301047810828d153bbbef9 [file] [log] [blame]
// Copyright (c) 2011, 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.
library StatusExpressionTest;
import "package:expect/expect.dart";
import "../../tools/testing/dart/status_expression.dart";
class StatusExpressionTest {
static void testMain() {
test1();
test2();
test3();
test4();
test5();
test6();
test7();
}
static void test1() {
Tokenizer tokenizer = new Tokenizer(
r" $mode == debug && ($arch == chromium || $arch == dartc) ");
tokenizer.tokenize();
Expect.listEquals(tokenizer.tokens,
["\$", "mode", "==", "debug", "&&", "(", "\$", "arch", "==",
"chromium", "||", "\$", "arch", "==", "dartc", ")"]);
ExpressionParser parser =
new ExpressionParser(new Scanner(tokenizer.tokens));
BooleanExpression ast = parser.parseBooleanExpression();
Expect.equals(
r"(($mode == debug) && (($arch == chromium) || ($arch == dartc)))",
ast.toString());
// Test BooleanExpression.evaluate().
Map environment = new Map();
environment["arch"] = "dartc";
environment["mode"] = "debug";
Expect.isTrue(ast.evaluate(environment));
environment["mode"] = "release";
Expect.isFalse(ast.evaluate(environment));
environment["arch"] = "ia32";
Expect.isFalse(ast.evaluate(environment));
environment["mode"] = "debug";
Expect.isFalse(ast.evaluate(environment));
environment["arch"] = "chromium";
Expect.isTrue(ast.evaluate(environment));
}
static void test2() {
Tokenizer tokenizer = new Tokenizer(
r"($arch == dartc || $arch == chromium) && $mode == release");
tokenizer.tokenize();
Expect.listEquals(
tokenizer.tokens,
["(", "\$", "arch", "==", "dartc", "||", "\$", "arch", "==",
"chromium", ")", "&&", "\$", "mode", "==", "release"]);
}
static void test3() {
var thrown;
String input = r" $mode == debug && ($arch==chromium || *$arch == dartc)";
Tokenizer tokenizer = new Tokenizer(input);
try {
tokenizer.tokenize();
} on Exception catch (e) {
thrown = e;
}
Expect.equals("FormatException: Syntax error in '$input'",
thrown.toString());
}
static void test4() {
var thrown;
String input =
r"($arch == (-dartc || $arch == chromium) && $mode == release";
Tokenizer tokenizer = new Tokenizer(input);
try {
tokenizer.tokenize();
} on Exception catch (e) {
thrown = e;
}
Expect.equals("FormatException: Syntax error in '$input'",
thrown.toString());
}
static void test5() {
Tokenizer tokenizer = new Tokenizer(
r"Skip , Pass if $arch == dartc, Fail || Timeout if "
r"$arch == chromium && $mode == release");
tokenizer.tokenize();
ExpressionParser parser =
new ExpressionParser(new Scanner(tokenizer.tokens));
SetExpression ast = parser.parseSetExpression();
Expect.equals(
r"((skip || (pass if ($arch == dartc))) || ((fail || timeout) "
r"if (($arch == chromium) && ($mode == release))))",
ast.toString());
// Test SetExpression.evaluate().
Map environment = new Map();
environment["arch"] = "ia32";
environment["checked"] = true;
environment["mode"] = "debug";
Set<String> result = ast.evaluate(environment);
Expect.setEquals(["skip"], result);
environment["arch"] = "dartc";
result = ast.evaluate(environment);
Expect.setEquals(["skip", "pass"], result);
environment["arch"] = "chromium";
result = ast.evaluate(environment);
Expect.setEquals(["skip"], result);
environment["mode"] = "release";
result = ast.evaluate(environment);
Expect.setEquals(["skip", "fail", "timeout"], result);
}
static void test6() {
Tokenizer tokenizer = new Tokenizer(
r" $arch == ia32 && $checked || $mode == release ");
tokenizer.tokenize();
ExpressionParser parser =
new ExpressionParser(new Scanner(tokenizer.tokens));
BooleanExpression ast = parser.parseBooleanExpression();
Expect.equals(
r"((($arch == ia32) && (bool $checked)) || ($mode == release))",
ast.toString());
// Test BooleanExpression.evaluate().
Map environment = new Map();
environment["arch"] = "ia32";
environment["checked"] = true;
environment["mode"] = "debug";
Expect.isTrue(ast.evaluate(environment));
environment["mode"] = "release";
Expect.isTrue(ast.evaluate(environment));
environment["checked"] = false;
Expect.isTrue(ast.evaluate(environment));
environment["mode"] = "debug";
Expect.isFalse(ast.evaluate(environment));
environment["arch"] = "arm";
Expect.isFalse(ast.evaluate(environment));
environment["checked"] = true;
Expect.isFalse(ast.evaluate(environment));
}
static void test7() {
// Test the != operator.
Tokenizer tokenizer =
new Tokenizer(r"$compiler == dart2js && $runtime != ie9");
tokenizer.tokenize();
ExpressionParser parser =
new ExpressionParser(new Scanner(tokenizer.tokens));
BooleanExpression ast = parser.parseBooleanExpression();
Expect.equals(r"(($compiler == dart2js) && ($runtime != ie9))",
ast.toString());
// Test BooleanExpression.evaluate().
Map environment = new Map();
environment["compiler"] = "none";
environment["runtime"] = "ie9";
Expect.isFalse(ast.evaluate(environment));
environment["runtime"] = "chrome";
Expect.isFalse(ast.evaluate(environment));
environment["compiler"] = "dart2js";
environment["runtime"] = "ie9";
Expect.isFalse(ast.evaluate(environment));
environment["runtime"] = "chrome";
Expect.isTrue(ast.evaluate(environment));
}
}
main() {
StatusExpressionTest.testMain();
}