| // Copyright (c) 2015, 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. | |
| // dart2jsOptions=-O1 | |
| import "package:expect/expect.dart"; | |
| // Test that dart2js does not rewrite conditional into logical operators | |
| // in cases where it changes which falsy value is returned. | |
| posFalse(x, y) => x != null ? y : false; | |
| negFalse(x, y) => x != null ? !y : false; | |
| posNull(x, y) => x != null ? y : null; | |
| negNull(x, y) => x != null ? !y : null; | |
| main() { | |
| Expect.equals(false, posFalse(null, false)); | |
| Expect.equals(false, negFalse(null, false)); | |
| Expect.equals(null, posNull(null, false)); | |
| Expect.equals(null, negNull(null, false)); | |
| Expect.equals(false, posFalse(null, true)); | |
| Expect.equals(false, negFalse(null, true)); | |
| Expect.equals(null, posNull(null, true)); | |
| Expect.equals(null, negNull(null, true)); | |
| Expect.equals(false, posFalse([], false)); | |
| Expect.equals(true, negFalse([], false)); | |
| Expect.equals(false, posNull([], false)); | |
| Expect.equals(true, negNull([], false)); | |
| Expect.equals(true, posFalse([], true)); | |
| Expect.equals(false, negFalse([], true)); | |
| Expect.equals(true, posNull([], true)); | |
| Expect.equals(false, negNull([], true)); | |
| if (isConditionCheckDisabled) { | |
| Expect.equals(null, posFalse([], null)); | |
| Expect.equals(true, negFalse([], null)); | |
| Expect.equals(null, posNull([], null)); | |
| Expect.equals(true, negNull([], null)); | |
| var y = {}; | |
| Expect.identical(y, posFalse([], y)); | |
| Expect.equals(true, negFalse([], y)); | |
| Expect.identical(y, posNull([], y)); | |
| Expect.equals(true, negNull([], y)); | |
| } | |
| } | |
| bool get isConditionCheckDisabled { | |
| bool? b = null; | |
| for (int i = 0; i < 3; i++) { | |
| try { | |
| b = !(b as dynamic); | |
| } catch (e) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } |