OLD | NEW |
---|---|
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library engine.resolver_test; | 5 library engine.resolver_test; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 | 8 |
9 import 'package:analyzer/src/context/context.dart'; | 9 import 'package:analyzer/src/context/context.dart'; |
10 import 'package:analyzer/src/generated/ast.dart'; | 10 import 'package:analyzer/src/generated/ast.dart'; |
(...skipping 12954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
12965 g/*<S>*/(/*=S*/ x) => f; | 12965 g/*<S>*/(/*=S*/ x) => f; |
12966 return null; | 12966 return null; |
12967 } | 12967 } |
12968 '''); | 12968 '''); |
12969 SimpleIdentifier g = _findIdentifier('f'); | 12969 SimpleIdentifier g = _findIdentifier('f'); |
12970 expect(g.staticType.toString(), '<S>(S) → S'); | 12970 expect(g.staticType.toString(), '<S>(S) → S'); |
12971 SimpleIdentifier f = _findIdentifier('g'); | 12971 SimpleIdentifier f = _findIdentifier('g'); |
12972 expect(f.staticType.toString(), '<S>(S) → dynamic'); | 12972 expect(f.staticType.toString(), '<S>(S) → dynamic'); |
12973 } | 12973 } |
12974 | 12974 |
12975 void test_genericMethod_override() { | |
12976 _resolveTestUnit(r''' | |
12977 class C { | |
12978 /*=T*/ f/*<T>*/(/*=T*/ x) => null; | |
12979 } | |
12980 class D extends C { | |
12981 /*=T*/ f/*<T>*/(/*=T*/ x) => null; // from D | |
12982 } | |
12983 '''); | |
12984 SimpleIdentifier f = | |
12985 _findIdentifier('f/*<T>*/(/*=T*/ x) => null; // from D'); | |
12986 MethodElementImpl e = f.staticElement; | |
12987 expect(e.typeParameters.toString(), '[T]'); | |
12988 expect(e.type.boundTypeParameters.toString(), '[T]'); | |
12989 expect(e.type.toString(), '<T>(T) → T'); | |
12990 | |
12991 FunctionType ft = e.type.instantiate([typeProvider.stringType]); | |
12992 expect(ft.toString(), '(String) → String'); | |
12993 } | |
12994 | |
12995 void test_genericMethod_override_bounds() { | |
12996 _resolveTestUnit(r''' | |
12997 class A {} | |
12998 class B extends A {} | |
12999 class C { | |
13000 /*=T*/ f/*<T extends B>*/(/*=T*/ x) => null; | |
13001 } | |
13002 class D extends C { | |
13003 /*=T*/ f/*<T extends A>*/(/*=T*/ x) => null; | |
13004 } | |
13005 '''); | |
13006 } | |
13007 | |
13008 void test_genericMethod_override_invalidIypeParamBounds() { | |
Leaf
2015/12/09 22:02:29
InvalidIype -> InvalidType
Jennifer Messerly
2015/12/09 22:37:41
Done.
| |
13009 Source source = addSource(r''' | |
13010 class A {} | |
13011 class B extends A {} | |
13012 class C { | |
13013 /*=T*/ f/*<T extends A>*/(/*=T*/ x) => null; | |
13014 } | |
13015 class D extends C { | |
13016 /*=T*/ f/*<T extends B>*/(/*=T*/ x) => null; | |
13017 }'''); | |
13018 // TODO(jmesserly): this is modified code from assertErrors, which we can't | |
13019 // use directly because STRONG_MODE_* errors don't have working equality. | |
13020 List<AnalysisError> errors = analysisContext2.computeErrors(source); | |
13021 expect(errors.map((e) => e.errorCode.name), [ | |
13022 'STRONG_MODE_INVALID_METHOD_OVERRIDE', | |
13023 'INVALID_METHOD_OVERRIDE_TYPE_PARAMETER_BOUND' | |
13024 ]); | |
13025 verify([source]); | |
13026 } | |
13027 | |
13028 void test_genericMethod_override_invalidTypeParamCount() { | |
13029 Source source = addSource(r''' | |
13030 class C { | |
13031 /*=T*/ f/*<T>*/(/*=T*/ x) => null; | |
13032 } | |
13033 class D extends C { | |
13034 /*=S*/ f/*<T, S>*/(/*=T*/ x) => null; | |
13035 }'''); | |
13036 // TODO(jmesserly): we can't use assertErrors because STRONG_MODE_* errors | |
13037 // from CodeChecker don't have working equality. | |
13038 List<AnalysisError> errors = analysisContext2.computeErrors(source); | |
13039 expect(errors.map((e) => e.errorCode.name), [ | |
13040 'STRONG_MODE_INVALID_METHOD_OVERRIDE', | |
13041 'INVALID_METHOD_OVERRIDE_TYPE_PARAMETERS' | |
13042 ]); | |
13043 verify([source]); | |
13044 } | |
13045 | |
12975 void test_pseudoGeneric_max_doubleDouble() { | 13046 void test_pseudoGeneric_max_doubleDouble() { |
12976 String code = r''' | 13047 String code = r''' |
12977 import 'dart:math'; | 13048 import 'dart:math'; |
12978 main() { | 13049 main() { |
12979 var foo = max(1.0, 2.0); | 13050 var foo = max(1.0, 2.0); |
12980 } | 13051 } |
12981 '''; | 13052 '''; |
12982 _resolveTestUnit(code); | 13053 _resolveTestUnit(code); |
12983 | 13054 |
12984 SimpleIdentifier identifier = _findIdentifier('foo'); | 13055 SimpleIdentifier identifier = _findIdentifier('foo'); |
(...skipping 2972 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
15957 | 16028 |
15958 void _resolveTestUnit(String code) { | 16029 void _resolveTestUnit(String code) { |
15959 testCode = code; | 16030 testCode = code; |
15960 testSource = addSource(testCode); | 16031 testSource = addSource(testCode); |
15961 LibraryElement library = resolve2(testSource); | 16032 LibraryElement library = resolve2(testSource); |
15962 assertNoErrors(testSource); | 16033 assertNoErrors(testSource); |
15963 verify([testSource]); | 16034 verify([testSource]); |
15964 testUnit = resolveCompilationUnit(testSource, library); | 16035 testUnit = resolveCompilationUnit(testSource, library); |
15965 } | 16036 } |
15966 } | 16037 } |
OLD | NEW |