14531fa62d
Only delta from the original is a bad merge of tests/corelib/list_test.dart
This reverts commit 44d8be0ed3.
BUG=
Review-Url: https://codereview.chromium.org/2774783002 .
144 lines
5.2 KiB
Dart
144 lines
5.2 KiB
Dart
// Copyright (c) 2016, 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.
|
|
|
|
// Test that Null is a subtype of any other type.
|
|
|
|
import 'package:expect/expect.dart';
|
|
|
|
class A {}
|
|
|
|
typedef A ReturnA();
|
|
typedef TakeA(A a);
|
|
typedef Null ReturnNull();
|
|
typedef TakeNull(Null n);
|
|
|
|
@NoInline()
|
|
testA(A a) {}
|
|
|
|
@NoInline()
|
|
testListA(List<A> list) {}
|
|
|
|
@NoInline()
|
|
testIsListA(var a) => a is List<A>;
|
|
|
|
@NoInline()
|
|
testAsListA(var a) => a as List<A>;
|
|
|
|
@NoInline()
|
|
testNull(Null n) {}
|
|
|
|
@NoInline()
|
|
testListNull(List<Null> list) {}
|
|
|
|
@NoInline()
|
|
testIsListNull(var a) => a is List<Null>;
|
|
|
|
@NoInline()
|
|
testAsListNull(var a) => a as List<Null>;
|
|
|
|
@NoInline()
|
|
testReturnA(ReturnA f) {}
|
|
|
|
@NoInline()
|
|
testIsReturnA(var f) => f is ReturnA;
|
|
|
|
@NoInline()
|
|
testAsReturnA(var f) => f as ReturnA;
|
|
|
|
@NoInline()
|
|
testReturnNull(ReturnNull f) {}
|
|
|
|
@NoInline()
|
|
testIsReturnNull(var f) => f is ReturnNull;
|
|
|
|
@NoInline()
|
|
testAsReturnNull(var f) => f as ReturnNull;
|
|
|
|
@NoInline()
|
|
testTakeA(TakeA f) {}
|
|
|
|
@NoInline()
|
|
testIsTakeA(var f) => f is TakeA;
|
|
|
|
@NoInline()
|
|
testAsTakeA(var f) => f as TakeA;
|
|
|
|
@NoInline()
|
|
testTakeNull(TakeNull f) {}
|
|
|
|
@NoInline()
|
|
testIsTakeNull(var f) => f is TakeNull;
|
|
|
|
@NoInline()
|
|
testAsTakeNull(var f) => f as TakeNull;
|
|
|
|
Null returnNullFunc() => null;
|
|
takeNullFunc(Null n) {}
|
|
A returnAFunc() => null;
|
|
takeAFunc(A a) {}
|
|
|
|
main() {
|
|
var n = null;
|
|
var listNull = new List<Null>();
|
|
var a = new A();
|
|
var listA = new List<A>();
|
|
|
|
testA(n); // //# 01: ok
|
|
testA(a); // //# 02: ok
|
|
testListA(listNull); // //# 03: ok
|
|
testListA(listA); // //# 04: ok
|
|
Expect.isTrue(testIsListA(listNull)); // //# 05: ok
|
|
Expect.isTrue(testIsListA(listA)); // //# 06: ok
|
|
testAsListA(listNull); // //# 07: ok
|
|
testAsListA(listA); // //# 08: ok
|
|
|
|
testNull(n); // //# 09: ok
|
|
testNull(a); // //# 10: dynamic type error
|
|
testListNull(listNull); // //# 11: ok
|
|
testListNull(listA); // //# 12: dynamic type error
|
|
Expect.isTrue(testIsListNull(listNull)); // //# 13: ok
|
|
Expect.isFalse(testIsListNull(listA)); // //# 14: ok
|
|
testAsListNull(listNull); // //# 15: ok
|
|
Expect.throws(() => testAsListNull(listA), (e) => e is CastError); //# 16: ok
|
|
|
|
var returnNull = returnNullFunc;
|
|
var takeNull = takeNullFunc;
|
|
var returnA = returnAFunc;
|
|
var takeA = takeAFunc;
|
|
|
|
testReturnA(returnA); // //# 17: ok
|
|
testReturnA(returnNull); // //# 18: ok
|
|
Expect.isTrue(testIsReturnA(returnA)); // //# 19: ok
|
|
Expect.isTrue(testIsReturnA(returnNull)); // //# 20: ok
|
|
testAsReturnA(returnA); // //# 21: ok
|
|
testAsReturnA(returnNull); // //# 22: ok
|
|
|
|
// This is not valid in strong-mode: ()->A <: ()->Null
|
|
testReturnNull(returnA); // //# 23: ok
|
|
testReturnNull(returnNull); // //# 24: ok
|
|
// This is not valid in strong-mode: ()->A <: ()->Null
|
|
Expect.isTrue(testIsReturnNull(returnA)); // //# 25: ok
|
|
Expect.isTrue(testIsReturnNull(returnNull)); // //# 26: ok
|
|
// This is not valid in strong-mode: ()->A <: ()->Null
|
|
testAsReturnNull(returnA); // //# 27: ok
|
|
testAsReturnNull(returnNull); // //# 28: ok
|
|
|
|
testTakeA(takeA); // //# 29: ok
|
|
// This is not valid in strong-mode: (Null)-> <: (A)->
|
|
testTakeA(takeNull); // //# 30: ok
|
|
Expect.isTrue(testIsTakeA(takeA)); // //# 31: ok
|
|
// This is not valid in strong-mode: (Null)-> <: (A)->
|
|
Expect.isTrue(testIsTakeA(takeNull)); // //# 32: ok
|
|
testAsTakeA(takeA); // //# 33: ok
|
|
// This is not valid in strong-mode: (Null)-> <: (A)->
|
|
testAsTakeA(takeNull); // //# 34: ok
|
|
|
|
testTakeNull(takeA); // //# 35: ok
|
|
testTakeNull(takeNull); // //# 36: ok
|
|
Expect.isTrue(testIsTakeNull(takeA)); // //# 37: ok
|
|
Expect.isTrue(testIsTakeNull(takeNull)); // //# 38: ok
|
|
testAsTakeNull(takeA); // //# 39: ok
|
|
testAsTakeNull(takeNull); // //# 40: ok
|
|
}
|