| // 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. |
| // Dart test for type checks involving the void type. |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| var _str = new StringBuffer(); |
| |
| T run<T>(T f()) { |
| _str.write("+"); |
| var t = f(); |
| _str.write("-"); |
| return t; |
| } |
| |
| void writeV() { |
| _str.write("V"); |
| } |
| |
| main() { |
| { |
| var x = run<dynamic>(writeV); |
| Expect.equals('+V-', _str.toString()); |
| Expect.equals(null, x); |
| _str.clear(); |
| |
| var y = run(writeV) as dynamic; |
| Expect.equals('+V-', _str.toString()); |
| Expect.equals(null, y); |
| _str.clear(); |
| } |
| |
| // implicit cast |
| { |
| dynamic d = writeV; |
| var x = run<dynamic>(d); |
| Expect.equals('+V-', _str.toString()); |
| Expect.equals(null, x); |
| _str.clear(); |
| |
| var y = run(d); |
| Expect.equals('+V-', _str.toString()); |
| Expect.equals(null, y); |
| _str.clear(); |
| } |
| |
| // dynamic dispatch |
| { |
| dynamic d = run; |
| var x = d<dynamic>(writeV); |
| Expect.equals('+V-', _str.toString()); |
| Expect.equals(null, x); |
| _str.clear(); |
| |
| var y = d(writeV); |
| Expect.equals('+V-', _str.toString()); |
| Expect.equals(null, y); |
| _str.clear(); |
| } |
| } |