| // Copyright (c) 2016, 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:test/test.dart'; |
| |
| import 'package:boolean_selector/boolean_selector.dart'; |
| |
| void main() { |
| group("operator:", () { |
| test("conditional", () { |
| _expectEval("true ? true : false", true); |
| _expectEval("true ? false : true", false); |
| _expectEval("false ? true : false", false); |
| _expectEval("false ? false : true", true); |
| }); |
| |
| test("or", () { |
| _expectEval("true || true", true); |
| _expectEval("true || false", true); |
| _expectEval("false || true", true); |
| _expectEval("false || false", false); |
| }); |
| |
| test("and", () { |
| _expectEval("true && true", true); |
| _expectEval("true && false", false); |
| _expectEval("false && true", false); |
| _expectEval("false && false", false); |
| }); |
| |
| test("not", () { |
| _expectEval("!true", false); |
| _expectEval("!false", true); |
| }); |
| }); |
| |
| test("with a semantics function", () { |
| _expectEval("foo", false, |
| semantics: (String variable) => variable.contains("a")); |
| _expectEval("bar", true, |
| semantics: (String variable) => variable.contains("a")); |
| _expectEval("baz", true, |
| semantics: (String variable) => variable.contains("a")); |
| }); |
| } |
| |
| /// Asserts that [expression] evaluates to [result] against [semantics]. |
| /// |
| /// By default, "true" is true and all other variables are "false". |
| void _expectEval(String expression, bool result, {semantics}) { |
| expect(_eval(expression, semantics: semantics), equals(result), |
| reason: 'Expected "$expression" to evaluate to $result.'); |
| } |
| |
| /// Returns the result of evaluating [expression] on [semantics]. |
| /// |
| /// By default, "true" is true and all other variables are "false". |
| bool _eval(String expression, {semantics}) { |
| var selector = BooleanSelector.parse(expression); |
| return selector.evaluate(semantics ?? ["true"]); |
| } |