| // 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); |
| |
| testA(A a) {} |
| testListA(List<A> list) {} |
| testNull(Null n) {} |
| testListNull(List<Null> list) {} |
| testReturnA(ReturnA f) {} |
| testReturnNull(ReturnNull f) {} |
| testTakeA(TakeA f) {} |
| testTakeNull(TakeNull f) {} |
| |
| Null returnNull() => null; |
| takeNull(Null n) {} |
| A returnA() => null; |
| takeA(A a) {} |
| |
| main() { |
| if (false) test(); // Perform static checks only. |
| } |
| |
| test() { |
| Null n; |
| List<Null> listNull; |
| A a = new A(); |
| List<A> listA; |
| |
| testA(n); // //# 01: ok |
| testA(a); // //# 02: ok |
| testListA(listNull); // //# 03: ok |
| testListA(listA); // //# 04: ok |
| |
| testNull(n); // //# 05: ok |
| testNull(a); // //# 06: ok |
| testListNull(listNull); // //# 07: ok |
| testListNull(listA); // //# 08: ok |
| |
| testReturnA(returnA); // //# 09: ok |
| testReturnA(returnNull); // //# 10: ok |
| |
| testReturnNull(returnA); // //# 11: ok |
| testReturnNull(returnNull); // //# 12: ok |
| |
| testTakeA(takeA); // //# 13: ok |
| testTakeA(takeNull); // //# 14: ok |
| |
| testTakeNull(takeA); // //# 15: ok |
| testTakeNull(takeNull); // //# 16: ok |
| } |