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 analyzer.test.src.dart.element.element_test; | 5 library analyzer.test.src.dart.element.element_test; |
6 | 6 |
7 import 'package:analyzer/dart/ast/ast.dart'; | 7 import 'package:analyzer/dart/ast/ast.dart'; |
8 import 'package:analyzer/dart/constant/value.dart'; | 8 import 'package:analyzer/dart/constant/value.dart'; |
9 import 'package:analyzer/dart/element/element.dart'; | 9 import 'package:analyzer/dart/element/element.dart'; |
10 import 'package:analyzer/dart/element/type.dart'; | 10 import 'package:analyzer/dart/element/type.dart'; |
11 import 'package:analyzer/src/dart/element/element.dart'; | 11 import 'package:analyzer/src/dart/element/element.dart'; |
12 import 'package:analyzer/src/dart/element/handle.dart'; | 12 import 'package:analyzer/src/dart/element/handle.dart'; |
13 import 'package:analyzer/src/dart/element/type.dart'; | 13 import 'package:analyzer/src/dart/element/type.dart'; |
14 import 'package:analyzer/src/generated/engine.dart' | 14 import 'package:analyzer/src/generated/engine.dart' |
15 show AnalysisContext, AnalysisOptionsImpl; | 15 show AnalysisContext, AnalysisOptionsImpl; |
16 import 'package:analyzer/src/generated/source_io.dart'; | 16 import 'package:analyzer/src/generated/source_io.dart'; |
17 import 'package:analyzer/src/generated/testing/ast_factory.dart'; | 17 import 'package:analyzer/src/generated/testing/ast_test_factory.dart'; |
18 import 'package:analyzer/src/generated/testing/element_factory.dart'; | 18 import 'package:analyzer/src/generated/testing/element_factory.dart'; |
19 import 'package:analyzer/src/generated/testing/test_type_provider.dart'; | 19 import 'package:analyzer/src/generated/testing/test_type_provider.dart'; |
20 import 'package:test/test.dart'; | 20 import 'package:test/test.dart'; |
21 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 21 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
22 | 22 |
23 import '../../../generated/analysis_context_factory.dart' | 23 import '../../../generated/analysis_context_factory.dart' |
24 show AnalysisContextHelper; | 24 show AnalysisContextHelper; |
25 import '../../../generated/resolver_test_case.dart'; | 25 import '../../../generated/resolver_test_case.dart'; |
26 import '../../../generated/test_support.dart'; | 26 import '../../../generated/test_support.dart'; |
27 | 27 |
(...skipping 1294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1322 expect(nodeB.element, same(elementB)); | 1322 expect(nodeB.element, same(elementB)); |
1323 } | 1323 } |
1324 } | 1324 } |
1325 } | 1325 } |
1326 | 1326 |
1327 @reflectiveTest | 1327 @reflectiveTest |
1328 class FunctionTypeImplTest extends EngineTestCase { | 1328 class FunctionTypeImplTest extends EngineTestCase { |
1329 void test_creation() { | 1329 void test_creation() { |
1330 expect( | 1330 expect( |
1331 new FunctionTypeImpl( | 1331 new FunctionTypeImpl( |
1332 new FunctionElementImpl.forNode(AstFactory.identifier3("f"))), | 1332 new FunctionElementImpl.forNode(AstTestFactory.identifier3("f"))), |
1333 isNotNull); | 1333 isNotNull); |
1334 } | 1334 } |
1335 | 1335 |
1336 void test_equality_recursive() { | 1336 void test_equality_recursive() { |
1337 FunctionTypeAliasElementImpl s = | 1337 FunctionTypeAliasElementImpl s = |
1338 ElementFactory.functionTypeAliasElement('s'); | 1338 ElementFactory.functionTypeAliasElement('s'); |
1339 FunctionTypeAliasElementImpl t = | 1339 FunctionTypeAliasElementImpl t = |
1340 ElementFactory.functionTypeAliasElement('t'); | 1340 ElementFactory.functionTypeAliasElement('t'); |
1341 FunctionTypeAliasElementImpl u = | 1341 FunctionTypeAliasElementImpl u = |
1342 ElementFactory.functionTypeAliasElement('u'); | 1342 ElementFactory.functionTypeAliasElement('u'); |
1343 FunctionTypeAliasElementImpl v = | 1343 FunctionTypeAliasElementImpl v = |
1344 ElementFactory.functionTypeAliasElement('v'); | 1344 ElementFactory.functionTypeAliasElement('v'); |
1345 s.returnType = t.type; | 1345 s.returnType = t.type; |
1346 t.returnType = s.type; | 1346 t.returnType = s.type; |
1347 u.returnType = v.type; | 1347 u.returnType = v.type; |
1348 v.returnType = u.type; | 1348 v.returnType = u.type; |
1349 // We don't care whether the types compare equal or not. We just need the | 1349 // We don't care whether the types compare equal or not. We just need the |
1350 // computation to terminate. | 1350 // computation to terminate. |
1351 expect(s.type == u.type, new isInstanceOf<bool>()); | 1351 expect(s.type == u.type, new isInstanceOf<bool>()); |
1352 } | 1352 } |
1353 | 1353 |
1354 void test_getElement() { | 1354 void test_getElement() { |
1355 FunctionElementImpl typeElement = | 1355 FunctionElementImpl typeElement = |
1356 new FunctionElementImpl.forNode(AstFactory.identifier3("f")); | 1356 new FunctionElementImpl.forNode(AstTestFactory.identifier3("f")); |
1357 FunctionTypeImpl type = new FunctionTypeImpl(typeElement); | 1357 FunctionTypeImpl type = new FunctionTypeImpl(typeElement); |
1358 expect(type.element, typeElement); | 1358 expect(type.element, typeElement); |
1359 } | 1359 } |
1360 | 1360 |
1361 void test_getNamedParameterTypes_namedParameters() { | 1361 void test_getNamedParameterTypes_namedParameters() { |
1362 TestTypeProvider typeProvider = new TestTypeProvider(); | 1362 TestTypeProvider typeProvider = new TestTypeProvider(); |
1363 FunctionElement element = ElementFactory | 1363 FunctionElement element = ElementFactory |
1364 .functionElementWithParameters('f', VoidTypeImpl.instance, [ | 1364 .functionElementWithParameters('f', VoidTypeImpl.instance, [ |
1365 ElementFactory.requiredParameter2('a', typeProvider.intType), | 1365 ElementFactory.requiredParameter2('a', typeProvider.intType), |
1366 ElementFactory.requiredParameter('b'), | 1366 ElementFactory.requiredParameter('b'), |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1458 FunctionTypeImpl type = element.type; | 1458 FunctionTypeImpl type = element.type; |
1459 List<DartType> types = type.optionalParameterTypes; | 1459 List<DartType> types = type.optionalParameterTypes; |
1460 expect(types, hasLength(2)); | 1460 expect(types, hasLength(2)); |
1461 expect(types[0], typeProvider.stringType); | 1461 expect(types[0], typeProvider.stringType); |
1462 expect(types[1], DynamicTypeImpl.instance); | 1462 expect(types[1], DynamicTypeImpl.instance); |
1463 } | 1463 } |
1464 | 1464 |
1465 void test_getReturnType() { | 1465 void test_getReturnType() { |
1466 DartType expectedReturnType = VoidTypeImpl.instance; | 1466 DartType expectedReturnType = VoidTypeImpl.instance; |
1467 FunctionElementImpl functionElement = | 1467 FunctionElementImpl functionElement = |
1468 new FunctionElementImpl.forNode(AstFactory.identifier3("f")); | 1468 new FunctionElementImpl.forNode(AstTestFactory.identifier3("f")); |
1469 functionElement.returnType = expectedReturnType; | 1469 functionElement.returnType = expectedReturnType; |
1470 FunctionTypeImpl type = new FunctionTypeImpl(functionElement); | 1470 FunctionTypeImpl type = new FunctionTypeImpl(functionElement); |
1471 DartType returnType = type.returnType; | 1471 DartType returnType = type.returnType; |
1472 expect(returnType, expectedReturnType); | 1472 expect(returnType, expectedReturnType); |
1473 } | 1473 } |
1474 | 1474 |
1475 void test_getTypeArguments() { | 1475 void test_getTypeArguments() { |
1476 FunctionTypeImpl type = new FunctionTypeImpl( | 1476 FunctionTypeImpl type = new FunctionTypeImpl( |
1477 new FunctionElementImpl.forNode(AstFactory.identifier3("f"))); | 1477 new FunctionElementImpl.forNode(AstTestFactory.identifier3("f"))); |
1478 List<DartType> types = type.typeArguments; | 1478 List<DartType> types = type.typeArguments; |
1479 expect(types, hasLength(0)); | 1479 expect(types, hasLength(0)); |
1480 } | 1480 } |
1481 | 1481 |
1482 void test_hashCode_element() { | 1482 void test_hashCode_element() { |
1483 FunctionTypeImpl type = new FunctionTypeImpl( | 1483 FunctionTypeImpl type = new FunctionTypeImpl( |
1484 new FunctionElementImpl.forNode(AstFactory.identifier3("f"))); | 1484 new FunctionElementImpl.forNode(AstTestFactory.identifier3("f"))); |
1485 type.hashCode; | 1485 type.hashCode; |
1486 } | 1486 } |
1487 | 1487 |
1488 void test_hashCode_noElement() { | 1488 void test_hashCode_noElement() { |
1489 FunctionTypeImpl type = new FunctionTypeImpl(null); | 1489 FunctionTypeImpl type = new FunctionTypeImpl(null); |
1490 type.hashCode; | 1490 type.hashCode; |
1491 } | 1491 } |
1492 | 1492 |
1493 void test_hashCode_recursive() { | 1493 void test_hashCode_recursive() { |
1494 FunctionTypeAliasElementImpl s = | 1494 FunctionTypeAliasElementImpl s = |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1834 .functionElement2("s", ElementFactory.classElement2("B")) | 1834 .functionElement2("s", ElementFactory.classElement2("B")) |
1835 .type; | 1835 .type; |
1836 expect(t.isSubtypeOf(s), isFalse); | 1836 expect(t.isSubtypeOf(s), isFalse); |
1837 } | 1837 } |
1838 | 1838 |
1839 void test_isSubtypeOf_typeParameters_matchesBounds() { | 1839 void test_isSubtypeOf_typeParameters_matchesBounds() { |
1840 TestTypeProvider provider = new TestTypeProvider(); | 1840 TestTypeProvider provider = new TestTypeProvider(); |
1841 InterfaceType boolType = provider.boolType; | 1841 InterfaceType boolType = provider.boolType; |
1842 InterfaceType stringType = provider.stringType; | 1842 InterfaceType stringType = provider.stringType; |
1843 TypeParameterElementImpl parameterB = | 1843 TypeParameterElementImpl parameterB = |
1844 new TypeParameterElementImpl.forNode(AstFactory.identifier3("B")); | 1844 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("B")); |
1845 parameterB.bound = boolType; | 1845 parameterB.bound = boolType; |
1846 TypeParameterTypeImpl typeB = new TypeParameterTypeImpl(parameterB); | 1846 TypeParameterTypeImpl typeB = new TypeParameterTypeImpl(parameterB); |
1847 TypeParameterElementImpl parameterS = | 1847 TypeParameterElementImpl parameterS = |
1848 new TypeParameterElementImpl.forNode(AstFactory.identifier3("S")); | 1848 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("S")); |
1849 parameterS.bound = stringType; | 1849 parameterS.bound = stringType; |
1850 TypeParameterTypeImpl typeS = new TypeParameterTypeImpl(parameterS); | 1850 TypeParameterTypeImpl typeS = new TypeParameterTypeImpl(parameterS); |
1851 FunctionElementImpl functionAliasElement = | 1851 FunctionElementImpl functionAliasElement = |
1852 new FunctionElementImpl.forNode(AstFactory.identifier3("func")); | 1852 new FunctionElementImpl.forNode(AstTestFactory.identifier3("func")); |
1853 functionAliasElement.parameters = <ParameterElement>[ | 1853 functionAliasElement.parameters = <ParameterElement>[ |
1854 ElementFactory.requiredParameter2("a", typeB), | 1854 ElementFactory.requiredParameter2("a", typeB), |
1855 ElementFactory.positionalParameter2("b", typeS) | 1855 ElementFactory.positionalParameter2("b", typeS) |
1856 ]; | 1856 ]; |
1857 functionAliasElement.returnType = stringType; | 1857 functionAliasElement.returnType = stringType; |
1858 FunctionTypeImpl functionAliasType = | 1858 FunctionTypeImpl functionAliasType = |
1859 new FunctionTypeImpl(functionAliasElement); | 1859 new FunctionTypeImpl(functionAliasElement); |
1860 functionAliasElement.type = functionAliasType; | 1860 functionAliasElement.type = functionAliasType; |
1861 FunctionElementImpl functionElement = | 1861 FunctionElementImpl functionElement = |
1862 new FunctionElementImpl.forNode(AstFactory.identifier3("f")); | 1862 new FunctionElementImpl.forNode(AstTestFactory.identifier3("f")); |
1863 functionElement.parameters = <ParameterElement>[ | 1863 functionElement.parameters = <ParameterElement>[ |
1864 ElementFactory.requiredParameter2("c", boolType), | 1864 ElementFactory.requiredParameter2("c", boolType), |
1865 ElementFactory.positionalParameter2("d", stringType) | 1865 ElementFactory.positionalParameter2("d", stringType) |
1866 ]; | 1866 ]; |
1867 functionElement.returnType = provider.dynamicType; | 1867 functionElement.returnType = provider.dynamicType; |
1868 FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement); | 1868 FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement); |
1869 functionElement.type = functionType; | 1869 functionElement.type = functionType; |
1870 expect(functionType.isAssignableTo(functionAliasType), isTrue); | 1870 expect(functionType.isAssignableTo(functionAliasType), isTrue); |
1871 } | 1871 } |
1872 | 1872 |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2034 f.returnType = g.type; | 2034 f.returnType = g.type; |
2035 FunctionTypeImpl paramType = f.type.returnType; | 2035 FunctionTypeImpl paramType = f.type.returnType; |
2036 expect(paramType.prunedTypedefs, hasLength(1)); | 2036 expect(paramType.prunedTypedefs, hasLength(1)); |
2037 expect(paramType.prunedTypedefs[0], same(f)); | 2037 expect(paramType.prunedTypedefs[0], same(f)); |
2038 } | 2038 } |
2039 | 2039 |
2040 void test_substitute2_equal() { | 2040 void test_substitute2_equal() { |
2041 ClassElementImpl definingClass = ElementFactory.classElement2("C", ["E"]); | 2041 ClassElementImpl definingClass = ElementFactory.classElement2("C", ["E"]); |
2042 TypeParameterType parameterType = definingClass.typeParameters[0].type; | 2042 TypeParameterType parameterType = definingClass.typeParameters[0].type; |
2043 MethodElementImpl functionElement = | 2043 MethodElementImpl functionElement = |
2044 new MethodElementImpl.forNode(AstFactory.identifier3("m")); | 2044 new MethodElementImpl.forNode(AstTestFactory.identifier3("m")); |
2045 String namedParameterName = "c"; | 2045 String namedParameterName = "c"; |
2046 functionElement.parameters = <ParameterElement>[ | 2046 functionElement.parameters = <ParameterElement>[ |
2047 ElementFactory.requiredParameter2("a", parameterType), | 2047 ElementFactory.requiredParameter2("a", parameterType), |
2048 ElementFactory.positionalParameter2("b", parameterType), | 2048 ElementFactory.positionalParameter2("b", parameterType), |
2049 ElementFactory.namedParameter2(namedParameterName, parameterType) | 2049 ElementFactory.namedParameter2(namedParameterName, parameterType) |
2050 ]; | 2050 ]; |
2051 functionElement.returnType = parameterType; | 2051 functionElement.returnType = parameterType; |
2052 definingClass.methods = <MethodElement>[functionElement]; | 2052 definingClass.methods = <MethodElement>[functionElement]; |
2053 FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement); | 2053 FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement); |
2054 InterfaceTypeImpl argumentType = new InterfaceTypeImpl( | 2054 InterfaceTypeImpl argumentType = new InterfaceTypeImpl( |
2055 new ClassElementImpl.forNode(AstFactory.identifier3("D"))); | 2055 new ClassElementImpl.forNode(AstTestFactory.identifier3("D"))); |
2056 FunctionType result = functionType | 2056 FunctionType result = functionType |
2057 .substitute2(<DartType>[argumentType], <DartType>[parameterType]); | 2057 .substitute2(<DartType>[argumentType], <DartType>[parameterType]); |
2058 expect(result.returnType, argumentType); | 2058 expect(result.returnType, argumentType); |
2059 List<DartType> normalParameters = result.normalParameterTypes; | 2059 List<DartType> normalParameters = result.normalParameterTypes; |
2060 expect(normalParameters, hasLength(1)); | 2060 expect(normalParameters, hasLength(1)); |
2061 expect(normalParameters[0], argumentType); | 2061 expect(normalParameters[0], argumentType); |
2062 List<DartType> optionalParameters = result.optionalParameterTypes; | 2062 List<DartType> optionalParameters = result.optionalParameterTypes; |
2063 expect(optionalParameters, hasLength(1)); | 2063 expect(optionalParameters, hasLength(1)); |
2064 expect(optionalParameters[0], argumentType); | 2064 expect(optionalParameters[0], argumentType); |
2065 Map<String, DartType> namedParameters = result.namedParameterTypes; | 2065 Map<String, DartType> namedParameters = result.namedParameterTypes; |
2066 expect(namedParameters, hasLength(1)); | 2066 expect(namedParameters, hasLength(1)); |
2067 expect(namedParameters[namedParameterName], argumentType); | 2067 expect(namedParameters[namedParameterName], argumentType); |
2068 } | 2068 } |
2069 | 2069 |
2070 void test_substitute2_notEqual() { | 2070 void test_substitute2_notEqual() { |
2071 DartType returnType = new InterfaceTypeImpl( | 2071 DartType returnType = new InterfaceTypeImpl( |
2072 new ClassElementImpl.forNode(AstFactory.identifier3("R"))); | 2072 new ClassElementImpl.forNode(AstTestFactory.identifier3("R"))); |
2073 DartType normalParameterType = new InterfaceTypeImpl( | 2073 DartType normalParameterType = new InterfaceTypeImpl( |
2074 new ClassElementImpl.forNode(AstFactory.identifier3("A"))); | 2074 new ClassElementImpl.forNode(AstTestFactory.identifier3("A"))); |
2075 DartType optionalParameterType = new InterfaceTypeImpl( | 2075 DartType optionalParameterType = new InterfaceTypeImpl( |
2076 new ClassElementImpl.forNode(AstFactory.identifier3("B"))); | 2076 new ClassElementImpl.forNode(AstTestFactory.identifier3("B"))); |
2077 DartType namedParameterType = new InterfaceTypeImpl( | 2077 DartType namedParameterType = new InterfaceTypeImpl( |
2078 new ClassElementImpl.forNode(AstFactory.identifier3("C"))); | 2078 new ClassElementImpl.forNode(AstTestFactory.identifier3("C"))); |
2079 FunctionElementImpl functionElement = | 2079 FunctionElementImpl functionElement = |
2080 new FunctionElementImpl.forNode(AstFactory.identifier3("f")); | 2080 new FunctionElementImpl.forNode(AstTestFactory.identifier3("f")); |
2081 String namedParameterName = "c"; | 2081 String namedParameterName = "c"; |
2082 functionElement.parameters = <ParameterElement>[ | 2082 functionElement.parameters = <ParameterElement>[ |
2083 ElementFactory.requiredParameter2("a", normalParameterType), | 2083 ElementFactory.requiredParameter2("a", normalParameterType), |
2084 ElementFactory.positionalParameter2("b", optionalParameterType), | 2084 ElementFactory.positionalParameter2("b", optionalParameterType), |
2085 ElementFactory.namedParameter2(namedParameterName, namedParameterType) | 2085 ElementFactory.namedParameter2(namedParameterName, namedParameterType) |
2086 ]; | 2086 ]; |
2087 functionElement.returnType = returnType; | 2087 functionElement.returnType = returnType; |
2088 FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement); | 2088 FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement); |
2089 InterfaceTypeImpl argumentType = new InterfaceTypeImpl( | 2089 InterfaceTypeImpl argumentType = new InterfaceTypeImpl( |
2090 new ClassElementImpl.forNode(AstFactory.identifier3("D"))); | 2090 new ClassElementImpl.forNode(AstTestFactory.identifier3("D"))); |
2091 TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl( | 2091 TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl( |
2092 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E"))); | 2092 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E"))); |
2093 FunctionType result = functionType | 2093 FunctionType result = functionType |
2094 .substitute2(<DartType>[argumentType], <DartType>[parameterType]); | 2094 .substitute2(<DartType>[argumentType], <DartType>[parameterType]); |
2095 expect(result.returnType, returnType); | 2095 expect(result.returnType, returnType); |
2096 List<DartType> normalParameters = result.normalParameterTypes; | 2096 List<DartType> normalParameters = result.normalParameterTypes; |
2097 expect(normalParameters, hasLength(1)); | 2097 expect(normalParameters, hasLength(1)); |
2098 expect(normalParameters[0], normalParameterType); | 2098 expect(normalParameters[0], normalParameterType); |
2099 List<DartType> optionalParameters = result.optionalParameterTypes; | 2099 List<DartType> optionalParameters = result.optionalParameterTypes; |
2100 expect(optionalParameters, hasLength(1)); | 2100 expect(optionalParameters, hasLength(1)); |
2101 expect(optionalParameters[0], optionalParameterType); | 2101 expect(optionalParameters[0], optionalParameterType); |
2102 Map<String, DartType> namedParameters = result.namedParameterTypes; | 2102 Map<String, DartType> namedParameters = result.namedParameterTypes; |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2244 expect(method.type.typeArguments, | 2244 expect(method.type.typeArguments, |
2245 unorderedEquals(_toTypes(classElement.typeParameters))); | 2245 unorderedEquals(_toTypes(classElement.typeParameters))); |
2246 expect(method.type.typeFormals, unorderedEquals(method.typeParameters)); | 2246 expect(method.type.typeFormals, unorderedEquals(method.typeParameters)); |
2247 expect(method.type.typeParameters, | 2247 expect(method.type.typeParameters, |
2248 unorderedEquals(classElement.typeParameters)); | 2248 unorderedEquals(classElement.typeParameters)); |
2249 } | 2249 } |
2250 | 2250 |
2251 void test_withTypeArguments() { | 2251 void test_withTypeArguments() { |
2252 ClassElementImpl enclosingClass = ElementFactory.classElement2("C", ["E"]); | 2252 ClassElementImpl enclosingClass = ElementFactory.classElement2("C", ["E"]); |
2253 MethodElementImpl methodElement = | 2253 MethodElementImpl methodElement = |
2254 new MethodElementImpl.forNode(AstFactory.identifier3("m")); | 2254 new MethodElementImpl.forNode(AstTestFactory.identifier3("m")); |
2255 enclosingClass.methods = <MethodElement>[methodElement]; | 2255 enclosingClass.methods = <MethodElement>[methodElement]; |
2256 FunctionTypeImpl type = new FunctionTypeImpl(methodElement); | 2256 FunctionTypeImpl type = new FunctionTypeImpl(methodElement); |
2257 DartType expectedType = enclosingClass.typeParameters[0].type; | 2257 DartType expectedType = enclosingClass.typeParameters[0].type; |
2258 List<DartType> arguments = type.typeArguments; | 2258 List<DartType> arguments = type.typeArguments; |
2259 expect(arguments, hasLength(1)); | 2259 expect(arguments, hasLength(1)); |
2260 expect(arguments[0], expectedType); | 2260 expect(arguments[0], expectedType); |
2261 } | 2261 } |
2262 | 2262 |
2263 Iterable<DartType> _toTypes(List<TypeParameterElement> typeParameters) { | 2263 Iterable<DartType> _toTypes(List<TypeParameterElement> typeParameters) { |
2264 return typeParameters.map((TypeParameterElement element) => element.type); | 2264 return typeParameters.map((TypeParameterElement element) => element.type); |
(...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3173 | 3173 |
3174 void test_isMoreSpecificThan_typeParameterType_withBound() { | 3174 void test_isMoreSpecificThan_typeParameterType_withBound() { |
3175 // | 3175 // |
3176 // class A {} | 3176 // class A {} |
3177 // class B<E extends A> {} | 3177 // class B<E extends A> {} |
3178 // | 3178 // |
3179 ClassElement classA = ElementFactory.classElement2("A"); | 3179 ClassElement classA = ElementFactory.classElement2("A"); |
3180 InterfaceType typeA = classA.type; | 3180 InterfaceType typeA = classA.type; |
3181 ClassElementImpl classB = ElementFactory.classElement2("B"); | 3181 ClassElementImpl classB = ElementFactory.classElement2("B"); |
3182 TypeParameterElementImpl parameterEA = | 3182 TypeParameterElementImpl parameterEA = |
3183 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")); | 3183 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E")); |
3184 TypeParameterType parameterAEType = new TypeParameterTypeImpl(parameterEA); | 3184 TypeParameterType parameterAEType = new TypeParameterTypeImpl(parameterEA); |
3185 parameterEA.bound = typeA; | 3185 parameterEA.bound = typeA; |
3186 parameterEA.type = parameterAEType; | 3186 parameterEA.type = parameterAEType; |
3187 classB.typeParameters = <TypeParameterElementImpl>[parameterEA]; | 3187 classB.typeParameters = <TypeParameterElementImpl>[parameterEA]; |
3188 expect(parameterAEType.isMoreSpecificThan(typeA), isTrue); | 3188 expect(parameterAEType.isMoreSpecificThan(typeA), isTrue); |
3189 } | 3189 } |
3190 | 3190 |
3191 void test_isSubtypeOf_directSubtype() { | 3191 void test_isSubtypeOf_directSubtype() { |
3192 ClassElement classA = ElementFactory.classElement2("A"); | 3192 ClassElement classA = ElementFactory.classElement2("A"); |
3193 ClassElement classB = ElementFactory.classElement("B", classA.type); | 3193 ClassElement classB = ElementFactory.classElement("B", classA.type); |
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3775 } catch (e) { | 3775 } catch (e) { |
3776 // Expected result | 3776 // Expected result |
3777 } | 3777 } |
3778 } | 3778 } |
3779 | 3779 |
3780 void test_substitute_notEqual() { | 3780 void test_substitute_notEqual() { |
3781 // The [test_substitute_equals] above has a slightly higher level | 3781 // The [test_substitute_equals] above has a slightly higher level |
3782 // implementation. | 3782 // implementation. |
3783 ClassElementImpl classA = ElementFactory.classElement2("A"); | 3783 ClassElementImpl classA = ElementFactory.classElement2("A"); |
3784 TypeParameterElementImpl parameterElement = | 3784 TypeParameterElementImpl parameterElement = |
3785 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")); | 3785 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E")); |
3786 InterfaceTypeImpl type = new InterfaceTypeImpl(classA); | 3786 InterfaceTypeImpl type = new InterfaceTypeImpl(classA); |
3787 TypeParameterTypeImpl parameter = | 3787 TypeParameterTypeImpl parameter = |
3788 new TypeParameterTypeImpl(parameterElement); | 3788 new TypeParameterTypeImpl(parameterElement); |
3789 type.typeArguments = <DartType>[parameter]; | 3789 type.typeArguments = <DartType>[parameter]; |
3790 InterfaceType argumentType = ElementFactory.classElement2("B").type; | 3790 InterfaceType argumentType = ElementFactory.classElement2("B").type; |
3791 TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl( | 3791 TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl( |
3792 new TypeParameterElementImpl.forNode(AstFactory.identifier3("F"))); | 3792 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("F"))); |
3793 InterfaceType result = | 3793 InterfaceType result = |
3794 type.substitute2(<DartType>[argumentType], <DartType>[parameterType]); | 3794 type.substitute2(<DartType>[argumentType], <DartType>[parameterType]); |
3795 expect(result.element, classA); | 3795 expect(result.element, classA); |
3796 List<DartType> resultArguments = result.typeArguments; | 3796 List<DartType> resultArguments = result.typeArguments; |
3797 expect(resultArguments, hasLength(1)); | 3797 expect(resultArguments, hasLength(1)); |
3798 expect(resultArguments[0], parameter); | 3798 expect(resultArguments[0], parameter); |
3799 } | 3799 } |
3800 } | 3800 } |
3801 | 3801 |
3802 @reflectiveTest | 3802 @reflectiveTest |
3803 class LibraryElementImplTest extends EngineTestCase { | 3803 class LibraryElementImplTest extends EngineTestCase { |
3804 void test_creation() { | 3804 void test_creation() { |
3805 expect( | 3805 expect( |
3806 new LibraryElementImpl.forNode( | 3806 new LibraryElementImpl.forNode( |
3807 createAnalysisContext(), AstFactory.libraryIdentifier2(["l"])), | 3807 createAnalysisContext(), AstTestFactory.libraryIdentifier2(["l"])), |
3808 isNotNull); | 3808 isNotNull); |
3809 } | 3809 } |
3810 | 3810 |
3811 void test_getImportedLibraries() { | 3811 void test_getImportedLibraries() { |
3812 AnalysisContext context = createAnalysisContext(); | 3812 AnalysisContext context = createAnalysisContext(); |
3813 LibraryElementImpl library1 = ElementFactory.library(context, "l1"); | 3813 LibraryElementImpl library1 = ElementFactory.library(context, "l1"); |
3814 LibraryElementImpl library2 = ElementFactory.library(context, "l2"); | 3814 LibraryElementImpl library2 = ElementFactory.library(context, "l2"); |
3815 LibraryElementImpl library3 = ElementFactory.library(context, "l3"); | 3815 LibraryElementImpl library3 = ElementFactory.library(context, "l3"); |
3816 LibraryElementImpl library4 = ElementFactory.library(context, "l4"); | 3816 LibraryElementImpl library4 = ElementFactory.library(context, "l4"); |
3817 PrefixElement prefixA = | 3817 PrefixElement prefixA = |
3818 new PrefixElementImpl.forNode(AstFactory.identifier3("a")); | 3818 new PrefixElementImpl.forNode(AstTestFactory.identifier3("a")); |
3819 PrefixElement prefixB = | 3819 PrefixElement prefixB = |
3820 new PrefixElementImpl.forNode(AstFactory.identifier3("b")); | 3820 new PrefixElementImpl.forNode(AstTestFactory.identifier3("b")); |
3821 List<ImportElementImpl> imports = [ | 3821 List<ImportElementImpl> imports = [ |
3822 ElementFactory.importFor(library2, null), | 3822 ElementFactory.importFor(library2, null), |
3823 ElementFactory.importFor(library2, prefixB), | 3823 ElementFactory.importFor(library2, prefixB), |
3824 ElementFactory.importFor(library3, null), | 3824 ElementFactory.importFor(library3, null), |
3825 ElementFactory.importFor(library3, prefixA), | 3825 ElementFactory.importFor(library3, prefixA), |
3826 ElementFactory.importFor(library3, prefixB), | 3826 ElementFactory.importFor(library3, prefixB), |
3827 ElementFactory.importFor(library4, prefixA) | 3827 ElementFactory.importFor(library4, prefixA) |
3828 ]; | 3828 ]; |
3829 library1.imports = imports; | 3829 library1.imports = imports; |
3830 List<LibraryElement> libraries = library1.importedLibraries; | 3830 List<LibraryElement> libraries = library1.importedLibraries; |
3831 expect(libraries, | 3831 expect(libraries, |
3832 unorderedEquals(<LibraryElement>[library2, library3, library4])); | 3832 unorderedEquals(<LibraryElement>[library2, library3, library4])); |
3833 } | 3833 } |
3834 | 3834 |
3835 void test_getPrefixes() { | 3835 void test_getPrefixes() { |
3836 AnalysisContext context = createAnalysisContext(); | 3836 AnalysisContext context = createAnalysisContext(); |
3837 LibraryElementImpl library = ElementFactory.library(context, "l1"); | 3837 LibraryElementImpl library = ElementFactory.library(context, "l1"); |
3838 PrefixElement prefixA = | 3838 PrefixElement prefixA = |
3839 new PrefixElementImpl.forNode(AstFactory.identifier3("a")); | 3839 new PrefixElementImpl.forNode(AstTestFactory.identifier3("a")); |
3840 PrefixElement prefixB = | 3840 PrefixElement prefixB = |
3841 new PrefixElementImpl.forNode(AstFactory.identifier3("b")); | 3841 new PrefixElementImpl.forNode(AstTestFactory.identifier3("b")); |
3842 List<ImportElementImpl> imports = [ | 3842 List<ImportElementImpl> imports = [ |
3843 ElementFactory.importFor(ElementFactory.library(context, "l2"), null), | 3843 ElementFactory.importFor(ElementFactory.library(context, "l2"), null), |
3844 ElementFactory.importFor(ElementFactory.library(context, "l3"), null), | 3844 ElementFactory.importFor(ElementFactory.library(context, "l3"), null), |
3845 ElementFactory.importFor(ElementFactory.library(context, "l4"), prefixA), | 3845 ElementFactory.importFor(ElementFactory.library(context, "l4"), prefixA), |
3846 ElementFactory.importFor(ElementFactory.library(context, "l5"), prefixA), | 3846 ElementFactory.importFor(ElementFactory.library(context, "l5"), prefixA), |
3847 ElementFactory.importFor(ElementFactory.library(context, "l6"), prefixB) | 3847 ElementFactory.importFor(ElementFactory.library(context, "l6"), prefixB) |
3848 ]; | 3848 ]; |
3849 library.imports = imports; | 3849 library.imports = imports; |
3850 List<PrefixElement> prefixes = library.prefixes; | 3850 List<PrefixElement> prefixes = library.prefixes; |
3851 expect(prefixes, hasLength(2)); | 3851 expect(prefixes, hasLength(2)); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3884 ElementFactory.importFor(importedLibraryHandle, null); | 3884 ElementFactory.importFor(importedLibraryHandle, null); |
3885 library.imports = <ImportElement>[import]; | 3885 library.imports = <ImportElement>[import]; |
3886 library.libraryCycle; // Force computation of the cycle. | 3886 library.libraryCycle; // Force computation of the cycle. |
3887 | 3887 |
3888 library.invalidateLibraryCycles(); | 3888 library.invalidateLibraryCycles(); |
3889 } | 3889 } |
3890 | 3890 |
3891 void test_setImports() { | 3891 void test_setImports() { |
3892 AnalysisContext context = createAnalysisContext(); | 3892 AnalysisContext context = createAnalysisContext(); |
3893 LibraryElementImpl library = new LibraryElementImpl.forNode( | 3893 LibraryElementImpl library = new LibraryElementImpl.forNode( |
3894 context, AstFactory.libraryIdentifier2(["l1"])); | 3894 context, AstTestFactory.libraryIdentifier2(["l1"])); |
3895 List<ImportElementImpl> expectedImports = [ | 3895 List<ImportElementImpl> expectedImports = [ |
3896 ElementFactory.importFor(ElementFactory.library(context, "l2"), null), | 3896 ElementFactory.importFor(ElementFactory.library(context, "l2"), null), |
3897 ElementFactory.importFor(ElementFactory.library(context, "l3"), null) | 3897 ElementFactory.importFor(ElementFactory.library(context, "l3"), null) |
3898 ]; | 3898 ]; |
3899 library.imports = expectedImports; | 3899 library.imports = expectedImports; |
3900 List<ImportElement> actualImports = library.imports; | 3900 List<ImportElement> actualImports = library.imports; |
3901 expect(actualImports, hasLength(expectedImports.length)); | 3901 expect(actualImports, hasLength(expectedImports.length)); |
3902 for (int i = 0; i < actualImports.length; i++) { | 3902 for (int i = 0; i < actualImports.length; i++) { |
3903 expect(actualImports[i], same(expectedImports[i])); | 3903 expect(actualImports[i], same(expectedImports[i])); |
3904 } | 3904 } |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4240 expect(value, isNotNull); | 4240 expect(value, isNotNull); |
4241 expect(value.toIntValue(), 42); | 4241 expect(value.toIntValue(), 42); |
4242 expect(constant.constantValue, value); | 4242 expect(constant.constantValue, value); |
4243 } | 4243 } |
4244 } | 4244 } |
4245 | 4245 |
4246 @reflectiveTest | 4246 @reflectiveTest |
4247 class TypeParameterTypeImplTest extends EngineTestCase { | 4247 class TypeParameterTypeImplTest extends EngineTestCase { |
4248 void test_creation() { | 4248 void test_creation() { |
4249 expect( | 4249 expect( |
4250 new TypeParameterTypeImpl( | 4250 new TypeParameterTypeImpl(new TypeParameterElementImpl.forNode( |
4251 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E"))), | 4251 AstTestFactory.identifier3("E"))), |
4252 isNotNull); | 4252 isNotNull); |
4253 } | 4253 } |
4254 | 4254 |
4255 void test_getElement() { | 4255 void test_getElement() { |
4256 TypeParameterElementImpl element = | 4256 TypeParameterElementImpl element = |
4257 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")); | 4257 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E")); |
4258 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); | 4258 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |
4259 expect(type.element, element); | 4259 expect(type.element, element); |
4260 } | 4260 } |
4261 | 4261 |
4262 void test_isMoreSpecificThan_typeArguments_dynamic() { | 4262 void test_isMoreSpecificThan_typeArguments_dynamic() { |
4263 TypeParameterElementImpl element = | 4263 TypeParameterElementImpl element = |
4264 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")); | 4264 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E")); |
4265 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); | 4265 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |
4266 // E << dynamic | 4266 // E << dynamic |
4267 expect(type.isMoreSpecificThan(DynamicTypeImpl.instance), isTrue); | 4267 expect(type.isMoreSpecificThan(DynamicTypeImpl.instance), isTrue); |
4268 } | 4268 } |
4269 | 4269 |
4270 void test_isMoreSpecificThan_typeArguments_object() { | 4270 void test_isMoreSpecificThan_typeArguments_object() { |
4271 TypeParameterElementImpl element = | 4271 TypeParameterElementImpl element = |
4272 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")); | 4272 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E")); |
4273 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); | 4273 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |
4274 // E << Object | 4274 // E << Object |
4275 expect(type.isMoreSpecificThan(ElementFactory.object.type), isTrue); | 4275 expect(type.isMoreSpecificThan(ElementFactory.object.type), isTrue); |
4276 } | 4276 } |
4277 | 4277 |
4278 void test_isMoreSpecificThan_typeArguments_recursive() { | 4278 void test_isMoreSpecificThan_typeArguments_recursive() { |
4279 ClassElementImpl classS = ElementFactory.classElement2("A"); | 4279 ClassElementImpl classS = ElementFactory.classElement2("A"); |
4280 TypeParameterElementImpl typeParameterU = | 4280 TypeParameterElementImpl typeParameterU = |
4281 new TypeParameterElementImpl.forNode(AstFactory.identifier3("U")); | 4281 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("U")); |
4282 TypeParameterTypeImpl typeParameterTypeU = | 4282 TypeParameterTypeImpl typeParameterTypeU = |
4283 new TypeParameterTypeImpl(typeParameterU); | 4283 new TypeParameterTypeImpl(typeParameterU); |
4284 TypeParameterElementImpl typeParameterT = | 4284 TypeParameterElementImpl typeParameterT = |
4285 new TypeParameterElementImpl.forNode(AstFactory.identifier3("T")); | 4285 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("T")); |
4286 TypeParameterTypeImpl typeParameterTypeT = | 4286 TypeParameterTypeImpl typeParameterTypeT = |
4287 new TypeParameterTypeImpl(typeParameterT); | 4287 new TypeParameterTypeImpl(typeParameterT); |
4288 typeParameterT.bound = typeParameterTypeU; | 4288 typeParameterT.bound = typeParameterTypeU; |
4289 typeParameterU.bound = typeParameterTypeU; | 4289 typeParameterU.bound = typeParameterTypeU; |
4290 // <T extends U> and <U extends T> | 4290 // <T extends U> and <U extends T> |
4291 // T << S | 4291 // T << S |
4292 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isFalse); | 4292 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isFalse); |
4293 } | 4293 } |
4294 | 4294 |
4295 void test_isMoreSpecificThan_typeArguments_self() { | 4295 void test_isMoreSpecificThan_typeArguments_self() { |
4296 TypeParameterElementImpl element = | 4296 TypeParameterElementImpl element = |
4297 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")); | 4297 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E")); |
4298 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); | 4298 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |
4299 // E << E | 4299 // E << E |
4300 expect(type.isMoreSpecificThan(type), isTrue); | 4300 expect(type.isMoreSpecificThan(type), isTrue); |
4301 } | 4301 } |
4302 | 4302 |
4303 void test_isMoreSpecificThan_typeArguments_transitivity_interfaceTypes() { | 4303 void test_isMoreSpecificThan_typeArguments_transitivity_interfaceTypes() { |
4304 // class A {} | 4304 // class A {} |
4305 // class B extends A {} | 4305 // class B extends A {} |
4306 // | 4306 // |
4307 ClassElement classA = ElementFactory.classElement2("A"); | 4307 ClassElement classA = ElementFactory.classElement2("A"); |
4308 ClassElement classB = ElementFactory.classElement("B", classA.type); | 4308 ClassElement classB = ElementFactory.classElement("B", classA.type); |
4309 InterfaceType typeA = classA.type; | 4309 InterfaceType typeA = classA.type; |
4310 InterfaceType typeB = classB.type; | 4310 InterfaceType typeB = classB.type; |
4311 TypeParameterElementImpl typeParameterT = | 4311 TypeParameterElementImpl typeParameterT = |
4312 new TypeParameterElementImpl.forNode(AstFactory.identifier3("T")); | 4312 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("T")); |
4313 typeParameterT.bound = typeB; | 4313 typeParameterT.bound = typeB; |
4314 TypeParameterTypeImpl typeParameterTypeT = | 4314 TypeParameterTypeImpl typeParameterTypeT = |
4315 new TypeParameterTypeImpl(typeParameterT); | 4315 new TypeParameterTypeImpl(typeParameterT); |
4316 // <T extends B> | 4316 // <T extends B> |
4317 // T << A | 4317 // T << A |
4318 expect(typeParameterTypeT.isMoreSpecificThan(typeA), isTrue); | 4318 expect(typeParameterTypeT.isMoreSpecificThan(typeA), isTrue); |
4319 } | 4319 } |
4320 | 4320 |
4321 void test_isMoreSpecificThan_typeArguments_transitivity_typeParameters() { | 4321 void test_isMoreSpecificThan_typeArguments_transitivity_typeParameters() { |
4322 ClassElementImpl classS = ElementFactory.classElement2("A"); | 4322 ClassElementImpl classS = ElementFactory.classElement2("A"); |
4323 TypeParameterElementImpl typeParameterU = | 4323 TypeParameterElementImpl typeParameterU = |
4324 new TypeParameterElementImpl.forNode(AstFactory.identifier3("U")); | 4324 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("U")); |
4325 typeParameterU.bound = classS.type; | 4325 typeParameterU.bound = classS.type; |
4326 TypeParameterTypeImpl typeParameterTypeU = | 4326 TypeParameterTypeImpl typeParameterTypeU = |
4327 new TypeParameterTypeImpl(typeParameterU); | 4327 new TypeParameterTypeImpl(typeParameterU); |
4328 TypeParameterElementImpl typeParameterT = | 4328 TypeParameterElementImpl typeParameterT = |
4329 new TypeParameterElementImpl.forNode(AstFactory.identifier3("T")); | 4329 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("T")); |
4330 typeParameterT.bound = typeParameterTypeU; | 4330 typeParameterT.bound = typeParameterTypeU; |
4331 TypeParameterTypeImpl typeParameterTypeT = | 4331 TypeParameterTypeImpl typeParameterTypeT = |
4332 new TypeParameterTypeImpl(typeParameterT); | 4332 new TypeParameterTypeImpl(typeParameterT); |
4333 // <T extends U> and <U extends S> | 4333 // <T extends U> and <U extends S> |
4334 // T << S | 4334 // T << S |
4335 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isTrue); | 4335 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isTrue); |
4336 } | 4336 } |
4337 | 4337 |
4338 void test_isMoreSpecificThan_typeArguments_upperBound() { | 4338 void test_isMoreSpecificThan_typeArguments_upperBound() { |
4339 ClassElementImpl classS = ElementFactory.classElement2("A"); | 4339 ClassElementImpl classS = ElementFactory.classElement2("A"); |
4340 TypeParameterElementImpl typeParameterT = | 4340 TypeParameterElementImpl typeParameterT = |
4341 new TypeParameterElementImpl.forNode(AstFactory.identifier3("T")); | 4341 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("T")); |
4342 typeParameterT.bound = classS.type; | 4342 typeParameterT.bound = classS.type; |
4343 TypeParameterTypeImpl typeParameterTypeT = | 4343 TypeParameterTypeImpl typeParameterTypeT = |
4344 new TypeParameterTypeImpl(typeParameterT); | 4344 new TypeParameterTypeImpl(typeParameterT); |
4345 // <T extends S> | 4345 // <T extends S> |
4346 // T << S | 4346 // T << S |
4347 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isTrue); | 4347 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isTrue); |
4348 } | 4348 } |
4349 | 4349 |
4350 void test_resolveToBound_bound() { | 4350 void test_resolveToBound_bound() { |
4351 ClassElementImpl classS = ElementFactory.classElement2("A"); | 4351 ClassElementImpl classS = ElementFactory.classElement2("A"); |
4352 TypeParameterElementImpl element = | 4352 TypeParameterElementImpl element = |
4353 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")); | 4353 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E")); |
4354 element.bound = classS.type; | 4354 element.bound = classS.type; |
4355 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); | 4355 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |
4356 expect(type.resolveToBound(null), same(classS.type)); | 4356 expect(type.resolveToBound(null), same(classS.type)); |
4357 } | 4357 } |
4358 | 4358 |
4359 void test_resolveToBound_nestedBound() { | 4359 void test_resolveToBound_nestedBound() { |
4360 ClassElementImpl classS = ElementFactory.classElement2("A"); | 4360 ClassElementImpl classS = ElementFactory.classElement2("A"); |
4361 TypeParameterElementImpl elementE = | 4361 TypeParameterElementImpl elementE = |
4362 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")); | 4362 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E")); |
4363 elementE.bound = classS.type; | 4363 elementE.bound = classS.type; |
4364 TypeParameterTypeImpl typeE = new TypeParameterTypeImpl(elementE); | 4364 TypeParameterTypeImpl typeE = new TypeParameterTypeImpl(elementE); |
4365 TypeParameterElementImpl elementF = | 4365 TypeParameterElementImpl elementF = |
4366 new TypeParameterElementImpl.forNode(AstFactory.identifier3("F")); | 4366 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("F")); |
4367 elementF.bound = typeE; | 4367 elementF.bound = typeE; |
4368 TypeParameterTypeImpl typeF = new TypeParameterTypeImpl(elementE); | 4368 TypeParameterTypeImpl typeF = new TypeParameterTypeImpl(elementE); |
4369 expect(typeF.resolveToBound(null), same(classS.type)); | 4369 expect(typeF.resolveToBound(null), same(classS.type)); |
4370 } | 4370 } |
4371 | 4371 |
4372 void test_resolveToBound_unbound() { | 4372 void test_resolveToBound_unbound() { |
4373 TypeParameterTypeImpl type = new TypeParameterTypeImpl( | 4373 TypeParameterTypeImpl type = new TypeParameterTypeImpl( |
4374 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E"))); | 4374 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E"))); |
4375 // Returns whatever type is passed to resolveToBound(). | 4375 // Returns whatever type is passed to resolveToBound(). |
4376 expect(type.resolveToBound(VoidTypeImpl.instance), | 4376 expect(type.resolveToBound(VoidTypeImpl.instance), |
4377 same(VoidTypeImpl.instance)); | 4377 same(VoidTypeImpl.instance)); |
4378 } | 4378 } |
4379 | 4379 |
4380 void test_substitute_equal() { | 4380 void test_substitute_equal() { |
4381 TypeParameterElementImpl element = | 4381 TypeParameterElementImpl element = |
4382 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")); | 4382 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E")); |
4383 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); | 4383 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |
4384 InterfaceTypeImpl argument = new InterfaceTypeImpl( | 4384 InterfaceTypeImpl argument = new InterfaceTypeImpl( |
4385 new ClassElementImpl.forNode(AstFactory.identifier3("A"))); | 4385 new ClassElementImpl.forNode(AstTestFactory.identifier3("A"))); |
4386 TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(element); | 4386 TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(element); |
4387 expect(type.substitute2(<DartType>[argument], <DartType>[parameter]), | 4387 expect(type.substitute2(<DartType>[argument], <DartType>[parameter]), |
4388 same(argument)); | 4388 same(argument)); |
4389 } | 4389 } |
4390 | 4390 |
4391 void test_substitute_notEqual() { | 4391 void test_substitute_notEqual() { |
4392 TypeParameterTypeImpl type = new TypeParameterTypeImpl( | 4392 TypeParameterTypeImpl type = new TypeParameterTypeImpl( |
4393 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E"))); | 4393 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("E"))); |
4394 InterfaceTypeImpl argument = new InterfaceTypeImpl( | 4394 InterfaceTypeImpl argument = new InterfaceTypeImpl( |
4395 new ClassElementImpl.forNode(AstFactory.identifier3("A"))); | 4395 new ClassElementImpl.forNode(AstTestFactory.identifier3("A"))); |
4396 TypeParameterTypeImpl parameter = new TypeParameterTypeImpl( | 4396 TypeParameterTypeImpl parameter = new TypeParameterTypeImpl( |
4397 new TypeParameterElementImpl.forNode(AstFactory.identifier3("F"))); | 4397 new TypeParameterElementImpl.forNode(AstTestFactory.identifier3("F"))); |
4398 expect(type.substitute2(<DartType>[argument], <DartType>[parameter]), | 4398 expect(type.substitute2(<DartType>[argument], <DartType>[parameter]), |
4399 same(type)); | 4399 same(type)); |
4400 } | 4400 } |
4401 } | 4401 } |
4402 | 4402 |
4403 @reflectiveTest | 4403 @reflectiveTest |
4404 class VoidTypeImplTest extends EngineTestCase { | 4404 class VoidTypeImplTest extends EngineTestCase { |
4405 /** | 4405 /** |
4406 * Reference {code VoidTypeImpl.getInstance()}. | 4406 * Reference {code VoidTypeImpl.getInstance()}. |
4407 */ | 4407 */ |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4444 } | 4444 } |
4445 | 4445 |
4446 class _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction | 4446 class _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction |
4447 extends InterfaceTypeImpl { | 4447 extends InterfaceTypeImpl { |
4448 _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction(ClassElement arg0) | 4448 _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction(ClassElement arg0) |
4449 : super(arg0); | 4449 : super(arg0); |
4450 | 4450 |
4451 @override | 4451 @override |
4452 bool get isDartCoreFunction => true; | 4452 bool get isDartCoreFunction => true; |
4453 } | 4453 } |
OLD | NEW |