blob: 3ca0dad0631c461edbe31015f406d5b2ed777e33 [file] [log] [blame]
// 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>() => (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(List(3));
BluesBrother b1 = hideNull(_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 = List(3);
BluesBrother b1 = _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(List(3));
dynamic b1 = hideNull(_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 = List(3);
BluesBrother b1 = _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(List(3));
BluesBrother b1 = hideNull(_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 = List(3);
BluesBrother b1 = _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(List(3));
dynamic b1 = hideNull(_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 = List(3);
BluesBrother b1 = _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(List(3));
BluesBrother b1 = hideNull(_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 = List(3);
BluesBrother b1 = _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(List(3));
dynamic b1 = hideNull(_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 = List(3);
BluesBrother b1 = _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(List(3));
BluesBrother b1 = hideNull(_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 = List(3);
BluesBrother b1 = _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(List(3));
dynamic b1 = hideNull(_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 = List(3);
BluesBrother b1 = _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(List(3));
BluesBrother b1 = hideNull(_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 = List(3);
BluesBrother b1 = _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(List(3));
dynamic b1 = hideNull(_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 = List(3);
BluesBrother b1 = _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(_Jake());
_Elwood e2 = hideNull(_Elwood());
dynamic d1 = hideNull(e1);
dynamic d2 = hideNull(_Elwood());
Object o1 = hideNull(e1);
Object o2 = hideNull(_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 = _Jake();
_Elwood e2 = _Elwood();
dynamic d1 = e1;
dynamic d2 = _Elwood();
Object o1 = e1;
Object o2 = _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(_Jake());
String s1 = hideNull("hello");
String s2 = hideNull("");
int i1 = hideNull(3);
int i2 = hideNull(0);
List l1 = hideNull(List(3));
BluesBrother b1 = hideNull(_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 = _Jake();
String s1 = "hello";
String s2 = "";
int i1 = 3;
int i2 = 0;
List l1 = List(3);
BluesBrother b1 = _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(_Jake());
dynamic d1 = hideNull(_Jake());
dynamic s1 = hideNull("hello");
dynamic s2 = hideNull("");
dynamic i1 = hideNull(3);
dynamic i2 = hideNull(0);
dynamic l1 = hideNull(List(3));
dynamic b1 = hideNull(_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 = _Jake();
dynamic d1 = _Jake();
String s1 = "hello";
String s2 = "";
int i1 = 3;
int i2 = 0;
List l1 = List(3);
BluesBrother b1 = _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);
});
});
}