// Copyright (c) 2012, 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/expect.dart'; class X { call() => 42; } class XX extends X { XX.named(); } class Y { call(int x) => 87 + x; static int staticMethod(int x) => x + 1; } class Z { final T value; Z(this.value); T call() => value; static int staticMethod(int x) => x + 1; } typedef F(int x); typedef G(String y); typedef H(); typedef T I(); main() { X x = new X(); Function f = x; // Should pass checked mode test Y y = new Y(); Function g = y; // Should pass checked mode test F f0 = y; // Should pass checked mode test F f1 = x; //^ // [cfe] A value of type 'dynamic Function()' can't be assigned to a variable of type 'dynamic Function(int)'. // ^ // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT G g0 = y; //^ // [cfe] A value of type 'dynamic Function(int)' can't be assigned to a variable of type 'dynamic Function(String)'. // ^ // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT Expect.equals(f(), 42); Expect.equals(g(100), 187); var z = new Z(123); Expect.equals(z(), 123); Expect.equals((z as dynamic)(), 123); Expect.equals(Y.staticMethod(6), 7); Expect.equals(Z.staticMethod(6), 7); var xx = new XX.named(); Expect.equals(xx(), 42); H xx2 = new XX.named(); Expect.equals(xx2(), 42); Expect.throwsTypeError(() { F f2 = x as dynamic; }); Expect.throwsTypeError(() { G g1 = y as dynamic; }); }