blob: a0d0c7195681bdc5c2c206f43a1cb2f622c020a7 [file] [log] [blame]
// 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.
// Tests the type checking when passing code into closure from inside a factory method
// @dart = 2.9
import "package:expect/expect.dart";
abstract class Foo<T> {
factory Foo.from() = Bar<T>.from;
}
class Bar<T> implements Foo<T> {
Bar() {}
factory Bar.from() {
var func = (T arg) {
T foo = arg;
bool isString = foo is String;
print(arg);
print(" String=$isString");
};
func("Hello World!");
// ^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'T'.
return new Bar<T>();
}
}
main() {
Foo<String> value1;
value1 = new Foo<String>.from();
bool gotError = false;
try {
Foo<int> value2 = new Foo<int>.from();
} on TypeError catch (e) {
gotError = true;
}
Expect.equals(false, gotError);
}