blob: e9635a26542ea100db8fae89cd49d308eb6b128b [file] [log] [blame]
/*
* 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.
*/
/**
* @assertion Evaluation of a logical boolean expression b of the form e1 && e2
* causes the evaluation of e1 which is then subjected to boolean conversion,
* yielding an object o1; if o1 is not true, the result of evaluating b is
* false, otherwise e2 is evaluated to an object o2, which is then subjected to
* boolean conversion producing an object r, which is the value of b.
* @description Checks that an expression of the form e1 && e2 is evaluated
* correctly (meaning it produces TypeError when e1 does not evaluate to a
* boolean and performs boolean conversion for e2 otherwise, provided e1 is
* true).
* @static-warning
* @author msyabro
* @reviewer rodionov
*/
import '../../../Utils/expect.dart';
import '../../../Utils/dynamic_check.dart';
main() {
Expect.isTrue(true && true);
Expect.isFalse(true && false);
Expect.isFalse(false && true);
Expect.isFalse(false && false);
checkTypeError(() => Expect.isFalse(true && 1)); /// static type warnings galore - incompatible type, see "Binding actuals to formals"
checkTypeError(() => Expect.isFalse(true && ""));
checkTypeError(() => Expect.isFalse(true && []));
checkTypeError(() => Expect.isFalse(true && {}));
checkTypeError(() => Expect.isFalse(true && () => null));
checkTypeError(() => Expect.isFalse(0 && 1));
checkTypeError(() => Expect.isFalse("" && 2));
checkAssertionError(() => Expect.isFalse(null && []));
}