|  | // 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(); | 
|  | }); | 
|  | } |