| // Copyright (c) 2018, 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. | |
| library equals_test; | |
| import 'dart:async'; | |
| import 'package:expect/async_helper.dart'; | |
| import '../helpers/compiler_helper.dart'; | |
| const String TEST1 = r""" | |
| foo(int? a) { | |
| return a == null; | |
| // present: 'a == null' | |
| // absent: 'eq' | |
| } | |
| """; | |
| const String TEST2 = r""" | |
| foo(int a) { | |
| return a == 123; | |
| // present: 'a === 123' | |
| // absent: 'eq' | |
| } | |
| """; | |
| const String TEST3 = r""" | |
| foo(int? a, int? b) { | |
| return a == b; | |
| // present: 'a == b' | |
| // absent: 'eq' | |
| // absent: '===' | |
| } | |
| """; | |
| const String TEST4 = r""" | |
| foo(String? a, String? b) { | |
| return a == b; | |
| // present: 'a == b' | |
| // absent: 'eq' | |
| // absent: '===' | |
| } | |
| """; | |
| // Comparable includes String and int, so can't be compared with `a == b` since | |
| // that will convert an operand to make `2 == "2"` true. | |
| const String TEST5 = r""" | |
| foo(Comparable? a, Comparable? b) { | |
| return a == b; | |
| // present: 'a === b' | |
| // present: 'a == null' | |
| // present: 'b == null' | |
| // absent: 'eq' | |
| // absent: 'a == b' | |
| } | |
| """; | |
| const String TEST6 = r""" | |
| foo(dynamic a, dynamic b) { | |
| return a == b; | |
| // present: 'eq' | |
| // absent: '==' | |
| } | |
| """; | |
| // StringBuffer uses `Object.==`, i.e. `identical`. This can be lowered to `==` | |
| // because no operand will cause JavaScript conversions. | |
| const String TEST7 = r""" | |
| foo(StringBuffer? a, StringBuffer? b) { | |
| return a == b; | |
| // present: ' == ' | |
| // absent: '===' | |
| // absent: 'eq' | |
| } | |
| """; | |
| main() { | |
| runTests() async { | |
| Future check(String test) { | |
| return compile(test, entry: 'foo', check: checkerForAbsentPresent(test)); | |
| } | |
| await check(TEST1); | |
| await check(TEST2); | |
| await check(TEST3); | |
| await check(TEST4); | |
| await check(TEST5); | |
| await check(TEST6); | |
| await check(TEST7); | |
| } | |
| asyncTest(() async { | |
| print('--test from kernel------------------------------------------------'); | |
| await runTests(); | |
| }); | |
| } |