| // Copyright (c) 2017, 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/minitest.dart'; | |
| /// Both kinds. | |
| enum Music { country, western } | |
| class BluesBrother {} | |
| // This class does not override object equality | |
| class _Jake extends BluesBrother {} | |
| /// This class overrides object equality | |
| class _Elwood extends BluesBrother { | |
| bool operator ==(Object other) { | |
| return (other is _Elwood); | |
| } | |
| } | |
| /// Mock BluesBrother | |
| class _Norman extends BluesBrother {} | |
| /// Hide nullability from the simple minded null analysis | |
| T hideNull<T>(T x) => x; | |
| /// Generate undefined at a type | |
| T getUndefined<T>() => (new List(1))[0]; | |
| main() { | |
| group('Enum identity', () { | |
| // Test identity of two enums, various types, nullable | |
| test('Identical enum/enum (nullable)', () { | |
| Music e1 = hideNull(Music.country); | |
| Music e2 = hideNull(Music.western); | |
| dynamic d1 = hideNull(Music.country); | |
| dynamic d2 = hideNull(Music.western); | |
| Object o1 = hideNull(Music.country); | |
| Object o2 = hideNull(Music.western); | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of two enums, various types, non-nullable | |
| test('Identical enum/enum (non-null)', () { | |
| Music e1 = Music.country; | |
| Music e2 = Music.western; | |
| dynamic d1 = Music.country; | |
| dynamic d2 = Music.western; | |
| Object o1 = Music.country; | |
| Object o2 = Music.western; | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of enum and other types (static, nullable) | |
| test('Identical enum/other (static, nullable)', () { | |
| Music e1 = hideNull(Music.country); | |
| String s1 = hideNull("hello"); | |
| String s2 = hideNull(""); | |
| int i1 = hideNull(3); | |
| int i2 = hideNull(0); | |
| List l1 = hideNull(new List(3)); | |
| BluesBrother b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of enum and other types (static, non-null) | |
| test('Identical enum/other (static, non-null)', () { | |
| Music e1 = Music.country; | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of enum and other types (dynamic, nullable) | |
| test('Identical enum/other (dynamic, nullable)', () { | |
| Music e1 = hideNull(Music.country); | |
| dynamic d1 = hideNull(Music.country); | |
| dynamic s1 = hideNull("hello"); | |
| dynamic s2 = hideNull(""); | |
| dynamic i1 = hideNull(3); | |
| dynamic i2 = hideNull(0); | |
| dynamic l1 = hideNull(new List(3)); | |
| dynamic b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| // Test identity of enum and other types (dynamic, non-null) | |
| test('Identical enum/other (dynamic, non-null)', () { | |
| Music e1 = Music.country; | |
| dynamic d1 = Music.country; | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| }); | |
| group('String identity', () { | |
| // Test identity of two strings, various types, nullable | |
| test('Identical string/string (nullable)', () { | |
| String e1 = hideNull("The"); | |
| String e2 = hideNull("Band"); | |
| dynamic d1 = hideNull("The"); | |
| dynamic d2 = hideNull("Band"); | |
| Object o1 = hideNull("The"); | |
| Object o2 = hideNull("Band"); | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of two strings, various types, non-nullable | |
| test('Identical string/string (non-null)', () { | |
| String e1 = "The"; | |
| String e2 = "Band"; | |
| dynamic d1 = "The"; | |
| dynamic d2 = "Band"; | |
| Object o1 = "The"; | |
| Object o2 = "Band"; | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of string and other types (static, nullable) | |
| test('Identical string/other (static, nullable)', () { | |
| String e1 = hideNull("The"); | |
| String s1 = hideNull("hello"); | |
| String s2 = hideNull(""); | |
| int i1 = hideNull(3); | |
| int i2 = hideNull(0); | |
| List l1 = hideNull(new List(3)); | |
| BluesBrother b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of string and other types (static, non-null) | |
| test('Identical string/other (static, non-null)', () { | |
| String e1 = "The"; | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of string and other types (dynamic, nullable) | |
| test('Identical string/other (dynamic, nullable)', () { | |
| String e1 = hideNull("The"); | |
| dynamic d1 = hideNull("The"); | |
| dynamic s1 = hideNull("hello"); | |
| dynamic s2 = hideNull(""); | |
| dynamic i1 = hideNull(3); | |
| dynamic i2 = hideNull(0); | |
| dynamic l1 = hideNull(new List(3)); | |
| dynamic b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| // Test identity of string and other types (dynamic, non-null) | |
| test('Identical string/other (dynamic, non-null)', () { | |
| String e1 = "The"; | |
| dynamic d1 = "The"; | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| }); | |
| group('Boolean identity', () { | |
| // Test identity of two bools, various types, nullable | |
| test('Identical bool/bool (nullable)', () { | |
| bool e1 = hideNull(true); | |
| bool e2 = hideNull(false); | |
| dynamic d1 = hideNull(true); | |
| dynamic d2 = hideNull(false); | |
| Object o1 = hideNull(true); | |
| Object o2 = hideNull(false); | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of two bools, various types, non-nullable | |
| test('Identical bool/bool (non-null)', () { | |
| bool e1 = true; | |
| bool e2 = false; | |
| dynamic d1 = true; | |
| dynamic d2 = false; | |
| Object o1 = true; | |
| Object o2 = false; | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of bool and other types (static, nullable) | |
| test('Identical bool/other (static, nullable)', () { | |
| bool e1 = hideNull(true); | |
| String s1 = hideNull("hello"); | |
| String s2 = hideNull(""); | |
| int i1 = hideNull(3); | |
| int i2 = hideNull(0); | |
| List l1 = hideNull(new List(3)); | |
| BluesBrother b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of bool and other types (static, non-null) | |
| test('Identical bool/other (static, non-null)', () { | |
| bool e1 = true; | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of bool and other types (dynamic, nullable) | |
| test('Identical bool/other (dynamic, nullable)', () { | |
| bool e1 = hideNull(true); | |
| dynamic d1 = hideNull(true); | |
| dynamic s1 = hideNull("hello"); | |
| dynamic s2 = hideNull(""); | |
| dynamic i1 = hideNull(3); | |
| dynamic i2 = hideNull(0); | |
| dynamic l1 = hideNull(new List(3)); | |
| dynamic b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| // Test identity of bool and other types (dynamic, non-null) | |
| test('Identical bool/other (dynamic, non-null)', () { | |
| bool e1 = true; | |
| dynamic d1 = true; | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| }); | |
| group('String identity', () { | |
| // Test identity of two strings, various types, nullable | |
| test('Identical string/string (nullable)', () { | |
| String e1 = hideNull("The"); | |
| String e2 = hideNull("Band"); | |
| dynamic d1 = hideNull("The"); | |
| dynamic d2 = hideNull("Band"); | |
| Object o1 = hideNull("The"); | |
| Object o2 = hideNull("Band"); | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of two strings, various types, non-nullable | |
| test('Identical string/string (non-null)', () { | |
| String e1 = "The"; | |
| String e2 = "Band"; | |
| dynamic d1 = "The"; | |
| dynamic d2 = "Band"; | |
| Object o1 = "The"; | |
| Object o2 = "Band"; | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of string and other types (static, nullable) | |
| test('Identical string/other (static, nullable)', () { | |
| String e1 = hideNull("The"); | |
| String s1 = hideNull("hello"); | |
| String s2 = hideNull(""); | |
| int i1 = hideNull(3); | |
| int i2 = hideNull(0); | |
| List l1 = hideNull(new List(3)); | |
| BluesBrother b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of string and other types (static, non-null) | |
| test('Identical string/other (static, non-null)', () { | |
| String e1 = "The"; | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of string and other types (dynamic, nullable) | |
| test('Identical string/other (dynamic, nullable)', () { | |
| String e1 = hideNull("The"); | |
| dynamic d1 = hideNull("The"); | |
| dynamic s1 = hideNull("hello"); | |
| dynamic s2 = hideNull(""); | |
| dynamic i1 = hideNull(3); | |
| dynamic i2 = hideNull(0); | |
| dynamic l1 = hideNull(new List(3)); | |
| dynamic b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| // Test identity of string and other types (dynamic, non-null) | |
| test('Identical string/other (dynamic, non-null)', () { | |
| String e1 = "The"; | |
| dynamic d1 = "The"; | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| }); | |
| group('Number identity', () { | |
| // Test identity of two ints, various types, nullable | |
| test('Identical int/int (nullable)', () { | |
| int e1 = hideNull(11); | |
| int e2 = hideNull(12); | |
| dynamic d1 = hideNull(11); | |
| dynamic d2 = hideNull(12); | |
| Object o1 = hideNull(11); | |
| Object o2 = hideNull(12); | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of two ints, various types, non-nullable | |
| test('Identical int/int (non-null)', () { | |
| int e1 = 11; | |
| int e2 = 12; | |
| dynamic d1 = 11; | |
| dynamic d2 = 12; | |
| Object o1 = 11; | |
| Object o2 = 12; | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of int and other types (static, nullable) | |
| test('Identical int/other (static, nullable)', () { | |
| int e1 = hideNull(11); | |
| String s1 = hideNull("hello"); | |
| String s2 = hideNull(""); | |
| int i1 = hideNull(3); | |
| int i2 = hideNull(0); | |
| List l1 = hideNull(new List(3)); | |
| BluesBrother b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of int and other types (static, non-null) | |
| test('Identical int/other (static, non-null)', () { | |
| int e1 = 11; | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of int and other types (dynamic, nullable) | |
| test('Identical int/other (dynamic, nullable)', () { | |
| int e1 = hideNull(11); | |
| dynamic d1 = hideNull(11); | |
| dynamic s1 = hideNull("hello"); | |
| dynamic s2 = hideNull(""); | |
| dynamic i1 = hideNull(3); | |
| dynamic i2 = hideNull(0); | |
| dynamic l1 = hideNull(new List(3)); | |
| dynamic b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| // Test identity of int and other types (dynamic, non-null) | |
| test('Identical int/other (dynamic, non-null)', () { | |
| int e1 = 11; | |
| dynamic d1 = 11; | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| }); | |
| group('Object identity', () { | |
| // Test identity of two objects, various types, nullable | |
| test('Identical object/object (nullable)', () { | |
| _Jake e1 = hideNull(new _Jake()); | |
| _Elwood e2 = hideNull(new _Elwood()); | |
| dynamic d1 = hideNull(e1); | |
| dynamic d2 = hideNull(new _Elwood()); | |
| Object o1 = hideNull(e1); | |
| Object o2 = hideNull(new _Elwood()); | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of two objects, various types, non-nullable | |
| test('Identical object/object (non-null)', () { | |
| _Jake e1 = new _Jake(); | |
| _Elwood e2 = new _Elwood(); | |
| dynamic d1 = e1; | |
| dynamic d2 = new _Elwood(); | |
| Object o1 = e1; | |
| Object o2 = new _Elwood(); | |
| expect(identical(e1, e1), true); | |
| expect(identical(e1, d1), true); | |
| expect(identical(e1, o1), true); | |
| expect(identical(e1, e2), false); | |
| expect(identical(e1, o2), false); | |
| expect(identical(e1, d2), false); | |
| expect(identical(e1, e2), false); | |
| expect(identical(d1, e1), true); | |
| expect(identical(d1, d1), true); | |
| expect(identical(d1, o1), true); | |
| expect(identical(d1, e2), false); | |
| expect(identical(d1, d2), false); | |
| expect(identical(d1, o2), false); | |
| expect(identical(o1, e1), true); | |
| expect(identical(o1, d1), true); | |
| expect(identical(o1, o1), true); | |
| expect(identical(o1, e2), false); | |
| expect(identical(o1, d2), false); | |
| expect(identical(o1, o2), false); | |
| }); | |
| // Test identity of object and other types (static, nullable) | |
| test('Identical object/other (static, nullable)', () { | |
| _Jake e1 = hideNull(new _Jake()); | |
| String s1 = hideNull("hello"); | |
| String s2 = hideNull(""); | |
| int i1 = hideNull(3); | |
| int i2 = hideNull(0); | |
| List l1 = hideNull(new List(3)); | |
| BluesBrother b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of object and other types (static, non-null) | |
| test('Identical object/other (static, non-null)', () { | |
| _Jake e1 = new _Jake(); | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| }); | |
| // Test identity of object and other types (dynamic, nullable) | |
| test('Identical object/other (dynamic, nullable)', () { | |
| _Jake e1 = hideNull(new _Jake()); | |
| dynamic d1 = hideNull(new _Jake()); | |
| dynamic s1 = hideNull("hello"); | |
| dynamic s2 = hideNull(""); | |
| dynamic i1 = hideNull(3); | |
| dynamic i2 = hideNull(0); | |
| dynamic l1 = hideNull(new List(3)); | |
| dynamic b1 = hideNull(new _Norman()); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| // Test identity of object and other types (dynamic, non-null) | |
| test('Identical object/other (dynamic, non-null)', () { | |
| _Jake e1 = new _Jake(); | |
| dynamic d1 = new _Jake(); | |
| String s1 = "hello"; | |
| String s2 = ""; | |
| int i1 = 3; | |
| int i2 = 0; | |
| List l1 = new List(3); | |
| BluesBrother b1 = new _Norman(); | |
| expect(identical(e1, s1), false); | |
| expect(identical(e1, s2), false); | |
| expect(identical(e1, i1), false); | |
| expect(identical(e1, i2), false); | |
| expect(identical(e1, l1), false); | |
| expect(identical(e1, b1), false); | |
| expect(identical(s1, e1), false); | |
| expect(identical(s2, e1), false); | |
| expect(identical(i1, e1), false); | |
| expect(identical(i2, e1), false); | |
| expect(identical(l1, e1), false); | |
| expect(identical(b1, e1), false); | |
| expect(identical(d1, s1), false); | |
| expect(identical(d1, s2), false); | |
| expect(identical(d1, i1), false); | |
| expect(identical(d1, i2), false); | |
| expect(identical(d1, l1), false); | |
| expect(identical(d1, b1), false); | |
| expect(identical(s1, d1), false); | |
| expect(identical(s2, d1), false); | |
| expect(identical(i1, d1), false); | |
| expect(identical(i2, d1), false); | |
| expect(identical(l1, d1), false); | |
| expect(identical(b1, d1), false); | |
| }); | |
| }); | |
| // Test that null receiver with undefined argument is handled correctly | |
| group('Null/undefined identity', () { | |
| // Test identity of null object and other types | |
| test('Identical object/other (static, null)', () { | |
| BluesBrother n = hideNull(null); | |
| String u1 = getUndefined(); | |
| int u2 = getUndefined(); | |
| bool u3 = getUndefined(); | |
| List u4 = getUndefined(); | |
| expect(identical(n, n), true); | |
| expect(identical(n, u1), true); | |
| expect(identical(n, u2), true); | |
| expect(identical(n, u3), true); | |
| expect(identical(n, u4), true); | |
| expect(identical(u1, n), true); | |
| expect(identical(u2, n), true); | |
| expect(identical(u3, n), true); | |
| expect(identical(u4, n), true); | |
| }); | |
| // Test identity of null string and other types | |
| test('Identical String/other (static, null)', () { | |
| BluesBrother u1 = getUndefined(); | |
| String n = hideNull(null); | |
| int u2 = getUndefined(); | |
| bool u3 = getUndefined(); | |
| List u4 = getUndefined(); | |
| expect(identical(n, n), true); | |
| expect(identical(n, u1), true); | |
| expect(identical(n, u2), true); | |
| expect(identical(n, u3), true); | |
| expect(identical(n, u4), true); | |
| expect(identical(u1, n), true); | |
| expect(identical(u2, n), true); | |
| expect(identical(u3, n), true); | |
| expect(identical(u4, n), true); | |
| }); | |
| // Test identity of null int and other types | |
| test('Identical int/other (static, null)', () { | |
| BluesBrother u1 = getUndefined(); | |
| String u2 = getUndefined(); | |
| int n = hideNull(null); | |
| bool u3 = getUndefined(); | |
| List u4 = getUndefined(); | |
| expect(identical(n, n), true); | |
| expect(identical(n, u1), true); | |
| expect(identical(n, u2), true); | |
| expect(identical(n, u3), true); | |
| expect(identical(n, u4), true); | |
| expect(identical(u1, n), true); | |
| expect(identical(u2, n), true); | |
| expect(identical(u3, n), true); | |
| expect(identical(u4, n), true); | |
| }); | |
| // Test identity of null bool and other types | |
| test('Identical bool/other (static, null)', () { | |
| BluesBrother u1 = getUndefined(); | |
| String u2 = getUndefined(); | |
| int u3 = getUndefined(); | |
| bool n = hideNull(null); | |
| List u4 = getUndefined(); | |
| expect(identical(n, n), true); | |
| expect(identical(n, u1), true); | |
| expect(identical(n, u2), true); | |
| expect(identical(n, u3), true); | |
| expect(identical(n, u4), true); | |
| expect(identical(u1, n), true); | |
| expect(identical(u2, n), true); | |
| expect(identical(u3, n), true); | |
| expect(identical(u4, n), true); | |
| }); | |
| // Test identity of null List and other types | |
| test('Identical List/other (static, null)', () { | |
| BluesBrother u1 = getUndefined(); | |
| String u2 = getUndefined(); | |
| int u3 = getUndefined(); | |
| bool u4 = getUndefined(); | |
| List n = hideNull(null); | |
| expect(identical(n, n), true); | |
| expect(identical(n, u1), true); | |
| expect(identical(n, u2), true); | |
| expect(identical(n, u3), true); | |
| expect(identical(n, u4), true); | |
| expect(identical(u1, n), true); | |
| expect(identical(u2, n), true); | |
| expect(identical(u3, n), true); | |
| expect(identical(u4, n), true); | |
| }); | |
| }); | |
| } |