| // Copyright (c) 2019, 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. |
| |
| const bool constTrue = const bool.fromEnvironment('test.define.isTrue'); |
| const bool constFalse = const bool.fromEnvironment('test.define.isFalse'); |
| const bool constTrue2 = !constFalse; |
| const bool constFalse2 = const bool.fromEnvironment('test.define.notDefined'); |
| |
| bool? foo() => null; |
| |
| void testSimpleConditions() { |
| if (constTrue) { |
| print('1_yes'); |
| } |
| if (constFalse) { |
| print('2_no'); |
| } |
| if (constTrue2) { |
| print('3_yes'); |
| if (constFalse2) { |
| print('4_no'); |
| } |
| } |
| } |
| |
| void testAndConditions() { |
| if (constTrue && foo()!) { |
| print('1_yes'); |
| } |
| if (constFalse && foo()!) { |
| print('2_no'); |
| } |
| if (constTrue && constFalse) { |
| print('3_no'); |
| } |
| if (constTrue && constTrue && constFalse) { |
| print('4_no'); |
| } |
| } |
| |
| void testOrConditions() { |
| if (constTrue || foo()!) { |
| print('1_yes'); |
| } |
| if (constFalse || foo()!) { |
| print('2_yes'); |
| } |
| if (constFalse || constFalse2) { |
| print('3_no'); |
| } |
| if (constFalse || !constTrue || constTrue2) { |
| print('4_yes'); |
| } |
| } |
| |
| void testNotConditions() { |
| if (!constTrue) { |
| print('1_no'); |
| } |
| if (!constFalse) { |
| print('2_yes'); |
| } |
| if (!(!(!constTrue && foo()!) || foo()!)) { |
| print('3_no'); |
| } |
| } |
| |
| testConditionalExpressions() { |
| print(!constFalse && constTrue ? '1_yes' : '2_no'); |
| print(constFalse && foo()! ? '3_no' : '4_yes ${foo()}'); |
| } |
| |
| void testAsserts() { |
| assert(foo()!); |
| assert(!foo()!, "oops!"); |
| } |
| |
| class TestAssertInitializer { |
| TestAssertInitializer() : assert(foo()!) {} |
| } |
| |
| testRemovalOfStatementBodies() { |
| if (foo()!) assert(foo()!); |
| while (foo()!) assert(foo()!); |
| do assert(foo()!); while (foo()!); |
| for (;;) assert(foo()!); |
| for (var i in [1, 2]) assert(foo()!); |
| try { |
| assert(foo()!); |
| } finally { |
| assert(foo()!); |
| } |
| try { |
| assert(foo()!); |
| } catch (e) { |
| assert(foo()!); |
| } |
| try { |
| assert(foo()!); |
| } catch (e) { |
| assert(foo()!); |
| rethrow; |
| } |
| switch (42) { |
| case 10: |
| assert(foo()!); |
| } |
| switch (42) { |
| default: |
| assert(foo()!); |
| } |
| } |
| |
| main(List<String> args) { |
| testSimpleConditions(); |
| testAndConditions(); |
| testOrConditions(); |
| testNotConditions(); |
| testConditionalExpressions(); |
| testAsserts(); |
| new TestAssertInitializer(); |
| testRemovalOfStatementBodies(); |
| } |