Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(354)

Unified Diff: pkg/analyzer/test/generated/resolver_test.dart

Issue 1568653002: Add some generic method tests (currently failing) (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/generated/resolver_test.dart
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 1f1f2a57329554b16abec9aed6fbcc49fe4a746a..f3a31f41ee28dbf6f222111f8c86d19f3330fda0 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -11824,6 +11824,7 @@ class StrongModeDownwardsInferenceTest extends ResolverTestCase {
@override
void setUp() {
+ super.setUp();
AnalysisOptionsImpl options = new AnalysisOptionsImpl();
options.strongMode = true;
resetWithOptions(options);
@@ -13020,7 +13021,219 @@ class StrongModeDownwardsInferenceTest extends ResolverTestCase {
*/
@reflectiveTest
class StrongModeStaticTypeAnalyzer2Test extends _StaticTypeAnalyzer2TestShared {
+ void fail_genericFunction_parameter() {
+ _resolveTestUnit(r'''
+void g(/*=T*/ f/*<T>*/(/*=T*/ x)) {}
+''');
+ SimpleIdentifier f = _findIdentifier('f');
+ ParameterElementImpl e = f.staticElement;
+ expect(e.typeParameters.toString(), '[T]');
+ expect(e.type.boundTypeParameters.toString(), '[T]');
+ expect(e.type.toString(), '<T>(T) → T');
+ FunctionType ft = e.type.instantiate([typeProvider.stringType]);
+ expect(ft.toString(), '(String) → String');
+ }
+
+ void fail_genericMethod_functionExpressionInvocation_explicit() {
+ _resolveTestUnit(r'''
+class C<E> {
+ /*=T*/ f/*<T>*/(/*=T*/ e) => null;
+ static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
+ static final h = g;
+}
+
+/*=T*/ topF/*<T>*/(/*=T*/ e) => null;
+var topG = topF;
+void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
+ var c = new C<int>();
+ /*=T*/ lf/*<T>*/(/*=T*/ e) => null;
+ var methodCall = (c.f)/*<int>*/(3);
+ var staticCall = (C.g)/*<int>*/(3);
+ var staticFieldCall = (C.h)/*<int>*/(3);
+ var topFunCall = (topF)/*<int>*/(3);
+ var topFieldCall = (topG)/*<int>*/(3);
+ var localCall = (lf)/*<int>*/(3);
+ var paramCall = (pf)/*<int>*/(3);
+}
+''');
+ expect(_findIdentifier('methodCall').staticType.toString(), "int");
+ expect(_findIdentifier('staticCall').staticType.toString(), "int");
+ expect(_findIdentifier('staticFieldCall').staticType.toString(), "int");
+ expect(_findIdentifier('topFunCall').staticType.toString(), "int");
+ expect(_findIdentifier('topFieldCall').staticType.toString(), "int");
+ expect(_findIdentifier('localCall').staticType.toString(), "int");
+ expect(_findIdentifier('paramCall').staticType.toString(), "int");
+ }
+
+ void fail_genericMethod_functionExpressionInvocation_inferred() {
+ _resolveTestUnit(r'''
+class C<E> {
+ /*=T*/ f/*<T>*/(/*=T*/ e) => null;
+ static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
+ static final h = g;
+}
+
+/*=T*/ topF/*<T>*/(/*=T*/ e) => null;
+var topG = topF;
+void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
+ var c = new C<int>();
+ /*=T*/ lf/*<T>*/(/*=T*/ e) => null;
+ var methodCall = (c.f)(3);
+ var staticCall = (C.g)(3);
+ var staticFieldCall = (C.h)(3);
+ var topFunCall = (topF)(3);
+ var topFieldCall = (topG)(3);
+ var localCall = (lf)(3);
+ var paramCall = (pf)(3);
+}
+''');
+ expect(_findIdentifier('methodCall').staticType.toString(), "int");
+ expect(_findIdentifier('staticCall').staticType.toString(), "int");
+ expect(_findIdentifier('staticFieldCall').staticType.toString(), "int");
+ expect(_findIdentifier('topFunCall').staticType.toString(), "int");
+ expect(_findIdentifier('topFieldCall').staticType.toString(), "int");
+ expect(_findIdentifier('localCall').staticType.toString(), "int");
+ expect(_findIdentifier('paramCall').staticType.toString(), "int");
+ }
+
+ void fail_genericMethod_functionInvocation_explicit() {
+ _resolveTestUnit(r'''
+class C<E> {
+ /*=T*/ f/*<T>*/(/*=T*/ e) => null;
+ static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
+ static final h = g;
+}
+
+/*=T*/ topF/*<T>*/(/*=T*/ e) => null;
+var topG = topF;
+void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
+ var c = new C<int>();
+ /*=T*/ lf/*<T>*/(/*=T*/ e) => null;
+ var methodCall = c.f/*<int>*/(3);
+ var staticCall = C.g/*<int>*/(3);
+ var staticFieldCall = C.h/*<int>*/(3);
+ var topFunCall = topF/*<int>*/(3);
+ var topFieldCall = topG/*<int>*/(3);
+ var localCall = lf/*<int>*/(3);
+ var paramCall = pf/*<int>*/(3);
+}
+''');
+ expect(_findIdentifier('methodCall').staticType.toString(), "int");
+ expect(_findIdentifier('staticCall').staticType.toString(), "int");
+ expect(_findIdentifier('staticFieldCall').staticType.toString(), "int");
+ expect(_findIdentifier('topFunCall').staticType.toString(), "int");
+ expect(_findIdentifier('topFieldCall').staticType.toString(), "int");
+ expect(_findIdentifier('localCall').staticType.toString(), "int");
+ expect(_findIdentifier('paramCall').staticType.toString(), "int");
+ }
+
+ void fail_genericMethod_functionInvocation_inferred() {
+ _resolveTestUnit(r'''
+class C<E> {
+ /*=T*/ f/*<T>*/(/*=T*/ e) => null;
+ static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
+ static final h = g;
+}
+
+/*=T*/ topF/*<T>*/(/*=T*/ e) => null;
+var topG = topF;
+void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
+ var c = new C<int>();
+ /*=T*/ lf/*<T>*/(/*=T*/ e) => null;
+ var methodCall = c.f(3);
+ var staticCall = C.g(3);
+ var staticFieldCall = C.h(3);
+ var topFunCall = topF(3);
+ var topFieldCall = topG(3);
+ var localCall = lf(3);
+ var paramCall = pf(3);
+}
+''');
+ expect(_findIdentifier('methodCall').staticType.toString(), "int");
+ expect(_findIdentifier('staticCall').staticType.toString(), "int");
+ expect(_findIdentifier('staticFieldCall').staticType.toString(), "int");
+ expect(_findIdentifier('topFunCall').staticType.toString(), "int");
+ expect(_findIdentifier('topFieldCall').staticType.toString(), "int");
+ expect(_findIdentifier('localCall').staticType.toString(), "int");
+ expect(_findIdentifier('paramCall').staticType.toString(), "int");
+ }
+
+ void fail_genericMethod_tearoff() {
+ _resolveTestUnit(r'''
+class C<E> {
+ /*=T*/ f/*<T>*/(E e) => null;
+ static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
+ static final h = g;
+}
+
+/*=T*/ topF/*<T>*/(/*=T*/ e) => null;
+var topG = topF;
+void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
+ var c = new C<int>();
+ /*=T*/ lf/*<T>*/(/*=T*/ e) => null;
+ var methodTearOff = c.f;
+ var staticTearOff = C.g;
+ var staticFieldTearOff = C.h;
+ var topFunTearOff = topF;
+ var topFieldTearOff = topG;
+ var localTearOff = lf;
+ var paramTearOff = pf;
+}
+''');
+ expect(
+ _findIdentifier('methodTearOff').staticType.toString(), "<T>(int) → T");
+ expect(
+ _findIdentifier('staticTearOff').staticType.toString(), "<T>(T) → T");
+ expect(_findIdentifier('staticFieldTearOff').staticType.toString(),
+ "<T>(T) → T");
+ expect(
+ _findIdentifier('topFunTearOff').staticType.toString(), "<T>(T) → T");
+ expect(
+ _findIdentifier('topFieldTearOff').staticType.toString(), "<T>(T) → T");
+ expect(_findIdentifier('localTearOff').staticType.toString(), "<T>(T) → T");
+ expect(_findIdentifier('paramTearOff').staticType.toString(), "<T>(T) → T");
+ }
+
+ void fail_genericMethod_tearoff_instantiated() {
+ _resolveTestUnit(r'''
+class C<E> {
+ /*=T*/ f/*<T>*/(E e) => null;
+ static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
+ static final h = g;
+}
+
+/*=T*/ topF/*<T>*/(/*=T*/ e) => null;
+var topG = topF;
+void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
+ var c = new C<int>();
+ /*=T*/ lf/*<T>*/(/*=T*/ e) => null;
+ var methodTearOffInst = c.f/*<int>*/;
+ var staticTearOffInst = C.g/*<int>*/;
+ var staticFieldTearOffInst = C.h/*<int>*/;
+ var topFunTearOffInst = topF/*<int>*/;
+ var topFieldTearOffInst = topG/*<int>*/;
+ var localTearOffInst = lf/*<int>*/;
+ var paramTearOffInst = pf/*<int>*/;
+}
+''');
+ expect(_findIdentifier('methodTearOffInst').staticType.toString(),
+ "(int) → int");
+ expect(_findIdentifier('staticTearOffInst').staticType.toString(),
+ "(int) → int");
+ expect(_findIdentifier('staticFieldTearOffInst').staticType.toString(),
+ "(int) → int");
+ expect(_findIdentifier('topFunTearOffInst').staticType.toString(),
+ "(int) → int");
+ expect(_findIdentifier('topFieldTearOffInst').staticType.toString(),
+ "(int) → int");
+ expect(_findIdentifier('localTearOffInst').staticType.toString(),
+ "(int) → int");
+ expect(_findIdentifier('paramTearOffInst').staticType.toString(),
+ "(int) → int");
+ }
+
void setUp() {
+ super.setUp();
AnalysisOptionsImpl options = new AnalysisOptionsImpl();
options.strongMode = true;
resetWithOptions(options);
@@ -13545,6 +13758,7 @@ main() {
class StrongModeTypePropagationTest extends ResolverTestCase {
@override
void setUp() {
+ super.setUp();
AnalysisOptionsImpl options = new AnalysisOptionsImpl();
options.strongMode = true;
resetWithOptions(options);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698