// 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. 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; }