mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 12:30:03 +00:00
a37a2015c8
R=ricow@google.com, whesse@google.com Review URL: https://codereview.chromium.org//15778003 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23130 260f80e4-7a28-3924-810f-c04153c831b5
181 lines
5.8 KiB
Dart
181 lines
5.8 KiB
Dart
// 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();
|
|
}
|