| 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 // This code was auto-generated, is not intended to be edited, and is subject to | 5 // This code was auto-generated, is not intended to be edited, and is subject to |
| 6 // significant change. Please see the README file for more information. | 6 // significant change. Please see the README file for more information. |
| 7 | 7 |
| 8 library engine.element_test; | 8 library engine.element_test; |
| 9 | 9 |
| 10 import 'package:analyzer/src/generated/java_core.dart'; | 10 import 'package:analyzer/src/generated/java_core.dart'; |
| 11 import 'package:analyzer/src/generated/java_engine_io.dart'; | 11 import 'package:analyzer/src/generated/java_engine_io.dart'; |
| 12 import 'package:analyzer/src/generated/java_junit.dart'; | 12 import 'package:analyzer/src/generated/java_junit.dart'; |
| 13 import 'package:analyzer/src/generated/source_io.dart'; | 13 import 'package:analyzer/src/generated/source_io.dart'; |
| 14 import 'package:analyzer/src/generated/utilities_dart.dart'; | 14 import 'package:analyzer/src/generated/utilities_dart.dart'; |
| 15 import 'package:analyzer/src/generated/ast.dart'; | 15 import 'package:analyzer/src/generated/ast.dart'; |
| 16 import 'package:analyzer/src/generated/element.dart'; | 16 import 'package:analyzer/src/generated/element.dart'; |
| 17 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext, Analys
isContextImpl; | 17 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext, Analys
isContextImpl; |
| 18 import 'package:unittest/unittest.dart' as _ut; | 18 import 'package:unittest/unittest.dart' as _ut; |
| 19 import 'test_support.dart'; | 19 import 'test_support.dart'; |
| 20 import 'ast_test.dart' show AstFactory; | 20 import 'ast_test.dart' show AstFactory; |
| 21 import 'resolver_test.dart' show TestTypeProvider, AnalysisContextHelper; | 21 import 'resolver_test.dart' show TestTypeProvider, AnalysisContextHelper; |
| 22 | 22 |
| 23 class ElementLocationImplTest extends EngineTestCase { | 23 /** |
| 24 void test_create_encoding() { | 24 * The class `ElementFactory` defines utility methods used to create elements fo
r testing |
| 25 String encoding = "a;b;c"; | 25 * purposes. The elements that are created are complete in the sense that as muc
h of the element |
| 26 ElementLocationImpl location = new ElementLocationImpl.con2(encoding); | 26 * model as can be created, given the provided information, has been created. |
| 27 JUnitTestCase.assertEquals(encoding, location.encoding); | 27 */ |
| 28 } | 28 class ElementFactory { |
| 29 | 29 /** |
| 30 void test_equals_equal() { | 30 * The element representing the class 'Object'. |
| 31 String encoding = "a;b;c"; | 31 */ |
| 32 ElementLocationImpl first = new ElementLocationImpl.con2(encoding); | 32 static ClassElementImpl _objectElement; |
| 33 ElementLocationImpl second = new ElementLocationImpl.con2(encoding); | 33 |
| 34 JUnitTestCase.assertTrue(first == second); | 34 static ClassElementImpl classElement(String typeName, InterfaceType superclass
Type, List<String> parameterNames) { |
| 35 } | 35 ClassElementImpl element = new ClassElementImpl(AstFactory.identifier3(typeN
ame)); |
| 36 | 36 element.supertype = superclassType; |
| 37 void test_equals_equalWithDifferentUriKind() { | 37 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(element); |
| 38 ElementLocationImpl first = new ElementLocationImpl.con2("fa;fb;c"); | 38 element.type = type; |
| 39 ElementLocationImpl second = new ElementLocationImpl.con2("pa;pb;c"); | 39 int count = parameterNames.length; |
| 40 JUnitTestCase.assertTrue(first == second); | 40 if (count > 0) { |
| 41 } | 41 List<TypeParameterElementImpl> typeParameters = new List<TypeParameterElem
entImpl>(count); |
| 42 | 42 List<TypeParameterTypeImpl> typeParameterTypes = new List<TypeParameterTyp
eImpl>(count); |
| 43 void test_equals_notEqual_differentLengths() { | 43 for (int i = 0; i < count; i++) { |
| 44 ElementLocationImpl first = new ElementLocationImpl.con2("a;b;c"); | 44 TypeParameterElementImpl typeParameter = new TypeParameterElementImpl(As
tFactory.identifier3(parameterNames[i])); |
| 45 ElementLocationImpl second = new ElementLocationImpl.con2("a;b;c;d"); | 45 typeParameters[i] = typeParameter; |
| 46 JUnitTestCase.assertFalse(first == second); | 46 typeParameterTypes[i] = new TypeParameterTypeImpl(typeParameter); |
| 47 } | 47 typeParameter.type = typeParameterTypes[i]; |
| 48 | 48 } |
| 49 void test_equals_notEqual_notLocation() { | 49 element.typeParameters = typeParameters; |
| 50 ElementLocationImpl first = new ElementLocationImpl.con2("a;b;c"); | 50 type.typeArguments = typeParameterTypes; |
| 51 JUnitTestCase.assertFalse(first == "a;b;d"); | 51 } |
| 52 } | 52 return element; |
| 53 | 53 } |
| 54 void test_equals_notEqual_sameLengths() { | 54 |
| 55 ElementLocationImpl first = new ElementLocationImpl.con2("a;b;c"); | 55 static ClassElementImpl classElement2(String typeName, List<String> parameterN
ames) => classElement(typeName, object.type, parameterNames); |
| 56 ElementLocationImpl second = new ElementLocationImpl.con2("a;b;d"); | 56 |
| 57 JUnitTestCase.assertFalse(first == second); | 57 static CompilationUnitElementImpl compilationUnit(String fileName) { |
| 58 } | 58 FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile(
fileName)); |
| 59 | 59 CompilationUnitElementImpl unit = new CompilationUnitElementImpl(fileName); |
| 60 void test_getComponents() { | 60 unit.source = source; |
| 61 String encoding = "a;b;c"; | 61 return unit; |
| 62 ElementLocationImpl location = new ElementLocationImpl.con2(encoding); | 62 } |
| 63 List<String> components = location.components; | 63 |
| 64 EngineTestCase.assertLength(3, components); | 64 static ConstructorElementImpl constructorElement(ClassElement definingClass, S
tring name, bool isConst, List<DartType> argumentTypes) { |
| 65 JUnitTestCase.assertEquals("a", components[0]); | 65 DartType type = definingClass.type; |
| 66 JUnitTestCase.assertEquals("b", components[1]); | 66 ConstructorElementImpl constructor = new ConstructorElementImpl.forNode(name
== null ? null : AstFactory.identifier3(name)); |
| 67 JUnitTestCase.assertEquals("c", components[2]); | 67 constructor.const2 = isConst; |
| 68 } | 68 int count = argumentTypes.length; |
| 69 | 69 List<ParameterElement> parameters = new List<ParameterElement>(count); |
| 70 void test_getEncoding() { | 70 for (int i = 0; i < count; i++) { |
| 71 String encoding = "a;b;c;;d"; | 71 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.
identifier3("a${i}")); |
| 72 ElementLocationImpl location = new ElementLocationImpl.con2(encoding); | 72 parameter.type = argumentTypes[i]; |
| 73 JUnitTestCase.assertEquals(encoding, location.encoding); | 73 parameter.parameterKind = ParameterKind.REQUIRED; |
| 74 } | 74 parameters[i] = parameter; |
| 75 | 75 } |
| 76 void test_hashCode_equal() { | 76 constructor.parameters = parameters; |
| 77 String encoding = "a;b;c"; | 77 constructor.returnType = type; |
| 78 ElementLocationImpl first = new ElementLocationImpl.con2(encoding); | 78 FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor); |
| 79 ElementLocationImpl second = new ElementLocationImpl.con2(encoding); | 79 constructor.type = constructorType; |
| 80 JUnitTestCase.assertTrue(first.hashCode == second.hashCode); | 80 return constructor; |
| 81 } | 81 } |
| 82 | 82 |
| 83 void test_hashCode_equalWithDifferentUriKind() { | 83 static ConstructorElementImpl constructorElement2(ClassElement definingClass,
String name, List<DartType> argumentTypes) => constructorElement(definingClass,
name, false, argumentTypes); |
| 84 ElementLocationImpl first = new ElementLocationImpl.con2("fa;fb;c"); | 84 |
| 85 ElementLocationImpl second = new ElementLocationImpl.con2("pa;pb;c"); | 85 static ExportElementImpl exportFor(LibraryElement exportedLibrary, List<Namesp
aceCombinator> combinators) { |
| 86 JUnitTestCase.assertTrue(first.hashCode == second.hashCode); | 86 ExportElementImpl spec = new ExportElementImpl(); |
| 87 } | 87 spec.exportedLibrary = exportedLibrary; |
| 88 | 88 spec.combinators = combinators; |
| 89 static dartSuite() { | 89 return spec; |
| 90 _ut.group('ElementLocationImplTest', () { | 90 } |
| 91 _ut.test('test_create_encoding', () { | 91 |
| 92 final __test = new ElementLocationImplTest(); | 92 static FieldElementImpl fieldElement(String name, bool isStatic, bool isFinal,
bool isConst, DartType type) { |
| 93 runJUnitTest(__test, __test.test_create_encoding); | 93 FieldElementImpl field = new FieldElementImpl.con1(AstFactory.identifier3(na
me)); |
| 94 }); | 94 field.const3 = isConst; |
| 95 _ut.test('test_equals_equal', () { | 95 field.final2 = isFinal; |
| 96 final __test = new ElementLocationImplTest(); | 96 field.static = isStatic; |
| 97 runJUnitTest(__test, __test.test_equals_equal); | 97 field.type = type; |
| 98 }); | 98 PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl(field); |
| 99 _ut.test('test_equals_equalWithDifferentUriKind', () { | 99 getter.getter = true; |
| 100 final __test = new ElementLocationImplTest(); | 100 getter.static = isStatic; |
| 101 runJUnitTest(__test, __test.test_equals_equalWithDifferentUriKind); | 101 getter.synthetic = true; |
| 102 }); | 102 getter.variable = field; |
| 103 _ut.test('test_equals_notEqual_differentLengths', () { | 103 getter.returnType = type; |
| 104 final __test = new ElementLocationImplTest(); | 104 field.getter = getter; |
| 105 runJUnitTest(__test, __test.test_equals_notEqual_differentLengths); | 105 FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); |
| 106 }); | 106 getter.type = getterType; |
| 107 _ut.test('test_equals_notEqual_notLocation', () { | 107 if (!isConst && !isFinal) { |
| 108 final __test = new ElementLocationImplTest(); | 108 PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl(field
); |
| 109 runJUnitTest(__test, __test.test_equals_notEqual_notLocation); | 109 setter.setter = true; |
| 110 }); | 110 setter.static = isStatic; |
| 111 _ut.test('test_equals_notEqual_sameLengths', () { | 111 setter.synthetic = true; |
| 112 final __test = new ElementLocationImplTest(); | 112 setter.variable = field; |
| 113 runJUnitTest(__test, __test.test_equals_notEqual_sameLengths); | 113 setter.parameters = <ParameterElement> [requiredParameter2("_${name}", typ
e)]; |
| 114 }); | 114 setter.returnType = VoidTypeImpl.instance; |
| 115 _ut.test('test_getComponents', () { | 115 setter.type = new FunctionTypeImpl.con1(setter); |
| 116 final __test = new ElementLocationImplTest(); | 116 field.setter = setter; |
| 117 runJUnitTest(__test, __test.test_getComponents); | 117 } |
| 118 }); | 118 return field; |
| 119 _ut.test('test_getEncoding', () { | 119 } |
| 120 final __test = new ElementLocationImplTest(); | 120 |
| 121 runJUnitTest(__test, __test.test_getEncoding); | 121 static FieldFormalParameterElementImpl fieldFormalParameter(Identifier name) =
> new FieldFormalParameterElementImpl(name); |
| 122 }); | 122 |
| 123 _ut.test('test_hashCode_equal', () { | 123 static FunctionElementImpl functionElement(String functionName) => functionEle
ment4(functionName, null, null, null, null); |
| 124 final __test = new ElementLocationImplTest(); | 124 |
| 125 runJUnitTest(__test, __test.test_hashCode_equal); | 125 static FunctionElementImpl functionElement2(String functionName, ClassElement
returnElement) => functionElement3(functionName, returnElement, null, null); |
| 126 }); | 126 |
| 127 _ut.test('test_hashCode_equalWithDifferentUriKind', () { | 127 static FunctionElementImpl functionElement3(String functionName, ClassElement
returnElement, List<ClassElement> normalParameters, List<ClassElement> optionalP
arameters) { |
| 128 final __test = new ElementLocationImplTest(); | 128 // We don't create parameter elements because we don't have parameter names |
| 129 runJUnitTest(__test, __test.test_hashCode_equalWithDifferentUriKind); | 129 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3(functionName)); |
| 130 }); | 130 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |
| 131 }); | 131 functionElement.type = functionType; |
| 132 // return type |
| 133 if (returnElement == null) { |
| 134 functionElement.returnType = VoidTypeImpl.instance; |
| 135 } else { |
| 136 functionElement.returnType = returnElement.type; |
| 137 } |
| 138 // parameters |
| 139 int normalCount = normalParameters == null ? 0 : normalParameters.length; |
| 140 int optionalCount = optionalParameters == null ? 0 : optionalParameters.leng
th; |
| 141 int totalCount = normalCount + optionalCount; |
| 142 List<ParameterElement> parameters = new List<ParameterElement>(totalCount); |
| 143 for (int i = 0; i < totalCount; i++) { |
| 144 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.
identifier3("a${i}")); |
| 145 if (i < normalCount) { |
| 146 parameter.type = normalParameters[i].type; |
| 147 parameter.parameterKind = ParameterKind.REQUIRED; |
| 148 } else { |
| 149 parameter.type = optionalParameters[i - normalCount].type; |
| 150 parameter.parameterKind = ParameterKind.POSITIONAL; |
| 151 } |
| 152 parameters[i] = parameter; |
| 153 } |
| 154 functionElement.parameters = parameters; |
| 155 // done |
| 156 return functionElement; |
| 157 } |
| 158 |
| 159 static FunctionElementImpl functionElement4(String functionName, ClassElement
returnElement, List<ClassElement> normalParameters, List<String> names, List<Cla
ssElement> namedParameters) { |
| 160 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3(functionName)); |
| 161 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |
| 162 functionElement.type = functionType; |
| 163 // parameters |
| 164 int normalCount = normalParameters == null ? 0 : normalParameters.length; |
| 165 int nameCount = names == null ? 0 : names.length; |
| 166 int typeCount = namedParameters == null ? 0 : namedParameters.length; |
| 167 if (names != null && nameCount != typeCount) { |
| 168 throw new IllegalStateException("The passed String[] and ClassElement[] ar
rays had different lengths."); |
| 169 } |
| 170 int totalCount = normalCount + nameCount; |
| 171 List<ParameterElement> parameters = new List<ParameterElement>(totalCount); |
| 172 for (int i = 0; i < totalCount; i++) { |
| 173 if (i < normalCount) { |
| 174 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactor
y.identifier3("a${i}")); |
| 175 parameter.type = normalParameters[i].type; |
| 176 parameter.parameterKind = ParameterKind.REQUIRED; |
| 177 parameters[i] = parameter; |
| 178 } else { |
| 179 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactor
y.identifier3(names[i - normalCount])); |
| 180 parameter.type = namedParameters[i - normalCount].type; |
| 181 parameter.parameterKind = ParameterKind.NAMED; |
| 182 parameters[i] = parameter; |
| 183 } |
| 184 } |
| 185 functionElement.parameters = parameters; |
| 186 // return type |
| 187 if (returnElement == null) { |
| 188 functionElement.returnType = VoidTypeImpl.instance; |
| 189 } else { |
| 190 functionElement.returnType = returnElement.type; |
| 191 } |
| 192 return functionElement; |
| 193 } |
| 194 |
| 195 static FunctionElementImpl functionElement5(String functionName, List<ClassEle
ment> normalParameters) => functionElement3(functionName, null, normalParameters
, null); |
| 196 |
| 197 static FunctionElementImpl functionElement6(String functionName, List<ClassEle
ment> normalParameters, List<ClassElement> optionalParameters) => functionElemen
t3(functionName, null, normalParameters, optionalParameters); |
| 198 |
| 199 static FunctionElementImpl functionElement7(String functionName, List<ClassEle
ment> normalParameters, List<String> names, List<ClassElement> namedParameters)
=> functionElement4(functionName, null, normalParameters, names, namedParameters
); |
| 200 |
| 201 static FunctionElementImpl functionElementWithParameters(String functionName,
DartType returnType, List<ParameterElement> parameters) { |
| 202 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3(functionName)); |
| 203 functionElement.returnType = returnType == null ? VoidTypeImpl.instance : re
turnType; |
| 204 functionElement.parameters = parameters; |
| 205 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |
| 206 functionElement.type = functionType; |
| 207 return functionElement; |
| 208 } |
| 209 |
| 210 static ClassElementImpl get object { |
| 211 if (_objectElement == null) { |
| 212 _objectElement = classElement("Object", null, []); |
| 213 } |
| 214 return _objectElement; |
| 215 } |
| 216 |
| 217 static PropertyAccessorElementImpl getterElement(String name, bool isStatic, D
artType type) { |
| 218 FieldElementImpl field = new FieldElementImpl.con1(AstFactory.identifier3(na
me)); |
| 219 field.static = isStatic; |
| 220 field.synthetic = true; |
| 221 field.type = type; |
| 222 PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl(field); |
| 223 getter.getter = true; |
| 224 getter.static = isStatic; |
| 225 getter.variable = field; |
| 226 getter.returnType = type; |
| 227 field.getter = getter; |
| 228 FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); |
| 229 getter.type = getterType; |
| 230 return getter; |
| 231 } |
| 232 |
| 233 static HtmlElementImpl htmlUnit(AnalysisContext context, String fileName) { |
| 234 FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile(
fileName)); |
| 235 HtmlElementImpl unit = new HtmlElementImpl(context, fileName); |
| 236 unit.source = source; |
| 237 return unit; |
| 238 } |
| 239 |
| 240 static ImportElementImpl importFor(LibraryElement importedLibrary, PrefixEleme
nt prefix, List<NamespaceCombinator> combinators) { |
| 241 ImportElementImpl spec = new ImportElementImpl(0); |
| 242 spec.importedLibrary = importedLibrary; |
| 243 spec.prefix = prefix; |
| 244 spec.combinators = combinators; |
| 245 return spec; |
| 246 } |
| 247 |
| 248 static LibraryElementImpl library(AnalysisContext context, String libraryName)
{ |
| 249 String fileName = "/${libraryName}.dart"; |
| 250 CompilationUnitElementImpl unit = compilationUnit(fileName); |
| 251 LibraryElementImpl library = new LibraryElementImpl(context, AstFactory.libr
aryIdentifier2([libraryName])); |
| 252 library.definingCompilationUnit = unit; |
| 253 return library; |
| 254 } |
| 255 |
| 256 static LocalVariableElementImpl localVariableElement(Identifier name) => new L
ocalVariableElementImpl(name); |
| 257 |
| 258 static LocalVariableElementImpl localVariableElement2(String name) => new Loca
lVariableElementImpl(AstFactory.identifier3(name)); |
| 259 |
| 260 static MethodElementImpl methodElement(String methodName, DartType returnType,
List<DartType> argumentTypes) { |
| 261 MethodElementImpl method = new MethodElementImpl.forNode(AstFactory.identifi
er3(methodName)); |
| 262 int count = argumentTypes.length; |
| 263 List<ParameterElement> parameters = new List<ParameterElement>(count); |
| 264 for (int i = 0; i < count; i++) { |
| 265 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.
identifier3("a${i}")); |
| 266 parameter.type = argumentTypes[i]; |
| 267 parameter.parameterKind = ParameterKind.REQUIRED; |
| 268 parameters[i] = parameter; |
| 269 } |
| 270 method.parameters = parameters; |
| 271 method.returnType = returnType; |
| 272 FunctionTypeImpl methodType = new FunctionTypeImpl.con1(method); |
| 273 method.type = methodType; |
| 274 return method; |
| 275 } |
| 276 |
| 277 static MethodElementImpl methodElementWithParameters(String methodName, List<D
artType> typeArguments, DartType returnType, List<ParameterElement> parameters)
{ |
| 278 MethodElementImpl method = new MethodElementImpl.forNode(AstFactory.identifi
er3(methodName)); |
| 279 method.parameters = parameters; |
| 280 method.returnType = returnType; |
| 281 FunctionTypeImpl methodType = new FunctionTypeImpl.con1(method); |
| 282 methodType.typeArguments = typeArguments; |
| 283 method.type = methodType; |
| 284 return method; |
| 285 } |
| 286 |
| 287 static ParameterElementImpl namedParameter(String name) { |
| 288 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); |
| 289 parameter.parameterKind = ParameterKind.NAMED; |
| 290 return parameter; |
| 291 } |
| 292 |
| 293 static ParameterElementImpl namedParameter2(String name, DartType type) { |
| 294 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); |
| 295 parameter.parameterKind = ParameterKind.NAMED; |
| 296 parameter.type = type; |
| 297 return parameter; |
| 298 } |
| 299 |
| 300 static ParameterElementImpl positionalParameter(String name) { |
| 301 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); |
| 302 parameter.parameterKind = ParameterKind.POSITIONAL; |
| 303 return parameter; |
| 304 } |
| 305 |
| 306 static ParameterElementImpl positionalParameter2(String name, DartType type) { |
| 307 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); |
| 308 parameter.parameterKind = ParameterKind.POSITIONAL; |
| 309 parameter.type = type; |
| 310 return parameter; |
| 311 } |
| 312 |
| 313 static PrefixElementImpl prefix(String name) => new PrefixElementImpl(AstFacto
ry.identifier3(name)); |
| 314 |
| 315 static ParameterElementImpl requiredParameter(String name) { |
| 316 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); |
| 317 parameter.parameterKind = ParameterKind.REQUIRED; |
| 318 return parameter; |
| 319 } |
| 320 |
| 321 static ParameterElementImpl requiredParameter2(String name, DartType type) { |
| 322 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); |
| 323 parameter.parameterKind = ParameterKind.REQUIRED; |
| 324 parameter.type = type; |
| 325 return parameter; |
| 326 } |
| 327 |
| 328 static PropertyAccessorElementImpl setterElement(String name, bool isStatic, D
artType type) { |
| 329 FieldElementImpl field = new FieldElementImpl.con1(AstFactory.identifier3(na
me)); |
| 330 field.static = isStatic; |
| 331 field.synthetic = true; |
| 332 field.type = type; |
| 333 PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl(field); |
| 334 getter.getter = true; |
| 335 getter.static = isStatic; |
| 336 getter.variable = field; |
| 337 getter.returnType = type; |
| 338 field.getter = getter; |
| 339 FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); |
| 340 getter.type = getterType; |
| 341 ParameterElementImpl parameter = requiredParameter2("a", type); |
| 342 PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl(field); |
| 343 setter.setter = true; |
| 344 setter.static = isStatic; |
| 345 setter.synthetic = true; |
| 346 setter.variable = field; |
| 347 setter.parameters = <ParameterElement> [parameter]; |
| 348 setter.returnType = VoidTypeImpl.instance; |
| 349 setter.type = new FunctionTypeImpl.con1(setter); |
| 350 field.setter = setter; |
| 351 return setter; |
| 352 } |
| 353 |
| 354 static TopLevelVariableElementImpl topLevelVariableElement(Identifier name) =>
new TopLevelVariableElementImpl.con1(name); |
| 355 |
| 356 static TopLevelVariableElementImpl topLevelVariableElement2(String name) => ne
w TopLevelVariableElementImpl.con2(name); |
| 357 |
| 358 static TopLevelVariableElementImpl topLevelVariableElement3(String name, bool
isConst, bool isFinal, DartType type) { |
| 359 TopLevelVariableElementImpl variable = new TopLevelVariableElementImpl.con2(
name); |
| 360 variable.const3 = isConst; |
| 361 variable.final2 = isFinal; |
| 362 PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl(variabl
e); |
| 363 getter.getter = true; |
| 364 getter.static = true; |
| 365 getter.synthetic = true; |
| 366 getter.variable = variable; |
| 367 getter.returnType = type; |
| 368 variable.getter = getter; |
| 369 FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); |
| 370 getter.type = getterType; |
| 371 if (!isFinal) { |
| 372 PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl(varia
ble); |
| 373 setter.setter = true; |
| 374 setter.static = true; |
| 375 setter.synthetic = true; |
| 376 setter.variable = variable; |
| 377 setter.parameters = <ParameterElement> [requiredParameter2("_${name}", typ
e)]; |
| 378 setter.returnType = VoidTypeImpl.instance; |
| 379 setter.type = new FunctionTypeImpl.con1(setter); |
| 380 variable.setter = setter; |
| 381 } |
| 382 return variable; |
| 132 } | 383 } |
| 133 } | 384 } |
| 134 | 385 |
| 135 class HtmlElementImplTest extends EngineTestCase { | 386 class HtmlElementImplTest extends EngineTestCase { |
| 136 void test_equals_differentSource() { | 387 void test_equals_differentSource() { |
| 137 AnalysisContextImpl context = createAnalysisContext(); | 388 AnalysisContextImpl context = createAnalysisContext(); |
| 138 HtmlElementImpl elementA = ElementFactory.htmlUnit(context, "indexA.html"); | 389 HtmlElementImpl elementA = ElementFactory.htmlUnit(context, "indexA.html"); |
| 139 HtmlElementImpl elementB = ElementFactory.htmlUnit(context, "indexB.html"); | 390 HtmlElementImpl elementB = ElementFactory.htmlUnit(context, "indexB.html"); |
| 140 JUnitTestCase.assertFalse(elementA == elementB); | 391 JUnitTestCase.assertFalse(elementA == elementB); |
| 141 } | 392 } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 runJUnitTest(__test, __test.test_fromElements_multiple); | 474 runJUnitTest(__test, __test.test_fromElements_multiple); |
| 224 }); | 475 }); |
| 225 _ut.test('test_fromElements_nonConflicting', () { | 476 _ut.test('test_fromElements_nonConflicting', () { |
| 226 final __test = new MultiplyDefinedElementImplTest(); | 477 final __test = new MultiplyDefinedElementImplTest(); |
| 227 runJUnitTest(__test, __test.test_fromElements_nonConflicting); | 478 runJUnitTest(__test, __test.test_fromElements_nonConflicting); |
| 228 }); | 479 }); |
| 229 }); | 480 }); |
| 230 } | 481 } |
| 231 } | 482 } |
| 232 | 483 |
| 484 class FunctionTypeImplTest extends EngineTestCase { |
| 485 void test_creation() { |
| 486 JUnitTestCase.assertNotNull(new FunctionTypeImpl.con1(new FunctionElementImp
l.forNode(AstFactory.identifier3("f")))); |
| 487 } |
| 488 |
| 489 void test_getElement() { |
| 490 FunctionElementImpl typeElement = new FunctionElementImpl.forNode(AstFactory
.identifier3("f")); |
| 491 FunctionTypeImpl type = new FunctionTypeImpl.con1(typeElement); |
| 492 JUnitTestCase.assertEquals(typeElement, type.element); |
| 493 } |
| 494 |
| 495 void test_getNamedParameterTypes() { |
| 496 FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.fo
rNode(AstFactory.identifier3("f"))); |
| 497 Map<String, DartType> types = type.namedParameterTypes; |
| 498 EngineTestCase.assertSizeOfMap(0, types); |
| 499 } |
| 500 |
| 501 void test_getNormalParameterTypes() { |
| 502 FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.fo
rNode(AstFactory.identifier3("f"))); |
| 503 List<DartType> types = type.normalParameterTypes; |
| 504 EngineTestCase.assertLength(0, types); |
| 505 } |
| 506 |
| 507 void test_getReturnType() { |
| 508 DartType expectedReturnType = VoidTypeImpl.instance; |
| 509 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3("f")); |
| 510 functionElement.returnType = expectedReturnType; |
| 511 FunctionTypeImpl type = new FunctionTypeImpl.con1(functionElement); |
| 512 DartType returnType = type.returnType; |
| 513 JUnitTestCase.assertEquals(expectedReturnType, returnType); |
| 514 } |
| 515 |
| 516 void test_getTypeArguments() { |
| 517 FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.fo
rNode(AstFactory.identifier3("f"))); |
| 518 List<DartType> types = type.typeArguments; |
| 519 EngineTestCase.assertLength(0, types); |
| 520 } |
| 521 |
| 522 void test_hashCode_element() { |
| 523 FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.fo
rNode(AstFactory.identifier3("f"))); |
| 524 type.hashCode; |
| 525 } |
| 526 |
| 527 void test_hashCode_noElement() { |
| 528 FunctionTypeImpl type = new FunctionTypeImpl.con1(null); |
| 529 type.hashCode; |
| 530 } |
| 531 |
| 532 void test_isAssignableTo_normalAndPositionalArgs() { |
| 533 // ([a]) -> void <: (a) -> void |
| 534 ClassElement a = ElementFactory.classElement2("A", []); |
| 535 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
| 536 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; |
| 537 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 538 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |
| 539 // assignable iff subtype |
| 540 JUnitTestCase.assertTrue(t.isAssignableTo(s)); |
| 541 JUnitTestCase.assertFalse(s.isAssignableTo(t)); |
| 542 } |
| 543 |
| 544 void test_isSubtypeOf_baseCase_classFunction() { |
| 545 // () -> void <: Function |
| 546 ClassElementImpl functionElement = ElementFactory.classElement2("Function",
[]); |
| 547 InterfaceTypeImpl functionType = new InterfaceTypeImpl_FunctionTypeImplTest_
test_isSubtypeOf_baseCase_classFunction(functionElement); |
| 548 FunctionType f = ElementFactory.functionElement("f").type; |
| 549 JUnitTestCase.assertTrue(f.isSubtypeOf(functionType)); |
| 550 } |
| 551 |
| 552 void test_isSubtypeOf_baseCase_notFunctionType() { |
| 553 // class C |
| 554 // ! () -> void <: C |
| 555 FunctionType f = ElementFactory.functionElement("f").type; |
| 556 InterfaceType t = ElementFactory.classElement2("C", []).type; |
| 557 JUnitTestCase.assertFalse(f.isSubtypeOf(t)); |
| 558 } |
| 559 |
| 560 void test_isSubtypeOf_baseCase_null() { |
| 561 // ! () -> void <: null |
| 562 FunctionType f = ElementFactory.functionElement("f").type; |
| 563 JUnitTestCase.assertFalse(f.isSubtypeOf(null)); |
| 564 } |
| 565 |
| 566 void test_isSubtypeOf_baseCase_self() { |
| 567 // () -> void <: () -> void |
| 568 FunctionType f = ElementFactory.functionElement("f").type; |
| 569 JUnitTestCase.assertTrue(f.isSubtypeOf(f)); |
| 570 } |
| 571 |
| 572 void test_isSubtypeOf_namedParameters_isAssignable() { |
| 573 // B extends A |
| 574 // ({name: A}) -> void <: ({name: B}) -> void |
| 575 // ({name: B}) -> void <: ({name: A}) -> void |
| 576 ClassElement a = ElementFactory.classElement2("A", []); |
| 577 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 578 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; |
| 579 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [b]).type; |
| 580 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 581 JUnitTestCase.assertTrue(s.isSubtypeOf(t)); |
| 582 } |
| 583 |
| 584 void test_isSubtypeOf_namedParameters_isNotAssignable() { |
| 585 // ! ({name: A}) -> void <: ({name: B}) -> void |
| 586 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [ElementFactory.classElement2("A", [])]).type; |
| 587 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [ElementFactory.classElement2("B", [])]).type; |
| 588 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 589 } |
| 590 |
| 591 void test_isSubtypeOf_namedParameters_namesDifferent() { |
| 592 // B extends A |
| 593 // void t({A name}) {} |
| 594 // void s({A diff}) {} |
| 595 // ! t <: s |
| 596 // ! s <: t |
| 597 ClassElement a = ElementFactory.classElement2("A", []); |
| 598 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 599 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; |
| 600 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"diff"], <ClassElement> [b]).type; |
| 601 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 602 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |
| 603 } |
| 604 |
| 605 void test_isSubtypeOf_namedParameters_orderOfParams() { |
| 606 // B extends A |
| 607 // ({A: A, B: B}) -> void <: ({B: B, A: A}) -> void |
| 608 ClassElement a = ElementFactory.classElement2("A", []); |
| 609 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 610 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"A", "B"], <ClassElement> [a, b]).type; |
| 611 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B", "A"], <ClassElement> [b, a]).type; |
| 612 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 613 } |
| 614 |
| 615 void test_isSubtypeOf_namedParameters_orderOfParams2() { |
| 616 // B extends A |
| 617 // ! ({B: B}) -> void <: ({B: B, A: A}) -> void |
| 618 ClassElement a = ElementFactory.classElement2("A", []); |
| 619 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 620 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"B"], <ClassElement> [b]).type; |
| 621 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B", "A"], <ClassElement> [b, a]).type; |
| 622 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 623 } |
| 624 |
| 625 void test_isSubtypeOf_namedParameters_orderOfParams3() { |
| 626 // B extends A |
| 627 // ({A: A, B: B}) -> void <: ({A: A}) -> void |
| 628 ClassElement a = ElementFactory.classElement2("A", []); |
| 629 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 630 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"A", "B"], <ClassElement> [a, b]).type; |
| 631 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B"], <ClassElement> [b]).type; |
| 632 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 633 } |
| 634 |
| 635 void test_isSubtypeOf_namedParameters_sHasMoreParams() { |
| 636 // B extends A |
| 637 // ! ({name: A}) -> void <: ({name: B, name2: B}) -> void |
| 638 ClassElement a = ElementFactory.classElement2("A", []); |
| 639 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 640 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; |
| 641 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name", "name2"], <ClassElement> [b, b]).type; |
| 642 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 643 } |
| 644 |
| 645 void test_isSubtypeOf_namedParameters_tHasMoreParams() { |
| 646 // B extends A |
| 647 // ({name: A, name2: A}) -> void <: ({name: B}) -> void |
| 648 ClassElement a = ElementFactory.classElement2("A", []); |
| 649 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 650 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name", "name2"], <ClassElement> [a, a]).type; |
| 651 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [b]).type; |
| 652 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 653 } |
| 654 |
| 655 void test_isSubtypeOf_normalAndPositionalArgs_1() { |
| 656 // ([a]) -> void <: (a) -> void |
| 657 ClassElement a = ElementFactory.classElement2("A", []); |
| 658 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
| 659 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; |
| 660 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 661 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |
| 662 } |
| 663 |
| 664 void test_isSubtypeOf_normalAndPositionalArgs_2() { |
| 665 // (a, [a]) -> void <: (a) -> void |
| 666 ClassElement a = ElementFactory.classElement2("A", []); |
| 667 FunctionType t = ElementFactory.functionElement6("t", <ClassElement> [a], <C
lassElement> [a]).type; |
| 668 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; |
| 669 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 670 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |
| 671 } |
| 672 |
| 673 void test_isSubtypeOf_normalAndPositionalArgs_3() { |
| 674 // ([a]) -> void <: () -> void |
| 675 ClassElement a = ElementFactory.classElement2("A", []); |
| 676 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
| 677 FunctionType s = ElementFactory.functionElement("s").type; |
| 678 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 679 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |
| 680 } |
| 681 |
| 682 void test_isSubtypeOf_normalAndPositionalArgs_4() { |
| 683 // (a, b, [c, d, e]) -> void <: (a, b, c, [d]) -> void |
| 684 ClassElement a = ElementFactory.classElement2("A", []); |
| 685 ClassElement b = ElementFactory.classElement2("B", []); |
| 686 ClassElement c = ElementFactory.classElement2("C", []); |
| 687 ClassElement d = ElementFactory.classElement2("D", []); |
| 688 ClassElement e = ElementFactory.classElement2("E", []); |
| 689 FunctionType t = ElementFactory.functionElement6("t", <ClassElement> [a, b],
<ClassElement> [c, d, e]).type; |
| 690 FunctionType s = ElementFactory.functionElement6("s", <ClassElement> [a, b,
c], <ClassElement> [d]).type; |
| 691 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 692 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |
| 693 } |
| 694 |
| 695 void test_isSubtypeOf_normalParameters_isAssignable() { |
| 696 // B extends A |
| 697 // (a) -> void <: (b) -> void |
| 698 // (b) -> void <: (a) -> void |
| 699 ClassElement a = ElementFactory.classElement2("A", []); |
| 700 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 701 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; |
| 702 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b]).ty
pe; |
| 703 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 704 JUnitTestCase.assertTrue(s.isSubtypeOf(t)); |
| 705 } |
| 706 |
| 707 void test_isSubtypeOf_normalParameters_isNotAssignable() { |
| 708 // ! (a) -> void <: (b) -> void |
| 709 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [Elemen
tFactory.classElement2("A", [])]).type; |
| 710 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [Elemen
tFactory.classElement2("B", [])]).type; |
| 711 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 712 } |
| 713 |
| 714 void test_isSubtypeOf_normalParameters_sHasMoreParams() { |
| 715 // B extends A |
| 716 // ! (a) -> void <: (b, b) -> void |
| 717 ClassElement a = ElementFactory.classElement2("A", []); |
| 718 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 719 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; |
| 720 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b, b])
.type; |
| 721 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 722 } |
| 723 |
| 724 void test_isSubtypeOf_normalParameters_tHasMoreParams() { |
| 725 // B extends A |
| 726 // ! (a, a) -> void <: (a) -> void |
| 727 ClassElement a = ElementFactory.classElement2("A", []); |
| 728 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 729 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a, a])
.type; |
| 730 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b]).ty
pe; |
| 731 // note, this is a different assertion from the other "tHasMoreParams" tests
, this is |
| 732 // intentional as it is a difference of the "normal parameters" |
| 733 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 734 } |
| 735 |
| 736 void test_isSubtypeOf_Object() { |
| 737 // () -> void <: Object |
| 738 FunctionType f = ElementFactory.functionElement("f").type; |
| 739 InterfaceType t = ElementFactory.object.type; |
| 740 JUnitTestCase.assertTrue(f.isSubtypeOf(t)); |
| 741 } |
| 742 |
| 743 void test_isSubtypeOf_positionalParameters_isAssignable() { |
| 744 // B extends A |
| 745 // ([a]) -> void <: ([b]) -> void |
| 746 // ([b]) -> void <: ([a]) -> void |
| 747 ClassElement a = ElementFactory.classElement2("A", []); |
| 748 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 749 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
| 750 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b]).type; |
| 751 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 752 JUnitTestCase.assertTrue(s.isSubtypeOf(t)); |
| 753 } |
| 754 |
| 755 void test_isSubtypeOf_positionalParameters_isNotAssignable() { |
| 756 // ! ([a]) -> void <: ([b]) -> void |
| 757 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
ElementFactory.classElement2("A", [])]).type; |
| 758 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
ElementFactory.classElement2("B", [])]).type; |
| 759 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 760 } |
| 761 |
| 762 void test_isSubtypeOf_positionalParameters_sHasMoreParams() { |
| 763 // B extends A |
| 764 // ! ([a]) -> void <: ([b, b]) -> void |
| 765 ClassElement a = ElementFactory.classElement2("A", []); |
| 766 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 767 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
| 768 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b, b]).type; |
| 769 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 770 } |
| 771 |
| 772 void test_isSubtypeOf_positionalParameters_tHasMoreParams() { |
| 773 // B extends A |
| 774 // ([a, a]) -> void <: ([b]) -> void |
| 775 ClassElement a = ElementFactory.classElement2("A", []); |
| 776 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 777 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a, a]).type; |
| 778 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b]).type; |
| 779 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 780 } |
| 781 |
| 782 void test_isSubtypeOf_returnType_sIsVoid() { |
| 783 // () -> void <: void |
| 784 FunctionType t = ElementFactory.functionElement("t").type; |
| 785 FunctionType s = ElementFactory.functionElement("s").type; |
| 786 // function s has the implicit return type of void, we assert it here |
| 787 JUnitTestCase.assertTrue(VoidTypeImpl.instance == s.returnType); |
| 788 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 789 } |
| 790 |
| 791 void test_isSubtypeOf_returnType_tAssignableToS() { |
| 792 // B extends A |
| 793 // () -> A <: () -> B |
| 794 // () -> B <: () -> A |
| 795 ClassElement a = ElementFactory.classElement2("A", []); |
| 796 ClassElement b = ElementFactory.classElement("B", a.type, []); |
| 797 FunctionType t = ElementFactory.functionElement2("t", a).type; |
| 798 FunctionType s = ElementFactory.functionElement2("s", b).type; |
| 799 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |
| 800 JUnitTestCase.assertTrue(s.isSubtypeOf(t)); |
| 801 } |
| 802 |
| 803 void test_isSubtypeOf_returnType_tNotAssignableToS() { |
| 804 // ! () -> A <: () -> B |
| 805 FunctionType t = ElementFactory.functionElement2("t", ElementFactory.classEl
ement2("A", [])).type; |
| 806 FunctionType s = ElementFactory.functionElement2("s", ElementFactory.classEl
ement2("B", [])).type; |
| 807 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 808 } |
| 809 |
| 810 void test_isSubtypeOf_typeParameters_matchesBounds() { |
| 811 TestTypeProvider provider = new TestTypeProvider(); |
| 812 InterfaceType boolType = provider.boolType; |
| 813 InterfaceType stringType = provider.stringType; |
| 814 TypeParameterElementImpl parameterB = new TypeParameterElementImpl(AstFactor
y.identifier3("B")); |
| 815 parameterB.bound = boolType; |
| 816 TypeParameterTypeImpl typeB = new TypeParameterTypeImpl(parameterB); |
| 817 TypeParameterElementImpl parameterS = new TypeParameterElementImpl(AstFactor
y.identifier3("S")); |
| 818 parameterS.bound = stringType; |
| 819 TypeParameterTypeImpl typeS = new TypeParameterTypeImpl(parameterS); |
| 820 FunctionElementImpl functionAliasElement = new FunctionElementImpl.forNode(A
stFactory.identifier3("func")); |
| 821 functionAliasElement.parameters = <ParameterElement> [ |
| 822 ElementFactory.requiredParameter2("a", typeB), |
| 823 ElementFactory.positionalParameter2("b", typeS)]; |
| 824 functionAliasElement.returnType = stringType; |
| 825 FunctionTypeImpl functionAliasType = new FunctionTypeImpl.con1(functionAlias
Element); |
| 826 functionAliasElement.type = functionAliasType; |
| 827 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3("f")); |
| 828 functionElement.parameters = <ParameterElement> [ |
| 829 ElementFactory.requiredParameter2("c", boolType), |
| 830 ElementFactory.positionalParameter2("d", stringType)]; |
| 831 functionElement.returnType = provider.dynamicType; |
| 832 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |
| 833 functionElement.type = functionType; |
| 834 JUnitTestCase.assertTrue(functionType.isAssignableTo(functionAliasType)); |
| 835 } |
| 836 |
| 837 void test_isSubtypeOf_wrongFunctionType_normal_named() { |
| 838 // ! (a) -> void <: ({name: A}) -> void |
| 839 // ! ({name: A}) -> void <: (a) -> void |
| 840 ClassElement a = ElementFactory.classElement2("A", []); |
| 841 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; |
| 842 FunctionType s = ElementFactory.functionElement7("s", null, <String> ["name"
], <ClassElement> [a]).type; |
| 843 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 844 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |
| 845 } |
| 846 |
| 847 void test_isSubtypeOf_wrongFunctionType_optional_named() { |
| 848 // ! ([a]) -> void <: ({name: A}) -> void |
| 849 // ! ({name: A}) -> void <: ([a]) -> void |
| 850 ClassElement a = ElementFactory.classElement2("A", []); |
| 851 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
| 852 FunctionType s = ElementFactory.functionElement7("s", null, <String> ["name"
], <ClassElement> [a]).type; |
| 853 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |
| 854 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |
| 855 } |
| 856 |
| 857 void test_setTypeArguments() { |
| 858 ClassElementImpl enclosingClass = ElementFactory.classElement2("C", ["E"]); |
| 859 MethodElementImpl methodElement = new MethodElementImpl.forNode(AstFactory.i
dentifier3("m")); |
| 860 enclosingClass.methods = <MethodElement> [methodElement]; |
| 861 FunctionTypeImpl type = new FunctionTypeImpl.con1(methodElement); |
| 862 DartType expectedType = enclosingClass.typeParameters[0].type; |
| 863 type.typeArguments = <DartType> [expectedType]; |
| 864 List<DartType> arguments = type.typeArguments; |
| 865 EngineTestCase.assertLength(1, arguments); |
| 866 JUnitTestCase.assertEquals(expectedType, arguments[0]); |
| 867 } |
| 868 |
| 869 void test_substitute2_equal() { |
| 870 ClassElementImpl definingClass = ElementFactory.classElement2("C", ["E"]); |
| 871 TypeParameterType parameterType = definingClass.typeParameters[0].type; |
| 872 MethodElementImpl functionElement = new MethodElementImpl.forNode(AstFactory
.identifier3("m")); |
| 873 String namedParameterName = "c"; |
| 874 functionElement.parameters = <ParameterElement> [ |
| 875 ElementFactory.requiredParameter2("a", parameterType), |
| 876 ElementFactory.positionalParameter2("b", parameterType), |
| 877 ElementFactory.namedParameter2(namedParameterName, parameterType)]; |
| 878 functionElement.returnType = parameterType; |
| 879 definingClass.methods = <MethodElement> [functionElement]; |
| 880 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |
| 881 functionType.typeArguments = <DartType> [parameterType]; |
| 882 InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(new ClassElement
Impl(AstFactory.identifier3("D"))); |
| 883 FunctionType result = functionType.substitute2(<DartType> [argumentType], <D
artType> [parameterType]); |
| 884 JUnitTestCase.assertEquals(argumentType, result.returnType); |
| 885 List<DartType> normalParameters = result.normalParameterTypes; |
| 886 EngineTestCase.assertLength(1, normalParameters); |
| 887 JUnitTestCase.assertEquals(argumentType, normalParameters[0]); |
| 888 List<DartType> optionalParameters = result.optionalParameterTypes; |
| 889 EngineTestCase.assertLength(1, optionalParameters); |
| 890 JUnitTestCase.assertEquals(argumentType, optionalParameters[0]); |
| 891 Map<String, DartType> namedParameters = result.namedParameterTypes; |
| 892 EngineTestCase.assertSizeOfMap(1, namedParameters); |
| 893 JUnitTestCase.assertEquals(argumentType, namedParameters[namedParameterName]
); |
| 894 } |
| 895 |
| 896 void test_substitute2_notEqual() { |
| 897 DartType returnType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFac
tory.identifier3("R"))); |
| 898 DartType normalParameterType = new InterfaceTypeImpl.con1(new ClassElementIm
pl(AstFactory.identifier3("A"))); |
| 899 DartType optionalParameterType = new InterfaceTypeImpl.con1(new ClassElement
Impl(AstFactory.identifier3("B"))); |
| 900 DartType namedParameterType = new InterfaceTypeImpl.con1(new ClassElementImp
l(AstFactory.identifier3("C"))); |
| 901 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3("f")); |
| 902 String namedParameterName = "c"; |
| 903 functionElement.parameters = <ParameterElement> [ |
| 904 ElementFactory.requiredParameter2("a", normalParameterType), |
| 905 ElementFactory.positionalParameter2("b", optionalParameterType), |
| 906 ElementFactory.namedParameter2(namedParameterName, namedParameterType)]; |
| 907 functionElement.returnType = returnType; |
| 908 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |
| 909 InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(new ClassElement
Impl(AstFactory.identifier3("D"))); |
| 910 TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(new TypePara
meterElementImpl(AstFactory.identifier3("E"))); |
| 911 FunctionType result = functionType.substitute2(<DartType> [argumentType], <D
artType> [parameterType]); |
| 912 JUnitTestCase.assertEquals(returnType, result.returnType); |
| 913 List<DartType> normalParameters = result.normalParameterTypes; |
| 914 EngineTestCase.assertLength(1, normalParameters); |
| 915 JUnitTestCase.assertEquals(normalParameterType, normalParameters[0]); |
| 916 List<DartType> optionalParameters = result.optionalParameterTypes; |
| 917 EngineTestCase.assertLength(1, optionalParameters); |
| 918 JUnitTestCase.assertEquals(optionalParameterType, optionalParameters[0]); |
| 919 Map<String, DartType> namedParameters = result.namedParameterTypes; |
| 920 EngineTestCase.assertSizeOfMap(1, namedParameters); |
| 921 JUnitTestCase.assertEquals(namedParameterType, namedParameters[namedParamete
rName]); |
| 922 } |
| 923 |
| 924 static dartSuite() { |
| 925 _ut.group('FunctionTypeImplTest', () { |
| 926 _ut.test('test_creation', () { |
| 927 final __test = new FunctionTypeImplTest(); |
| 928 runJUnitTest(__test, __test.test_creation); |
| 929 }); |
| 930 _ut.test('test_getElement', () { |
| 931 final __test = new FunctionTypeImplTest(); |
| 932 runJUnitTest(__test, __test.test_getElement); |
| 933 }); |
| 934 _ut.test('test_getNamedParameterTypes', () { |
| 935 final __test = new FunctionTypeImplTest(); |
| 936 runJUnitTest(__test, __test.test_getNamedParameterTypes); |
| 937 }); |
| 938 _ut.test('test_getNormalParameterTypes', () { |
| 939 final __test = new FunctionTypeImplTest(); |
| 940 runJUnitTest(__test, __test.test_getNormalParameterTypes); |
| 941 }); |
| 942 _ut.test('test_getReturnType', () { |
| 943 final __test = new FunctionTypeImplTest(); |
| 944 runJUnitTest(__test, __test.test_getReturnType); |
| 945 }); |
| 946 _ut.test('test_getTypeArguments', () { |
| 947 final __test = new FunctionTypeImplTest(); |
| 948 runJUnitTest(__test, __test.test_getTypeArguments); |
| 949 }); |
| 950 _ut.test('test_hashCode_element', () { |
| 951 final __test = new FunctionTypeImplTest(); |
| 952 runJUnitTest(__test, __test.test_hashCode_element); |
| 953 }); |
| 954 _ut.test('test_hashCode_noElement', () { |
| 955 final __test = new FunctionTypeImplTest(); |
| 956 runJUnitTest(__test, __test.test_hashCode_noElement); |
| 957 }); |
| 958 _ut.test('test_isAssignableTo_normalAndPositionalArgs', () { |
| 959 final __test = new FunctionTypeImplTest(); |
| 960 runJUnitTest(__test, __test.test_isAssignableTo_normalAndPositionalArgs)
; |
| 961 }); |
| 962 _ut.test('test_isSubtypeOf_Object', () { |
| 963 final __test = new FunctionTypeImplTest(); |
| 964 runJUnitTest(__test, __test.test_isSubtypeOf_Object); |
| 965 }); |
| 966 _ut.test('test_isSubtypeOf_baseCase_classFunction', () { |
| 967 final __test = new FunctionTypeImplTest(); |
| 968 runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_classFunction); |
| 969 }); |
| 970 _ut.test('test_isSubtypeOf_baseCase_notFunctionType', () { |
| 971 final __test = new FunctionTypeImplTest(); |
| 972 runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_notFunctionType); |
| 973 }); |
| 974 _ut.test('test_isSubtypeOf_baseCase_null', () { |
| 975 final __test = new FunctionTypeImplTest(); |
| 976 runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_null); |
| 977 }); |
| 978 _ut.test('test_isSubtypeOf_baseCase_self', () { |
| 979 final __test = new FunctionTypeImplTest(); |
| 980 runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_self); |
| 981 }); |
| 982 _ut.test('test_isSubtypeOf_namedParameters_isAssignable', () { |
| 983 final __test = new FunctionTypeImplTest(); |
| 984 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_isAssignabl
e); |
| 985 }); |
| 986 _ut.test('test_isSubtypeOf_namedParameters_isNotAssignable', () { |
| 987 final __test = new FunctionTypeImplTest(); |
| 988 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_isNotAssign
able); |
| 989 }); |
| 990 _ut.test('test_isSubtypeOf_namedParameters_namesDifferent', () { |
| 991 final __test = new FunctionTypeImplTest(); |
| 992 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_namesDiffer
ent); |
| 993 }); |
| 994 _ut.test('test_isSubtypeOf_namedParameters_orderOfParams', () { |
| 995 final __test = new FunctionTypeImplTest(); |
| 996 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_orderOfPara
ms); |
| 997 }); |
| 998 _ut.test('test_isSubtypeOf_namedParameters_orderOfParams2', () { |
| 999 final __test = new FunctionTypeImplTest(); |
| 1000 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_orderOfPara
ms2); |
| 1001 }); |
| 1002 _ut.test('test_isSubtypeOf_namedParameters_orderOfParams3', () { |
| 1003 final __test = new FunctionTypeImplTest(); |
| 1004 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_orderOfPara
ms3); |
| 1005 }); |
| 1006 _ut.test('test_isSubtypeOf_namedParameters_sHasMoreParams', () { |
| 1007 final __test = new FunctionTypeImplTest(); |
| 1008 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_sHasMorePar
ams); |
| 1009 }); |
| 1010 _ut.test('test_isSubtypeOf_namedParameters_tHasMoreParams', () { |
| 1011 final __test = new FunctionTypeImplTest(); |
| 1012 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_tHasMorePar
ams); |
| 1013 }); |
| 1014 _ut.test('test_isSubtypeOf_normalAndPositionalArgs_1', () { |
| 1015 final __test = new FunctionTypeImplTest(); |
| 1016 runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_1); |
| 1017 }); |
| 1018 _ut.test('test_isSubtypeOf_normalAndPositionalArgs_2', () { |
| 1019 final __test = new FunctionTypeImplTest(); |
| 1020 runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_2); |
| 1021 }); |
| 1022 _ut.test('test_isSubtypeOf_normalAndPositionalArgs_3', () { |
| 1023 final __test = new FunctionTypeImplTest(); |
| 1024 runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_3); |
| 1025 }); |
| 1026 _ut.test('test_isSubtypeOf_normalAndPositionalArgs_4', () { |
| 1027 final __test = new FunctionTypeImplTest(); |
| 1028 runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_4); |
| 1029 }); |
| 1030 _ut.test('test_isSubtypeOf_normalParameters_isAssignable', () { |
| 1031 final __test = new FunctionTypeImplTest(); |
| 1032 runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_isAssignab
le); |
| 1033 }); |
| 1034 _ut.test('test_isSubtypeOf_normalParameters_isNotAssignable', () { |
| 1035 final __test = new FunctionTypeImplTest(); |
| 1036 runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_isNotAssig
nable); |
| 1037 }); |
| 1038 _ut.test('test_isSubtypeOf_normalParameters_sHasMoreParams', () { |
| 1039 final __test = new FunctionTypeImplTest(); |
| 1040 runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_sHasMorePa
rams); |
| 1041 }); |
| 1042 _ut.test('test_isSubtypeOf_normalParameters_tHasMoreParams', () { |
| 1043 final __test = new FunctionTypeImplTest(); |
| 1044 runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_tHasMorePa
rams); |
| 1045 }); |
| 1046 _ut.test('test_isSubtypeOf_positionalParameters_isAssignable', () { |
| 1047 final __test = new FunctionTypeImplTest(); |
| 1048 runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_isAssi
gnable); |
| 1049 }); |
| 1050 _ut.test('test_isSubtypeOf_positionalParameters_isNotAssignable', () { |
| 1051 final __test = new FunctionTypeImplTest(); |
| 1052 runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_isNotA
ssignable); |
| 1053 }); |
| 1054 _ut.test('test_isSubtypeOf_positionalParameters_sHasMoreParams', () { |
| 1055 final __test = new FunctionTypeImplTest(); |
| 1056 runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_sHasMo
reParams); |
| 1057 }); |
| 1058 _ut.test('test_isSubtypeOf_positionalParameters_tHasMoreParams', () { |
| 1059 final __test = new FunctionTypeImplTest(); |
| 1060 runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_tHasMo
reParams); |
| 1061 }); |
| 1062 _ut.test('test_isSubtypeOf_returnType_sIsVoid', () { |
| 1063 final __test = new FunctionTypeImplTest(); |
| 1064 runJUnitTest(__test, __test.test_isSubtypeOf_returnType_sIsVoid); |
| 1065 }); |
| 1066 _ut.test('test_isSubtypeOf_returnType_tAssignableToS', () { |
| 1067 final __test = new FunctionTypeImplTest(); |
| 1068 runJUnitTest(__test, __test.test_isSubtypeOf_returnType_tAssignableToS); |
| 1069 }); |
| 1070 _ut.test('test_isSubtypeOf_returnType_tNotAssignableToS', () { |
| 1071 final __test = new FunctionTypeImplTest(); |
| 1072 runJUnitTest(__test, __test.test_isSubtypeOf_returnType_tNotAssignableTo
S); |
| 1073 }); |
| 1074 _ut.test('test_isSubtypeOf_typeParameters_matchesBounds', () { |
| 1075 final __test = new FunctionTypeImplTest(); |
| 1076 runJUnitTest(__test, __test.test_isSubtypeOf_typeParameters_matchesBound
s); |
| 1077 }); |
| 1078 _ut.test('test_isSubtypeOf_wrongFunctionType_normal_named', () { |
| 1079 final __test = new FunctionTypeImplTest(); |
| 1080 runJUnitTest(__test, __test.test_isSubtypeOf_wrongFunctionType_normal_na
med); |
| 1081 }); |
| 1082 _ut.test('test_isSubtypeOf_wrongFunctionType_optional_named', () { |
| 1083 final __test = new FunctionTypeImplTest(); |
| 1084 runJUnitTest(__test, __test.test_isSubtypeOf_wrongFunctionType_optional_
named); |
| 1085 }); |
| 1086 _ut.test('test_setTypeArguments', () { |
| 1087 final __test = new FunctionTypeImplTest(); |
| 1088 runJUnitTest(__test, __test.test_setTypeArguments); |
| 1089 }); |
| 1090 _ut.test('test_substitute2_equal', () { |
| 1091 final __test = new FunctionTypeImplTest(); |
| 1092 runJUnitTest(__test, __test.test_substitute2_equal); |
| 1093 }); |
| 1094 _ut.test('test_substitute2_notEqual', () { |
| 1095 final __test = new FunctionTypeImplTest(); |
| 1096 runJUnitTest(__test, __test.test_substitute2_notEqual); |
| 1097 }); |
| 1098 }); |
| 1099 } |
| 1100 } |
| 1101 |
| 1102 class InterfaceTypeImpl_FunctionTypeImplTest_test_isSubtypeOf_baseCase_classFunc
tion extends InterfaceTypeImpl { |
| 1103 InterfaceTypeImpl_FunctionTypeImplTest_test_isSubtypeOf_baseCase_classFunction
(ClassElement arg0) : super.con1(arg0); |
| 1104 |
| 1105 @override |
| 1106 bool get isDartCoreFunction => true; |
| 1107 } |
| 1108 |
| 233 class LibraryElementImplTest extends EngineTestCase { | 1109 class LibraryElementImplTest extends EngineTestCase { |
| 234 void test_creation() { | 1110 void test_creation() { |
| 235 JUnitTestCase.assertNotNull(new LibraryElementImpl(createAnalysisContext(),
AstFactory.libraryIdentifier2(["l"]))); | 1111 JUnitTestCase.assertNotNull(new LibraryElementImpl(createAnalysisContext(),
AstFactory.libraryIdentifier2(["l"]))); |
| 236 } | 1112 } |
| 237 | 1113 |
| 238 void test_getImportedLibraries() { | 1114 void test_getImportedLibraries() { |
| 239 AnalysisContext context = createAnalysisContext(); | 1115 AnalysisContext context = createAnalysisContext(); |
| 240 LibraryElementImpl library1 = ElementFactory.library(context, "l1"); | 1116 LibraryElementImpl library1 = ElementFactory.library(context, "l1"); |
| 241 LibraryElementImpl library2 = ElementFactory.library(context, "l2"); | 1117 LibraryElementImpl library2 = ElementFactory.library(context, "l2"); |
| 242 LibraryElementImpl library3 = ElementFactory.library(context, "l3"); | 1118 LibraryElementImpl library3 = ElementFactory.library(context, "l3"); |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 578 runJUnitTest(__test, __test.test_substitute_equal); | 1454 runJUnitTest(__test, __test.test_substitute_equal); |
| 579 }); | 1455 }); |
| 580 _ut.test('test_substitute_notEqual', () { | 1456 _ut.test('test_substitute_notEqual', () { |
| 581 final __test = new TypeParameterTypeImplTest(); | 1457 final __test = new TypeParameterTypeImplTest(); |
| 582 runJUnitTest(__test, __test.test_substitute_notEqual); | 1458 runJUnitTest(__test, __test.test_substitute_notEqual); |
| 583 }); | 1459 }); |
| 584 }); | 1460 }); |
| 585 } | 1461 } |
| 586 } | 1462 } |
| 587 | 1463 |
| 588 class InterfaceTypeImplTest extends EngineTestCase { | 1464 class ElementLocationImplTest extends EngineTestCase { |
| 589 /** | 1465 void test_create_encoding() { |
| 590 * The type provider used to access the types. | 1466 String encoding = "a;b;c"; |
| 591 */ | 1467 ElementLocationImpl location = new ElementLocationImpl.con2(encoding); |
| 592 TestTypeProvider _typeProvider; | 1468 JUnitTestCase.assertEquals(encoding, location.encoding); |
| 593 | 1469 } |
| 594 @override | 1470 |
| 595 void setUp() { | 1471 void test_equals_equal() { |
| 596 _typeProvider = new TestTypeProvider(); | 1472 String encoding = "a;b;c"; |
| 597 } | 1473 ElementLocationImpl first = new ElementLocationImpl.con2(encoding); |
| 598 | 1474 ElementLocationImpl second = new ElementLocationImpl.con2(encoding); |
| 599 void test_computeLongestInheritancePathToObject_multipleInterfacePaths() { | 1475 JUnitTestCase.assertTrue(first == second); |
| 600 // | 1476 } |
| 601 // Object | 1477 |
| 602 // | | 1478 void test_equals_equalWithDifferentUriKind() { |
| 603 // A | 1479 ElementLocationImpl first = new ElementLocationImpl.con2("fa;fb;c"); |
| 604 // / \ | 1480 ElementLocationImpl second = new ElementLocationImpl.con2("pa;pb;c"); |
| 605 // B C | 1481 JUnitTestCase.assertTrue(first == second); |
| 606 // | | | 1482 } |
| 607 // | D | 1483 |
| 608 // \ / | 1484 void test_equals_notEqual_differentLengths() { |
| 609 // E | 1485 ElementLocationImpl first = new ElementLocationImpl.con2("a;b;c"); |
| 610 // | 1486 ElementLocationImpl second = new ElementLocationImpl.con2("a;b;c;d"); |
| 611 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1487 JUnitTestCase.assertFalse(first == second); |
| 612 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 1488 } |
| 613 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1489 |
| 614 ClassElementImpl classD = ElementFactory.classElement2("D", []); | 1490 void test_equals_notEqual_notLocation() { |
| 615 ClassElementImpl classE = ElementFactory.classElement2("E", []); | 1491 ElementLocationImpl first = new ElementLocationImpl.con2("a;b;c"); |
| 616 classB.interfaces = <InterfaceType> [classA.type]; | 1492 JUnitTestCase.assertFalse(first == "a;b;d"); |
| 617 classC.interfaces = <InterfaceType> [classA.type]; | 1493 } |
| 618 classD.interfaces = <InterfaceType> [classC.type]; | 1494 |
| 619 classE.interfaces = <InterfaceType> [classB.type, classD.type]; | 1495 void test_equals_notEqual_sameLengths() { |
| 620 // assertion: even though the longest path to Object for typeB is 2, and typ
eE implements typeB, | 1496 ElementLocationImpl first = new ElementLocationImpl.con2("a;b;c"); |
| 621 // the longest path for typeE is 4 since it also implements typeD | 1497 ElementLocationImpl second = new ElementLocationImpl.con2("a;b;d"); |
| 622 JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classB.type)); | 1498 JUnitTestCase.assertFalse(first == second); |
| 623 JUnitTestCase.assertEquals(4, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classE.type)); | 1499 } |
| 624 } | 1500 |
| 625 | 1501 void test_getComponents() { |
| 626 void test_computeLongestInheritancePathToObject_multipleSuperclassPaths() { | 1502 String encoding = "a;b;c"; |
| 627 // | 1503 ElementLocationImpl location = new ElementLocationImpl.con2(encoding); |
| 628 // Object | 1504 List<String> components = location.components; |
| 629 // | | 1505 EngineTestCase.assertLength(3, components); |
| 630 // A | 1506 JUnitTestCase.assertEquals("a", components[0]); |
| 631 // / \ | 1507 JUnitTestCase.assertEquals("b", components[1]); |
| 632 // B C | 1508 JUnitTestCase.assertEquals("c", components[2]); |
| 633 // | | | 1509 } |
| 634 // | D | 1510 |
| 635 // \ / | 1511 void test_getEncoding() { |
| 636 // E | 1512 String encoding = "a;b;c;;d"; |
| 637 // | 1513 ElementLocationImpl location = new ElementLocationImpl.con2(encoding); |
| 1514 JUnitTestCase.assertEquals(encoding, location.encoding); |
| 1515 } |
| 1516 |
| 1517 void test_hashCode_equal() { |
| 1518 String encoding = "a;b;c"; |
| 1519 ElementLocationImpl first = new ElementLocationImpl.con2(encoding); |
| 1520 ElementLocationImpl second = new ElementLocationImpl.con2(encoding); |
| 1521 JUnitTestCase.assertTrue(first.hashCode == second.hashCode); |
| 1522 } |
| 1523 |
| 1524 void test_hashCode_equalWithDifferentUriKind() { |
| 1525 ElementLocationImpl first = new ElementLocationImpl.con2("fa;fb;c"); |
| 1526 ElementLocationImpl second = new ElementLocationImpl.con2("pa;pb;c"); |
| 1527 JUnitTestCase.assertTrue(first.hashCode == second.hashCode); |
| 1528 } |
| 1529 |
| 1530 static dartSuite() { |
| 1531 _ut.group('ElementLocationImplTest', () { |
| 1532 _ut.test('test_create_encoding', () { |
| 1533 final __test = new ElementLocationImplTest(); |
| 1534 runJUnitTest(__test, __test.test_create_encoding); |
| 1535 }); |
| 1536 _ut.test('test_equals_equal', () { |
| 1537 final __test = new ElementLocationImplTest(); |
| 1538 runJUnitTest(__test, __test.test_equals_equal); |
| 1539 }); |
| 1540 _ut.test('test_equals_equalWithDifferentUriKind', () { |
| 1541 final __test = new ElementLocationImplTest(); |
| 1542 runJUnitTest(__test, __test.test_equals_equalWithDifferentUriKind); |
| 1543 }); |
| 1544 _ut.test('test_equals_notEqual_differentLengths', () { |
| 1545 final __test = new ElementLocationImplTest(); |
| 1546 runJUnitTest(__test, __test.test_equals_notEqual_differentLengths); |
| 1547 }); |
| 1548 _ut.test('test_equals_notEqual_notLocation', () { |
| 1549 final __test = new ElementLocationImplTest(); |
| 1550 runJUnitTest(__test, __test.test_equals_notEqual_notLocation); |
| 1551 }); |
| 1552 _ut.test('test_equals_notEqual_sameLengths', () { |
| 1553 final __test = new ElementLocationImplTest(); |
| 1554 runJUnitTest(__test, __test.test_equals_notEqual_sameLengths); |
| 1555 }); |
| 1556 _ut.test('test_getComponents', () { |
| 1557 final __test = new ElementLocationImplTest(); |
| 1558 runJUnitTest(__test, __test.test_getComponents); |
| 1559 }); |
| 1560 _ut.test('test_getEncoding', () { |
| 1561 final __test = new ElementLocationImplTest(); |
| 1562 runJUnitTest(__test, __test.test_getEncoding); |
| 1563 }); |
| 1564 _ut.test('test_hashCode_equal', () { |
| 1565 final __test = new ElementLocationImplTest(); |
| 1566 runJUnitTest(__test, __test.test_hashCode_equal); |
| 1567 }); |
| 1568 _ut.test('test_hashCode_equalWithDifferentUriKind', () { |
| 1569 final __test = new ElementLocationImplTest(); |
| 1570 runJUnitTest(__test, __test.test_hashCode_equalWithDifferentUriKind); |
| 1571 }); |
| 1572 }); |
| 1573 } |
| 1574 } |
| 1575 |
| 1576 class ClassElementImplTest extends EngineTestCase { |
| 1577 void test_getAllSupertypes_interface() { |
| 638 ClassElement classA = ElementFactory.classElement2("A", []); | 1578 ClassElement classA = ElementFactory.classElement2("A", []); |
| 639 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1579 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 640 ClassElement classC = ElementFactory.classElement("C", classA.type, []); | 1580 ClassElementImpl elementC = ElementFactory.classElement2("C", []); |
| 641 ClassElement classD = ElementFactory.classElement("D", classC.type, []); | |
| 642 ClassElementImpl classE = ElementFactory.classElement("E", classB.type, []); | |
| 643 classE.interfaces = <InterfaceType> [classD.type]; | |
| 644 // assertion: even though the longest path to Object for typeB is 2, and typ
eE extends typeB, | |
| 645 // the longest path for typeE is 4 since it also implements typeD | |
| 646 JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classB.type)); | |
| 647 JUnitTestCase.assertEquals(4, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classE.type)); | |
| 648 } | |
| 649 | |
| 650 void test_computeLongestInheritancePathToObject_object() { | |
| 651 // | |
| 652 // Object | |
| 653 // | | |
| 654 // A | |
| 655 // | |
| 656 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 657 InterfaceType object = classA.supertype; | |
| 658 JUnitTestCase.assertEquals(0, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(object)); | |
| 659 } | |
| 660 | |
| 661 void test_computeLongestInheritancePathToObject_recursion() { | |
| 662 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 663 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 664 classA.supertype = classB.type; | |
| 665 JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classA.type)); | |
| 666 } | |
| 667 | |
| 668 void test_computeLongestInheritancePathToObject_singleInterfacePath() { | |
| 669 // | |
| 670 // Object | |
| 671 // | | |
| 672 // A | |
| 673 // | | |
| 674 // B | |
| 675 // | | |
| 676 // C | |
| 677 // | |
| 678 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 679 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 680 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 681 classB.interfaces = <InterfaceType> [classA.type]; | |
| 682 classC.interfaces = <InterfaceType> [classB.type]; | |
| 683 JUnitTestCase.assertEquals(1, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classA.type)); | |
| 684 JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classB.type)); | |
| 685 JUnitTestCase.assertEquals(3, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classC.type)); | |
| 686 } | |
| 687 | |
| 688 void test_computeLongestInheritancePathToObject_singleSuperclassPath() { | |
| 689 // | |
| 690 // Object | |
| 691 // | | |
| 692 // A | |
| 693 // | | |
| 694 // B | |
| 695 // | | |
| 696 // C | |
| 697 // | |
| 698 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 699 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | |
| 700 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | |
| 701 JUnitTestCase.assertEquals(1, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classA.type)); | |
| 702 JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classB.type)); | |
| 703 JUnitTestCase.assertEquals(3, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classC.type)); | |
| 704 } | |
| 705 | |
| 706 void test_computeSuperinterfaceSet_genericInterfacePath() { | |
| 707 // | |
| 708 // A | |
| 709 // | implements | |
| 710 // B<T> | |
| 711 // | implements | |
| 712 // C<T> | |
| 713 // | |
| 714 // D | |
| 715 // | |
| 716 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 717 ClassElementImpl classB = ElementFactory.classElement2("B", ["T"]); | |
| 718 ClassElementImpl classC = ElementFactory.classElement2("C", ["T"]); | |
| 719 ClassElement classD = ElementFactory.classElement2("D", []); | |
| 720 InterfaceType typeA = classA.type; | |
| 721 classB.interfaces = <InterfaceType> [typeA]; | |
| 722 InterfaceTypeImpl typeBT = new InterfaceTypeImpl.con1(classB); | |
| 723 DartType typeT = classC.type.typeArguments[0]; | |
| 724 typeBT.typeArguments = <DartType> [typeT]; | |
| 725 classC.interfaces = <InterfaceType> [typeBT]; | |
| 726 // A | |
| 727 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(typeA); | |
| 728 EngineTestCase.assertSizeOfSet(1, superinterfacesOfA); | |
| 729 InterfaceType typeObject = ElementFactory.object.type; | |
| 730 JUnitTestCase.assertTrue(superinterfacesOfA.contains(typeObject)); | |
| 731 // B<D> | |
| 732 InterfaceTypeImpl typeBD = new InterfaceTypeImpl.con1(classB); | |
| 733 typeBD.typeArguments = <DartType> [classD.type]; | |
| 734 Set<InterfaceType> superinterfacesOfBD = InterfaceTypeImpl.computeSuperinter
faceSet(typeBD); | |
| 735 EngineTestCase.assertSizeOfSet(2, superinterfacesOfBD); | |
| 736 JUnitTestCase.assertTrue(superinterfacesOfBD.contains(typeObject)); | |
| 737 JUnitTestCase.assertTrue(superinterfacesOfBD.contains(typeA)); | |
| 738 // C<D> | |
| 739 InterfaceTypeImpl typeCD = new InterfaceTypeImpl.con1(classC); | |
| 740 typeCD.typeArguments = <DartType> [classD.type]; | |
| 741 Set<InterfaceType> superinterfacesOfCD = InterfaceTypeImpl.computeSuperinter
faceSet(typeCD); | |
| 742 EngineTestCase.assertSizeOfSet(3, superinterfacesOfCD); | |
| 743 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeObject)); | |
| 744 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeA)); | |
| 745 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeBD)); | |
| 746 } | |
| 747 | |
| 748 void test_computeSuperinterfaceSet_genericSuperclassPath() { | |
| 749 // | |
| 750 // A | |
| 751 // | | |
| 752 // B<T> | |
| 753 // | | |
| 754 // C<T> | |
| 755 // | |
| 756 // D | |
| 757 // | |
| 758 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 759 InterfaceType typeA = classA.type; | |
| 760 ClassElement classB = ElementFactory.classElement("B", typeA, ["T"]); | |
| 761 ClassElementImpl classC = ElementFactory.classElement2("C", ["T"]); | |
| 762 InterfaceTypeImpl typeBT = new InterfaceTypeImpl.con1(classB); | |
| 763 DartType typeT = classC.type.typeArguments[0]; | |
| 764 typeBT.typeArguments = <DartType> [typeT]; | |
| 765 classC.supertype = typeBT; | |
| 766 ClassElement classD = ElementFactory.classElement2("D", []); | |
| 767 // A | |
| 768 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(typeA); | |
| 769 EngineTestCase.assertSizeOfSet(1, superinterfacesOfA); | |
| 770 InterfaceType typeObject = ElementFactory.object.type; | |
| 771 JUnitTestCase.assertTrue(superinterfacesOfA.contains(typeObject)); | |
| 772 // B<D> | |
| 773 InterfaceTypeImpl typeBD = new InterfaceTypeImpl.con1(classB); | |
| 774 typeBD.typeArguments = <DartType> [classD.type]; | |
| 775 Set<InterfaceType> superinterfacesOfBD = InterfaceTypeImpl.computeSuperinter
faceSet(typeBD); | |
| 776 EngineTestCase.assertSizeOfSet(2, superinterfacesOfBD); | |
| 777 JUnitTestCase.assertTrue(superinterfacesOfBD.contains(typeObject)); | |
| 778 JUnitTestCase.assertTrue(superinterfacesOfBD.contains(typeA)); | |
| 779 // C<D> | |
| 780 InterfaceTypeImpl typeCD = new InterfaceTypeImpl.con1(classC); | |
| 781 typeCD.typeArguments = <DartType> [classD.type]; | |
| 782 Set<InterfaceType> superinterfacesOfCD = InterfaceTypeImpl.computeSuperinter
faceSet(typeCD); | |
| 783 EngineTestCase.assertSizeOfSet(3, superinterfacesOfCD); | |
| 784 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeObject)); | |
| 785 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeA)); | |
| 786 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeBD)); | |
| 787 } | |
| 788 | |
| 789 void test_computeSuperinterfaceSet_multipleInterfacePaths() { | |
| 790 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 791 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 792 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 793 ClassElementImpl classD = ElementFactory.classElement2("D", []); | |
| 794 ClassElementImpl classE = ElementFactory.classElement2("E", []); | |
| 795 classB.interfaces = <InterfaceType> [classA.type]; | |
| 796 classC.interfaces = <InterfaceType> [classA.type]; | |
| 797 classD.interfaces = <InterfaceType> [classC.type]; | |
| 798 classE.interfaces = <InterfaceType> [classB.type, classD.type]; | |
| 799 // D | |
| 800 Set<InterfaceType> superinterfacesOfD = InterfaceTypeImpl.computeSuperinterf
aceSet(classD.type); | |
| 801 EngineTestCase.assertSizeOfSet(3, superinterfacesOfD); | |
| 802 JUnitTestCase.assertTrue(superinterfacesOfD.contains(ElementFactory.object.t
ype)); | |
| 803 JUnitTestCase.assertTrue(superinterfacesOfD.contains(classA.type)); | |
| 804 JUnitTestCase.assertTrue(superinterfacesOfD.contains(classC.type)); | |
| 805 // E | |
| 806 Set<InterfaceType> superinterfacesOfE = InterfaceTypeImpl.computeSuperinterf
aceSet(classE.type); | |
| 807 EngineTestCase.assertSizeOfSet(5, superinterfacesOfE); | |
| 808 JUnitTestCase.assertTrue(superinterfacesOfE.contains(ElementFactory.object.t
ype)); | |
| 809 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classA.type)); | |
| 810 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classB.type)); | |
| 811 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classC.type)); | |
| 812 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classD.type)); | |
| 813 } | |
| 814 | |
| 815 void test_computeSuperinterfaceSet_multipleSuperclassPaths() { | |
| 816 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 817 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | |
| 818 ClassElement classC = ElementFactory.classElement("C", classA.type, []); | |
| 819 ClassElement classD = ElementFactory.classElement("D", classC.type, []); | |
| 820 ClassElementImpl classE = ElementFactory.classElement("E", classB.type, []); | |
| 821 classE.interfaces = <InterfaceType> [classD.type]; | |
| 822 // D | |
| 823 Set<InterfaceType> superinterfacesOfD = InterfaceTypeImpl.computeSuperinterf
aceSet(classD.type); | |
| 824 EngineTestCase.assertSizeOfSet(3, superinterfacesOfD); | |
| 825 JUnitTestCase.assertTrue(superinterfacesOfD.contains(ElementFactory.object.t
ype)); | |
| 826 JUnitTestCase.assertTrue(superinterfacesOfD.contains(classA.type)); | |
| 827 JUnitTestCase.assertTrue(superinterfacesOfD.contains(classC.type)); | |
| 828 // E | |
| 829 Set<InterfaceType> superinterfacesOfE = InterfaceTypeImpl.computeSuperinterf
aceSet(classE.type); | |
| 830 EngineTestCase.assertSizeOfSet(5, superinterfacesOfE); | |
| 831 JUnitTestCase.assertTrue(superinterfacesOfE.contains(ElementFactory.object.t
ype)); | |
| 832 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classA.type)); | |
| 833 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classB.type)); | |
| 834 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classC.type)); | |
| 835 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classD.type)); | |
| 836 } | |
| 837 | |
| 838 void test_computeSuperinterfaceSet_recursion() { | |
| 839 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 840 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 841 classA.supertype = classB.type; | |
| 842 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); | |
| 843 EngineTestCase.assertSizeOfSet(2, superinterfacesOfB); | |
| 844 } | |
| 845 | |
| 846 void test_computeSuperinterfaceSet_singleInterfacePath() { | |
| 847 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 848 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 849 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 850 classB.interfaces = <InterfaceType> [classA.type]; | |
| 851 classC.interfaces = <InterfaceType> [classB.type]; | |
| 852 // A | |
| 853 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(classA.type); | |
| 854 EngineTestCase.assertSizeOfSet(1, superinterfacesOfA); | |
| 855 JUnitTestCase.assertTrue(superinterfacesOfA.contains(ElementFactory.object.t
ype)); | |
| 856 // B | |
| 857 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); | |
| 858 EngineTestCase.assertSizeOfSet(2, superinterfacesOfB); | |
| 859 JUnitTestCase.assertTrue(superinterfacesOfB.contains(ElementFactory.object.t
ype)); | |
| 860 JUnitTestCase.assertTrue(superinterfacesOfB.contains(classA.type)); | |
| 861 // C | |
| 862 Set<InterfaceType> superinterfacesOfC = InterfaceTypeImpl.computeSuperinterf
aceSet(classC.type); | |
| 863 EngineTestCase.assertSizeOfSet(3, superinterfacesOfC); | |
| 864 JUnitTestCase.assertTrue(superinterfacesOfC.contains(ElementFactory.object.t
ype)); | |
| 865 JUnitTestCase.assertTrue(superinterfacesOfC.contains(classA.type)); | |
| 866 JUnitTestCase.assertTrue(superinterfacesOfC.contains(classB.type)); | |
| 867 } | |
| 868 | |
| 869 void test_computeSuperinterfaceSet_singleSuperclassPath() { | |
| 870 // | |
| 871 // A | |
| 872 // | | |
| 873 // B | |
| 874 // | | |
| 875 // C | |
| 876 // | |
| 877 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 878 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | |
| 879 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | |
| 880 // A | |
| 881 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(classA.type); | |
| 882 EngineTestCase.assertSizeOfSet(1, superinterfacesOfA); | |
| 883 JUnitTestCase.assertTrue(superinterfacesOfA.contains(ElementFactory.object.t
ype)); | |
| 884 // B | |
| 885 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); | |
| 886 EngineTestCase.assertSizeOfSet(2, superinterfacesOfB); | |
| 887 JUnitTestCase.assertTrue(superinterfacesOfB.contains(ElementFactory.object.t
ype)); | |
| 888 JUnitTestCase.assertTrue(superinterfacesOfB.contains(classA.type)); | |
| 889 // C | |
| 890 Set<InterfaceType> superinterfacesOfC = InterfaceTypeImpl.computeSuperinterf
aceSet(classC.type); | |
| 891 EngineTestCase.assertSizeOfSet(3, superinterfacesOfC); | |
| 892 JUnitTestCase.assertTrue(superinterfacesOfC.contains(ElementFactory.object.t
ype)); | |
| 893 JUnitTestCase.assertTrue(superinterfacesOfC.contains(classA.type)); | |
| 894 JUnitTestCase.assertTrue(superinterfacesOfC.contains(classB.type)); | |
| 895 } | |
| 896 | |
| 897 void test_creation() { | |
| 898 JUnitTestCase.assertNotNull(new InterfaceTypeImpl.con1(ElementFactory.classE
lement2("A", []))); | |
| 899 } | |
| 900 | |
| 901 void test_getAccessors() { | |
| 902 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); | |
| 903 PropertyAccessorElement getterG = ElementFactory.getterElement("g", false, n
ull); | |
| 904 PropertyAccessorElement getterH = ElementFactory.getterElement("h", false, n
ull); | |
| 905 typeElement.accessors = <PropertyAccessorElement> [getterG, getterH]; | |
| 906 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); | |
| 907 JUnitTestCase.assertEquals(2, type.accessors.length); | |
| 908 } | |
| 909 | |
| 910 void test_getAccessors_empty() { | |
| 911 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); | |
| 912 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); | |
| 913 JUnitTestCase.assertEquals(0, type.accessors.length); | |
| 914 } | |
| 915 | |
| 916 void test_getElement() { | |
| 917 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); | |
| 918 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); | |
| 919 JUnitTestCase.assertEquals(typeElement, type.element); | |
| 920 } | |
| 921 | |
| 922 void test_getGetter_implemented() { | |
| 923 // | |
| 924 // class A { g {} } | |
| 925 // | |
| 926 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 927 String getterName = "g"; | |
| 928 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); | |
| 929 classA.accessors = <PropertyAccessorElement> [getterG]; | |
| 930 InterfaceType typeA = classA.type; | |
| 931 JUnitTestCase.assertSame(getterG, typeA.getGetter(getterName)); | |
| 932 } | |
| 933 | |
| 934 void test_getGetter_parameterized() { | |
| 935 // | |
| 936 // class A<E> { E get g {} } | |
| 937 // | |
| 938 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | |
| 939 DartType typeE = classA.type.typeArguments[0]; | |
| 940 String getterName = "g"; | |
| 941 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, typeE); | |
| 942 classA.accessors = <PropertyAccessorElement> [getterG]; | |
| 943 (getterG.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; | |
| 944 // | |
| 945 // A<I> | |
| 946 // | |
| 947 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | |
| 948 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); | |
| 949 typeAI.typeArguments = <DartType> [typeI]; | |
| 950 PropertyAccessorElement getter = typeAI.getGetter(getterName); | |
| 951 JUnitTestCase.assertNotNull(getter); | |
| 952 FunctionType getterType = getter.type; | |
| 953 JUnitTestCase.assertSame(typeI, getterType.returnType); | |
| 954 } | |
| 955 | |
| 956 void test_getGetter_unimplemented() { | |
| 957 // | |
| 958 // class A {} | |
| 959 // | |
| 960 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 961 InterfaceType typeA = classA.type; | |
| 962 JUnitTestCase.assertNull(typeA.getGetter("g")); | |
| 963 } | |
| 964 | |
| 965 void test_getInterfaces_nonParameterized() { | |
| 966 // | |
| 967 // class C implements A, B | |
| 968 // | |
| 969 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 970 InterfaceType typeA = classA.type; | |
| 971 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 972 InterfaceType typeB = classB.type; | |
| 973 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 974 classC.interfaces = <InterfaceType> [typeA, typeB]; | |
| 975 List<InterfaceType> interfaces = classC.type.interfaces; | |
| 976 EngineTestCase.assertLength(2, interfaces); | |
| 977 if (identical(interfaces[0], typeA)) { | |
| 978 JUnitTestCase.assertSame(typeB, interfaces[1]); | |
| 979 } else { | |
| 980 JUnitTestCase.assertSame(typeB, interfaces[0]); | |
| 981 JUnitTestCase.assertSame(typeA, interfaces[1]); | |
| 982 } | |
| 983 } | |
| 984 | |
| 985 void test_getInterfaces_parameterized() { | |
| 986 // | |
| 987 // class A<E> | |
| 988 // class B<F> implements A<F> | |
| 989 // | |
| 990 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | |
| 991 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); | |
| 992 InterfaceType typeB = classB.type; | |
| 993 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); | |
| 994 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; | |
| 995 classB.interfaces = <InterfaceType> [typeAF]; | |
| 996 // | |
| 997 // B<I> | |
| 998 // | |
| 999 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | |
| 1000 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); | |
| 1001 typeBI.typeArguments = <DartType> [typeI]; | |
| 1002 List<InterfaceType> interfaces = typeBI.interfaces; | |
| 1003 EngineTestCase.assertLength(1, interfaces); | |
| 1004 InterfaceType result = interfaces[0]; | |
| 1005 JUnitTestCase.assertSame(classA, result.element); | |
| 1006 JUnitTestCase.assertSame(typeI, result.typeArguments[0]); | |
| 1007 } | |
| 1008 | |
| 1009 void test_getLeastUpperBound_directInterfaceCase() { | |
| 1010 // | |
| 1011 // class A | |
| 1012 // class B implements A | |
| 1013 // class C implements B | |
| 1014 // | |
| 1015 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1016 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 1017 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1018 InterfaceType typeA = classA.type; | |
| 1019 InterfaceType typeB = classB.type; | |
| 1020 InterfaceType typeC = classC.type; | |
| 1021 classB.interfaces = <InterfaceType> [typeA]; | |
| 1022 classC.interfaces = <InterfaceType> [typeB]; | |
| 1023 JUnitTestCase.assertEquals(typeB, typeB.getLeastUpperBound(typeC)); | |
| 1024 JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeB)); | |
| 1025 } | |
| 1026 | |
| 1027 void test_getLeastUpperBound_directSubclassCase() { | |
| 1028 // | |
| 1029 // class A | |
| 1030 // class B extends A | |
| 1031 // class C extends B | |
| 1032 // | |
| 1033 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1034 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 1035 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); | |
| 1036 InterfaceType typeB = classB.type; | |
| 1037 InterfaceType typeC = classC.type; | |
| 1038 JUnitTestCase.assertEquals(typeB, typeB.getLeastUpperBound(typeC)); | |
| 1039 JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeB)); | |
| 1040 } | |
| 1041 | |
| 1042 void test_getLeastUpperBound_functionType() { | |
| 1043 DartType interfaceType = ElementFactory.classElement2("A", []).type; | |
| 1044 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(new FunctionElemen
tImpl.forNode(AstFactory.identifier3("f"))); | |
| 1045 JUnitTestCase.assertNull(interfaceType.getLeastUpperBound(functionType)); | |
| 1046 } | |
| 1047 | |
| 1048 void test_getLeastUpperBound_mixinCase() { | |
| 1049 // | |
| 1050 // class A | |
| 1051 // class B extends A | |
| 1052 // class C extends A | |
| 1053 // class D extends B with M, N, O, P | |
| 1054 // | |
| 1055 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1056 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | |
| 1057 ClassElement classC = ElementFactory.classElement("C", classA.type, []); | |
| 1058 ClassElementImpl classD = ElementFactory.classElement("D", classB.type, []); | |
| 1059 InterfaceType typeA = classA.type; | |
| 1060 InterfaceType typeC = classC.type; | |
| 1061 InterfaceType typeD = classD.type; | |
| 1062 classD.mixins = <InterfaceType> [ | |
| 1063 ElementFactory.classElement2("M", []).type, | |
| 1064 ElementFactory.classElement2("N", []).type, | |
| 1065 ElementFactory.classElement2("O", []).type, | |
| 1066 ElementFactory.classElement2("P", []).type]; | |
| 1067 JUnitTestCase.assertEquals(typeA, typeD.getLeastUpperBound(typeC)); | |
| 1068 JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeD)); | |
| 1069 } | |
| 1070 | |
| 1071 void test_getLeastUpperBound_null() { | |
| 1072 DartType interfaceType = ElementFactory.classElement2("A", []).type; | |
| 1073 JUnitTestCase.assertNull(interfaceType.getLeastUpperBound(null)); | |
| 1074 } | |
| 1075 | |
| 1076 void test_getLeastUpperBound_object() { | |
| 1077 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1078 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 1079 InterfaceType typeA = classA.type; | |
| 1080 InterfaceType typeB = classB.type; | |
| 1081 DartType typeObject = typeA.element.supertype; | |
| 1082 // assert that object does not have a super type | |
| 1083 JUnitTestCase.assertNull((typeObject.element as ClassElement).supertype); | |
| 1084 // assert that both A and B have the same super type of Object | |
| 1085 JUnitTestCase.assertEquals(typeObject, typeB.element.supertype); | |
| 1086 // finally, assert that the only least upper bound of A and B is Object | |
| 1087 JUnitTestCase.assertEquals(typeObject, typeA.getLeastUpperBound(typeB)); | |
| 1088 } | |
| 1089 | |
| 1090 void test_getLeastUpperBound_self() { | |
| 1091 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1092 InterfaceType typeA = classA.type; | |
| 1093 JUnitTestCase.assertEquals(typeA, typeA.getLeastUpperBound(typeA)); | |
| 1094 } | |
| 1095 | |
| 1096 void test_getLeastUpperBound_sharedSuperclass1() { | |
| 1097 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1098 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 1099 ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); | |
| 1100 InterfaceType typeA = classA.type; | |
| 1101 InterfaceType typeB = classB.type; | |
| 1102 InterfaceType typeC = classC.type; | |
| 1103 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); | |
| 1104 JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); | |
| 1105 } | |
| 1106 | |
| 1107 void test_getLeastUpperBound_sharedSuperclass2() { | |
| 1108 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1109 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 1110 ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); | |
| 1111 ClassElementImpl classD = ElementFactory.classElement("D", classC.type, []); | |
| 1112 InterfaceType typeA = classA.type; | |
| 1113 InterfaceType typeB = classB.type; | |
| 1114 InterfaceType typeD = classD.type; | |
| 1115 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeD)); | |
| 1116 JUnitTestCase.assertEquals(typeA, typeD.getLeastUpperBound(typeB)); | |
| 1117 } | |
| 1118 | |
| 1119 void test_getLeastUpperBound_sharedSuperclass3() { | |
| 1120 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1121 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 1122 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); | |
| 1123 ClassElementImpl classD = ElementFactory.classElement("D", classB.type, []); | |
| 1124 InterfaceType typeB = classB.type; | |
| 1125 InterfaceType typeC = classC.type; | |
| 1126 InterfaceType typeD = classD.type; | |
| 1127 JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeD)); | |
| 1128 JUnitTestCase.assertEquals(typeB, typeD.getLeastUpperBound(typeC)); | |
| 1129 } | |
| 1130 | |
| 1131 void test_getLeastUpperBound_sharedSuperclass4() { | |
| 1132 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1133 ClassElement classA2 = ElementFactory.classElement2("A2", []); | |
| 1134 ClassElement classA3 = ElementFactory.classElement2("A3", []); | |
| 1135 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 1136 ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); | |
| 1137 InterfaceType typeA = classA.type; | |
| 1138 InterfaceType typeA2 = classA2.type; | |
| 1139 InterfaceType typeA3 = classA3.type; | |
| 1140 InterfaceType typeB = classB.type; | |
| 1141 InterfaceType typeC = classC.type; | |
| 1142 classB.interfaces = <InterfaceType> [typeA2]; | |
| 1143 classC.interfaces = <InterfaceType> [typeA3]; | |
| 1144 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); | |
| 1145 JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); | |
| 1146 } | |
| 1147 | |
| 1148 void test_getLeastUpperBound_sharedSuperinterface1() { | |
| 1149 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1150 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 1151 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1152 InterfaceType typeA = classA.type; | |
| 1153 InterfaceType typeB = classB.type; | |
| 1154 InterfaceType typeC = classC.type; | |
| 1155 classB.interfaces = <InterfaceType> [typeA]; | |
| 1156 classC.interfaces = <InterfaceType> [typeA]; | |
| 1157 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); | |
| 1158 JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); | |
| 1159 } | |
| 1160 | |
| 1161 void test_getLeastUpperBound_sharedSuperinterface2() { | |
| 1162 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1163 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 1164 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1165 ClassElementImpl classD = ElementFactory.classElement2("D", []); | |
| 1166 InterfaceType typeA = classA.type; | |
| 1167 InterfaceType typeB = classB.type; | |
| 1168 InterfaceType typeC = classC.type; | |
| 1169 InterfaceType typeD = classD.type; | |
| 1170 classB.interfaces = <InterfaceType> [typeA]; | |
| 1171 classC.interfaces = <InterfaceType> [typeA]; | |
| 1172 classD.interfaces = <InterfaceType> [typeC]; | |
| 1173 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeD)); | |
| 1174 JUnitTestCase.assertEquals(typeA, typeD.getLeastUpperBound(typeB)); | |
| 1175 } | |
| 1176 | |
| 1177 void test_getLeastUpperBound_sharedSuperinterface3() { | |
| 1178 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1179 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 1180 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1181 ClassElementImpl classD = ElementFactory.classElement2("D", []); | |
| 1182 InterfaceType typeA = classA.type; | |
| 1183 InterfaceType typeB = classB.type; | |
| 1184 InterfaceType typeC = classC.type; | |
| 1185 InterfaceType typeD = classD.type; | |
| 1186 classB.interfaces = <InterfaceType> [typeA]; | |
| 1187 classC.interfaces = <InterfaceType> [typeB]; | |
| 1188 classD.interfaces = <InterfaceType> [typeB]; | |
| 1189 JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeD)); | |
| 1190 JUnitTestCase.assertEquals(typeB, typeD.getLeastUpperBound(typeC)); | |
| 1191 } | |
| 1192 | |
| 1193 void test_getLeastUpperBound_sharedSuperinterface4() { | |
| 1194 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1195 ClassElement classA2 = ElementFactory.classElement2("A2", []); | |
| 1196 ClassElement classA3 = ElementFactory.classElement2("A3", []); | |
| 1197 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 1198 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1199 InterfaceType typeA = classA.type; | |
| 1200 InterfaceType typeA2 = classA2.type; | |
| 1201 InterfaceType typeA3 = classA3.type; | |
| 1202 InterfaceType typeB = classB.type; | |
| 1203 InterfaceType typeC = classC.type; | |
| 1204 classB.interfaces = <InterfaceType> [typeA, typeA2]; | |
| 1205 classC.interfaces = <InterfaceType> [typeA, typeA3]; | |
| 1206 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); | |
| 1207 JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); | |
| 1208 } | |
| 1209 | |
| 1210 void test_getLeastUpperBound_twoComparables() { | |
| 1211 InterfaceType string = _typeProvider.stringType; | |
| 1212 InterfaceType num = _typeProvider.numType; | |
| 1213 JUnitTestCase.assertEquals(_typeProvider.objectType, string.getLeastUpperBou
nd(num)); | |
| 1214 } | |
| 1215 | |
| 1216 void test_getLeastUpperBound_typeParameters_different() { | |
| 1217 // | |
| 1218 // class List<int> | |
| 1219 // class List<double> | |
| 1220 // | |
| 1221 InterfaceType listType = _typeProvider.listType; | |
| 1222 InterfaceType intType = _typeProvider.intType; | |
| 1223 InterfaceType doubleType = _typeProvider.doubleType; | |
| 1224 InterfaceType listOfIntType = listType.substitute4(<DartType> [intType]); | |
| 1225 InterfaceType listOfDoubleType = listType.substitute4(<DartType> [doubleType
]); | |
| 1226 JUnitTestCase.assertEquals(_typeProvider.objectType, listOfIntType.getLeastU
pperBound(listOfDoubleType)); | |
| 1227 } | |
| 1228 | |
| 1229 void test_getLeastUpperBound_typeParameters_same() { | |
| 1230 // | |
| 1231 // List<int> | |
| 1232 // List<int> | |
| 1233 // | |
| 1234 InterfaceType listType = _typeProvider.listType; | |
| 1235 InterfaceType intType = _typeProvider.intType; | |
| 1236 InterfaceType listOfIntType = listType.substitute4(<DartType> [intType]); | |
| 1237 JUnitTestCase.assertEquals(listOfIntType, listOfIntType.getLeastUpperBound(l
istOfIntType)); | |
| 1238 } | |
| 1239 | |
| 1240 void test_getMethod_implemented() { | |
| 1241 // | |
| 1242 // class A { m() {} } | |
| 1243 // | |
| 1244 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1245 String methodName = "m"; | |
| 1246 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
]); | |
| 1247 classA.methods = <MethodElement> [methodM]; | |
| 1248 InterfaceType typeA = classA.type; | |
| 1249 JUnitTestCase.assertSame(methodM, typeA.getMethod(methodName)); | |
| 1250 } | |
| 1251 | |
| 1252 void test_getMethod_parameterized() { | |
| 1253 // | |
| 1254 // class A<E> { E m(E p) {} } | |
| 1255 // | |
| 1256 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | |
| 1257 DartType typeE = classA.type.typeArguments[0]; | |
| 1258 String methodName = "m"; | |
| 1259 MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE,
[typeE]); | |
| 1260 classA.methods = <MethodElement> [methodM]; | |
| 1261 (methodM.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; | |
| 1262 // | |
| 1263 // A<I> | |
| 1264 // | |
| 1265 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | |
| 1266 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); | |
| 1267 typeAI.typeArguments = <DartType> [typeI]; | |
| 1268 MethodElement method = typeAI.getMethod(methodName); | |
| 1269 JUnitTestCase.assertNotNull(method); | |
| 1270 FunctionType methodType = method.type; | |
| 1271 JUnitTestCase.assertSame(typeI, methodType.returnType); | |
| 1272 List<DartType> parameterTypes = methodType.normalParameterTypes; | |
| 1273 EngineTestCase.assertLength(1, parameterTypes); | |
| 1274 JUnitTestCase.assertSame(typeI, parameterTypes[0]); | |
| 1275 } | |
| 1276 | |
| 1277 void test_getMethod_unimplemented() { | |
| 1278 // | |
| 1279 // class A {} | |
| 1280 // | |
| 1281 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1282 InterfaceType typeA = classA.type; | |
| 1283 JUnitTestCase.assertNull(typeA.getMethod("m")); | |
| 1284 } | |
| 1285 | |
| 1286 void test_getMethods() { | |
| 1287 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); | |
| 1288 MethodElementImpl methodOne = ElementFactory.methodElement("one", null, []); | |
| 1289 MethodElementImpl methodTwo = ElementFactory.methodElement("two", null, []); | |
| 1290 typeElement.methods = <MethodElement> [methodOne, methodTwo]; | |
| 1291 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); | |
| 1292 JUnitTestCase.assertEquals(2, type.methods.length); | |
| 1293 } | |
| 1294 | |
| 1295 void test_getMethods_empty() { | |
| 1296 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); | |
| 1297 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); | |
| 1298 JUnitTestCase.assertEquals(0, type.methods.length); | |
| 1299 } | |
| 1300 | |
| 1301 void test_getMixins_nonParameterized() { | |
| 1302 // | |
| 1303 // class C extends Object with A, B | |
| 1304 // | |
| 1305 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1306 InterfaceType typeA = classA.type; | |
| 1307 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 1308 InterfaceType typeB = classB.type; | |
| 1309 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1310 classC.mixins = <InterfaceType> [typeA, typeB]; | |
| 1311 List<InterfaceType> interfaces = classC.type.mixins; | |
| 1312 EngineTestCase.assertLength(2, interfaces); | |
| 1313 if (identical(interfaces[0], typeA)) { | |
| 1314 JUnitTestCase.assertSame(typeB, interfaces[1]); | |
| 1315 } else { | |
| 1316 JUnitTestCase.assertSame(typeB, interfaces[0]); | |
| 1317 JUnitTestCase.assertSame(typeA, interfaces[1]); | |
| 1318 } | |
| 1319 } | |
| 1320 | |
| 1321 void test_getMixins_parameterized() { | |
| 1322 // | |
| 1323 // class A<E> | |
| 1324 // class B<F> extends Object with A<F> | |
| 1325 // | |
| 1326 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | |
| 1327 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); | |
| 1328 InterfaceType typeB = classB.type; | |
| 1329 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); | |
| 1330 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; | |
| 1331 classB.mixins = <InterfaceType> [typeAF]; | |
| 1332 // | |
| 1333 // B<I> | |
| 1334 // | |
| 1335 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | |
| 1336 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); | |
| 1337 typeBI.typeArguments = <DartType> [typeI]; | |
| 1338 List<InterfaceType> interfaces = typeBI.mixins; | |
| 1339 EngineTestCase.assertLength(1, interfaces); | |
| 1340 InterfaceType result = interfaces[0]; | |
| 1341 JUnitTestCase.assertSame(classA, result.element); | |
| 1342 JUnitTestCase.assertSame(typeI, result.typeArguments[0]); | |
| 1343 } | |
| 1344 | |
| 1345 void test_getSetter_implemented() { | |
| 1346 // | |
| 1347 // class A { s() {} } | |
| 1348 // | |
| 1349 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1350 String setterName = "s"; | |
| 1351 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); | |
| 1352 classA.accessors = <PropertyAccessorElement> [setterS]; | |
| 1353 InterfaceType typeA = classA.type; | |
| 1354 JUnitTestCase.assertSame(setterS, typeA.getSetter(setterName)); | |
| 1355 } | |
| 1356 | |
| 1357 void test_getSetter_parameterized() { | |
| 1358 // | |
| 1359 // class A<E> { set s(E p) {} } | |
| 1360 // | |
| 1361 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | |
| 1362 DartType typeE = classA.type.typeArguments[0]; | |
| 1363 String setterName = "s"; | |
| 1364 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, typeE); | |
| 1365 classA.accessors = <PropertyAccessorElement> [setterS]; | |
| 1366 (setterS.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; | |
| 1367 // | |
| 1368 // A<I> | |
| 1369 // | |
| 1370 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | |
| 1371 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); | |
| 1372 typeAI.typeArguments = <DartType> [typeI]; | |
| 1373 PropertyAccessorElement setter = typeAI.getSetter(setterName); | |
| 1374 JUnitTestCase.assertNotNull(setter); | |
| 1375 FunctionType setterType = setter.type; | |
| 1376 List<DartType> parameterTypes = setterType.normalParameterTypes; | |
| 1377 EngineTestCase.assertLength(1, parameterTypes); | |
| 1378 JUnitTestCase.assertSame(typeI, parameterTypes[0]); | |
| 1379 } | |
| 1380 | |
| 1381 void test_getSetter_unimplemented() { | |
| 1382 // | |
| 1383 // class A {} | |
| 1384 // | |
| 1385 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1386 InterfaceType typeA = classA.type; | |
| 1387 JUnitTestCase.assertNull(typeA.getSetter("s")); | |
| 1388 } | |
| 1389 | |
| 1390 void test_getSuperclass_nonParameterized() { | |
| 1391 // | |
| 1392 // class B extends A | |
| 1393 // | |
| 1394 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1395 InterfaceType typeA = classA.type; | |
| 1396 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); | |
| 1397 InterfaceType typeB = classB.type; | |
| 1398 JUnitTestCase.assertSame(typeA, typeB.superclass); | |
| 1399 } | |
| 1400 | |
| 1401 void test_getSuperclass_parameterized() { | |
| 1402 // | |
| 1403 // class A<E> | |
| 1404 // class B<F> extends A<F> | |
| 1405 // | |
| 1406 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | |
| 1407 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); | |
| 1408 InterfaceType typeB = classB.type; | |
| 1409 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); | |
| 1410 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; | |
| 1411 classB.supertype = typeAF; | |
| 1412 // | |
| 1413 // B<I> | |
| 1414 // | |
| 1415 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | |
| 1416 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); | |
| 1417 typeBI.typeArguments = <DartType> [typeI]; | |
| 1418 InterfaceType superclass = typeBI.superclass; | |
| 1419 JUnitTestCase.assertSame(classA, superclass.element); | |
| 1420 JUnitTestCase.assertSame(typeI, superclass.typeArguments[0]); | |
| 1421 } | |
| 1422 | |
| 1423 void test_getTypeArguments_empty() { | |
| 1424 InterfaceType type = ElementFactory.classElement2("A", []).type; | |
| 1425 EngineTestCase.assertLength(0, type.typeArguments); | |
| 1426 } | |
| 1427 | |
| 1428 void test_hashCode() { | |
| 1429 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1430 InterfaceType typeA = classA.type; | |
| 1431 JUnitTestCase.assertFalse(0 == typeA.hashCode); | |
| 1432 } | |
| 1433 | |
| 1434 void test_isAssignableTo_typeVariables() { | |
| 1435 // | |
| 1436 // class A<E> {} | |
| 1437 // class B<F, G> { | |
| 1438 // A<F> af; | |
| 1439 // f (A<G> ag) { | |
| 1440 // af = ag; | |
| 1441 // } | |
| 1442 // } | |
| 1443 // | |
| 1444 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | |
| 1445 ClassElement classB = ElementFactory.classElement2("B", ["F", "G"]); | |
| 1446 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); | |
| 1447 typeAF.typeArguments = <DartType> [classB.typeParameters[0].type]; | |
| 1448 InterfaceTypeImpl typeAG = new InterfaceTypeImpl.con1(classA); | |
| 1449 typeAG.typeArguments = <DartType> [classB.typeParameters[1].type]; | |
| 1450 JUnitTestCase.assertFalse(typeAG.isAssignableTo(typeAF)); | |
| 1451 } | |
| 1452 | |
| 1453 void test_isAssignableTo_void() { | |
| 1454 JUnitTestCase.assertFalse(VoidTypeImpl.instance.isAssignableTo(_typeProvider
.intType)); | |
| 1455 } | |
| 1456 | |
| 1457 void test_isDirectSupertypeOf_extends() { | |
| 1458 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1459 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | |
| 1460 InterfaceType typeA = classA.type; | |
| 1461 InterfaceType typeB = classB.type; | |
| 1462 JUnitTestCase.assertTrue(typeA.isDirectSupertypeOf(typeB)); | |
| 1463 } | |
| 1464 | |
| 1465 void test_isDirectSupertypeOf_false() { | |
| 1466 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1467 ClassElement classB = ElementFactory.classElement2("B", []); | |
| 1468 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | |
| 1469 InterfaceType typeA = classA.type; | |
| 1470 InterfaceType typeC = classC.type; | |
| 1471 JUnitTestCase.assertFalse(typeA.isDirectSupertypeOf(typeC)); | |
| 1472 } | |
| 1473 | |
| 1474 void test_isDirectSupertypeOf_implements() { | |
| 1475 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1476 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 1477 InterfaceType typeA = classA.type; | |
| 1478 InterfaceType typeB = classB.type; | |
| 1479 classB.interfaces = <InterfaceType> [typeA]; | |
| 1480 JUnitTestCase.assertTrue(typeA.isDirectSupertypeOf(typeB)); | |
| 1481 } | |
| 1482 | |
| 1483 void test_isDirectSupertypeOf_with() { | |
| 1484 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1485 ClassElementImpl classB = ElementFactory.classElement2("B", []); | |
| 1486 InterfaceType typeA = classA.type; | |
| 1487 InterfaceType typeB = classB.type; | |
| 1488 classB.mixins = <InterfaceType> [typeA]; | |
| 1489 JUnitTestCase.assertTrue(typeA.isDirectSupertypeOf(typeB)); | |
| 1490 } | |
| 1491 | |
| 1492 void test_isMoreSpecificThan_bottom() { | |
| 1493 DartType type = ElementFactory.classElement2("A", []).type; | |
| 1494 JUnitTestCase.assertTrue(BottomTypeImpl.instance.isMoreSpecificThan(type)); | |
| 1495 } | |
| 1496 | |
| 1497 void test_isMoreSpecificThan_covariance() { | |
| 1498 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | |
| 1499 ClassElement classI = ElementFactory.classElement2("I", []); | |
| 1500 ClassElement classJ = ElementFactory.classElement("J", classI.type, []); | |
| 1501 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); | |
| 1502 InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA); | |
| 1503 typeAI.typeArguments = <DartType> [classI.type]; | |
| 1504 typeAJ.typeArguments = <DartType> [classJ.type]; | |
| 1505 JUnitTestCase.assertTrue(typeAJ.isMoreSpecificThan(typeAI)); | |
| 1506 JUnitTestCase.assertFalse(typeAI.isMoreSpecificThan(typeAJ)); | |
| 1507 } | |
| 1508 | |
| 1509 void test_isMoreSpecificThan_directSupertype() { | |
| 1510 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1511 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | |
| 1512 InterfaceType typeA = classA.type; | |
| 1513 InterfaceType typeB = classB.type; | |
| 1514 JUnitTestCase.assertTrue(typeB.isMoreSpecificThan(typeA)); | |
| 1515 // the opposite test tests a different branch in isMoreSpecificThan() | |
| 1516 JUnitTestCase.assertFalse(typeA.isMoreSpecificThan(typeB)); | |
| 1517 } | |
| 1518 | |
| 1519 void test_isMoreSpecificThan_dynamic() { | |
| 1520 InterfaceType type = ElementFactory.classElement2("A", []).type; | |
| 1521 JUnitTestCase.assertTrue(type.isMoreSpecificThan(DynamicTypeImpl.instance)); | |
| 1522 } | |
| 1523 | |
| 1524 void test_isMoreSpecificThan_self() { | |
| 1525 InterfaceType type = ElementFactory.classElement2("A", []).type; | |
| 1526 JUnitTestCase.assertTrue(type.isMoreSpecificThan(type)); | |
| 1527 } | |
| 1528 | |
| 1529 void test_isMoreSpecificThan_transitive_interface() { | |
| 1530 // | |
| 1531 // class A {} | |
| 1532 // class B extends A {} | |
| 1533 // class C implements B {} | |
| 1534 // | |
| 1535 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1536 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 1537 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1538 classC.interfaces = <InterfaceType> [classB.type]; | |
| 1539 InterfaceType typeA = classA.type; | |
| 1540 InterfaceType typeC = classC.type; | |
| 1541 JUnitTestCase.assertTrue(typeC.isMoreSpecificThan(typeA)); | |
| 1542 } | |
| 1543 | |
| 1544 void test_isMoreSpecificThan_transitive_mixin() { | |
| 1545 // | |
| 1546 // class A {} | |
| 1547 // class B extends A {} | |
| 1548 // class C with B {} | |
| 1549 // | |
| 1550 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1551 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 1552 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1553 classC.mixins = <InterfaceType> [classB.type]; | |
| 1554 InterfaceType typeA = classA.type; | |
| 1555 InterfaceType typeC = classC.type; | |
| 1556 JUnitTestCase.assertTrue(typeC.isMoreSpecificThan(typeA)); | |
| 1557 } | |
| 1558 | |
| 1559 void test_isMoreSpecificThan_transitive_recursive() { | |
| 1560 // | |
| 1561 // class A extends B {} | |
| 1562 // class B extends A {} | |
| 1563 // class C {} | |
| 1564 // | |
| 1565 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1566 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 1567 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1568 InterfaceType typeA = classA.type; | |
| 1569 InterfaceType typeC = classC.type; | |
| 1570 classA.supertype = classB.type; | |
| 1571 JUnitTestCase.assertFalse(typeA.isMoreSpecificThan(typeC)); | |
| 1572 } | |
| 1573 | |
| 1574 void test_isMoreSpecificThan_transitive_superclass() { | |
| 1575 // | |
| 1576 // class A {} | |
| 1577 // class B extends A {} | |
| 1578 // class C extends B {} | |
| 1579 // | |
| 1580 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1581 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | |
| 1582 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | |
| 1583 InterfaceType typeA = classA.type; | |
| 1584 InterfaceType typeC = classC.type; | |
| 1585 JUnitTestCase.assertTrue(typeC.isMoreSpecificThan(typeA)); | |
| 1586 } | |
| 1587 | |
| 1588 void test_isSubtypeOf_directSubtype() { | |
| 1589 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1590 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | |
| 1591 InterfaceType typeA = classA.type; | |
| 1592 InterfaceType typeB = classB.type; | |
| 1593 JUnitTestCase.assertTrue(typeB.isSubtypeOf(typeA)); | |
| 1594 JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeB)); | |
| 1595 } | |
| 1596 | |
| 1597 void test_isSubtypeOf_dynamic() { | |
| 1598 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1599 InterfaceType typeA = classA.type; | |
| 1600 DartType dynamicType = DynamicTypeImpl.instance; | |
| 1601 JUnitTestCase.assertTrue(dynamicType.isSubtypeOf(typeA)); | |
| 1602 JUnitTestCase.assertTrue(typeA.isSubtypeOf(dynamicType)); | |
| 1603 } | |
| 1604 | |
| 1605 void test_isSubtypeOf_function() { | |
| 1606 // | |
| 1607 // void f(String s) {} | |
| 1608 // class A { | |
| 1609 // void call(String s) {} | |
| 1610 // } | |
| 1611 // | |
| 1612 InterfaceType stringType = _typeProvider.stringType; | |
| 1613 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1614 classA.methods = <MethodElement> [ElementFactory.methodElement("call", VoidT
ypeImpl.instance, [stringType])]; | |
| 1615 FunctionType functionType = ElementFactory.functionElement5("f", <ClassEleme
nt> [stringType.element]).type; | |
| 1616 JUnitTestCase.assertTrue(classA.type.isSubtypeOf(functionType)); | |
| 1617 } | |
| 1618 | |
| 1619 void test_isSubtypeOf_interface() { | |
| 1620 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1621 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | |
| 1622 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1623 InterfaceType typeObject = classA.supertype; | 1581 InterfaceType typeObject = classA.supertype; |
| 1624 InterfaceType typeA = classA.type; | 1582 InterfaceType typeA = classA.type; |
| 1625 InterfaceType typeB = classB.type; | 1583 InterfaceType typeB = classB.type; |
| 1626 InterfaceType typeC = classC.type; | 1584 InterfaceType typeC = elementC.type; |
| 1627 classC.interfaces = <InterfaceType> [typeB]; | 1585 elementC.interfaces = <InterfaceType> [typeB]; |
| 1628 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeB)); | 1586 List<InterfaceType> supers = elementC.allSupertypes; |
| 1629 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeObject)); | 1587 List<InterfaceType> types = new List<InterfaceType>(); |
| 1630 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeA)); | 1588 types.addAll(supers); |
| 1631 JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); | 1589 JUnitTestCase.assertTrue(types.contains(typeA)); |
| 1632 } | 1590 JUnitTestCase.assertTrue(types.contains(typeB)); |
| 1633 | 1591 JUnitTestCase.assertTrue(types.contains(typeObject)); |
| 1634 void test_isSubtypeOf_mixins() { | 1592 JUnitTestCase.assertFalse(types.contains(typeC)); |
| 1635 // | 1593 } |
| 1636 // class A {} | 1594 |
| 1637 // class B extends A {} | 1595 void test_getAllSupertypes_mixins() { |
| 1638 // class C with B {} | |
| 1639 // | |
| 1640 ClassElement classA = ElementFactory.classElement2("A", []); | 1596 ClassElement classA = ElementFactory.classElement2("A", []); |
| 1641 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1597 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 1642 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1598 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 1643 InterfaceType typeObject = classA.supertype; | 1599 InterfaceType typeObject = classA.supertype; |
| 1644 InterfaceType typeA = classA.type; | 1600 InterfaceType typeA = classA.type; |
| 1645 InterfaceType typeB = classB.type; | 1601 InterfaceType typeB = classB.type; |
| 1646 InterfaceType typeC = classC.type; | 1602 InterfaceType typeC = classC.type; |
| 1647 classC.mixins = <InterfaceType> [typeB]; | 1603 classC.mixins = <InterfaceType> [typeB]; |
| 1648 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeB)); | 1604 List<InterfaceType> supers = classC.allSupertypes; |
| 1649 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeObject)); | 1605 List<InterfaceType> types = new List<InterfaceType>(); |
| 1650 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeA)); | 1606 types.addAll(supers); |
| 1651 JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); | 1607 JUnitTestCase.assertFalse(types.contains(typeA)); |
| 1652 } | 1608 JUnitTestCase.assertTrue(types.contains(typeB)); |
| 1653 | 1609 JUnitTestCase.assertTrue(types.contains(typeObject)); |
| 1654 void test_isSubtypeOf_object() { | 1610 JUnitTestCase.assertFalse(types.contains(typeC)); |
| 1655 ClassElement classA = ElementFactory.classElement2("A", []); | 1611 } |
| 1656 InterfaceType typeA = classA.type; | 1612 |
| 1657 InterfaceType typeObject = classA.supertype; | 1613 void test_getAllSupertypes_recursive() { |
| 1658 JUnitTestCase.assertTrue(typeA.isSubtypeOf(typeObject)); | |
| 1659 JUnitTestCase.assertFalse(typeObject.isSubtypeOf(typeA)); | |
| 1660 } | |
| 1661 | |
| 1662 void test_isSubtypeOf_self() { | |
| 1663 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 1664 InterfaceType typeA = classA.type; | |
| 1665 JUnitTestCase.assertTrue(typeA.isSubtypeOf(typeA)); | |
| 1666 } | |
| 1667 | |
| 1668 void test_isSubtypeOf_transitive_recursive() { | |
| 1669 // | |
| 1670 // class A extends B {} | |
| 1671 // class B extends A {} | |
| 1672 // class C {} | |
| 1673 // | |
| 1674 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1614 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1675 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 1615 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 1676 ClassElementImpl classC = ElementFactory.classElement2("C", []); | |
| 1677 InterfaceType typeA = classA.type; | |
| 1678 InterfaceType typeC = classC.type; | |
| 1679 classA.supertype = classB.type; | 1616 classA.supertype = classB.type; |
| 1680 JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); | 1617 List<InterfaceType> supers = classB.allSupertypes; |
| 1681 } | 1618 EngineTestCase.assertLength(1, supers); |
| 1682 | 1619 } |
| 1683 void test_isSubtypeOf_transitive_superclass() { | 1620 |
| 1684 ClassElement classA = ElementFactory.classElement2("A", []); | 1621 void test_getField() { |
| 1685 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1622 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1686 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | 1623 String fieldName = "f"; |
| 1687 InterfaceType typeA = classA.type; | 1624 FieldElementImpl field = ElementFactory.fieldElement(fieldName, false, false
, false, null); |
| 1688 InterfaceType typeC = classC.type; | 1625 classA.fields = <FieldElement> [field]; |
| 1689 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeA)); | 1626 JUnitTestCase.assertSame(field, classA.getField(fieldName)); |
| 1690 JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); | 1627 // no such field |
| 1691 } | 1628 JUnitTestCase.assertSame(null, classA.getField("noSuchField")); |
| 1692 | 1629 } |
| 1693 void test_isSubtypeOf_typeArguments() { | 1630 |
| 1694 DartType dynamicType = DynamicTypeImpl.instance; | 1631 void test_getMethod_declared() { |
| 1695 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 1632 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1696 ClassElement classI = ElementFactory.classElement2("I", []); | 1633 String methodName = "m"; |
| 1697 ClassElement classJ = ElementFactory.classElement("J", classI.type, []); | 1634 MethodElement method = ElementFactory.methodElement(methodName, null, []); |
| 1698 ClassElement classK = ElementFactory.classElement2("K", []); | 1635 classA.methods = <MethodElement> [method]; |
| 1699 InterfaceType typeA = classA.type; | 1636 JUnitTestCase.assertSame(method, classA.getMethod(methodName)); |
| 1700 InterfaceType typeA_dynamic = typeA.substitute4(<DartType> [dynamicType]); | 1637 } |
| 1701 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); | 1638 |
| 1702 InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA); | 1639 void test_getMethod_undeclared() { |
| 1703 InterfaceTypeImpl typeAK = new InterfaceTypeImpl.con1(classA); | 1640 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1704 typeAI.typeArguments = <DartType> [classI.type]; | 1641 String methodName = "m"; |
| 1705 typeAJ.typeArguments = <DartType> [classJ.type]; | 1642 MethodElement method = ElementFactory.methodElement(methodName, null, []); |
| 1706 typeAK.typeArguments = <DartType> [classK.type]; | 1643 classA.methods = <MethodElement> [method]; |
| 1707 // A<J> <: A<I> since J <: I | 1644 JUnitTestCase.assertNull(classA.getMethod("${methodName}x")); |
| 1708 JUnitTestCase.assertTrue(typeAJ.isSubtypeOf(typeAI)); | 1645 } |
| 1709 JUnitTestCase.assertFalse(typeAI.isSubtypeOf(typeAJ)); | 1646 |
| 1710 // A<I> <: A<I> since I <: I | 1647 void test_getNode() { |
| 1711 JUnitTestCase.assertTrue(typeAI.isSubtypeOf(typeAI)); | 1648 AnalysisContextHelper contextHelper = new AnalysisContextHelper(); |
| 1712 // A <: A<I> and A <: A<J> | 1649 AnalysisContext context = contextHelper.context; |
| 1713 JUnitTestCase.assertTrue(typeA_dynamic.isSubtypeOf(typeAI)); | 1650 Source source = contextHelper.addSource("/test.dart", EngineTestCase.createS
ource(["class A {}", "class B {}"])); |
| 1714 JUnitTestCase.assertTrue(typeA_dynamic.isSubtypeOf(typeAJ)); | 1651 // prepare CompilationUnitElement |
| 1715 // A<I> <: A and A<J> <: A | 1652 LibraryElement libraryElement = context.computeLibraryElement(source); |
| 1716 JUnitTestCase.assertTrue(typeAI.isSubtypeOf(typeA_dynamic)); | 1653 CompilationUnitElement unitElement = libraryElement.definingCompilationUnit; |
| 1717 JUnitTestCase.assertTrue(typeAJ.isSubtypeOf(typeA_dynamic)); | 1654 // A |
| 1718 // A<I> !<: A<K> and A<K> !<: A<I> | 1655 { |
| 1719 JUnitTestCase.assertFalse(typeAI.isSubtypeOf(typeAK)); | 1656 ClassElement elementA = unitElement.getType("A"); |
| 1720 JUnitTestCase.assertFalse(typeAK.isSubtypeOf(typeAI)); | 1657 ClassDeclaration nodeA = elementA.node; |
| 1721 } | 1658 JUnitTestCase.assertNotNull(nodeA); |
| 1722 | 1659 JUnitTestCase.assertEquals("A", nodeA.name.name); |
| 1723 void test_isSupertypeOf_directSupertype() { | 1660 JUnitTestCase.assertSame(elementA, nodeA.element); |
| 1724 ClassElement classA = ElementFactory.classElement2("A", []); | 1661 } |
| 1725 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1662 // B |
| 1726 InterfaceType typeA = classA.type; | 1663 { |
| 1727 InterfaceType typeB = classB.type; | 1664 ClassElement elementB = unitElement.getType("B"); |
| 1728 JUnitTestCase.assertFalse(typeB.isSupertypeOf(typeA)); | 1665 ClassDeclaration nodeB = elementB.node; |
| 1729 JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeB)); | 1666 JUnitTestCase.assertNotNull(nodeB); |
| 1730 } | 1667 JUnitTestCase.assertEquals("B", nodeB.name.name); |
| 1731 | 1668 JUnitTestCase.assertSame(elementB, nodeB.element); |
| 1732 void test_isSupertypeOf_dynamic() { | 1669 } |
| 1733 ClassElement classA = ElementFactory.classElement2("A", []); | 1670 } |
| 1734 InterfaceType typeA = classA.type; | 1671 |
| 1735 DartType dynamicType = DynamicTypeImpl.instance; | 1672 void test_hasNonFinalField_false_const() { |
| 1736 JUnitTestCase.assertTrue(dynamicType.isSupertypeOf(typeA)); | 1673 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1737 JUnitTestCase.assertTrue(typeA.isSupertypeOf(dynamicType)); | 1674 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, true, classA.type)]; |
| 1738 } | 1675 JUnitTestCase.assertFalse(classA.hasNonFinalField); |
| 1739 | 1676 } |
| 1740 void test_isSupertypeOf_indirectSupertype() { | 1677 |
| 1741 ClassElement classA = ElementFactory.classElement2("A", []); | 1678 void test_hasNonFinalField_false_final() { |
| 1742 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1679 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1743 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | 1680 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, true
, false, classA.type)]; |
| 1744 InterfaceType typeA = classA.type; | 1681 JUnitTestCase.assertFalse(classA.hasNonFinalField); |
| 1745 InterfaceType typeC = classC.type; | 1682 } |
| 1746 JUnitTestCase.assertFalse(typeC.isSupertypeOf(typeA)); | 1683 |
| 1747 JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeC)); | 1684 void test_hasNonFinalField_false_recursive() { |
| 1748 } | 1685 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1749 | 1686 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 1750 void test_isSupertypeOf_interface() { | 1687 classA.supertype = classB.type; |
| 1751 ClassElement classA = ElementFactory.classElement2("A", []); | 1688 JUnitTestCase.assertFalse(classA.hasNonFinalField); |
| 1752 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1689 } |
| 1753 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1690 |
| 1754 InterfaceType typeObject = classA.supertype; | 1691 void test_hasNonFinalField_true_immediate() { |
| 1755 InterfaceType typeA = classA.type; | 1692 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1756 InterfaceType typeB = classB.type; | 1693 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, false, classA.type)]; |
| 1757 InterfaceType typeC = classC.type; | 1694 JUnitTestCase.assertTrue(classA.hasNonFinalField); |
| 1758 classC.interfaces = <InterfaceType> [typeB]; | 1695 } |
| 1759 JUnitTestCase.assertTrue(typeB.isSupertypeOf(typeC)); | 1696 |
| 1760 JUnitTestCase.assertTrue(typeObject.isSupertypeOf(typeC)); | 1697 void test_hasNonFinalField_true_inherited() { |
| 1761 JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeC)); | 1698 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1762 JUnitTestCase.assertFalse(typeC.isSupertypeOf(typeA)); | 1699 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 1763 } | 1700 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, false, classA.type)]; |
| 1764 | 1701 JUnitTestCase.assertTrue(classB.hasNonFinalField); |
| 1765 void test_isSupertypeOf_mixins() { | 1702 } |
| 1766 // | 1703 |
| 1767 // class A {} | 1704 void test_hasStaticMember_false_empty() { |
| 1768 // class B extends A {} | 1705 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1769 // class C with B {} | 1706 // no members |
| 1770 // | 1707 JUnitTestCase.assertFalse(classA.hasStaticMember); |
| 1771 ClassElement classA = ElementFactory.classElement2("A", []); | 1708 } |
| 1772 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1709 |
| 1773 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1710 void test_hasStaticMember_false_instanceMethod() { |
| 1774 InterfaceType typeObject = classA.supertype; | 1711 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1775 InterfaceType typeA = classA.type; | 1712 MethodElement method = ElementFactory.methodElement("foo", null, []); |
| 1776 InterfaceType typeB = classB.type; | 1713 classA.methods = <MethodElement> [method]; |
| 1777 InterfaceType typeC = classC.type; | 1714 JUnitTestCase.assertFalse(classA.hasStaticMember); |
| 1778 classC.mixins = <InterfaceType> [typeB]; | 1715 } |
| 1779 JUnitTestCase.assertTrue(typeB.isSupertypeOf(typeC)); | 1716 |
| 1780 JUnitTestCase.assertTrue(typeObject.isSupertypeOf(typeC)); | 1717 void test_hasStaticMember_instanceGetter() { |
| 1781 JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeC)); | 1718 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1782 JUnitTestCase.assertFalse(typeC.isSupertypeOf(typeA)); | 1719 PropertyAccessorElement getter = ElementFactory.getterElement("foo", false,
null); |
| 1783 } | 1720 classA.accessors = <PropertyAccessorElement> [getter]; |
| 1784 | 1721 JUnitTestCase.assertFalse(classA.hasStaticMember); |
| 1785 void test_isSupertypeOf_object() { | 1722 } |
| 1786 ClassElement classA = ElementFactory.classElement2("A", []); | 1723 |
| 1787 InterfaceType typeA = classA.type; | 1724 void test_hasStaticMember_true_getter() { |
| 1788 InterfaceType typeObject = classA.supertype; | 1725 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1789 JUnitTestCase.assertFalse(typeA.isSupertypeOf(typeObject)); | 1726 PropertyAccessorElementImpl getter = ElementFactory.getterElement("foo", fal
se, null); |
| 1790 JUnitTestCase.assertTrue(typeObject.isSupertypeOf(typeA)); | 1727 classA.accessors = <PropertyAccessorElement> [getter]; |
| 1791 } | 1728 // "foo" is static |
| 1792 | 1729 getter.static = true; |
| 1793 void test_isSupertypeOf_self() { | 1730 JUnitTestCase.assertTrue(classA.hasStaticMember); |
| 1794 ClassElement classA = ElementFactory.classElement2("A", []); | 1731 } |
| 1795 InterfaceType typeA = classA.type; | 1732 |
| 1796 JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeA)); | 1733 void test_hasStaticMember_true_method() { |
| 1797 } | 1734 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1798 | 1735 MethodElementImpl method = ElementFactory.methodElement("foo", null, []); |
| 1799 void test_lookUpGetter_implemented() { | 1736 classA.methods = <MethodElement> [method]; |
| 1800 // | 1737 // "foo" is static |
| 1801 // class A { g {} } | 1738 method.static = true; |
| 1802 // | 1739 JUnitTestCase.assertTrue(classA.hasStaticMember); |
| 1740 } |
| 1741 |
| 1742 void test_hasStaticMember_true_setter() { |
| 1743 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1744 PropertyAccessorElementImpl setter = ElementFactory.setterElement("foo", fal
se, null); |
| 1745 classA.accessors = <PropertyAccessorElement> [setter]; |
| 1746 // "foo" is static |
| 1747 setter.static = true; |
| 1748 JUnitTestCase.assertTrue(classA.hasStaticMember); |
| 1749 } |
| 1750 |
| 1751 void test_lookUpGetter_declared() { |
| 1752 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1803 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1753 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1804 String getterName = "g"; | 1754 String getterName = "g"; |
| 1805 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); | 1755 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, null); |
| 1806 classA.accessors = <PropertyAccessorElement> [getterG]; | 1756 classA.accessors = <PropertyAccessorElement> [getter]; |
| 1807 InterfaceType typeA = classA.type; | 1757 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
| 1758 JUnitTestCase.assertSame(getter, classA.lookUpGetter(getterName, library)); |
| 1759 } |
| 1760 |
| 1761 void test_lookUpGetter_inherited() { |
| 1808 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 1762 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1809 CompilationUnitElement unit = library.definingCompilationUnit; | |
| 1810 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | |
| 1811 JUnitTestCase.assertSame(getterG, typeA.lookUpGetter(getterName, library)); | |
| 1812 } | |
| 1813 | |
| 1814 void test_lookUpGetter_inherited() { | |
| 1815 // | |
| 1816 // class A { g {} } | |
| 1817 // class B extends A {} | |
| 1818 // | |
| 1819 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1763 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1820 String getterName = "g"; | 1764 String getterName = "g"; |
| 1821 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); | 1765 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, null); |
| 1822 classA.accessors = <PropertyAccessorElement> [getterG]; | 1766 classA.accessors = <PropertyAccessorElement> [getter]; |
| 1823 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 1767 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 1824 InterfaceType typeB = classB.type; | 1768 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
| 1769 JUnitTestCase.assertSame(getter, classB.lookUpGetter(getterName, library)); |
| 1770 } |
| 1771 |
| 1772 void test_lookUpGetter_undeclared() { |
| 1825 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 1773 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1826 CompilationUnitElement unit = library.definingCompilationUnit; | 1774 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1827 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 1775 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
| 1828 JUnitTestCase.assertSame(getterG, typeB.lookUpGetter(getterName, library)); | 1776 JUnitTestCase.assertNull(classA.lookUpGetter("g", library)); |
| 1829 } | 1777 } |
| 1830 | 1778 |
| 1831 void test_lookUpGetter_recursive() { | 1779 void test_lookUpGetter_undeclared_recursive() { |
| 1832 // | 1780 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1833 // class A extends B {} | 1781 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1834 // class B extends A {} | 1782 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 1835 // | |
| 1836 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1837 InterfaceType typeA = classA.type; | |
| 1838 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); | |
| 1839 classA.supertype = classB.type; | 1783 classA.supertype = classB.type; |
| 1784 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
| 1785 JUnitTestCase.assertNull(classA.lookUpGetter("g", library)); |
| 1786 } |
| 1787 |
| 1788 void test_lookUpMethod_declared() { |
| 1840 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 1789 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1841 CompilationUnitElement unit = library.definingCompilationUnit; | 1790 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1842 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 1791 String methodName = "m"; |
| 1843 JUnitTestCase.assertNull(typeA.lookUpGetter("g", library)); | 1792 MethodElement method = ElementFactory.methodElement(methodName, null, []); |
| 1844 } | 1793 classA.methods = <MethodElement> [method]; |
| 1845 | 1794 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
| 1846 void test_lookUpGetter_unimplemented() { | 1795 JUnitTestCase.assertSame(method, classA.lookUpMethod(methodName, library)); |
| 1847 // | 1796 } |
| 1848 // class A {} | 1797 |
| 1849 // | 1798 void test_lookUpMethod_inherited() { |
| 1850 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1851 InterfaceType typeA = classA.type; | |
| 1852 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 1799 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1853 CompilationUnitElement unit = library.definingCompilationUnit; | |
| 1854 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | |
| 1855 JUnitTestCase.assertNull(typeA.lookUpGetter("g", library)); | |
| 1856 } | |
| 1857 | |
| 1858 void test_lookUpMethod_implemented() { | |
| 1859 // | |
| 1860 // class A { m() {} } | |
| 1861 // | |
| 1862 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1800 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1863 String methodName = "m"; | 1801 String methodName = "m"; |
| 1864 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
]); | 1802 MethodElement method = ElementFactory.methodElement(methodName, null, []); |
| 1865 classA.methods = <MethodElement> [methodM]; | 1803 classA.methods = <MethodElement> [method]; |
| 1866 InterfaceType typeA = classA.type; | 1804 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 1805 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
| 1806 JUnitTestCase.assertSame(method, classB.lookUpMethod(methodName, library)); |
| 1807 } |
| 1808 |
| 1809 void test_lookUpMethod_undeclared() { |
| 1867 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 1810 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1868 CompilationUnitElement unit = library.definingCompilationUnit; | 1811 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1869 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 1812 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
| 1870 JUnitTestCase.assertSame(methodM, typeA.lookUpMethod(methodName, library)); | 1813 JUnitTestCase.assertNull(classA.lookUpMethod("m", library)); |
| 1871 } | 1814 } |
| 1872 | 1815 |
| 1873 void test_lookUpMethod_inherited() { | 1816 void test_lookUpMethod_undeclared_recursive() { |
| 1874 // | 1817 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1875 // class A { m() {} } | 1818 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1876 // class B extends A {} | |
| 1877 // | |
| 1878 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1879 String methodName = "m"; | |
| 1880 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
]); | |
| 1881 classA.methods = <MethodElement> [methodM]; | |
| 1882 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 1819 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 1883 InterfaceType typeB = classB.type; | 1820 classA.supertype = classB.type; |
| 1821 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
| 1822 JUnitTestCase.assertNull(classA.lookUpMethod("m", library)); |
| 1823 } |
| 1824 |
| 1825 void test_lookUpSetter_declared() { |
| 1884 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 1826 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1885 CompilationUnitElement unit = library.definingCompilationUnit; | 1827 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1886 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 1828 String setterName = "s"; |
| 1887 JUnitTestCase.assertSame(methodM, typeB.lookUpMethod(methodName, library)); | 1829 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); |
| 1888 } | 1830 classA.accessors = <PropertyAccessorElement> [setter]; |
| 1889 | 1831 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
| 1890 void test_lookUpMethod_parameterized() { | 1832 JUnitTestCase.assertSame(setter, classA.lookUpSetter(setterName, library)); |
| 1891 // | 1833 } |
| 1892 // class A<E> { E m(E p) {} } | 1834 |
| 1893 // class B<F> extends A<F> {} | 1835 void test_lookUpSetter_inherited() { |
| 1894 // | |
| 1895 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | |
| 1896 DartType typeE = classA.type.typeArguments[0]; | |
| 1897 String methodName = "m"; | |
| 1898 MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE,
[typeE]); | |
| 1899 classA.methods = <MethodElement> [methodM]; | |
| 1900 (methodM.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; | |
| 1901 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); | |
| 1902 InterfaceType typeB = classB.type; | |
| 1903 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); | |
| 1904 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; | |
| 1905 classB.supertype = typeAF; | |
| 1906 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 1836 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1907 CompilationUnitElement unit = library.definingCompilationUnit; | 1837 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1908 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 1838 String setterName = "s"; |
| 1909 // | 1839 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); |
| 1910 // B<I> | 1840 classA.accessors = <PropertyAccessorElement> [setter]; |
| 1911 // | 1841 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 1912 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | 1842 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
| 1913 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); | 1843 JUnitTestCase.assertSame(setter, classB.lookUpSetter(setterName, library)); |
| 1914 typeBI.typeArguments = <DartType> [typeI]; | 1844 } |
| 1915 MethodElement method = typeBI.lookUpMethod(methodName, library); | 1845 |
| 1916 JUnitTestCase.assertNotNull(method); | 1846 void test_lookUpSetter_undeclared() { |
| 1917 FunctionType methodType = method.type; | 1847 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1918 JUnitTestCase.assertSame(typeI, methodType.returnType); | 1848 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1919 List<DartType> parameterTypes = methodType.normalParameterTypes; | 1849 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
| 1920 EngineTestCase.assertLength(1, parameterTypes); | 1850 JUnitTestCase.assertNull(classA.lookUpSetter("s", library)); |
| 1921 JUnitTestCase.assertSame(typeI, parameterTypes[0]); | 1851 } |
| 1922 } | 1852 |
| 1923 | 1853 void test_lookUpSetter_undeclared_recursive() { |
| 1924 void test_lookUpMethod_recursive() { | 1854 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1925 // | 1855 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 1926 // class A extends B {} | 1856 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 1927 // class B extends A {} | |
| 1928 // | |
| 1929 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 1930 InterfaceType typeA = classA.type; | |
| 1931 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); | |
| 1932 classA.supertype = classB.type; | 1857 classA.supertype = classB.type; |
| 1858 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
| 1859 JUnitTestCase.assertNull(classA.lookUpSetter("s", library)); |
| 1860 } |
| 1861 |
| 1862 static dartSuite() { |
| 1863 _ut.group('ClassElementImplTest', () { |
| 1864 _ut.test('test_getAllSupertypes_interface', () { |
| 1865 final __test = new ClassElementImplTest(); |
| 1866 runJUnitTest(__test, __test.test_getAllSupertypes_interface); |
| 1867 }); |
| 1868 _ut.test('test_getAllSupertypes_mixins', () { |
| 1869 final __test = new ClassElementImplTest(); |
| 1870 runJUnitTest(__test, __test.test_getAllSupertypes_mixins); |
| 1871 }); |
| 1872 _ut.test('test_getAllSupertypes_recursive', () { |
| 1873 final __test = new ClassElementImplTest(); |
| 1874 runJUnitTest(__test, __test.test_getAllSupertypes_recursive); |
| 1875 }); |
| 1876 _ut.test('test_getField', () { |
| 1877 final __test = new ClassElementImplTest(); |
| 1878 runJUnitTest(__test, __test.test_getField); |
| 1879 }); |
| 1880 _ut.test('test_getMethod_declared', () { |
| 1881 final __test = new ClassElementImplTest(); |
| 1882 runJUnitTest(__test, __test.test_getMethod_declared); |
| 1883 }); |
| 1884 _ut.test('test_getMethod_undeclared', () { |
| 1885 final __test = new ClassElementImplTest(); |
| 1886 runJUnitTest(__test, __test.test_getMethod_undeclared); |
| 1887 }); |
| 1888 _ut.test('test_getNode', () { |
| 1889 final __test = new ClassElementImplTest(); |
| 1890 runJUnitTest(__test, __test.test_getNode); |
| 1891 }); |
| 1892 _ut.test('test_hasNonFinalField_false_const', () { |
| 1893 final __test = new ClassElementImplTest(); |
| 1894 runJUnitTest(__test, __test.test_hasNonFinalField_false_const); |
| 1895 }); |
| 1896 _ut.test('test_hasNonFinalField_false_final', () { |
| 1897 final __test = new ClassElementImplTest(); |
| 1898 runJUnitTest(__test, __test.test_hasNonFinalField_false_final); |
| 1899 }); |
| 1900 _ut.test('test_hasNonFinalField_false_recursive', () { |
| 1901 final __test = new ClassElementImplTest(); |
| 1902 runJUnitTest(__test, __test.test_hasNonFinalField_false_recursive); |
| 1903 }); |
| 1904 _ut.test('test_hasNonFinalField_true_immediate', () { |
| 1905 final __test = new ClassElementImplTest(); |
| 1906 runJUnitTest(__test, __test.test_hasNonFinalField_true_immediate); |
| 1907 }); |
| 1908 _ut.test('test_hasNonFinalField_true_inherited', () { |
| 1909 final __test = new ClassElementImplTest(); |
| 1910 runJUnitTest(__test, __test.test_hasNonFinalField_true_inherited); |
| 1911 }); |
| 1912 _ut.test('test_hasStaticMember_false_empty', () { |
| 1913 final __test = new ClassElementImplTest(); |
| 1914 runJUnitTest(__test, __test.test_hasStaticMember_false_empty); |
| 1915 }); |
| 1916 _ut.test('test_hasStaticMember_false_instanceMethod', () { |
| 1917 final __test = new ClassElementImplTest(); |
| 1918 runJUnitTest(__test, __test.test_hasStaticMember_false_instanceMethod); |
| 1919 }); |
| 1920 _ut.test('test_hasStaticMember_instanceGetter', () { |
| 1921 final __test = new ClassElementImplTest(); |
| 1922 runJUnitTest(__test, __test.test_hasStaticMember_instanceGetter); |
| 1923 }); |
| 1924 _ut.test('test_hasStaticMember_true_getter', () { |
| 1925 final __test = new ClassElementImplTest(); |
| 1926 runJUnitTest(__test, __test.test_hasStaticMember_true_getter); |
| 1927 }); |
| 1928 _ut.test('test_hasStaticMember_true_method', () { |
| 1929 final __test = new ClassElementImplTest(); |
| 1930 runJUnitTest(__test, __test.test_hasStaticMember_true_method); |
| 1931 }); |
| 1932 _ut.test('test_hasStaticMember_true_setter', () { |
| 1933 final __test = new ClassElementImplTest(); |
| 1934 runJUnitTest(__test, __test.test_hasStaticMember_true_setter); |
| 1935 }); |
| 1936 _ut.test('test_lookUpGetter_declared', () { |
| 1937 final __test = new ClassElementImplTest(); |
| 1938 runJUnitTest(__test, __test.test_lookUpGetter_declared); |
| 1939 }); |
| 1940 _ut.test('test_lookUpGetter_inherited', () { |
| 1941 final __test = new ClassElementImplTest(); |
| 1942 runJUnitTest(__test, __test.test_lookUpGetter_inherited); |
| 1943 }); |
| 1944 _ut.test('test_lookUpGetter_undeclared', () { |
| 1945 final __test = new ClassElementImplTest(); |
| 1946 runJUnitTest(__test, __test.test_lookUpGetter_undeclared); |
| 1947 }); |
| 1948 _ut.test('test_lookUpGetter_undeclared_recursive', () { |
| 1949 final __test = new ClassElementImplTest(); |
| 1950 runJUnitTest(__test, __test.test_lookUpGetter_undeclared_recursive); |
| 1951 }); |
| 1952 _ut.test('test_lookUpMethod_declared', () { |
| 1953 final __test = new ClassElementImplTest(); |
| 1954 runJUnitTest(__test, __test.test_lookUpMethod_declared); |
| 1955 }); |
| 1956 _ut.test('test_lookUpMethod_inherited', () { |
| 1957 final __test = new ClassElementImplTest(); |
| 1958 runJUnitTest(__test, __test.test_lookUpMethod_inherited); |
| 1959 }); |
| 1960 _ut.test('test_lookUpMethod_undeclared', () { |
| 1961 final __test = new ClassElementImplTest(); |
| 1962 runJUnitTest(__test, __test.test_lookUpMethod_undeclared); |
| 1963 }); |
| 1964 _ut.test('test_lookUpMethod_undeclared_recursive', () { |
| 1965 final __test = new ClassElementImplTest(); |
| 1966 runJUnitTest(__test, __test.test_lookUpMethod_undeclared_recursive); |
| 1967 }); |
| 1968 _ut.test('test_lookUpSetter_declared', () { |
| 1969 final __test = new ClassElementImplTest(); |
| 1970 runJUnitTest(__test, __test.test_lookUpSetter_declared); |
| 1971 }); |
| 1972 _ut.test('test_lookUpSetter_inherited', () { |
| 1973 final __test = new ClassElementImplTest(); |
| 1974 runJUnitTest(__test, __test.test_lookUpSetter_inherited); |
| 1975 }); |
| 1976 _ut.test('test_lookUpSetter_undeclared', () { |
| 1977 final __test = new ClassElementImplTest(); |
| 1978 runJUnitTest(__test, __test.test_lookUpSetter_undeclared); |
| 1979 }); |
| 1980 _ut.test('test_lookUpSetter_undeclared_recursive', () { |
| 1981 final __test = new ClassElementImplTest(); |
| 1982 runJUnitTest(__test, __test.test_lookUpSetter_undeclared_recursive); |
| 1983 }); |
| 1984 }); |
| 1985 } |
| 1986 } |
| 1987 |
| 1988 class AngularPropertyKindTest extends EngineTestCase { |
| 1989 void test_ATTR() { |
| 1990 AngularPropertyKind kind = AngularPropertyKind.ATTR; |
| 1991 JUnitTestCase.assertFalse(kind.callsGetter()); |
| 1992 JUnitTestCase.assertTrue(kind.callsSetter()); |
| 1993 } |
| 1994 |
| 1995 void test_CALLBACK() { |
| 1996 AngularPropertyKind kind = AngularPropertyKind.CALLBACK; |
| 1997 JUnitTestCase.assertFalse(kind.callsGetter()); |
| 1998 JUnitTestCase.assertTrue(kind.callsSetter()); |
| 1999 } |
| 2000 |
| 2001 void test_ONE_WAY() { |
| 2002 AngularPropertyKind kind = AngularPropertyKind.ONE_WAY; |
| 2003 JUnitTestCase.assertFalse(kind.callsGetter()); |
| 2004 JUnitTestCase.assertTrue(kind.callsSetter()); |
| 2005 } |
| 2006 |
| 2007 void test_ONE_WAY_ONE_TIME() { |
| 2008 AngularPropertyKind kind = AngularPropertyKind.ONE_WAY_ONE_TIME; |
| 2009 JUnitTestCase.assertFalse(kind.callsGetter()); |
| 2010 JUnitTestCase.assertTrue(kind.callsSetter()); |
| 2011 } |
| 2012 |
| 2013 void test_TWO_WAY() { |
| 2014 AngularPropertyKind kind = AngularPropertyKind.TWO_WAY; |
| 2015 JUnitTestCase.assertTrue(kind.callsGetter()); |
| 2016 JUnitTestCase.assertTrue(kind.callsSetter()); |
| 2017 } |
| 2018 |
| 2019 static dartSuite() { |
| 2020 _ut.group('AngularPropertyKindTest', () { |
| 2021 _ut.test('test_ATTR', () { |
| 2022 final __test = new AngularPropertyKindTest(); |
| 2023 runJUnitTest(__test, __test.test_ATTR); |
| 2024 }); |
| 2025 _ut.test('test_CALLBACK', () { |
| 2026 final __test = new AngularPropertyKindTest(); |
| 2027 runJUnitTest(__test, __test.test_CALLBACK); |
| 2028 }); |
| 2029 _ut.test('test_ONE_WAY', () { |
| 2030 final __test = new AngularPropertyKindTest(); |
| 2031 runJUnitTest(__test, __test.test_ONE_WAY); |
| 2032 }); |
| 2033 _ut.test('test_ONE_WAY_ONE_TIME', () { |
| 2034 final __test = new AngularPropertyKindTest(); |
| 2035 runJUnitTest(__test, __test.test_ONE_WAY_ONE_TIME); |
| 2036 }); |
| 2037 _ut.test('test_TWO_WAY', () { |
| 2038 final __test = new AngularPropertyKindTest(); |
| 2039 runJUnitTest(__test, __test.test_TWO_WAY); |
| 2040 }); |
| 2041 }); |
| 2042 } |
| 2043 } |
| 2044 |
| 2045 class ElementImplTest extends EngineTestCase { |
| 2046 void test_equals() { |
| 1933 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2047 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1934 CompilationUnitElement unit = library.definingCompilationUnit; | 2048 ClassElementImpl classElement = ElementFactory.classElement2("C", []); |
| 1935 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 2049 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; |
| 1936 JUnitTestCase.assertNull(typeA.lookUpMethod("m", library)); | 2050 FieldElement field = ElementFactory.fieldElement("next", false, false, false
, classElement.type); |
| 1937 } | 2051 classElement.fields = <FieldElement> [field]; |
| 1938 | 2052 JUnitTestCase.assertTrue(field == field); |
| 1939 void test_lookUpMethod_unimplemented() { | 2053 JUnitTestCase.assertFalse(field == field.getter); |
| 1940 // | 2054 JUnitTestCase.assertFalse(field == field.setter); |
| 1941 // class A {} | 2055 JUnitTestCase.assertFalse(field.getter == field.setter); |
| 1942 // | 2056 } |
| 1943 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2057 |
| 1944 InterfaceType typeA = classA.type; | 2058 void test_isAccessibleIn_private_differentLibrary() { |
| 2059 AnalysisContextImpl context = createAnalysisContext(); |
| 2060 LibraryElementImpl library1 = ElementFactory.library(context, "lib1"); |
| 2061 ClassElement classElement = ElementFactory.classElement2("_C", []); |
| 2062 (library1.definingCompilationUnit as CompilationUnitElementImpl).types = <Cl
assElement> [classElement]; |
| 2063 LibraryElementImpl library2 = ElementFactory.library(context, "lib2"); |
| 2064 JUnitTestCase.assertFalse(classElement.isAccessibleIn(library2)); |
| 2065 } |
| 2066 |
| 2067 void test_isAccessibleIn_private_sameLibrary() { |
| 1945 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2068 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1946 CompilationUnitElement unit = library.definingCompilationUnit; | 2069 ClassElement classElement = ElementFactory.classElement2("_C", []); |
| 1947 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 2070 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; |
| 1948 JUnitTestCase.assertNull(typeA.lookUpMethod("m", library)); | 2071 JUnitTestCase.assertTrue(classElement.isAccessibleIn(library)); |
| 1949 } | 2072 } |
| 1950 | 2073 |
| 1951 void test_lookUpSetter_implemented() { | 2074 void test_isAccessibleIn_public_differentLibrary() { |
| 1952 // | 2075 AnalysisContextImpl context = createAnalysisContext(); |
| 1953 // class A { s(x) {} } | 2076 LibraryElementImpl library1 = ElementFactory.library(context, "lib1"); |
| 1954 // | 2077 ClassElement classElement = ElementFactory.classElement2("C", []); |
| 1955 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2078 (library1.definingCompilationUnit as CompilationUnitElementImpl).types = <Cl
assElement> [classElement]; |
| 1956 String setterName = "s"; | 2079 LibraryElementImpl library2 = ElementFactory.library(context, "lib2"); |
| 1957 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); | 2080 JUnitTestCase.assertTrue(classElement.isAccessibleIn(library2)); |
| 1958 classA.accessors = <PropertyAccessorElement> [setterS]; | 2081 } |
| 1959 InterfaceType typeA = classA.type; | 2082 |
| 2083 void test_isAccessibleIn_public_sameLibrary() { |
| 1960 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2084 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 1961 CompilationUnitElement unit = library.definingCompilationUnit; | 2085 ClassElement classElement = ElementFactory.classElement2("C", []); |
| 1962 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 2086 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; |
| 1963 JUnitTestCase.assertSame(setterS, typeA.lookUpSetter(setterName, library)); | 2087 JUnitTestCase.assertTrue(classElement.isAccessibleIn(library)); |
| 1964 } | 2088 } |
| 1965 | 2089 |
| 1966 void test_lookUpSetter_inherited() { | 2090 void test_isPrivate_false() { |
| 1967 // | 2091 Element element = ElementFactory.classElement2("C", []); |
| 1968 // class A { s(x) {} } | 2092 JUnitTestCase.assertFalse(element.isPrivate); |
| 1969 // class B extends A {} | 2093 } |
| 1970 // | 2094 |
| 1971 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2095 void test_isPrivate_null() { |
| 1972 String setterName = "g"; | 2096 Element element = ElementFactory.classElement2(null, []); |
| 1973 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); | 2097 JUnitTestCase.assertTrue(element.isPrivate); |
| 1974 classA.accessors = <PropertyAccessorElement> [setterS]; | 2098 } |
| 1975 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 2099 |
| 1976 InterfaceType typeB = classB.type; | 2100 void test_isPrivate_true() { |
| 1977 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2101 Element element = ElementFactory.classElement2("_C", []); |
| 1978 CompilationUnitElement unit = library.definingCompilationUnit; | 2102 JUnitTestCase.assertTrue(element.isPrivate); |
| 1979 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 2103 } |
| 1980 JUnitTestCase.assertSame(setterS, typeB.lookUpSetter(setterName, library)); | 2104 |
| 1981 } | 2105 void test_isPublic_false() { |
| 1982 | 2106 Element element = ElementFactory.classElement2("_C", []); |
| 1983 void test_lookUpSetter_recursive() { | 2107 JUnitTestCase.assertFalse(element.isPublic); |
| 1984 // | 2108 } |
| 1985 // class A extends B {} | 2109 |
| 1986 // class B extends A {} | 2110 void test_isPublic_null() { |
| 1987 // | 2111 Element element = ElementFactory.classElement2(null, []); |
| 1988 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2112 JUnitTestCase.assertFalse(element.isPublic); |
| 1989 InterfaceType typeA = classA.type; | 2113 } |
| 1990 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); | 2114 |
| 1991 classA.supertype = classB.type; | 2115 void test_isPublic_true() { |
| 1992 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2116 Element element = ElementFactory.classElement2("C", []); |
| 1993 CompilationUnitElement unit = library.definingCompilationUnit; | 2117 JUnitTestCase.assertTrue(element.isPublic); |
| 1994 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 2118 } |
| 1995 JUnitTestCase.assertNull(typeA.lookUpSetter("s", library)); | 2119 |
| 1996 } | 2120 void test_SORT_BY_OFFSET() { |
| 1997 | 2121 ClassElementImpl classElementA = ElementFactory.classElement2("A", []); |
| 1998 void test_lookUpSetter_unimplemented() { | 2122 classElementA.nameOffset = 1; |
| 1999 // | 2123 ClassElementImpl classElementB = ElementFactory.classElement2("B", []); |
| 2000 // class A {} | 2124 classElementB.nameOffset = 2; |
| 2001 // | 2125 JUnitTestCase.assertEquals(0, Element.SORT_BY_OFFSET(classElementA, classEle
mentA)); |
| 2002 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2126 JUnitTestCase.assertTrue(Element.SORT_BY_OFFSET(classElementA, classElementB
) < 0); |
| 2003 InterfaceType typeA = classA.type; | 2127 JUnitTestCase.assertTrue(Element.SORT_BY_OFFSET(classElementB, classElementA
) > 0); |
| 2004 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 2005 CompilationUnitElement unit = library.definingCompilationUnit; | |
| 2006 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | |
| 2007 JUnitTestCase.assertNull(typeA.lookUpSetter("s", library)); | |
| 2008 } | |
| 2009 | |
| 2010 void test_setTypeArguments() { | |
| 2011 InterfaceTypeImpl type = ElementFactory.classElement2("A", []).type as Inter
faceTypeImpl; | |
| 2012 List<DartType> typeArguments = <DartType> [ | |
| 2013 ElementFactory.classElement2("B", []).type, | |
| 2014 ElementFactory.classElement2("C", []).type]; | |
| 2015 type.typeArguments = typeArguments; | |
| 2016 JUnitTestCase.assertEquals(typeArguments, type.typeArguments); | |
| 2017 } | |
| 2018 | |
| 2019 void test_substitute_equal() { | |
| 2020 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 2021 TypeParameterElementImpl parameterElement = new TypeParameterElementImpl(Ast
Factory.identifier3("E")); | |
| 2022 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); | |
| 2023 TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(parameterElement
); | |
| 2024 type.typeArguments = <DartType> [parameter]; | |
| 2025 InterfaceType argumentType = ElementFactory.classElement2("B", []).type; | |
| 2026 InterfaceType result = type.substitute2(<DartType> [argumentType], <DartType
> [parameter]); | |
| 2027 JUnitTestCase.assertEquals(classA, result.element); | |
| 2028 List<DartType> resultArguments = result.typeArguments; | |
| 2029 EngineTestCase.assertLength(1, resultArguments); | |
| 2030 JUnitTestCase.assertEquals(argumentType, resultArguments[0]); | |
| 2031 } | |
| 2032 | |
| 2033 void test_substitute_exception() { | |
| 2034 try { | |
| 2035 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 2036 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); | |
| 2037 InterfaceType argumentType = ElementFactory.classElement2("B", []).type; | |
| 2038 type.substitute2(<DartType> [argumentType], <DartType> []); | |
| 2039 JUnitTestCase.fail("Expected to encounter exception, argument and paramete
r type array lengths not equal."); | |
| 2040 } on JavaException catch (e) { | |
| 2041 } | |
| 2042 } | |
| 2043 | |
| 2044 void test_substitute_notEqual() { | |
| 2045 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 2046 TypeParameterElementImpl parameterElement = new TypeParameterElementImpl(Ast
Factory.identifier3("E")); | |
| 2047 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); | |
| 2048 TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(parameterElement
); | |
| 2049 type.typeArguments = <DartType> [parameter]; | |
| 2050 InterfaceType argumentType = ElementFactory.classElement2("B", []).type; | |
| 2051 TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(new TypePara
meterElementImpl(AstFactory.identifier3("F"))); | |
| 2052 InterfaceType result = type.substitute2(<DartType> [argumentType], <DartType
> [parameterType]); | |
| 2053 JUnitTestCase.assertEquals(classA, result.element); | |
| 2054 List<DartType> resultArguments = result.typeArguments; | |
| 2055 EngineTestCase.assertLength(1, resultArguments); | |
| 2056 JUnitTestCase.assertEquals(parameter, resultArguments[0]); | |
| 2057 } | 2128 } |
| 2058 | 2129 |
| 2059 static dartSuite() { | 2130 static dartSuite() { |
| 2060 _ut.group('InterfaceTypeImplTest', () { | 2131 _ut.group('ElementImplTest', () { |
| 2061 _ut.test('test_computeLongestInheritancePathToObject_multipleInterfacePath
s', () { | 2132 _ut.test('test_SORT_BY_OFFSET', () { |
| 2062 final __test = new InterfaceTypeImplTest(); | 2133 final __test = new ElementImplTest(); |
| 2063 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_m
ultipleInterfacePaths); | 2134 runJUnitTest(__test, __test.test_SORT_BY_OFFSET); |
| 2064 }); | 2135 }); |
| 2065 _ut.test('test_computeLongestInheritancePathToObject_multipleSuperclassPat
hs', () { | 2136 _ut.test('test_equals', () { |
| 2066 final __test = new InterfaceTypeImplTest(); | 2137 final __test = new ElementImplTest(); |
| 2067 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_m
ultipleSuperclassPaths); | 2138 runJUnitTest(__test, __test.test_equals); |
| 2068 }); | 2139 }); |
| 2069 _ut.test('test_computeLongestInheritancePathToObject_object', () { | 2140 _ut.test('test_isAccessibleIn_private_differentLibrary', () { |
| 2070 final __test = new InterfaceTypeImplTest(); | 2141 final __test = new ElementImplTest(); |
| 2071 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_o
bject); | 2142 runJUnitTest(__test, __test.test_isAccessibleIn_private_differentLibrary
); |
| 2072 }); | 2143 }); |
| 2073 _ut.test('test_computeLongestInheritancePathToObject_recursion', () { | 2144 _ut.test('test_isAccessibleIn_private_sameLibrary', () { |
| 2074 final __test = new InterfaceTypeImplTest(); | 2145 final __test = new ElementImplTest(); |
| 2075 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_r
ecursion); | 2146 runJUnitTest(__test, __test.test_isAccessibleIn_private_sameLibrary); |
| 2076 }); | 2147 }); |
| 2077 _ut.test('test_computeLongestInheritancePathToObject_singleInterfacePath',
() { | 2148 _ut.test('test_isAccessibleIn_public_differentLibrary', () { |
| 2078 final __test = new InterfaceTypeImplTest(); | 2149 final __test = new ElementImplTest(); |
| 2079 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_s
ingleInterfacePath); | 2150 runJUnitTest(__test, __test.test_isAccessibleIn_public_differentLibrary)
; |
| 2080 }); | 2151 }); |
| 2081 _ut.test('test_computeLongestInheritancePathToObject_singleSuperclassPath'
, () { | 2152 _ut.test('test_isAccessibleIn_public_sameLibrary', () { |
| 2082 final __test = new InterfaceTypeImplTest(); | 2153 final __test = new ElementImplTest(); |
| 2083 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_s
ingleSuperclassPath); | 2154 runJUnitTest(__test, __test.test_isAccessibleIn_public_sameLibrary); |
| 2084 }); | 2155 }); |
| 2085 _ut.test('test_computeSuperinterfaceSet_genericInterfacePath', () { | 2156 _ut.test('test_isPrivate_false', () { |
| 2086 final __test = new InterfaceTypeImplTest(); | 2157 final __test = new ElementImplTest(); |
| 2087 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_genericInterfa
cePath); | 2158 runJUnitTest(__test, __test.test_isPrivate_false); |
| 2088 }); | 2159 }); |
| 2089 _ut.test('test_computeSuperinterfaceSet_genericSuperclassPath', () { | 2160 _ut.test('test_isPrivate_null', () { |
| 2090 final __test = new InterfaceTypeImplTest(); | 2161 final __test = new ElementImplTest(); |
| 2091 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_genericSupercl
assPath); | 2162 runJUnitTest(__test, __test.test_isPrivate_null); |
| 2092 }); | 2163 }); |
| 2093 _ut.test('test_computeSuperinterfaceSet_multipleInterfacePaths', () { | 2164 _ut.test('test_isPrivate_true', () { |
| 2094 final __test = new InterfaceTypeImplTest(); | 2165 final __test = new ElementImplTest(); |
| 2095 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_multipleInterf
acePaths); | 2166 runJUnitTest(__test, __test.test_isPrivate_true); |
| 2096 }); | 2167 }); |
| 2097 _ut.test('test_computeSuperinterfaceSet_multipleSuperclassPaths', () { | 2168 _ut.test('test_isPublic_false', () { |
| 2098 final __test = new InterfaceTypeImplTest(); | 2169 final __test = new ElementImplTest(); |
| 2099 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_multipleSuperc
lassPaths); | 2170 runJUnitTest(__test, __test.test_isPublic_false); |
| 2100 }); | 2171 }); |
| 2101 _ut.test('test_computeSuperinterfaceSet_recursion', () { | 2172 _ut.test('test_isPublic_null', () { |
| 2102 final __test = new InterfaceTypeImplTest(); | 2173 final __test = new ElementImplTest(); |
| 2103 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_recursion); | 2174 runJUnitTest(__test, __test.test_isPublic_null); |
| 2104 }); | 2175 }); |
| 2105 _ut.test('test_computeSuperinterfaceSet_singleInterfacePath', () { | 2176 _ut.test('test_isPublic_true', () { |
| 2106 final __test = new InterfaceTypeImplTest(); | 2177 final __test = new ElementImplTest(); |
| 2107 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_singleInterfac
ePath); | 2178 runJUnitTest(__test, __test.test_isPublic_true); |
| 2108 }); | |
| 2109 _ut.test('test_computeSuperinterfaceSet_singleSuperclassPath', () { | |
| 2110 final __test = new InterfaceTypeImplTest(); | |
| 2111 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_singleSupercla
ssPath); | |
| 2112 }); | |
| 2113 _ut.test('test_creation', () { | |
| 2114 final __test = new InterfaceTypeImplTest(); | |
| 2115 runJUnitTest(__test, __test.test_creation); | |
| 2116 }); | |
| 2117 _ut.test('test_getAccessors', () { | |
| 2118 final __test = new InterfaceTypeImplTest(); | |
| 2119 runJUnitTest(__test, __test.test_getAccessors); | |
| 2120 }); | |
| 2121 _ut.test('test_getAccessors_empty', () { | |
| 2122 final __test = new InterfaceTypeImplTest(); | |
| 2123 runJUnitTest(__test, __test.test_getAccessors_empty); | |
| 2124 }); | |
| 2125 _ut.test('test_getElement', () { | |
| 2126 final __test = new InterfaceTypeImplTest(); | |
| 2127 runJUnitTest(__test, __test.test_getElement); | |
| 2128 }); | |
| 2129 _ut.test('test_getGetter_implemented', () { | |
| 2130 final __test = new InterfaceTypeImplTest(); | |
| 2131 runJUnitTest(__test, __test.test_getGetter_implemented); | |
| 2132 }); | |
| 2133 _ut.test('test_getGetter_parameterized', () { | |
| 2134 final __test = new InterfaceTypeImplTest(); | |
| 2135 runJUnitTest(__test, __test.test_getGetter_parameterized); | |
| 2136 }); | |
| 2137 _ut.test('test_getGetter_unimplemented', () { | |
| 2138 final __test = new InterfaceTypeImplTest(); | |
| 2139 runJUnitTest(__test, __test.test_getGetter_unimplemented); | |
| 2140 }); | |
| 2141 _ut.test('test_getInterfaces_nonParameterized', () { | |
| 2142 final __test = new InterfaceTypeImplTest(); | |
| 2143 runJUnitTest(__test, __test.test_getInterfaces_nonParameterized); | |
| 2144 }); | |
| 2145 _ut.test('test_getInterfaces_parameterized', () { | |
| 2146 final __test = new InterfaceTypeImplTest(); | |
| 2147 runJUnitTest(__test, __test.test_getInterfaces_parameterized); | |
| 2148 }); | |
| 2149 _ut.test('test_getLeastUpperBound_directInterfaceCase', () { | |
| 2150 final __test = new InterfaceTypeImplTest(); | |
| 2151 runJUnitTest(__test, __test.test_getLeastUpperBound_directInterfaceCase)
; | |
| 2152 }); | |
| 2153 _ut.test('test_getLeastUpperBound_directSubclassCase', () { | |
| 2154 final __test = new InterfaceTypeImplTest(); | |
| 2155 runJUnitTest(__test, __test.test_getLeastUpperBound_directSubclassCase); | |
| 2156 }); | |
| 2157 _ut.test('test_getLeastUpperBound_functionType', () { | |
| 2158 final __test = new InterfaceTypeImplTest(); | |
| 2159 runJUnitTest(__test, __test.test_getLeastUpperBound_functionType); | |
| 2160 }); | |
| 2161 _ut.test('test_getLeastUpperBound_mixinCase', () { | |
| 2162 final __test = new InterfaceTypeImplTest(); | |
| 2163 runJUnitTest(__test, __test.test_getLeastUpperBound_mixinCase); | |
| 2164 }); | |
| 2165 _ut.test('test_getLeastUpperBound_null', () { | |
| 2166 final __test = new InterfaceTypeImplTest(); | |
| 2167 runJUnitTest(__test, __test.test_getLeastUpperBound_null); | |
| 2168 }); | |
| 2169 _ut.test('test_getLeastUpperBound_object', () { | |
| 2170 final __test = new InterfaceTypeImplTest(); | |
| 2171 runJUnitTest(__test, __test.test_getLeastUpperBound_object); | |
| 2172 }); | |
| 2173 _ut.test('test_getLeastUpperBound_self', () { | |
| 2174 final __test = new InterfaceTypeImplTest(); | |
| 2175 runJUnitTest(__test, __test.test_getLeastUpperBound_self); | |
| 2176 }); | |
| 2177 _ut.test('test_getLeastUpperBound_sharedSuperclass1', () { | |
| 2178 final __test = new InterfaceTypeImplTest(); | |
| 2179 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass1); | |
| 2180 }); | |
| 2181 _ut.test('test_getLeastUpperBound_sharedSuperclass2', () { | |
| 2182 final __test = new InterfaceTypeImplTest(); | |
| 2183 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass2); | |
| 2184 }); | |
| 2185 _ut.test('test_getLeastUpperBound_sharedSuperclass3', () { | |
| 2186 final __test = new InterfaceTypeImplTest(); | |
| 2187 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass3); | |
| 2188 }); | |
| 2189 _ut.test('test_getLeastUpperBound_sharedSuperclass4', () { | |
| 2190 final __test = new InterfaceTypeImplTest(); | |
| 2191 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass4); | |
| 2192 }); | |
| 2193 _ut.test('test_getLeastUpperBound_sharedSuperinterface1', () { | |
| 2194 final __test = new InterfaceTypeImplTest(); | |
| 2195 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
1); | |
| 2196 }); | |
| 2197 _ut.test('test_getLeastUpperBound_sharedSuperinterface2', () { | |
| 2198 final __test = new InterfaceTypeImplTest(); | |
| 2199 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
2); | |
| 2200 }); | |
| 2201 _ut.test('test_getLeastUpperBound_sharedSuperinterface3', () { | |
| 2202 final __test = new InterfaceTypeImplTest(); | |
| 2203 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
3); | |
| 2204 }); | |
| 2205 _ut.test('test_getLeastUpperBound_sharedSuperinterface4', () { | |
| 2206 final __test = new InterfaceTypeImplTest(); | |
| 2207 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
4); | |
| 2208 }); | |
| 2209 _ut.test('test_getLeastUpperBound_twoComparables', () { | |
| 2210 final __test = new InterfaceTypeImplTest(); | |
| 2211 runJUnitTest(__test, __test.test_getLeastUpperBound_twoComparables); | |
| 2212 }); | |
| 2213 _ut.test('test_getLeastUpperBound_typeParameters_different', () { | |
| 2214 final __test = new InterfaceTypeImplTest(); | |
| 2215 runJUnitTest(__test, __test.test_getLeastUpperBound_typeParameters_diffe
rent); | |
| 2216 }); | |
| 2217 _ut.test('test_getLeastUpperBound_typeParameters_same', () { | |
| 2218 final __test = new InterfaceTypeImplTest(); | |
| 2219 runJUnitTest(__test, __test.test_getLeastUpperBound_typeParameters_same)
; | |
| 2220 }); | |
| 2221 _ut.test('test_getMethod_implemented', () { | |
| 2222 final __test = new InterfaceTypeImplTest(); | |
| 2223 runJUnitTest(__test, __test.test_getMethod_implemented); | |
| 2224 }); | |
| 2225 _ut.test('test_getMethod_parameterized', () { | |
| 2226 final __test = new InterfaceTypeImplTest(); | |
| 2227 runJUnitTest(__test, __test.test_getMethod_parameterized); | |
| 2228 }); | |
| 2229 _ut.test('test_getMethod_unimplemented', () { | |
| 2230 final __test = new InterfaceTypeImplTest(); | |
| 2231 runJUnitTest(__test, __test.test_getMethod_unimplemented); | |
| 2232 }); | |
| 2233 _ut.test('test_getMethods', () { | |
| 2234 final __test = new InterfaceTypeImplTest(); | |
| 2235 runJUnitTest(__test, __test.test_getMethods); | |
| 2236 }); | |
| 2237 _ut.test('test_getMethods_empty', () { | |
| 2238 final __test = new InterfaceTypeImplTest(); | |
| 2239 runJUnitTest(__test, __test.test_getMethods_empty); | |
| 2240 }); | |
| 2241 _ut.test('test_getMixins_nonParameterized', () { | |
| 2242 final __test = new InterfaceTypeImplTest(); | |
| 2243 runJUnitTest(__test, __test.test_getMixins_nonParameterized); | |
| 2244 }); | |
| 2245 _ut.test('test_getMixins_parameterized', () { | |
| 2246 final __test = new InterfaceTypeImplTest(); | |
| 2247 runJUnitTest(__test, __test.test_getMixins_parameterized); | |
| 2248 }); | |
| 2249 _ut.test('test_getSetter_implemented', () { | |
| 2250 final __test = new InterfaceTypeImplTest(); | |
| 2251 runJUnitTest(__test, __test.test_getSetter_implemented); | |
| 2252 }); | |
| 2253 _ut.test('test_getSetter_parameterized', () { | |
| 2254 final __test = new InterfaceTypeImplTest(); | |
| 2255 runJUnitTest(__test, __test.test_getSetter_parameterized); | |
| 2256 }); | |
| 2257 _ut.test('test_getSetter_unimplemented', () { | |
| 2258 final __test = new InterfaceTypeImplTest(); | |
| 2259 runJUnitTest(__test, __test.test_getSetter_unimplemented); | |
| 2260 }); | |
| 2261 _ut.test('test_getSuperclass_nonParameterized', () { | |
| 2262 final __test = new InterfaceTypeImplTest(); | |
| 2263 runJUnitTest(__test, __test.test_getSuperclass_nonParameterized); | |
| 2264 }); | |
| 2265 _ut.test('test_getSuperclass_parameterized', () { | |
| 2266 final __test = new InterfaceTypeImplTest(); | |
| 2267 runJUnitTest(__test, __test.test_getSuperclass_parameterized); | |
| 2268 }); | |
| 2269 _ut.test('test_getTypeArguments_empty', () { | |
| 2270 final __test = new InterfaceTypeImplTest(); | |
| 2271 runJUnitTest(__test, __test.test_getTypeArguments_empty); | |
| 2272 }); | |
| 2273 _ut.test('test_hashCode', () { | |
| 2274 final __test = new InterfaceTypeImplTest(); | |
| 2275 runJUnitTest(__test, __test.test_hashCode); | |
| 2276 }); | |
| 2277 _ut.test('test_isAssignableTo_typeVariables', () { | |
| 2278 final __test = new InterfaceTypeImplTest(); | |
| 2279 runJUnitTest(__test, __test.test_isAssignableTo_typeVariables); | |
| 2280 }); | |
| 2281 _ut.test('test_isAssignableTo_void', () { | |
| 2282 final __test = new InterfaceTypeImplTest(); | |
| 2283 runJUnitTest(__test, __test.test_isAssignableTo_void); | |
| 2284 }); | |
| 2285 _ut.test('test_isDirectSupertypeOf_extends', () { | |
| 2286 final __test = new InterfaceTypeImplTest(); | |
| 2287 runJUnitTest(__test, __test.test_isDirectSupertypeOf_extends); | |
| 2288 }); | |
| 2289 _ut.test('test_isDirectSupertypeOf_false', () { | |
| 2290 final __test = new InterfaceTypeImplTest(); | |
| 2291 runJUnitTest(__test, __test.test_isDirectSupertypeOf_false); | |
| 2292 }); | |
| 2293 _ut.test('test_isDirectSupertypeOf_implements', () { | |
| 2294 final __test = new InterfaceTypeImplTest(); | |
| 2295 runJUnitTest(__test, __test.test_isDirectSupertypeOf_implements); | |
| 2296 }); | |
| 2297 _ut.test('test_isDirectSupertypeOf_with', () { | |
| 2298 final __test = new InterfaceTypeImplTest(); | |
| 2299 runJUnitTest(__test, __test.test_isDirectSupertypeOf_with); | |
| 2300 }); | |
| 2301 _ut.test('test_isMoreSpecificThan_bottom', () { | |
| 2302 final __test = new InterfaceTypeImplTest(); | |
| 2303 runJUnitTest(__test, __test.test_isMoreSpecificThan_bottom); | |
| 2304 }); | |
| 2305 _ut.test('test_isMoreSpecificThan_covariance', () { | |
| 2306 final __test = new InterfaceTypeImplTest(); | |
| 2307 runJUnitTest(__test, __test.test_isMoreSpecificThan_covariance); | |
| 2308 }); | |
| 2309 _ut.test('test_isMoreSpecificThan_directSupertype', () { | |
| 2310 final __test = new InterfaceTypeImplTest(); | |
| 2311 runJUnitTest(__test, __test.test_isMoreSpecificThan_directSupertype); | |
| 2312 }); | |
| 2313 _ut.test('test_isMoreSpecificThan_dynamic', () { | |
| 2314 final __test = new InterfaceTypeImplTest(); | |
| 2315 runJUnitTest(__test, __test.test_isMoreSpecificThan_dynamic); | |
| 2316 }); | |
| 2317 _ut.test('test_isMoreSpecificThan_self', () { | |
| 2318 final __test = new InterfaceTypeImplTest(); | |
| 2319 runJUnitTest(__test, __test.test_isMoreSpecificThan_self); | |
| 2320 }); | |
| 2321 _ut.test('test_isMoreSpecificThan_transitive_interface', () { | |
| 2322 final __test = new InterfaceTypeImplTest(); | |
| 2323 runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_interface
); | |
| 2324 }); | |
| 2325 _ut.test('test_isMoreSpecificThan_transitive_mixin', () { | |
| 2326 final __test = new InterfaceTypeImplTest(); | |
| 2327 runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_mixin); | |
| 2328 }); | |
| 2329 _ut.test('test_isMoreSpecificThan_transitive_recursive', () { | |
| 2330 final __test = new InterfaceTypeImplTest(); | |
| 2331 runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_recursive
); | |
| 2332 }); | |
| 2333 _ut.test('test_isMoreSpecificThan_transitive_superclass', () { | |
| 2334 final __test = new InterfaceTypeImplTest(); | |
| 2335 runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_superclas
s); | |
| 2336 }); | |
| 2337 _ut.test('test_isSubtypeOf_directSubtype', () { | |
| 2338 final __test = new InterfaceTypeImplTest(); | |
| 2339 runJUnitTest(__test, __test.test_isSubtypeOf_directSubtype); | |
| 2340 }); | |
| 2341 _ut.test('test_isSubtypeOf_dynamic', () { | |
| 2342 final __test = new InterfaceTypeImplTest(); | |
| 2343 runJUnitTest(__test, __test.test_isSubtypeOf_dynamic); | |
| 2344 }); | |
| 2345 _ut.test('test_isSubtypeOf_function', () { | |
| 2346 final __test = new InterfaceTypeImplTest(); | |
| 2347 runJUnitTest(__test, __test.test_isSubtypeOf_function); | |
| 2348 }); | |
| 2349 _ut.test('test_isSubtypeOf_interface', () { | |
| 2350 final __test = new InterfaceTypeImplTest(); | |
| 2351 runJUnitTest(__test, __test.test_isSubtypeOf_interface); | |
| 2352 }); | |
| 2353 _ut.test('test_isSubtypeOf_mixins', () { | |
| 2354 final __test = new InterfaceTypeImplTest(); | |
| 2355 runJUnitTest(__test, __test.test_isSubtypeOf_mixins); | |
| 2356 }); | |
| 2357 _ut.test('test_isSubtypeOf_object', () { | |
| 2358 final __test = new InterfaceTypeImplTest(); | |
| 2359 runJUnitTest(__test, __test.test_isSubtypeOf_object); | |
| 2360 }); | |
| 2361 _ut.test('test_isSubtypeOf_self', () { | |
| 2362 final __test = new InterfaceTypeImplTest(); | |
| 2363 runJUnitTest(__test, __test.test_isSubtypeOf_self); | |
| 2364 }); | |
| 2365 _ut.test('test_isSubtypeOf_transitive_recursive', () { | |
| 2366 final __test = new InterfaceTypeImplTest(); | |
| 2367 runJUnitTest(__test, __test.test_isSubtypeOf_transitive_recursive); | |
| 2368 }); | |
| 2369 _ut.test('test_isSubtypeOf_transitive_superclass', () { | |
| 2370 final __test = new InterfaceTypeImplTest(); | |
| 2371 runJUnitTest(__test, __test.test_isSubtypeOf_transitive_superclass); | |
| 2372 }); | |
| 2373 _ut.test('test_isSubtypeOf_typeArguments', () { | |
| 2374 final __test = new InterfaceTypeImplTest(); | |
| 2375 runJUnitTest(__test, __test.test_isSubtypeOf_typeArguments); | |
| 2376 }); | |
| 2377 _ut.test('test_isSupertypeOf_directSupertype', () { | |
| 2378 final __test = new InterfaceTypeImplTest(); | |
| 2379 runJUnitTest(__test, __test.test_isSupertypeOf_directSupertype); | |
| 2380 }); | |
| 2381 _ut.test('test_isSupertypeOf_dynamic', () { | |
| 2382 final __test = new InterfaceTypeImplTest(); | |
| 2383 runJUnitTest(__test, __test.test_isSupertypeOf_dynamic); | |
| 2384 }); | |
| 2385 _ut.test('test_isSupertypeOf_indirectSupertype', () { | |
| 2386 final __test = new InterfaceTypeImplTest(); | |
| 2387 runJUnitTest(__test, __test.test_isSupertypeOf_indirectSupertype); | |
| 2388 }); | |
| 2389 _ut.test('test_isSupertypeOf_interface', () { | |
| 2390 final __test = new InterfaceTypeImplTest(); | |
| 2391 runJUnitTest(__test, __test.test_isSupertypeOf_interface); | |
| 2392 }); | |
| 2393 _ut.test('test_isSupertypeOf_mixins', () { | |
| 2394 final __test = new InterfaceTypeImplTest(); | |
| 2395 runJUnitTest(__test, __test.test_isSupertypeOf_mixins); | |
| 2396 }); | |
| 2397 _ut.test('test_isSupertypeOf_object', () { | |
| 2398 final __test = new InterfaceTypeImplTest(); | |
| 2399 runJUnitTest(__test, __test.test_isSupertypeOf_object); | |
| 2400 }); | |
| 2401 _ut.test('test_isSupertypeOf_self', () { | |
| 2402 final __test = new InterfaceTypeImplTest(); | |
| 2403 runJUnitTest(__test, __test.test_isSupertypeOf_self); | |
| 2404 }); | |
| 2405 _ut.test('test_lookUpGetter_implemented', () { | |
| 2406 final __test = new InterfaceTypeImplTest(); | |
| 2407 runJUnitTest(__test, __test.test_lookUpGetter_implemented); | |
| 2408 }); | |
| 2409 _ut.test('test_lookUpGetter_inherited', () { | |
| 2410 final __test = new InterfaceTypeImplTest(); | |
| 2411 runJUnitTest(__test, __test.test_lookUpGetter_inherited); | |
| 2412 }); | |
| 2413 _ut.test('test_lookUpGetter_recursive', () { | |
| 2414 final __test = new InterfaceTypeImplTest(); | |
| 2415 runJUnitTest(__test, __test.test_lookUpGetter_recursive); | |
| 2416 }); | |
| 2417 _ut.test('test_lookUpGetter_unimplemented', () { | |
| 2418 final __test = new InterfaceTypeImplTest(); | |
| 2419 runJUnitTest(__test, __test.test_lookUpGetter_unimplemented); | |
| 2420 }); | |
| 2421 _ut.test('test_lookUpMethod_implemented', () { | |
| 2422 final __test = new InterfaceTypeImplTest(); | |
| 2423 runJUnitTest(__test, __test.test_lookUpMethod_implemented); | |
| 2424 }); | |
| 2425 _ut.test('test_lookUpMethod_inherited', () { | |
| 2426 final __test = new InterfaceTypeImplTest(); | |
| 2427 runJUnitTest(__test, __test.test_lookUpMethod_inherited); | |
| 2428 }); | |
| 2429 _ut.test('test_lookUpMethod_parameterized', () { | |
| 2430 final __test = new InterfaceTypeImplTest(); | |
| 2431 runJUnitTest(__test, __test.test_lookUpMethod_parameterized); | |
| 2432 }); | |
| 2433 _ut.test('test_lookUpMethod_recursive', () { | |
| 2434 final __test = new InterfaceTypeImplTest(); | |
| 2435 runJUnitTest(__test, __test.test_lookUpMethod_recursive); | |
| 2436 }); | |
| 2437 _ut.test('test_lookUpMethod_unimplemented', () { | |
| 2438 final __test = new InterfaceTypeImplTest(); | |
| 2439 runJUnitTest(__test, __test.test_lookUpMethod_unimplemented); | |
| 2440 }); | |
| 2441 _ut.test('test_lookUpSetter_implemented', () { | |
| 2442 final __test = new InterfaceTypeImplTest(); | |
| 2443 runJUnitTest(__test, __test.test_lookUpSetter_implemented); | |
| 2444 }); | |
| 2445 _ut.test('test_lookUpSetter_inherited', () { | |
| 2446 final __test = new InterfaceTypeImplTest(); | |
| 2447 runJUnitTest(__test, __test.test_lookUpSetter_inherited); | |
| 2448 }); | |
| 2449 _ut.test('test_lookUpSetter_recursive', () { | |
| 2450 final __test = new InterfaceTypeImplTest(); | |
| 2451 runJUnitTest(__test, __test.test_lookUpSetter_recursive); | |
| 2452 }); | |
| 2453 _ut.test('test_lookUpSetter_unimplemented', () { | |
| 2454 final __test = new InterfaceTypeImplTest(); | |
| 2455 runJUnitTest(__test, __test.test_lookUpSetter_unimplemented); | |
| 2456 }); | |
| 2457 _ut.test('test_setTypeArguments', () { | |
| 2458 final __test = new InterfaceTypeImplTest(); | |
| 2459 runJUnitTest(__test, __test.test_setTypeArguments); | |
| 2460 }); | |
| 2461 _ut.test('test_substitute_equal', () { | |
| 2462 final __test = new InterfaceTypeImplTest(); | |
| 2463 runJUnitTest(__test, __test.test_substitute_equal); | |
| 2464 }); | |
| 2465 _ut.test('test_substitute_exception', () { | |
| 2466 final __test = new InterfaceTypeImplTest(); | |
| 2467 runJUnitTest(__test, __test.test_substitute_exception); | |
| 2468 }); | |
| 2469 _ut.test('test_substitute_notEqual', () { | |
| 2470 final __test = new InterfaceTypeImplTest(); | |
| 2471 runJUnitTest(__test, __test.test_substitute_notEqual); | |
| 2472 }); | 2179 }); |
| 2473 }); | 2180 }); |
| 2474 } | 2181 } |
| 2475 } | 2182 } |
| 2476 | 2183 |
| 2477 class VoidTypeImplTest extends EngineTestCase { | |
| 2478 /** | |
| 2479 * Reference {code VoidTypeImpl.getInstance()}. | |
| 2480 */ | |
| 2481 DartType _voidType = VoidTypeImpl.instance; | |
| 2482 | |
| 2483 void test_isMoreSpecificThan_void_A() { | |
| 2484 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 2485 JUnitTestCase.assertFalse(_voidType.isMoreSpecificThan(classA.type)); | |
| 2486 } | |
| 2487 | |
| 2488 void test_isMoreSpecificThan_void_dynamic() { | |
| 2489 JUnitTestCase.assertTrue(_voidType.isMoreSpecificThan(DynamicTypeImpl.instan
ce)); | |
| 2490 } | |
| 2491 | |
| 2492 void test_isMoreSpecificThan_void_void() { | |
| 2493 JUnitTestCase.assertTrue(_voidType.isMoreSpecificThan(_voidType)); | |
| 2494 } | |
| 2495 | |
| 2496 void test_isSubtypeOf_void_A() { | |
| 2497 ClassElement classA = ElementFactory.classElement2("A", []); | |
| 2498 JUnitTestCase.assertFalse(_voidType.isSubtypeOf(classA.type)); | |
| 2499 } | |
| 2500 | |
| 2501 void test_isSubtypeOf_void_dynamic() { | |
| 2502 JUnitTestCase.assertTrue(_voidType.isSubtypeOf(DynamicTypeImpl.instance)); | |
| 2503 } | |
| 2504 | |
| 2505 void test_isSubtypeOf_void_void() { | |
| 2506 JUnitTestCase.assertTrue(_voidType.isSubtypeOf(_voidType)); | |
| 2507 } | |
| 2508 | |
| 2509 void test_isVoid() { | |
| 2510 JUnitTestCase.assertTrue(_voidType.isVoid); | |
| 2511 } | |
| 2512 | |
| 2513 static dartSuite() { | |
| 2514 _ut.group('VoidTypeImplTest', () { | |
| 2515 _ut.test('test_isMoreSpecificThan_void_A', () { | |
| 2516 final __test = new VoidTypeImplTest(); | |
| 2517 runJUnitTest(__test, __test.test_isMoreSpecificThan_void_A); | |
| 2518 }); | |
| 2519 _ut.test('test_isMoreSpecificThan_void_dynamic', () { | |
| 2520 final __test = new VoidTypeImplTest(); | |
| 2521 runJUnitTest(__test, __test.test_isMoreSpecificThan_void_dynamic); | |
| 2522 }); | |
| 2523 _ut.test('test_isMoreSpecificThan_void_void', () { | |
| 2524 final __test = new VoidTypeImplTest(); | |
| 2525 runJUnitTest(__test, __test.test_isMoreSpecificThan_void_void); | |
| 2526 }); | |
| 2527 _ut.test('test_isSubtypeOf_void_A', () { | |
| 2528 final __test = new VoidTypeImplTest(); | |
| 2529 runJUnitTest(__test, __test.test_isSubtypeOf_void_A); | |
| 2530 }); | |
| 2531 _ut.test('test_isSubtypeOf_void_dynamic', () { | |
| 2532 final __test = new VoidTypeImplTest(); | |
| 2533 runJUnitTest(__test, __test.test_isSubtypeOf_void_dynamic); | |
| 2534 }); | |
| 2535 _ut.test('test_isSubtypeOf_void_void', () { | |
| 2536 final __test = new VoidTypeImplTest(); | |
| 2537 runJUnitTest(__test, __test.test_isSubtypeOf_void_void); | |
| 2538 }); | |
| 2539 _ut.test('test_isVoid', () { | |
| 2540 final __test = new VoidTypeImplTest(); | |
| 2541 runJUnitTest(__test, __test.test_isVoid); | |
| 2542 }); | |
| 2543 }); | |
| 2544 } | |
| 2545 } | |
| 2546 | |
| 2547 /** | |
| 2548 * The class `ElementFactory` defines utility methods used to create elements fo
r testing | |
| 2549 * purposes. The elements that are created are complete in the sense that as muc
h of the element | |
| 2550 * model as can be created, given the provided information, has been created. | |
| 2551 */ | |
| 2552 class ElementFactory { | |
| 2553 /** | |
| 2554 * The element representing the class 'Object'. | |
| 2555 */ | |
| 2556 static ClassElementImpl _objectElement; | |
| 2557 | |
| 2558 static ClassElementImpl classElement(String typeName, InterfaceType superclass
Type, List<String> parameterNames) { | |
| 2559 ClassElementImpl element = new ClassElementImpl(AstFactory.identifier3(typeN
ame)); | |
| 2560 element.supertype = superclassType; | |
| 2561 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(element); | |
| 2562 element.type = type; | |
| 2563 int count = parameterNames.length; | |
| 2564 if (count > 0) { | |
| 2565 List<TypeParameterElementImpl> typeParameters = new List<TypeParameterElem
entImpl>(count); | |
| 2566 List<TypeParameterTypeImpl> typeParameterTypes = new List<TypeParameterTyp
eImpl>(count); | |
| 2567 for (int i = 0; i < count; i++) { | |
| 2568 TypeParameterElementImpl typeParameter = new TypeParameterElementImpl(As
tFactory.identifier3(parameterNames[i])); | |
| 2569 typeParameters[i] = typeParameter; | |
| 2570 typeParameterTypes[i] = new TypeParameterTypeImpl(typeParameter); | |
| 2571 typeParameter.type = typeParameterTypes[i]; | |
| 2572 } | |
| 2573 element.typeParameters = typeParameters; | |
| 2574 type.typeArguments = typeParameterTypes; | |
| 2575 } | |
| 2576 return element; | |
| 2577 } | |
| 2578 | |
| 2579 static ClassElementImpl classElement2(String typeName, List<String> parameterN
ames) => classElement(typeName, object.type, parameterNames); | |
| 2580 | |
| 2581 static CompilationUnitElementImpl compilationUnit(String fileName) { | |
| 2582 FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile(
fileName)); | |
| 2583 CompilationUnitElementImpl unit = new CompilationUnitElementImpl(fileName); | |
| 2584 unit.source = source; | |
| 2585 return unit; | |
| 2586 } | |
| 2587 | |
| 2588 static ConstructorElementImpl constructorElement(ClassElement definingClass, S
tring name, bool isConst, List<DartType> argumentTypes) { | |
| 2589 DartType type = definingClass.type; | |
| 2590 ConstructorElementImpl constructor = new ConstructorElementImpl.forNode(name
== null ? null : AstFactory.identifier3(name)); | |
| 2591 constructor.const2 = isConst; | |
| 2592 int count = argumentTypes.length; | |
| 2593 List<ParameterElement> parameters = new List<ParameterElement>(count); | |
| 2594 for (int i = 0; i < count; i++) { | |
| 2595 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.
identifier3("a${i}")); | |
| 2596 parameter.type = argumentTypes[i]; | |
| 2597 parameter.parameterKind = ParameterKind.REQUIRED; | |
| 2598 parameters[i] = parameter; | |
| 2599 } | |
| 2600 constructor.parameters = parameters; | |
| 2601 constructor.returnType = type; | |
| 2602 FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor); | |
| 2603 constructor.type = constructorType; | |
| 2604 return constructor; | |
| 2605 } | |
| 2606 | |
| 2607 static ConstructorElementImpl constructorElement2(ClassElement definingClass,
String name, List<DartType> argumentTypes) => constructorElement(definingClass,
name, false, argumentTypes); | |
| 2608 | |
| 2609 static ExportElementImpl exportFor(LibraryElement exportedLibrary, List<Namesp
aceCombinator> combinators) { | |
| 2610 ExportElementImpl spec = new ExportElementImpl(); | |
| 2611 spec.exportedLibrary = exportedLibrary; | |
| 2612 spec.combinators = combinators; | |
| 2613 return spec; | |
| 2614 } | |
| 2615 | |
| 2616 static FieldElementImpl fieldElement(String name, bool isStatic, bool isFinal,
bool isConst, DartType type) { | |
| 2617 FieldElementImpl field = new FieldElementImpl.con1(AstFactory.identifier3(na
me)); | |
| 2618 field.const3 = isConst; | |
| 2619 field.final2 = isFinal; | |
| 2620 field.static = isStatic; | |
| 2621 field.type = type; | |
| 2622 PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl(field); | |
| 2623 getter.getter = true; | |
| 2624 getter.static = isStatic; | |
| 2625 getter.synthetic = true; | |
| 2626 getter.variable = field; | |
| 2627 getter.returnType = type; | |
| 2628 field.getter = getter; | |
| 2629 FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); | |
| 2630 getter.type = getterType; | |
| 2631 if (!isConst && !isFinal) { | |
| 2632 PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl(field
); | |
| 2633 setter.setter = true; | |
| 2634 setter.static = isStatic; | |
| 2635 setter.synthetic = true; | |
| 2636 setter.variable = field; | |
| 2637 setter.parameters = <ParameterElement> [requiredParameter2("_${name}", typ
e)]; | |
| 2638 setter.returnType = VoidTypeImpl.instance; | |
| 2639 setter.type = new FunctionTypeImpl.con1(setter); | |
| 2640 field.setter = setter; | |
| 2641 } | |
| 2642 return field; | |
| 2643 } | |
| 2644 | |
| 2645 static FieldFormalParameterElementImpl fieldFormalParameter(Identifier name) =
> new FieldFormalParameterElementImpl(name); | |
| 2646 | |
| 2647 static FunctionElementImpl functionElement(String functionName) => functionEle
ment4(functionName, null, null, null, null); | |
| 2648 | |
| 2649 static FunctionElementImpl functionElement2(String functionName, ClassElement
returnElement) => functionElement3(functionName, returnElement, null, null); | |
| 2650 | |
| 2651 static FunctionElementImpl functionElement3(String functionName, ClassElement
returnElement, List<ClassElement> normalParameters, List<ClassElement> optionalP
arameters) { | |
| 2652 // We don't create parameter elements because we don't have parameter names | |
| 2653 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3(functionName)); | |
| 2654 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); | |
| 2655 functionElement.type = functionType; | |
| 2656 // return type | |
| 2657 if (returnElement == null) { | |
| 2658 functionElement.returnType = VoidTypeImpl.instance; | |
| 2659 } else { | |
| 2660 functionElement.returnType = returnElement.type; | |
| 2661 } | |
| 2662 // parameters | |
| 2663 int normalCount = normalParameters == null ? 0 : normalParameters.length; | |
| 2664 int optionalCount = optionalParameters == null ? 0 : optionalParameters.leng
th; | |
| 2665 int totalCount = normalCount + optionalCount; | |
| 2666 List<ParameterElement> parameters = new List<ParameterElement>(totalCount); | |
| 2667 for (int i = 0; i < totalCount; i++) { | |
| 2668 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.
identifier3("a${i}")); | |
| 2669 if (i < normalCount) { | |
| 2670 parameter.type = normalParameters[i].type; | |
| 2671 parameter.parameterKind = ParameterKind.REQUIRED; | |
| 2672 } else { | |
| 2673 parameter.type = optionalParameters[i - normalCount].type; | |
| 2674 parameter.parameterKind = ParameterKind.POSITIONAL; | |
| 2675 } | |
| 2676 parameters[i] = parameter; | |
| 2677 } | |
| 2678 functionElement.parameters = parameters; | |
| 2679 // done | |
| 2680 return functionElement; | |
| 2681 } | |
| 2682 | |
| 2683 static FunctionElementImpl functionElement4(String functionName, ClassElement
returnElement, List<ClassElement> normalParameters, List<String> names, List<Cla
ssElement> namedParameters) { | |
| 2684 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3(functionName)); | |
| 2685 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); | |
| 2686 functionElement.type = functionType; | |
| 2687 // parameters | |
| 2688 int normalCount = normalParameters == null ? 0 : normalParameters.length; | |
| 2689 int nameCount = names == null ? 0 : names.length; | |
| 2690 int typeCount = namedParameters == null ? 0 : namedParameters.length; | |
| 2691 if (names != null && nameCount != typeCount) { | |
| 2692 throw new IllegalStateException("The passed String[] and ClassElement[] ar
rays had different lengths."); | |
| 2693 } | |
| 2694 int totalCount = normalCount + nameCount; | |
| 2695 List<ParameterElement> parameters = new List<ParameterElement>(totalCount); | |
| 2696 for (int i = 0; i < totalCount; i++) { | |
| 2697 if (i < normalCount) { | |
| 2698 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactor
y.identifier3("a${i}")); | |
| 2699 parameter.type = normalParameters[i].type; | |
| 2700 parameter.parameterKind = ParameterKind.REQUIRED; | |
| 2701 parameters[i] = parameter; | |
| 2702 } else { | |
| 2703 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactor
y.identifier3(names[i - normalCount])); | |
| 2704 parameter.type = namedParameters[i - normalCount].type; | |
| 2705 parameter.parameterKind = ParameterKind.NAMED; | |
| 2706 parameters[i] = parameter; | |
| 2707 } | |
| 2708 } | |
| 2709 functionElement.parameters = parameters; | |
| 2710 // return type | |
| 2711 if (returnElement == null) { | |
| 2712 functionElement.returnType = VoidTypeImpl.instance; | |
| 2713 } else { | |
| 2714 functionElement.returnType = returnElement.type; | |
| 2715 } | |
| 2716 return functionElement; | |
| 2717 } | |
| 2718 | |
| 2719 static FunctionElementImpl functionElement5(String functionName, List<ClassEle
ment> normalParameters) => functionElement3(functionName, null, normalParameters
, null); | |
| 2720 | |
| 2721 static FunctionElementImpl functionElement6(String functionName, List<ClassEle
ment> normalParameters, List<ClassElement> optionalParameters) => functionElemen
t3(functionName, null, normalParameters, optionalParameters); | |
| 2722 | |
| 2723 static FunctionElementImpl functionElement7(String functionName, List<ClassEle
ment> normalParameters, List<String> names, List<ClassElement> namedParameters)
=> functionElement4(functionName, null, normalParameters, names, namedParameters
); | |
| 2724 | |
| 2725 static FunctionElementImpl functionElementWithParameters(String functionName,
DartType returnType, List<ParameterElement> parameters) { | |
| 2726 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3(functionName)); | |
| 2727 functionElement.returnType = returnType == null ? VoidTypeImpl.instance : re
turnType; | |
| 2728 functionElement.parameters = parameters; | |
| 2729 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); | |
| 2730 functionElement.type = functionType; | |
| 2731 return functionElement; | |
| 2732 } | |
| 2733 | |
| 2734 static ClassElementImpl get object { | |
| 2735 if (_objectElement == null) { | |
| 2736 _objectElement = classElement("Object", null, []); | |
| 2737 } | |
| 2738 return _objectElement; | |
| 2739 } | |
| 2740 | |
| 2741 static PropertyAccessorElementImpl getterElement(String name, bool isStatic, D
artType type) { | |
| 2742 FieldElementImpl field = new FieldElementImpl.con1(AstFactory.identifier3(na
me)); | |
| 2743 field.static = isStatic; | |
| 2744 field.synthetic = true; | |
| 2745 field.type = type; | |
| 2746 PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl(field); | |
| 2747 getter.getter = true; | |
| 2748 getter.static = isStatic; | |
| 2749 getter.variable = field; | |
| 2750 getter.returnType = type; | |
| 2751 field.getter = getter; | |
| 2752 FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); | |
| 2753 getter.type = getterType; | |
| 2754 return getter; | |
| 2755 } | |
| 2756 | |
| 2757 static HtmlElementImpl htmlUnit(AnalysisContext context, String fileName) { | |
| 2758 FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile(
fileName)); | |
| 2759 HtmlElementImpl unit = new HtmlElementImpl(context, fileName); | |
| 2760 unit.source = source; | |
| 2761 return unit; | |
| 2762 } | |
| 2763 | |
| 2764 static ImportElementImpl importFor(LibraryElement importedLibrary, PrefixEleme
nt prefix, List<NamespaceCombinator> combinators) { | |
| 2765 ImportElementImpl spec = new ImportElementImpl(0); | |
| 2766 spec.importedLibrary = importedLibrary; | |
| 2767 spec.prefix = prefix; | |
| 2768 spec.combinators = combinators; | |
| 2769 return spec; | |
| 2770 } | |
| 2771 | |
| 2772 static LibraryElementImpl library(AnalysisContext context, String libraryName)
{ | |
| 2773 String fileName = "/${libraryName}.dart"; | |
| 2774 CompilationUnitElementImpl unit = compilationUnit(fileName); | |
| 2775 LibraryElementImpl library = new LibraryElementImpl(context, AstFactory.libr
aryIdentifier2([libraryName])); | |
| 2776 library.definingCompilationUnit = unit; | |
| 2777 return library; | |
| 2778 } | |
| 2779 | |
| 2780 static LocalVariableElementImpl localVariableElement(Identifier name) => new L
ocalVariableElementImpl(name); | |
| 2781 | |
| 2782 static LocalVariableElementImpl localVariableElement2(String name) => new Loca
lVariableElementImpl(AstFactory.identifier3(name)); | |
| 2783 | |
| 2784 static MethodElementImpl methodElement(String methodName, DartType returnType,
List<DartType> argumentTypes) { | |
| 2785 MethodElementImpl method = new MethodElementImpl.forNode(AstFactory.identifi
er3(methodName)); | |
| 2786 int count = argumentTypes.length; | |
| 2787 List<ParameterElement> parameters = new List<ParameterElement>(count); | |
| 2788 for (int i = 0; i < count; i++) { | |
| 2789 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.
identifier3("a${i}")); | |
| 2790 parameter.type = argumentTypes[i]; | |
| 2791 parameter.parameterKind = ParameterKind.REQUIRED; | |
| 2792 parameters[i] = parameter; | |
| 2793 } | |
| 2794 method.parameters = parameters; | |
| 2795 method.returnType = returnType; | |
| 2796 FunctionTypeImpl methodType = new FunctionTypeImpl.con1(method); | |
| 2797 method.type = methodType; | |
| 2798 return method; | |
| 2799 } | |
| 2800 | |
| 2801 static MethodElementImpl methodElementWithParameters(String methodName, List<D
artType> typeArguments, DartType returnType, List<ParameterElement> parameters)
{ | |
| 2802 MethodElementImpl method = new MethodElementImpl.forNode(AstFactory.identifi
er3(methodName)); | |
| 2803 method.parameters = parameters; | |
| 2804 method.returnType = returnType; | |
| 2805 FunctionTypeImpl methodType = new FunctionTypeImpl.con1(method); | |
| 2806 methodType.typeArguments = typeArguments; | |
| 2807 method.type = methodType; | |
| 2808 return method; | |
| 2809 } | |
| 2810 | |
| 2811 static ParameterElementImpl namedParameter(String name) { | |
| 2812 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); | |
| 2813 parameter.parameterKind = ParameterKind.NAMED; | |
| 2814 return parameter; | |
| 2815 } | |
| 2816 | |
| 2817 static ParameterElementImpl namedParameter2(String name, DartType type) { | |
| 2818 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); | |
| 2819 parameter.parameterKind = ParameterKind.NAMED; | |
| 2820 parameter.type = type; | |
| 2821 return parameter; | |
| 2822 } | |
| 2823 | |
| 2824 static ParameterElementImpl positionalParameter(String name) { | |
| 2825 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); | |
| 2826 parameter.parameterKind = ParameterKind.POSITIONAL; | |
| 2827 return parameter; | |
| 2828 } | |
| 2829 | |
| 2830 static ParameterElementImpl positionalParameter2(String name, DartType type) { | |
| 2831 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); | |
| 2832 parameter.parameterKind = ParameterKind.POSITIONAL; | |
| 2833 parameter.type = type; | |
| 2834 return parameter; | |
| 2835 } | |
| 2836 | |
| 2837 static PrefixElementImpl prefix(String name) => new PrefixElementImpl(AstFacto
ry.identifier3(name)); | |
| 2838 | |
| 2839 static ParameterElementImpl requiredParameter(String name) { | |
| 2840 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); | |
| 2841 parameter.parameterKind = ParameterKind.REQUIRED; | |
| 2842 return parameter; | |
| 2843 } | |
| 2844 | |
| 2845 static ParameterElementImpl requiredParameter2(String name, DartType type) { | |
| 2846 ParameterElementImpl parameter = new ParameterElementImpl.con1(AstFactory.id
entifier3(name)); | |
| 2847 parameter.parameterKind = ParameterKind.REQUIRED; | |
| 2848 parameter.type = type; | |
| 2849 return parameter; | |
| 2850 } | |
| 2851 | |
| 2852 static PropertyAccessorElementImpl setterElement(String name, bool isStatic, D
artType type) { | |
| 2853 FieldElementImpl field = new FieldElementImpl.con1(AstFactory.identifier3(na
me)); | |
| 2854 field.static = isStatic; | |
| 2855 field.synthetic = true; | |
| 2856 field.type = type; | |
| 2857 PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl(field); | |
| 2858 getter.getter = true; | |
| 2859 getter.static = isStatic; | |
| 2860 getter.variable = field; | |
| 2861 getter.returnType = type; | |
| 2862 field.getter = getter; | |
| 2863 FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); | |
| 2864 getter.type = getterType; | |
| 2865 ParameterElementImpl parameter = requiredParameter2("a", type); | |
| 2866 PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl(field); | |
| 2867 setter.setter = true; | |
| 2868 setter.static = isStatic; | |
| 2869 setter.synthetic = true; | |
| 2870 setter.variable = field; | |
| 2871 setter.parameters = <ParameterElement> [parameter]; | |
| 2872 setter.returnType = VoidTypeImpl.instance; | |
| 2873 setter.type = new FunctionTypeImpl.con1(setter); | |
| 2874 field.setter = setter; | |
| 2875 return setter; | |
| 2876 } | |
| 2877 | |
| 2878 static TopLevelVariableElementImpl topLevelVariableElement(Identifier name) =>
new TopLevelVariableElementImpl.con1(name); | |
| 2879 | |
| 2880 static TopLevelVariableElementImpl topLevelVariableElement2(String name) => ne
w TopLevelVariableElementImpl.con2(name); | |
| 2881 | |
| 2882 static TopLevelVariableElementImpl topLevelVariableElement3(String name, bool
isConst, bool isFinal, DartType type) { | |
| 2883 TopLevelVariableElementImpl variable = new TopLevelVariableElementImpl.con2(
name); | |
| 2884 variable.const3 = isConst; | |
| 2885 variable.final2 = isFinal; | |
| 2886 PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl(variabl
e); | |
| 2887 getter.getter = true; | |
| 2888 getter.static = true; | |
| 2889 getter.synthetic = true; | |
| 2890 getter.variable = variable; | |
| 2891 getter.returnType = type; | |
| 2892 variable.getter = getter; | |
| 2893 FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); | |
| 2894 getter.type = getterType; | |
| 2895 if (!isFinal) { | |
| 2896 PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl(varia
ble); | |
| 2897 setter.setter = true; | |
| 2898 setter.static = true; | |
| 2899 setter.synthetic = true; | |
| 2900 setter.variable = variable; | |
| 2901 setter.parameters = <ParameterElement> [requiredParameter2("_${name}", typ
e)]; | |
| 2902 setter.returnType = VoidTypeImpl.instance; | |
| 2903 setter.type = new FunctionTypeImpl.con1(setter); | |
| 2904 variable.setter = setter; | |
| 2905 } | |
| 2906 return variable; | |
| 2907 } | |
| 2908 } | |
| 2909 | |
| 2910 class ElementKindTest extends EngineTestCase { | 2184 class ElementKindTest extends EngineTestCase { |
| 2911 void test_of_nonNull() { | 2185 void test_of_nonNull() { |
| 2912 JUnitTestCase.assertSame(ElementKind.CLASS, ElementKind.of(ElementFactory.cl
assElement2("A", []))); | 2186 JUnitTestCase.assertSame(ElementKind.CLASS, ElementKind.of(ElementFactory.cl
assElement2("A", []))); |
| 2913 } | 2187 } |
| 2914 | 2188 |
| 2915 void test_of_null() { | 2189 void test_of_null() { |
| 2916 JUnitTestCase.assertSame(ElementKind.ERROR, ElementKind.of(null)); | 2190 JUnitTestCase.assertSame(ElementKind.ERROR, ElementKind.of(null)); |
| 2917 } | 2191 } |
| 2918 | 2192 |
| 2919 static dartSuite() { | 2193 static dartSuite() { |
| 2920 _ut.group('ElementKindTest', () { | 2194 _ut.group('ElementKindTest', () { |
| 2921 _ut.test('test_of_nonNull', () { | 2195 _ut.test('test_of_nonNull', () { |
| 2922 final __test = new ElementKindTest(); | 2196 final __test = new ElementKindTest(); |
| 2923 runJUnitTest(__test, __test.test_of_nonNull); | 2197 runJUnitTest(__test, __test.test_of_nonNull); |
| 2924 }); | 2198 }); |
| 2925 _ut.test('test_of_null', () { | 2199 _ut.test('test_of_null', () { |
| 2926 final __test = new ElementKindTest(); | 2200 final __test = new ElementKindTest(); |
| 2927 runJUnitTest(__test, __test.test_of_null); | 2201 runJUnitTest(__test, __test.test_of_null); |
| 2928 }); | 2202 }); |
| 2929 }); | 2203 }); |
| 2930 } | 2204 } |
| 2931 } | 2205 } |
| 2932 | 2206 |
| 2933 class ClassElementImplTest extends EngineTestCase { | 2207 class InterfaceTypeImplTest extends EngineTestCase { |
| 2934 void test_getAllSupertypes_interface() { | 2208 /** |
| 2209 * The type provider used to access the types. |
| 2210 */ |
| 2211 TestTypeProvider _typeProvider; |
| 2212 |
| 2213 @override |
| 2214 void setUp() { |
| 2215 _typeProvider = new TestTypeProvider(); |
| 2216 } |
| 2217 |
| 2218 void test_computeLongestInheritancePathToObject_multipleInterfacePaths() { |
| 2219 // |
| 2220 // Object |
| 2221 // | |
| 2222 // A |
| 2223 // / \ |
| 2224 // B C |
| 2225 // | | |
| 2226 // | D |
| 2227 // \ / |
| 2228 // E |
| 2229 // |
| 2230 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2231 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2232 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2233 ClassElementImpl classD = ElementFactory.classElement2("D", []); |
| 2234 ClassElementImpl classE = ElementFactory.classElement2("E", []); |
| 2235 classB.interfaces = <InterfaceType> [classA.type]; |
| 2236 classC.interfaces = <InterfaceType> [classA.type]; |
| 2237 classD.interfaces = <InterfaceType> [classC.type]; |
| 2238 classE.interfaces = <InterfaceType> [classB.type, classD.type]; |
| 2239 // assertion: even though the longest path to Object for typeB is 2, and typ
eE implements typeB, |
| 2240 // the longest path for typeE is 4 since it also implements typeD |
| 2241 JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classB.type)); |
| 2242 JUnitTestCase.assertEquals(4, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classE.type)); |
| 2243 } |
| 2244 |
| 2245 void test_computeLongestInheritancePathToObject_multipleSuperclassPaths() { |
| 2246 // |
| 2247 // Object |
| 2248 // | |
| 2249 // A |
| 2250 // / \ |
| 2251 // B C |
| 2252 // | | |
| 2253 // | D |
| 2254 // \ / |
| 2255 // E |
| 2256 // |
| 2935 ClassElement classA = ElementFactory.classElement2("A", []); | 2257 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2936 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2258 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 2937 ClassElementImpl elementC = ElementFactory.classElement2("C", []); | 2259 ClassElement classC = ElementFactory.classElement("C", classA.type, []); |
| 2938 InterfaceType typeObject = classA.supertype; | 2260 ClassElement classD = ElementFactory.classElement("D", classC.type, []); |
| 2939 InterfaceType typeA = classA.type; | 2261 ClassElementImpl classE = ElementFactory.classElement("E", classB.type, []); |
| 2940 InterfaceType typeB = classB.type; | 2262 classE.interfaces = <InterfaceType> [classD.type]; |
| 2941 InterfaceType typeC = elementC.type; | 2263 // assertion: even though the longest path to Object for typeB is 2, and typ
eE extends typeB, |
| 2942 elementC.interfaces = <InterfaceType> [typeB]; | 2264 // the longest path for typeE is 4 since it also implements typeD |
| 2943 List<InterfaceType> supers = elementC.allSupertypes; | 2265 JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classB.type)); |
| 2944 List<InterfaceType> types = new List<InterfaceType>(); | 2266 JUnitTestCase.assertEquals(4, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classE.type)); |
| 2945 types.addAll(supers); | 2267 } |
| 2946 JUnitTestCase.assertTrue(types.contains(typeA)); | 2268 |
| 2947 JUnitTestCase.assertTrue(types.contains(typeB)); | 2269 void test_computeLongestInheritancePathToObject_object() { |
| 2948 JUnitTestCase.assertTrue(types.contains(typeObject)); | 2270 // |
| 2949 JUnitTestCase.assertFalse(types.contains(typeC)); | 2271 // Object |
| 2950 } | 2272 // | |
| 2951 | 2273 // A |
| 2952 void test_getAllSupertypes_mixins() { | 2274 // |
| 2275 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2276 InterfaceType object = classA.supertype; |
| 2277 JUnitTestCase.assertEquals(0, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(object)); |
| 2278 } |
| 2279 |
| 2280 void test_computeLongestInheritancePathToObject_recursion() { |
| 2281 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2282 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 2283 classA.supertype = classB.type; |
| 2284 JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classA.type)); |
| 2285 } |
| 2286 |
| 2287 void test_computeLongestInheritancePathToObject_singleInterfacePath() { |
| 2288 // |
| 2289 // Object |
| 2290 // | |
| 2291 // A |
| 2292 // | |
| 2293 // B |
| 2294 // | |
| 2295 // C |
| 2296 // |
| 2297 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2298 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2299 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2300 classB.interfaces = <InterfaceType> [classA.type]; |
| 2301 classC.interfaces = <InterfaceType> [classB.type]; |
| 2302 JUnitTestCase.assertEquals(1, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classA.type)); |
| 2303 JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classB.type)); |
| 2304 JUnitTestCase.assertEquals(3, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classC.type)); |
| 2305 } |
| 2306 |
| 2307 void test_computeLongestInheritancePathToObject_singleSuperclassPath() { |
| 2308 // |
| 2309 // Object |
| 2310 // | |
| 2311 // A |
| 2312 // | |
| 2313 // B |
| 2314 // | |
| 2315 // C |
| 2316 // |
| 2317 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2318 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 2319 ClassElement classC = ElementFactory.classElement("C", classB.type, []); |
| 2320 JUnitTestCase.assertEquals(1, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classA.type)); |
| 2321 JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classB.type)); |
| 2322 JUnitTestCase.assertEquals(3, InterfaceTypeImpl.computeLongestInheritancePat
hToObject(classC.type)); |
| 2323 } |
| 2324 |
| 2325 void test_computeSuperinterfaceSet_genericInterfacePath() { |
| 2326 // |
| 2327 // A |
| 2328 // | implements |
| 2329 // B<T> |
| 2330 // | implements |
| 2331 // C<T> |
| 2332 // |
| 2333 // D |
| 2334 // |
| 2335 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2336 ClassElementImpl classB = ElementFactory.classElement2("B", ["T"]); |
| 2337 ClassElementImpl classC = ElementFactory.classElement2("C", ["T"]); |
| 2338 ClassElement classD = ElementFactory.classElement2("D", []); |
| 2339 InterfaceType typeA = classA.type; |
| 2340 classB.interfaces = <InterfaceType> [typeA]; |
| 2341 InterfaceTypeImpl typeBT = new InterfaceTypeImpl.con1(classB); |
| 2342 DartType typeT = classC.type.typeArguments[0]; |
| 2343 typeBT.typeArguments = <DartType> [typeT]; |
| 2344 classC.interfaces = <InterfaceType> [typeBT]; |
| 2345 // A |
| 2346 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(typeA); |
| 2347 EngineTestCase.assertSizeOfSet(1, superinterfacesOfA); |
| 2348 InterfaceType typeObject = ElementFactory.object.type; |
| 2349 JUnitTestCase.assertTrue(superinterfacesOfA.contains(typeObject)); |
| 2350 // B<D> |
| 2351 InterfaceTypeImpl typeBD = new InterfaceTypeImpl.con1(classB); |
| 2352 typeBD.typeArguments = <DartType> [classD.type]; |
| 2353 Set<InterfaceType> superinterfacesOfBD = InterfaceTypeImpl.computeSuperinter
faceSet(typeBD); |
| 2354 EngineTestCase.assertSizeOfSet(2, superinterfacesOfBD); |
| 2355 JUnitTestCase.assertTrue(superinterfacesOfBD.contains(typeObject)); |
| 2356 JUnitTestCase.assertTrue(superinterfacesOfBD.contains(typeA)); |
| 2357 // C<D> |
| 2358 InterfaceTypeImpl typeCD = new InterfaceTypeImpl.con1(classC); |
| 2359 typeCD.typeArguments = <DartType> [classD.type]; |
| 2360 Set<InterfaceType> superinterfacesOfCD = InterfaceTypeImpl.computeSuperinter
faceSet(typeCD); |
| 2361 EngineTestCase.assertSizeOfSet(3, superinterfacesOfCD); |
| 2362 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeObject)); |
| 2363 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeA)); |
| 2364 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeBD)); |
| 2365 } |
| 2366 |
| 2367 void test_computeSuperinterfaceSet_genericSuperclassPath() { |
| 2368 // |
| 2369 // A |
| 2370 // | |
| 2371 // B<T> |
| 2372 // | |
| 2373 // C<T> |
| 2374 // |
| 2375 // D |
| 2376 // |
| 2377 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2378 InterfaceType typeA = classA.type; |
| 2379 ClassElement classB = ElementFactory.classElement("B", typeA, ["T"]); |
| 2380 ClassElementImpl classC = ElementFactory.classElement2("C", ["T"]); |
| 2381 InterfaceTypeImpl typeBT = new InterfaceTypeImpl.con1(classB); |
| 2382 DartType typeT = classC.type.typeArguments[0]; |
| 2383 typeBT.typeArguments = <DartType> [typeT]; |
| 2384 classC.supertype = typeBT; |
| 2385 ClassElement classD = ElementFactory.classElement2("D", []); |
| 2386 // A |
| 2387 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(typeA); |
| 2388 EngineTestCase.assertSizeOfSet(1, superinterfacesOfA); |
| 2389 InterfaceType typeObject = ElementFactory.object.type; |
| 2390 JUnitTestCase.assertTrue(superinterfacesOfA.contains(typeObject)); |
| 2391 // B<D> |
| 2392 InterfaceTypeImpl typeBD = new InterfaceTypeImpl.con1(classB); |
| 2393 typeBD.typeArguments = <DartType> [classD.type]; |
| 2394 Set<InterfaceType> superinterfacesOfBD = InterfaceTypeImpl.computeSuperinter
faceSet(typeBD); |
| 2395 EngineTestCase.assertSizeOfSet(2, superinterfacesOfBD); |
| 2396 JUnitTestCase.assertTrue(superinterfacesOfBD.contains(typeObject)); |
| 2397 JUnitTestCase.assertTrue(superinterfacesOfBD.contains(typeA)); |
| 2398 // C<D> |
| 2399 InterfaceTypeImpl typeCD = new InterfaceTypeImpl.con1(classC); |
| 2400 typeCD.typeArguments = <DartType> [classD.type]; |
| 2401 Set<InterfaceType> superinterfacesOfCD = InterfaceTypeImpl.computeSuperinter
faceSet(typeCD); |
| 2402 EngineTestCase.assertSizeOfSet(3, superinterfacesOfCD); |
| 2403 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeObject)); |
| 2404 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeA)); |
| 2405 JUnitTestCase.assertTrue(superinterfacesOfCD.contains(typeBD)); |
| 2406 } |
| 2407 |
| 2408 void test_computeSuperinterfaceSet_multipleInterfacePaths() { |
| 2409 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2410 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2411 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2412 ClassElementImpl classD = ElementFactory.classElement2("D", []); |
| 2413 ClassElementImpl classE = ElementFactory.classElement2("E", []); |
| 2414 classB.interfaces = <InterfaceType> [classA.type]; |
| 2415 classC.interfaces = <InterfaceType> [classA.type]; |
| 2416 classD.interfaces = <InterfaceType> [classC.type]; |
| 2417 classE.interfaces = <InterfaceType> [classB.type, classD.type]; |
| 2418 // D |
| 2419 Set<InterfaceType> superinterfacesOfD = InterfaceTypeImpl.computeSuperinterf
aceSet(classD.type); |
| 2420 EngineTestCase.assertSizeOfSet(3, superinterfacesOfD); |
| 2421 JUnitTestCase.assertTrue(superinterfacesOfD.contains(ElementFactory.object.t
ype)); |
| 2422 JUnitTestCase.assertTrue(superinterfacesOfD.contains(classA.type)); |
| 2423 JUnitTestCase.assertTrue(superinterfacesOfD.contains(classC.type)); |
| 2424 // E |
| 2425 Set<InterfaceType> superinterfacesOfE = InterfaceTypeImpl.computeSuperinterf
aceSet(classE.type); |
| 2426 EngineTestCase.assertSizeOfSet(5, superinterfacesOfE); |
| 2427 JUnitTestCase.assertTrue(superinterfacesOfE.contains(ElementFactory.object.t
ype)); |
| 2428 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classA.type)); |
| 2429 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classB.type)); |
| 2430 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classC.type)); |
| 2431 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classD.type)); |
| 2432 } |
| 2433 |
| 2434 void test_computeSuperinterfaceSet_multipleSuperclassPaths() { |
| 2435 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2436 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 2437 ClassElement classC = ElementFactory.classElement("C", classA.type, []); |
| 2438 ClassElement classD = ElementFactory.classElement("D", classC.type, []); |
| 2439 ClassElementImpl classE = ElementFactory.classElement("E", classB.type, []); |
| 2440 classE.interfaces = <InterfaceType> [classD.type]; |
| 2441 // D |
| 2442 Set<InterfaceType> superinterfacesOfD = InterfaceTypeImpl.computeSuperinterf
aceSet(classD.type); |
| 2443 EngineTestCase.assertSizeOfSet(3, superinterfacesOfD); |
| 2444 JUnitTestCase.assertTrue(superinterfacesOfD.contains(ElementFactory.object.t
ype)); |
| 2445 JUnitTestCase.assertTrue(superinterfacesOfD.contains(classA.type)); |
| 2446 JUnitTestCase.assertTrue(superinterfacesOfD.contains(classC.type)); |
| 2447 // E |
| 2448 Set<InterfaceType> superinterfacesOfE = InterfaceTypeImpl.computeSuperinterf
aceSet(classE.type); |
| 2449 EngineTestCase.assertSizeOfSet(5, superinterfacesOfE); |
| 2450 JUnitTestCase.assertTrue(superinterfacesOfE.contains(ElementFactory.object.t
ype)); |
| 2451 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classA.type)); |
| 2452 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classB.type)); |
| 2453 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classC.type)); |
| 2454 JUnitTestCase.assertTrue(superinterfacesOfE.contains(classD.type)); |
| 2455 } |
| 2456 |
| 2457 void test_computeSuperinterfaceSet_recursion() { |
| 2458 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2459 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 2460 classA.supertype = classB.type; |
| 2461 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); |
| 2462 EngineTestCase.assertSizeOfSet(2, superinterfacesOfB); |
| 2463 } |
| 2464 |
| 2465 void test_computeSuperinterfaceSet_singleInterfacePath() { |
| 2466 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2467 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2468 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2469 classB.interfaces = <InterfaceType> [classA.type]; |
| 2470 classC.interfaces = <InterfaceType> [classB.type]; |
| 2471 // A |
| 2472 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(classA.type); |
| 2473 EngineTestCase.assertSizeOfSet(1, superinterfacesOfA); |
| 2474 JUnitTestCase.assertTrue(superinterfacesOfA.contains(ElementFactory.object.t
ype)); |
| 2475 // B |
| 2476 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); |
| 2477 EngineTestCase.assertSizeOfSet(2, superinterfacesOfB); |
| 2478 JUnitTestCase.assertTrue(superinterfacesOfB.contains(ElementFactory.object.t
ype)); |
| 2479 JUnitTestCase.assertTrue(superinterfacesOfB.contains(classA.type)); |
| 2480 // C |
| 2481 Set<InterfaceType> superinterfacesOfC = InterfaceTypeImpl.computeSuperinterf
aceSet(classC.type); |
| 2482 EngineTestCase.assertSizeOfSet(3, superinterfacesOfC); |
| 2483 JUnitTestCase.assertTrue(superinterfacesOfC.contains(ElementFactory.object.t
ype)); |
| 2484 JUnitTestCase.assertTrue(superinterfacesOfC.contains(classA.type)); |
| 2485 JUnitTestCase.assertTrue(superinterfacesOfC.contains(classB.type)); |
| 2486 } |
| 2487 |
| 2488 void test_computeSuperinterfaceSet_singleSuperclassPath() { |
| 2489 // |
| 2490 // A |
| 2491 // | |
| 2492 // B |
| 2493 // | |
| 2494 // C |
| 2495 // |
| 2496 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2497 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 2498 ClassElement classC = ElementFactory.classElement("C", classB.type, []); |
| 2499 // A |
| 2500 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(classA.type); |
| 2501 EngineTestCase.assertSizeOfSet(1, superinterfacesOfA); |
| 2502 JUnitTestCase.assertTrue(superinterfacesOfA.contains(ElementFactory.object.t
ype)); |
| 2503 // B |
| 2504 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); |
| 2505 EngineTestCase.assertSizeOfSet(2, superinterfacesOfB); |
| 2506 JUnitTestCase.assertTrue(superinterfacesOfB.contains(ElementFactory.object.t
ype)); |
| 2507 JUnitTestCase.assertTrue(superinterfacesOfB.contains(classA.type)); |
| 2508 // C |
| 2509 Set<InterfaceType> superinterfacesOfC = InterfaceTypeImpl.computeSuperinterf
aceSet(classC.type); |
| 2510 EngineTestCase.assertSizeOfSet(3, superinterfacesOfC); |
| 2511 JUnitTestCase.assertTrue(superinterfacesOfC.contains(ElementFactory.object.t
ype)); |
| 2512 JUnitTestCase.assertTrue(superinterfacesOfC.contains(classA.type)); |
| 2513 JUnitTestCase.assertTrue(superinterfacesOfC.contains(classB.type)); |
| 2514 } |
| 2515 |
| 2516 void test_creation() { |
| 2517 JUnitTestCase.assertNotNull(new InterfaceTypeImpl.con1(ElementFactory.classE
lement2("A", []))); |
| 2518 } |
| 2519 |
| 2520 void test_getAccessors() { |
| 2521 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); |
| 2522 PropertyAccessorElement getterG = ElementFactory.getterElement("g", false, n
ull); |
| 2523 PropertyAccessorElement getterH = ElementFactory.getterElement("h", false, n
ull); |
| 2524 typeElement.accessors = <PropertyAccessorElement> [getterG, getterH]; |
| 2525 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |
| 2526 JUnitTestCase.assertEquals(2, type.accessors.length); |
| 2527 } |
| 2528 |
| 2529 void test_getAccessors_empty() { |
| 2530 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); |
| 2531 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |
| 2532 JUnitTestCase.assertEquals(0, type.accessors.length); |
| 2533 } |
| 2534 |
| 2535 void test_getElement() { |
| 2536 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); |
| 2537 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |
| 2538 JUnitTestCase.assertEquals(typeElement, type.element); |
| 2539 } |
| 2540 |
| 2541 void test_getGetter_implemented() { |
| 2542 // |
| 2543 // class A { g {} } |
| 2544 // |
| 2545 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2546 String getterName = "g"; |
| 2547 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); |
| 2548 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 2549 InterfaceType typeA = classA.type; |
| 2550 JUnitTestCase.assertSame(getterG, typeA.getGetter(getterName)); |
| 2551 } |
| 2552 |
| 2553 void test_getGetter_parameterized() { |
| 2554 // |
| 2555 // class A<E> { E get g {} } |
| 2556 // |
| 2557 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
| 2558 DartType typeE = classA.type.typeArguments[0]; |
| 2559 String getterName = "g"; |
| 2560 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, typeE); |
| 2561 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 2562 (getterG.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; |
| 2563 // |
| 2564 // A<I> |
| 2565 // |
| 2566 InterfaceType typeI = ElementFactory.classElement2("I", []).type; |
| 2567 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |
| 2568 typeAI.typeArguments = <DartType> [typeI]; |
| 2569 PropertyAccessorElement getter = typeAI.getGetter(getterName); |
| 2570 JUnitTestCase.assertNotNull(getter); |
| 2571 FunctionType getterType = getter.type; |
| 2572 JUnitTestCase.assertSame(typeI, getterType.returnType); |
| 2573 } |
| 2574 |
| 2575 void test_getGetter_unimplemented() { |
| 2576 // |
| 2577 // class A {} |
| 2578 // |
| 2579 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2580 InterfaceType typeA = classA.type; |
| 2581 JUnitTestCase.assertNull(typeA.getGetter("g")); |
| 2582 } |
| 2583 |
| 2584 void test_getInterfaces_nonParameterized() { |
| 2585 // |
| 2586 // class C implements A, B |
| 2587 // |
| 2588 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2589 InterfaceType typeA = classA.type; |
| 2590 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2591 InterfaceType typeB = classB.type; |
| 2592 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2593 classC.interfaces = <InterfaceType> [typeA, typeB]; |
| 2594 List<InterfaceType> interfaces = classC.type.interfaces; |
| 2595 EngineTestCase.assertLength(2, interfaces); |
| 2596 if (identical(interfaces[0], typeA)) { |
| 2597 JUnitTestCase.assertSame(typeB, interfaces[1]); |
| 2598 } else { |
| 2599 JUnitTestCase.assertSame(typeB, interfaces[0]); |
| 2600 JUnitTestCase.assertSame(typeA, interfaces[1]); |
| 2601 } |
| 2602 } |
| 2603 |
| 2604 void test_getInterfaces_parameterized() { |
| 2605 // |
| 2606 // class A<E> |
| 2607 // class B<F> implements A<F> |
| 2608 // |
| 2609 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
| 2610 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |
| 2611 InterfaceType typeB = classB.type; |
| 2612 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |
| 2613 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; |
| 2614 classB.interfaces = <InterfaceType> [typeAF]; |
| 2615 // |
| 2616 // B<I> |
| 2617 // |
| 2618 InterfaceType typeI = ElementFactory.classElement2("I", []).type; |
| 2619 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |
| 2620 typeBI.typeArguments = <DartType> [typeI]; |
| 2621 List<InterfaceType> interfaces = typeBI.interfaces; |
| 2622 EngineTestCase.assertLength(1, interfaces); |
| 2623 InterfaceType result = interfaces[0]; |
| 2624 JUnitTestCase.assertSame(classA, result.element); |
| 2625 JUnitTestCase.assertSame(typeI, result.typeArguments[0]); |
| 2626 } |
| 2627 |
| 2628 void test_getLeastUpperBound_directInterfaceCase() { |
| 2629 // |
| 2630 // class A |
| 2631 // class B implements A |
| 2632 // class C implements B |
| 2633 // |
| 2634 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2635 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2636 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2637 InterfaceType typeA = classA.type; |
| 2638 InterfaceType typeB = classB.type; |
| 2639 InterfaceType typeC = classC.type; |
| 2640 classB.interfaces = <InterfaceType> [typeA]; |
| 2641 classC.interfaces = <InterfaceType> [typeB]; |
| 2642 JUnitTestCase.assertEquals(typeB, typeB.getLeastUpperBound(typeC)); |
| 2643 JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeB)); |
| 2644 } |
| 2645 |
| 2646 void test_getLeastUpperBound_directSubclassCase() { |
| 2647 // |
| 2648 // class A |
| 2649 // class B extends A |
| 2650 // class C extends B |
| 2651 // |
| 2652 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2653 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 2654 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); |
| 2655 InterfaceType typeB = classB.type; |
| 2656 InterfaceType typeC = classC.type; |
| 2657 JUnitTestCase.assertEquals(typeB, typeB.getLeastUpperBound(typeC)); |
| 2658 JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeB)); |
| 2659 } |
| 2660 |
| 2661 void test_getLeastUpperBound_functionType() { |
| 2662 DartType interfaceType = ElementFactory.classElement2("A", []).type; |
| 2663 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(new FunctionElemen
tImpl.forNode(AstFactory.identifier3("f"))); |
| 2664 JUnitTestCase.assertNull(interfaceType.getLeastUpperBound(functionType)); |
| 2665 } |
| 2666 |
| 2667 void test_getLeastUpperBound_mixinCase() { |
| 2668 // |
| 2669 // class A |
| 2670 // class B extends A |
| 2671 // class C extends A |
| 2672 // class D extends B with M, N, O, P |
| 2673 // |
| 2674 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2675 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 2676 ClassElement classC = ElementFactory.classElement("C", classA.type, []); |
| 2677 ClassElementImpl classD = ElementFactory.classElement("D", classB.type, []); |
| 2678 InterfaceType typeA = classA.type; |
| 2679 InterfaceType typeC = classC.type; |
| 2680 InterfaceType typeD = classD.type; |
| 2681 classD.mixins = <InterfaceType> [ |
| 2682 ElementFactory.classElement2("M", []).type, |
| 2683 ElementFactory.classElement2("N", []).type, |
| 2684 ElementFactory.classElement2("O", []).type, |
| 2685 ElementFactory.classElement2("P", []).type]; |
| 2686 JUnitTestCase.assertEquals(typeA, typeD.getLeastUpperBound(typeC)); |
| 2687 JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeD)); |
| 2688 } |
| 2689 |
| 2690 void test_getLeastUpperBound_null() { |
| 2691 DartType interfaceType = ElementFactory.classElement2("A", []).type; |
| 2692 JUnitTestCase.assertNull(interfaceType.getLeastUpperBound(null)); |
| 2693 } |
| 2694 |
| 2695 void test_getLeastUpperBound_object() { |
| 2696 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2697 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2698 InterfaceType typeA = classA.type; |
| 2699 InterfaceType typeB = classB.type; |
| 2700 DartType typeObject = typeA.element.supertype; |
| 2701 // assert that object does not have a super type |
| 2702 JUnitTestCase.assertNull((typeObject.element as ClassElement).supertype); |
| 2703 // assert that both A and B have the same super type of Object |
| 2704 JUnitTestCase.assertEquals(typeObject, typeB.element.supertype); |
| 2705 // finally, assert that the only least upper bound of A and B is Object |
| 2706 JUnitTestCase.assertEquals(typeObject, typeA.getLeastUpperBound(typeB)); |
| 2707 } |
| 2708 |
| 2709 void test_getLeastUpperBound_self() { |
| 2710 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2711 InterfaceType typeA = classA.type; |
| 2712 JUnitTestCase.assertEquals(typeA, typeA.getLeastUpperBound(typeA)); |
| 2713 } |
| 2714 |
| 2715 void test_getLeastUpperBound_sharedSuperclass1() { |
| 2716 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2717 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 2718 ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); |
| 2719 InterfaceType typeA = classA.type; |
| 2720 InterfaceType typeB = classB.type; |
| 2721 InterfaceType typeC = classC.type; |
| 2722 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); |
| 2723 JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); |
| 2724 } |
| 2725 |
| 2726 void test_getLeastUpperBound_sharedSuperclass2() { |
| 2727 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2728 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 2729 ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); |
| 2730 ClassElementImpl classD = ElementFactory.classElement("D", classC.type, []); |
| 2731 InterfaceType typeA = classA.type; |
| 2732 InterfaceType typeB = classB.type; |
| 2733 InterfaceType typeD = classD.type; |
| 2734 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeD)); |
| 2735 JUnitTestCase.assertEquals(typeA, typeD.getLeastUpperBound(typeB)); |
| 2736 } |
| 2737 |
| 2738 void test_getLeastUpperBound_sharedSuperclass3() { |
| 2739 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2740 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 2741 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); |
| 2742 ClassElementImpl classD = ElementFactory.classElement("D", classB.type, []); |
| 2743 InterfaceType typeB = classB.type; |
| 2744 InterfaceType typeC = classC.type; |
| 2745 InterfaceType typeD = classD.type; |
| 2746 JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeD)); |
| 2747 JUnitTestCase.assertEquals(typeB, typeD.getLeastUpperBound(typeC)); |
| 2748 } |
| 2749 |
| 2750 void test_getLeastUpperBound_sharedSuperclass4() { |
| 2751 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2752 ClassElement classA2 = ElementFactory.classElement2("A2", []); |
| 2753 ClassElement classA3 = ElementFactory.classElement2("A3", []); |
| 2754 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 2755 ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); |
| 2756 InterfaceType typeA = classA.type; |
| 2757 InterfaceType typeA2 = classA2.type; |
| 2758 InterfaceType typeA3 = classA3.type; |
| 2759 InterfaceType typeB = classB.type; |
| 2760 InterfaceType typeC = classC.type; |
| 2761 classB.interfaces = <InterfaceType> [typeA2]; |
| 2762 classC.interfaces = <InterfaceType> [typeA3]; |
| 2763 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); |
| 2764 JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); |
| 2765 } |
| 2766 |
| 2767 void test_getLeastUpperBound_sharedSuperinterface1() { |
| 2768 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2769 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2770 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2771 InterfaceType typeA = classA.type; |
| 2772 InterfaceType typeB = classB.type; |
| 2773 InterfaceType typeC = classC.type; |
| 2774 classB.interfaces = <InterfaceType> [typeA]; |
| 2775 classC.interfaces = <InterfaceType> [typeA]; |
| 2776 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); |
| 2777 JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); |
| 2778 } |
| 2779 |
| 2780 void test_getLeastUpperBound_sharedSuperinterface2() { |
| 2781 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2782 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2783 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2784 ClassElementImpl classD = ElementFactory.classElement2("D", []); |
| 2785 InterfaceType typeA = classA.type; |
| 2786 InterfaceType typeB = classB.type; |
| 2787 InterfaceType typeC = classC.type; |
| 2788 InterfaceType typeD = classD.type; |
| 2789 classB.interfaces = <InterfaceType> [typeA]; |
| 2790 classC.interfaces = <InterfaceType> [typeA]; |
| 2791 classD.interfaces = <InterfaceType> [typeC]; |
| 2792 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeD)); |
| 2793 JUnitTestCase.assertEquals(typeA, typeD.getLeastUpperBound(typeB)); |
| 2794 } |
| 2795 |
| 2796 void test_getLeastUpperBound_sharedSuperinterface3() { |
| 2797 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2798 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2799 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2800 ClassElementImpl classD = ElementFactory.classElement2("D", []); |
| 2801 InterfaceType typeA = classA.type; |
| 2802 InterfaceType typeB = classB.type; |
| 2803 InterfaceType typeC = classC.type; |
| 2804 InterfaceType typeD = classD.type; |
| 2805 classB.interfaces = <InterfaceType> [typeA]; |
| 2806 classC.interfaces = <InterfaceType> [typeB]; |
| 2807 classD.interfaces = <InterfaceType> [typeB]; |
| 2808 JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeD)); |
| 2809 JUnitTestCase.assertEquals(typeB, typeD.getLeastUpperBound(typeC)); |
| 2810 } |
| 2811 |
| 2812 void test_getLeastUpperBound_sharedSuperinterface4() { |
| 2813 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2814 ClassElement classA2 = ElementFactory.classElement2("A2", []); |
| 2815 ClassElement classA3 = ElementFactory.classElement2("A3", []); |
| 2816 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2817 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2818 InterfaceType typeA = classA.type; |
| 2819 InterfaceType typeA2 = classA2.type; |
| 2820 InterfaceType typeA3 = classA3.type; |
| 2821 InterfaceType typeB = classB.type; |
| 2822 InterfaceType typeC = classC.type; |
| 2823 classB.interfaces = <InterfaceType> [typeA, typeA2]; |
| 2824 classC.interfaces = <InterfaceType> [typeA, typeA3]; |
| 2825 JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); |
| 2826 JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); |
| 2827 } |
| 2828 |
| 2829 void test_getLeastUpperBound_twoComparables() { |
| 2830 InterfaceType string = _typeProvider.stringType; |
| 2831 InterfaceType num = _typeProvider.numType; |
| 2832 JUnitTestCase.assertEquals(_typeProvider.objectType, string.getLeastUpperBou
nd(num)); |
| 2833 } |
| 2834 |
| 2835 void test_getLeastUpperBound_typeParameters_different() { |
| 2836 // |
| 2837 // class List<int> |
| 2838 // class List<double> |
| 2839 // |
| 2840 InterfaceType listType = _typeProvider.listType; |
| 2841 InterfaceType intType = _typeProvider.intType; |
| 2842 InterfaceType doubleType = _typeProvider.doubleType; |
| 2843 InterfaceType listOfIntType = listType.substitute4(<DartType> [intType]); |
| 2844 InterfaceType listOfDoubleType = listType.substitute4(<DartType> [doubleType
]); |
| 2845 JUnitTestCase.assertEquals(_typeProvider.objectType, listOfIntType.getLeastU
pperBound(listOfDoubleType)); |
| 2846 } |
| 2847 |
| 2848 void test_getLeastUpperBound_typeParameters_same() { |
| 2849 // |
| 2850 // List<int> |
| 2851 // List<int> |
| 2852 // |
| 2853 InterfaceType listType = _typeProvider.listType; |
| 2854 InterfaceType intType = _typeProvider.intType; |
| 2855 InterfaceType listOfIntType = listType.substitute4(<DartType> [intType]); |
| 2856 JUnitTestCase.assertEquals(listOfIntType, listOfIntType.getLeastUpperBound(l
istOfIntType)); |
| 2857 } |
| 2858 |
| 2859 void test_getMethod_implemented() { |
| 2860 // |
| 2861 // class A { m() {} } |
| 2862 // |
| 2863 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2864 String methodName = "m"; |
| 2865 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
]); |
| 2866 classA.methods = <MethodElement> [methodM]; |
| 2867 InterfaceType typeA = classA.type; |
| 2868 JUnitTestCase.assertSame(methodM, typeA.getMethod(methodName)); |
| 2869 } |
| 2870 |
| 2871 void test_getMethod_parameterized() { |
| 2872 // |
| 2873 // class A<E> { E m(E p) {} } |
| 2874 // |
| 2875 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
| 2876 DartType typeE = classA.type.typeArguments[0]; |
| 2877 String methodName = "m"; |
| 2878 MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE,
[typeE]); |
| 2879 classA.methods = <MethodElement> [methodM]; |
| 2880 (methodM.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; |
| 2881 // |
| 2882 // A<I> |
| 2883 // |
| 2884 InterfaceType typeI = ElementFactory.classElement2("I", []).type; |
| 2885 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |
| 2886 typeAI.typeArguments = <DartType> [typeI]; |
| 2887 MethodElement method = typeAI.getMethod(methodName); |
| 2888 JUnitTestCase.assertNotNull(method); |
| 2889 FunctionType methodType = method.type; |
| 2890 JUnitTestCase.assertSame(typeI, methodType.returnType); |
| 2891 List<DartType> parameterTypes = methodType.normalParameterTypes; |
| 2892 EngineTestCase.assertLength(1, parameterTypes); |
| 2893 JUnitTestCase.assertSame(typeI, parameterTypes[0]); |
| 2894 } |
| 2895 |
| 2896 void test_getMethod_unimplemented() { |
| 2897 // |
| 2898 // class A {} |
| 2899 // |
| 2900 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2901 InterfaceType typeA = classA.type; |
| 2902 JUnitTestCase.assertNull(typeA.getMethod("m")); |
| 2903 } |
| 2904 |
| 2905 void test_getMethods() { |
| 2906 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); |
| 2907 MethodElementImpl methodOne = ElementFactory.methodElement("one", null, []); |
| 2908 MethodElementImpl methodTwo = ElementFactory.methodElement("two", null, []); |
| 2909 typeElement.methods = <MethodElement> [methodOne, methodTwo]; |
| 2910 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |
| 2911 JUnitTestCase.assertEquals(2, type.methods.length); |
| 2912 } |
| 2913 |
| 2914 void test_getMethods_empty() { |
| 2915 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); |
| 2916 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |
| 2917 JUnitTestCase.assertEquals(0, type.methods.length); |
| 2918 } |
| 2919 |
| 2920 void test_getMixins_nonParameterized() { |
| 2921 // |
| 2922 // class C extends Object with A, B |
| 2923 // |
| 2924 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2925 InterfaceType typeA = classA.type; |
| 2926 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 2927 InterfaceType typeB = classB.type; |
| 2928 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2929 classC.mixins = <InterfaceType> [typeA, typeB]; |
| 2930 List<InterfaceType> interfaces = classC.type.mixins; |
| 2931 EngineTestCase.assertLength(2, interfaces); |
| 2932 if (identical(interfaces[0], typeA)) { |
| 2933 JUnitTestCase.assertSame(typeB, interfaces[1]); |
| 2934 } else { |
| 2935 JUnitTestCase.assertSame(typeB, interfaces[0]); |
| 2936 JUnitTestCase.assertSame(typeA, interfaces[1]); |
| 2937 } |
| 2938 } |
| 2939 |
| 2940 void test_getMixins_parameterized() { |
| 2941 // |
| 2942 // class A<E> |
| 2943 // class B<F> extends Object with A<F> |
| 2944 // |
| 2945 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
| 2946 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |
| 2947 InterfaceType typeB = classB.type; |
| 2948 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |
| 2949 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; |
| 2950 classB.mixins = <InterfaceType> [typeAF]; |
| 2951 // |
| 2952 // B<I> |
| 2953 // |
| 2954 InterfaceType typeI = ElementFactory.classElement2("I", []).type; |
| 2955 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |
| 2956 typeBI.typeArguments = <DartType> [typeI]; |
| 2957 List<InterfaceType> interfaces = typeBI.mixins; |
| 2958 EngineTestCase.assertLength(1, interfaces); |
| 2959 InterfaceType result = interfaces[0]; |
| 2960 JUnitTestCase.assertSame(classA, result.element); |
| 2961 JUnitTestCase.assertSame(typeI, result.typeArguments[0]); |
| 2962 } |
| 2963 |
| 2964 void test_getSetter_implemented() { |
| 2965 // |
| 2966 // class A { s() {} } |
| 2967 // |
| 2968 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2969 String setterName = "s"; |
| 2970 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); |
| 2971 classA.accessors = <PropertyAccessorElement> [setterS]; |
| 2972 InterfaceType typeA = classA.type; |
| 2973 JUnitTestCase.assertSame(setterS, typeA.getSetter(setterName)); |
| 2974 } |
| 2975 |
| 2976 void test_getSetter_parameterized() { |
| 2977 // |
| 2978 // class A<E> { set s(E p) {} } |
| 2979 // |
| 2980 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
| 2981 DartType typeE = classA.type.typeArguments[0]; |
| 2982 String setterName = "s"; |
| 2983 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, typeE); |
| 2984 classA.accessors = <PropertyAccessorElement> [setterS]; |
| 2985 (setterS.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; |
| 2986 // |
| 2987 // A<I> |
| 2988 // |
| 2989 InterfaceType typeI = ElementFactory.classElement2("I", []).type; |
| 2990 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |
| 2991 typeAI.typeArguments = <DartType> [typeI]; |
| 2992 PropertyAccessorElement setter = typeAI.getSetter(setterName); |
| 2993 JUnitTestCase.assertNotNull(setter); |
| 2994 FunctionType setterType = setter.type; |
| 2995 List<DartType> parameterTypes = setterType.normalParameterTypes; |
| 2996 EngineTestCase.assertLength(1, parameterTypes); |
| 2997 JUnitTestCase.assertSame(typeI, parameterTypes[0]); |
| 2998 } |
| 2999 |
| 3000 void test_getSetter_unimplemented() { |
| 3001 // |
| 3002 // class A {} |
| 3003 // |
| 3004 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3005 InterfaceType typeA = classA.type; |
| 3006 JUnitTestCase.assertNull(typeA.getSetter("s")); |
| 3007 } |
| 3008 |
| 3009 void test_getSuperclass_nonParameterized() { |
| 3010 // |
| 3011 // class B extends A |
| 3012 // |
| 3013 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3014 InterfaceType typeA = classA.type; |
| 3015 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); |
| 3016 InterfaceType typeB = classB.type; |
| 3017 JUnitTestCase.assertSame(typeA, typeB.superclass); |
| 3018 } |
| 3019 |
| 3020 void test_getSuperclass_parameterized() { |
| 3021 // |
| 3022 // class A<E> |
| 3023 // class B<F> extends A<F> |
| 3024 // |
| 3025 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
| 3026 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |
| 3027 InterfaceType typeB = classB.type; |
| 3028 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |
| 3029 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; |
| 3030 classB.supertype = typeAF; |
| 3031 // |
| 3032 // B<I> |
| 3033 // |
| 3034 InterfaceType typeI = ElementFactory.classElement2("I", []).type; |
| 3035 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |
| 3036 typeBI.typeArguments = <DartType> [typeI]; |
| 3037 InterfaceType superclass = typeBI.superclass; |
| 3038 JUnitTestCase.assertSame(classA, superclass.element); |
| 3039 JUnitTestCase.assertSame(typeI, superclass.typeArguments[0]); |
| 3040 } |
| 3041 |
| 3042 void test_getTypeArguments_empty() { |
| 3043 InterfaceType type = ElementFactory.classElement2("A", []).type; |
| 3044 EngineTestCase.assertLength(0, type.typeArguments); |
| 3045 } |
| 3046 |
| 3047 void test_hashCode() { |
| 3048 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3049 InterfaceType typeA = classA.type; |
| 3050 JUnitTestCase.assertFalse(0 == typeA.hashCode); |
| 3051 } |
| 3052 |
| 3053 void test_isAssignableTo_typeVariables() { |
| 3054 // |
| 3055 // class A<E> {} |
| 3056 // class B<F, G> { |
| 3057 // A<F> af; |
| 3058 // f (A<G> ag) { |
| 3059 // af = ag; |
| 3060 // } |
| 3061 // } |
| 3062 // |
| 3063 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
| 3064 ClassElement classB = ElementFactory.classElement2("B", ["F", "G"]); |
| 3065 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |
| 3066 typeAF.typeArguments = <DartType> [classB.typeParameters[0].type]; |
| 3067 InterfaceTypeImpl typeAG = new InterfaceTypeImpl.con1(classA); |
| 3068 typeAG.typeArguments = <DartType> [classB.typeParameters[1].type]; |
| 3069 JUnitTestCase.assertFalse(typeAG.isAssignableTo(typeAF)); |
| 3070 } |
| 3071 |
| 3072 void test_isAssignableTo_void() { |
| 3073 JUnitTestCase.assertFalse(VoidTypeImpl.instance.isAssignableTo(_typeProvider
.intType)); |
| 3074 } |
| 3075 |
| 3076 void test_isDirectSupertypeOf_extends() { |
| 3077 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3078 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 3079 InterfaceType typeA = classA.type; |
| 3080 InterfaceType typeB = classB.type; |
| 3081 JUnitTestCase.assertTrue(typeA.isDirectSupertypeOf(typeB)); |
| 3082 } |
| 3083 |
| 3084 void test_isDirectSupertypeOf_false() { |
| 3085 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3086 ClassElement classB = ElementFactory.classElement2("B", []); |
| 3087 ClassElement classC = ElementFactory.classElement("C", classB.type, []); |
| 3088 InterfaceType typeA = classA.type; |
| 3089 InterfaceType typeC = classC.type; |
| 3090 JUnitTestCase.assertFalse(typeA.isDirectSupertypeOf(typeC)); |
| 3091 } |
| 3092 |
| 3093 void test_isDirectSupertypeOf_implements() { |
| 3094 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3095 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 3096 InterfaceType typeA = classA.type; |
| 3097 InterfaceType typeB = classB.type; |
| 3098 classB.interfaces = <InterfaceType> [typeA]; |
| 3099 JUnitTestCase.assertTrue(typeA.isDirectSupertypeOf(typeB)); |
| 3100 } |
| 3101 |
| 3102 void test_isDirectSupertypeOf_with() { |
| 3103 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3104 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 3105 InterfaceType typeA = classA.type; |
| 3106 InterfaceType typeB = classB.type; |
| 3107 classB.mixins = <InterfaceType> [typeA]; |
| 3108 JUnitTestCase.assertTrue(typeA.isDirectSupertypeOf(typeB)); |
| 3109 } |
| 3110 |
| 3111 void test_isMoreSpecificThan_bottom() { |
| 3112 DartType type = ElementFactory.classElement2("A", []).type; |
| 3113 JUnitTestCase.assertTrue(BottomTypeImpl.instance.isMoreSpecificThan(type)); |
| 3114 } |
| 3115 |
| 3116 void test_isMoreSpecificThan_covariance() { |
| 3117 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
| 3118 ClassElement classI = ElementFactory.classElement2("I", []); |
| 3119 ClassElement classJ = ElementFactory.classElement("J", classI.type, []); |
| 3120 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |
| 3121 InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA); |
| 3122 typeAI.typeArguments = <DartType> [classI.type]; |
| 3123 typeAJ.typeArguments = <DartType> [classJ.type]; |
| 3124 JUnitTestCase.assertTrue(typeAJ.isMoreSpecificThan(typeAI)); |
| 3125 JUnitTestCase.assertFalse(typeAI.isMoreSpecificThan(typeAJ)); |
| 3126 } |
| 3127 |
| 3128 void test_isMoreSpecificThan_directSupertype() { |
| 3129 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3130 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 3131 InterfaceType typeA = classA.type; |
| 3132 InterfaceType typeB = classB.type; |
| 3133 JUnitTestCase.assertTrue(typeB.isMoreSpecificThan(typeA)); |
| 3134 // the opposite test tests a different branch in isMoreSpecificThan() |
| 3135 JUnitTestCase.assertFalse(typeA.isMoreSpecificThan(typeB)); |
| 3136 } |
| 3137 |
| 3138 void test_isMoreSpecificThan_dynamic() { |
| 3139 InterfaceType type = ElementFactory.classElement2("A", []).type; |
| 3140 JUnitTestCase.assertTrue(type.isMoreSpecificThan(DynamicTypeImpl.instance)); |
| 3141 } |
| 3142 |
| 3143 void test_isMoreSpecificThan_self() { |
| 3144 InterfaceType type = ElementFactory.classElement2("A", []).type; |
| 3145 JUnitTestCase.assertTrue(type.isMoreSpecificThan(type)); |
| 3146 } |
| 3147 |
| 3148 void test_isMoreSpecificThan_transitive_interface() { |
| 3149 // |
| 3150 // class A {} |
| 3151 // class B extends A {} |
| 3152 // class C implements B {} |
| 3153 // |
| 3154 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3155 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 3156 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 3157 classC.interfaces = <InterfaceType> [classB.type]; |
| 3158 InterfaceType typeA = classA.type; |
| 3159 InterfaceType typeC = classC.type; |
| 3160 JUnitTestCase.assertTrue(typeC.isMoreSpecificThan(typeA)); |
| 3161 } |
| 3162 |
| 3163 void test_isMoreSpecificThan_transitive_mixin() { |
| 3164 // |
| 3165 // class A {} |
| 3166 // class B extends A {} |
| 3167 // class C with B {} |
| 3168 // |
| 3169 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3170 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 3171 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 3172 classC.mixins = <InterfaceType> [classB.type]; |
| 3173 InterfaceType typeA = classA.type; |
| 3174 InterfaceType typeC = classC.type; |
| 3175 JUnitTestCase.assertTrue(typeC.isMoreSpecificThan(typeA)); |
| 3176 } |
| 3177 |
| 3178 void test_isMoreSpecificThan_transitive_recursive() { |
| 3179 // |
| 3180 // class A extends B {} |
| 3181 // class B extends A {} |
| 3182 // class C {} |
| 3183 // |
| 3184 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3185 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 3186 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 3187 InterfaceType typeA = classA.type; |
| 3188 InterfaceType typeC = classC.type; |
| 3189 classA.supertype = classB.type; |
| 3190 JUnitTestCase.assertFalse(typeA.isMoreSpecificThan(typeC)); |
| 3191 } |
| 3192 |
| 3193 void test_isMoreSpecificThan_transitive_superclass() { |
| 3194 // |
| 3195 // class A {} |
| 3196 // class B extends A {} |
| 3197 // class C extends B {} |
| 3198 // |
| 3199 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3200 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 3201 ClassElement classC = ElementFactory.classElement("C", classB.type, []); |
| 3202 InterfaceType typeA = classA.type; |
| 3203 InterfaceType typeC = classC.type; |
| 3204 JUnitTestCase.assertTrue(typeC.isMoreSpecificThan(typeA)); |
| 3205 } |
| 3206 |
| 3207 void test_isMoreSpecificThan_typeParameterType() { |
| 3208 // |
| 3209 // class A<E> {} |
| 3210 // |
| 3211 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
| 3212 InterfaceType typeA = classA.type; |
| 3213 TypeParameterType parameterType = classA.typeParameters[0].type; |
| 3214 DartType objectType = _typeProvider.objectType; |
| 3215 JUnitTestCase.assertTrue(parameterType.isMoreSpecificThan(objectType)); |
| 3216 JUnitTestCase.assertFalse(parameterType.isMoreSpecificThan(typeA)); |
| 3217 } |
| 3218 |
| 3219 void test_isMoreSpecificThan_typeParameterType_withBound() { |
| 3220 // |
| 3221 // class A {} |
| 3222 // class B<E extends A> {} |
| 3223 // |
| 3224 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3225 InterfaceType typeA = classA.type; |
| 3226 ClassElementImpl classB = ElementFactory.classElement2("B", []); |
| 3227 TypeParameterElementImpl parameterEA = new TypeParameterElementImpl(AstFacto
ry.identifier3("E")); |
| 3228 TypeParameterType parameterAEType = new TypeParameterTypeImpl(parameterEA); |
| 3229 parameterEA.bound = typeA; |
| 3230 parameterEA.type = parameterAEType; |
| 3231 classB.typeParameters = <TypeParameterElementImpl> [parameterEA]; |
| 3232 JUnitTestCase.assertTrue(parameterAEType.isMoreSpecificThan(typeA)); |
| 3233 } |
| 3234 |
| 3235 void test_isSubtypeOf_directSubtype() { |
| 3236 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3237 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 3238 InterfaceType typeA = classA.type; |
| 3239 InterfaceType typeB = classB.type; |
| 3240 JUnitTestCase.assertTrue(typeB.isSubtypeOf(typeA)); |
| 3241 JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeB)); |
| 3242 } |
| 3243 |
| 3244 void test_isSubtypeOf_dynamic() { |
| 3245 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3246 InterfaceType typeA = classA.type; |
| 3247 DartType dynamicType = DynamicTypeImpl.instance; |
| 3248 JUnitTestCase.assertTrue(dynamicType.isSubtypeOf(typeA)); |
| 3249 JUnitTestCase.assertTrue(typeA.isSubtypeOf(dynamicType)); |
| 3250 } |
| 3251 |
| 3252 void test_isSubtypeOf_function() { |
| 3253 // |
| 3254 // void f(String s) {} |
| 3255 // class A { |
| 3256 // void call(String s) {} |
| 3257 // } |
| 3258 // |
| 3259 InterfaceType stringType = _typeProvider.stringType; |
| 3260 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3261 classA.methods = <MethodElement> [ElementFactory.methodElement("call", VoidT
ypeImpl.instance, [stringType])]; |
| 3262 FunctionType functionType = ElementFactory.functionElement5("f", <ClassEleme
nt> [stringType.element]).type; |
| 3263 JUnitTestCase.assertTrue(classA.type.isSubtypeOf(functionType)); |
| 3264 } |
| 3265 |
| 3266 void test_isSubtypeOf_interface() { |
| 2953 ClassElement classA = ElementFactory.classElement2("A", []); | 3267 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2954 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 3268 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 2955 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 3269 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 2956 InterfaceType typeObject = classA.supertype; | 3270 InterfaceType typeObject = classA.supertype; |
| 2957 InterfaceType typeA = classA.type; | 3271 InterfaceType typeA = classA.type; |
| 2958 InterfaceType typeB = classB.type; | 3272 InterfaceType typeB = classB.type; |
| 2959 InterfaceType typeC = classC.type; | 3273 InterfaceType typeC = classC.type; |
| 3274 classC.interfaces = <InterfaceType> [typeB]; |
| 3275 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeB)); |
| 3276 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeObject)); |
| 3277 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeA)); |
| 3278 JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); |
| 3279 } |
| 3280 |
| 3281 void test_isSubtypeOf_mixins() { |
| 3282 // |
| 3283 // class A {} |
| 3284 // class B extends A {} |
| 3285 // class C with B {} |
| 3286 // |
| 3287 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3288 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 3289 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 3290 InterfaceType typeObject = classA.supertype; |
| 3291 InterfaceType typeA = classA.type; |
| 3292 InterfaceType typeB = classB.type; |
| 3293 InterfaceType typeC = classC.type; |
| 2960 classC.mixins = <InterfaceType> [typeB]; | 3294 classC.mixins = <InterfaceType> [typeB]; |
| 2961 List<InterfaceType> supers = classC.allSupertypes; | 3295 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeB)); |
| 2962 List<InterfaceType> types = new List<InterfaceType>(); | 3296 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeObject)); |
| 2963 types.addAll(supers); | 3297 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeA)); |
| 2964 JUnitTestCase.assertFalse(types.contains(typeA)); | 3298 JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); |
| 2965 JUnitTestCase.assertTrue(types.contains(typeB)); | 3299 } |
| 2966 JUnitTestCase.assertTrue(types.contains(typeObject)); | 3300 |
| 2967 JUnitTestCase.assertFalse(types.contains(typeC)); | 3301 void test_isSubtypeOf_object() { |
| 2968 } | 3302 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2969 | 3303 InterfaceType typeA = classA.type; |
| 2970 void test_getAllSupertypes_recursive() { | 3304 InterfaceType typeObject = classA.supertype; |
| 3305 JUnitTestCase.assertTrue(typeA.isSubtypeOf(typeObject)); |
| 3306 JUnitTestCase.assertFalse(typeObject.isSubtypeOf(typeA)); |
| 3307 } |
| 3308 |
| 3309 void test_isSubtypeOf_self() { |
| 3310 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3311 InterfaceType typeA = classA.type; |
| 3312 JUnitTestCase.assertTrue(typeA.isSubtypeOf(typeA)); |
| 3313 } |
| 3314 |
| 3315 void test_isSubtypeOf_transitive_recursive() { |
| 3316 // |
| 3317 // class A extends B {} |
| 3318 // class B extends A {} |
| 3319 // class C {} |
| 3320 // |
| 2971 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3321 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2972 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 3322 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 3323 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 3324 InterfaceType typeA = classA.type; |
| 3325 InterfaceType typeC = classC.type; |
| 2973 classA.supertype = classB.type; | 3326 classA.supertype = classB.type; |
| 2974 List<InterfaceType> supers = classB.allSupertypes; | 3327 JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); |
| 2975 EngineTestCase.assertLength(1, supers); | 3328 } |
| 2976 } | 3329 |
| 2977 | 3330 void test_isSubtypeOf_transitive_superclass() { |
| 2978 void test_getField() { | 3331 ClassElement classA = ElementFactory.classElement2("A", []); |
| 2979 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3332 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 2980 String fieldName = "f"; | 3333 ClassElement classC = ElementFactory.classElement("C", classB.type, []); |
| 2981 FieldElementImpl field = ElementFactory.fieldElement(fieldName, false, false
, false, null); | 3334 InterfaceType typeA = classA.type; |
| 2982 classA.fields = <FieldElement> [field]; | 3335 InterfaceType typeC = classC.type; |
| 2983 JUnitTestCase.assertSame(field, classA.getField(fieldName)); | 3336 JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeA)); |
| 2984 // no such field | 3337 JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); |
| 2985 JUnitTestCase.assertSame(null, classA.getField("noSuchField")); | 3338 } |
| 2986 } | 3339 |
| 2987 | 3340 void test_isSubtypeOf_typeArguments() { |
| 2988 void test_getMethod_declared() { | 3341 DartType dynamicType = DynamicTypeImpl.instance; |
| 3342 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
| 3343 ClassElement classI = ElementFactory.classElement2("I", []); |
| 3344 ClassElement classJ = ElementFactory.classElement("J", classI.type, []); |
| 3345 ClassElement classK = ElementFactory.classElement2("K", []); |
| 3346 InterfaceType typeA = classA.type; |
| 3347 InterfaceType typeA_dynamic = typeA.substitute4(<DartType> [dynamicType]); |
| 3348 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |
| 3349 InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA); |
| 3350 InterfaceTypeImpl typeAK = new InterfaceTypeImpl.con1(classA); |
| 3351 typeAI.typeArguments = <DartType> [classI.type]; |
| 3352 typeAJ.typeArguments = <DartType> [classJ.type]; |
| 3353 typeAK.typeArguments = <DartType> [classK.type]; |
| 3354 // A<J> <: A<I> since J <: I |
| 3355 JUnitTestCase.assertTrue(typeAJ.isSubtypeOf(typeAI)); |
| 3356 JUnitTestCase.assertFalse(typeAI.isSubtypeOf(typeAJ)); |
| 3357 // A<I> <: A<I> since I <: I |
| 3358 JUnitTestCase.assertTrue(typeAI.isSubtypeOf(typeAI)); |
| 3359 // A <: A<I> and A <: A<J> |
| 3360 JUnitTestCase.assertTrue(typeA_dynamic.isSubtypeOf(typeAI)); |
| 3361 JUnitTestCase.assertTrue(typeA_dynamic.isSubtypeOf(typeAJ)); |
| 3362 // A<I> <: A and A<J> <: A |
| 3363 JUnitTestCase.assertTrue(typeAI.isSubtypeOf(typeA_dynamic)); |
| 3364 JUnitTestCase.assertTrue(typeAJ.isSubtypeOf(typeA_dynamic)); |
| 3365 // A<I> !<: A<K> and A<K> !<: A<I> |
| 3366 JUnitTestCase.assertFalse(typeAI.isSubtypeOf(typeAK)); |
| 3367 JUnitTestCase.assertFalse(typeAK.isSubtypeOf(typeAI)); |
| 3368 } |
| 3369 |
| 3370 void test_isSubtypeOf_typeParameter() { |
| 3371 // |
| 3372 // class A<E> {} |
| 3373 // |
| 3374 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
| 3375 InterfaceType typeA = classA.type; |
| 3376 TypeParameterType parameterType = classA.typeParameters[0].type; |
| 3377 DartType dynamicType = DynamicTypeImpl.instance; |
| 3378 JUnitTestCase.assertFalse(typeA.isSubtypeOf(parameterType)); |
| 3379 JUnitTestCase.assertTrue(dynamicType.isSubtypeOf(parameterType)); |
| 3380 } |
| 3381 |
| 3382 void test_isSupertypeOf_directSupertype() { |
| 3383 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3384 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 3385 InterfaceType typeA = classA.type; |
| 3386 InterfaceType typeB = classB.type; |
| 3387 JUnitTestCase.assertFalse(typeB.isSupertypeOf(typeA)); |
| 3388 JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeB)); |
| 3389 } |
| 3390 |
| 3391 void test_isSupertypeOf_dynamic() { |
| 3392 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3393 InterfaceType typeA = classA.type; |
| 3394 DartType dynamicType = DynamicTypeImpl.instance; |
| 3395 JUnitTestCase.assertTrue(dynamicType.isSupertypeOf(typeA)); |
| 3396 JUnitTestCase.assertTrue(typeA.isSupertypeOf(dynamicType)); |
| 3397 } |
| 3398 |
| 3399 void test_isSupertypeOf_indirectSupertype() { |
| 3400 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3401 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 3402 ClassElement classC = ElementFactory.classElement("C", classB.type, []); |
| 3403 InterfaceType typeA = classA.type; |
| 3404 InterfaceType typeC = classC.type; |
| 3405 JUnitTestCase.assertFalse(typeC.isSupertypeOf(typeA)); |
| 3406 JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeC)); |
| 3407 } |
| 3408 |
| 3409 void test_isSupertypeOf_interface() { |
| 3410 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3411 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 3412 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 3413 InterfaceType typeObject = classA.supertype; |
| 3414 InterfaceType typeA = classA.type; |
| 3415 InterfaceType typeB = classB.type; |
| 3416 InterfaceType typeC = classC.type; |
| 3417 classC.interfaces = <InterfaceType> [typeB]; |
| 3418 JUnitTestCase.assertTrue(typeB.isSupertypeOf(typeC)); |
| 3419 JUnitTestCase.assertTrue(typeObject.isSupertypeOf(typeC)); |
| 3420 JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeC)); |
| 3421 JUnitTestCase.assertFalse(typeC.isSupertypeOf(typeA)); |
| 3422 } |
| 3423 |
| 3424 void test_isSupertypeOf_mixins() { |
| 3425 // |
| 3426 // class A {} |
| 3427 // class B extends A {} |
| 3428 // class C with B {} |
| 3429 // |
| 3430 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3431 ClassElement classB = ElementFactory.classElement("B", classA.type, []); |
| 3432 ClassElementImpl classC = ElementFactory.classElement2("C", []); |
| 3433 InterfaceType typeObject = classA.supertype; |
| 3434 InterfaceType typeA = classA.type; |
| 3435 InterfaceType typeB = classB.type; |
| 3436 InterfaceType typeC = classC.type; |
| 3437 classC.mixins = <InterfaceType> [typeB]; |
| 3438 JUnitTestCase.assertTrue(typeB.isSupertypeOf(typeC)); |
| 3439 JUnitTestCase.assertTrue(typeObject.isSupertypeOf(typeC)); |
| 3440 JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeC)); |
| 3441 JUnitTestCase.assertFalse(typeC.isSupertypeOf(typeA)); |
| 3442 } |
| 3443 |
| 3444 void test_isSupertypeOf_object() { |
| 3445 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3446 InterfaceType typeA = classA.type; |
| 3447 InterfaceType typeObject = classA.supertype; |
| 3448 JUnitTestCase.assertFalse(typeA.isSupertypeOf(typeObject)); |
| 3449 JUnitTestCase.assertTrue(typeObject.isSupertypeOf(typeA)); |
| 3450 } |
| 3451 |
| 3452 void test_isSupertypeOf_self() { |
| 3453 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3454 InterfaceType typeA = classA.type; |
| 3455 JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeA)); |
| 3456 } |
| 3457 |
| 3458 void test_lookUpGetter_implemented() { |
| 3459 // |
| 3460 // class A { g {} } |
| 3461 // |
| 3462 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3463 String getterName = "g"; |
| 3464 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); |
| 3465 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 3466 InterfaceType typeA = classA.type; |
| 3467 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3468 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3469 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
| 3470 JUnitTestCase.assertSame(getterG, typeA.lookUpGetter(getterName, library)); |
| 3471 } |
| 3472 |
| 3473 void test_lookUpGetter_inherited() { |
| 3474 // |
| 3475 // class A { g {} } |
| 3476 // class B extends A {} |
| 3477 // |
| 3478 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3479 String getterName = "g"; |
| 3480 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); |
| 3481 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 3482 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 3483 InterfaceType typeB = classB.type; |
| 3484 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3485 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3486 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
| 3487 JUnitTestCase.assertSame(getterG, typeB.lookUpGetter(getterName, library)); |
| 3488 } |
| 3489 |
| 3490 void test_lookUpGetter_recursive() { |
| 3491 // |
| 3492 // class A extends B {} |
| 3493 // class B extends A {} |
| 3494 // |
| 3495 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3496 InterfaceType typeA = classA.type; |
| 3497 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); |
| 3498 classA.supertype = classB.type; |
| 3499 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3500 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3501 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
| 3502 JUnitTestCase.assertNull(typeA.lookUpGetter("g", library)); |
| 3503 } |
| 3504 |
| 3505 void test_lookUpGetter_unimplemented() { |
| 3506 // |
| 3507 // class A {} |
| 3508 // |
| 3509 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3510 InterfaceType typeA = classA.type; |
| 3511 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3512 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3513 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
| 3514 JUnitTestCase.assertNull(typeA.lookUpGetter("g", library)); |
| 3515 } |
| 3516 |
| 3517 void test_lookUpMethod_implemented() { |
| 3518 // |
| 3519 // class A { m() {} } |
| 3520 // |
| 2989 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3521 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2990 String methodName = "m"; | 3522 String methodName = "m"; |
| 2991 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 3523 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
]); |
| 2992 classA.methods = <MethodElement> [method]; | 3524 classA.methods = <MethodElement> [methodM]; |
| 2993 JUnitTestCase.assertSame(method, classA.getMethod(methodName)); | 3525 InterfaceType typeA = classA.type; |
| 2994 } | 3526 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 2995 | 3527 CompilationUnitElement unit = library.definingCompilationUnit; |
| 2996 void test_getMethod_undeclared() { | 3528 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
| 3529 JUnitTestCase.assertSame(methodM, typeA.lookUpMethod(methodName, library)); |
| 3530 } |
| 3531 |
| 3532 void test_lookUpMethod_inherited() { |
| 3533 // |
| 3534 // class A { m() {} } |
| 3535 // class B extends A {} |
| 3536 // |
| 2997 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3537 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 2998 String methodName = "m"; | 3538 String methodName = "m"; |
| 2999 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 3539 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
]); |
| 3000 classA.methods = <MethodElement> [method]; | 3540 classA.methods = <MethodElement> [methodM]; |
| 3001 JUnitTestCase.assertNull(classA.getMethod("${methodName}x")); | 3541 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 3002 } | 3542 InterfaceType typeB = classB.type; |
| 3003 | 3543 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3004 void test_getNode() { | 3544 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3005 AnalysisContextHelper contextHelper = new AnalysisContextHelper(); | 3545 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
| 3006 AnalysisContext context = contextHelper.context; | 3546 JUnitTestCase.assertSame(methodM, typeB.lookUpMethod(methodName, library)); |
| 3007 Source source = contextHelper.addSource("/test.dart", EngineTestCase.createS
ource(["class A {}", "class B {}"])); | 3547 } |
| 3008 // prepare CompilationUnitElement | 3548 |
| 3009 LibraryElement libraryElement = context.computeLibraryElement(source); | 3549 void test_lookUpMethod_parameterized() { |
| 3010 CompilationUnitElement unitElement = libraryElement.definingCompilationUnit; | 3550 // |
| 3011 // A | 3551 // class A<E> { E m(E p) {} } |
| 3012 { | 3552 // class B<F> extends A<F> {} |
| 3013 ClassElement elementA = unitElement.getType("A"); | 3553 // |
| 3014 ClassDeclaration nodeA = elementA.node; | 3554 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
| 3015 JUnitTestCase.assertNotNull(nodeA); | 3555 DartType typeE = classA.type.typeArguments[0]; |
| 3016 JUnitTestCase.assertEquals("A", nodeA.name.name); | 3556 String methodName = "m"; |
| 3017 JUnitTestCase.assertSame(elementA, nodeA.element); | 3557 MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE,
[typeE]); |
| 3558 classA.methods = <MethodElement> [methodM]; |
| 3559 (methodM.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; |
| 3560 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |
| 3561 InterfaceType typeB = classB.type; |
| 3562 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |
| 3563 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; |
| 3564 classB.supertype = typeAF; |
| 3565 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3566 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3567 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
| 3568 // |
| 3569 // B<I> |
| 3570 // |
| 3571 InterfaceType typeI = ElementFactory.classElement2("I", []).type; |
| 3572 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |
| 3573 typeBI.typeArguments = <DartType> [typeI]; |
| 3574 MethodElement method = typeBI.lookUpMethod(methodName, library); |
| 3575 JUnitTestCase.assertNotNull(method); |
| 3576 FunctionType methodType = method.type; |
| 3577 JUnitTestCase.assertSame(typeI, methodType.returnType); |
| 3578 List<DartType> parameterTypes = methodType.normalParameterTypes; |
| 3579 EngineTestCase.assertLength(1, parameterTypes); |
| 3580 JUnitTestCase.assertSame(typeI, parameterTypes[0]); |
| 3581 } |
| 3582 |
| 3583 void test_lookUpMethod_recursive() { |
| 3584 // |
| 3585 // class A extends B {} |
| 3586 // class B extends A {} |
| 3587 // |
| 3588 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3589 InterfaceType typeA = classA.type; |
| 3590 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); |
| 3591 classA.supertype = classB.type; |
| 3592 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3593 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3594 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
| 3595 JUnitTestCase.assertNull(typeA.lookUpMethod("m", library)); |
| 3596 } |
| 3597 |
| 3598 void test_lookUpMethod_unimplemented() { |
| 3599 // |
| 3600 // class A {} |
| 3601 // |
| 3602 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3603 InterfaceType typeA = classA.type; |
| 3604 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3605 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3606 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
| 3607 JUnitTestCase.assertNull(typeA.lookUpMethod("m", library)); |
| 3608 } |
| 3609 |
| 3610 void test_lookUpSetter_implemented() { |
| 3611 // |
| 3612 // class A { s(x) {} } |
| 3613 // |
| 3614 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3615 String setterName = "s"; |
| 3616 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); |
| 3617 classA.accessors = <PropertyAccessorElement> [setterS]; |
| 3618 InterfaceType typeA = classA.type; |
| 3619 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3620 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3621 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
| 3622 JUnitTestCase.assertSame(setterS, typeA.lookUpSetter(setterName, library)); |
| 3623 } |
| 3624 |
| 3625 void test_lookUpSetter_inherited() { |
| 3626 // |
| 3627 // class A { s(x) {} } |
| 3628 // class B extends A {} |
| 3629 // |
| 3630 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3631 String setterName = "g"; |
| 3632 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); |
| 3633 classA.accessors = <PropertyAccessorElement> [setterS]; |
| 3634 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |
| 3635 InterfaceType typeB = classB.type; |
| 3636 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3637 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3638 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
| 3639 JUnitTestCase.assertSame(setterS, typeB.lookUpSetter(setterName, library)); |
| 3640 } |
| 3641 |
| 3642 void test_lookUpSetter_recursive() { |
| 3643 // |
| 3644 // class A extends B {} |
| 3645 // class B extends A {} |
| 3646 // |
| 3647 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3648 InterfaceType typeA = classA.type; |
| 3649 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); |
| 3650 classA.supertype = classB.type; |
| 3651 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3652 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3653 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
| 3654 JUnitTestCase.assertNull(typeA.lookUpSetter("s", library)); |
| 3655 } |
| 3656 |
| 3657 void test_lookUpSetter_unimplemented() { |
| 3658 // |
| 3659 // class A {} |
| 3660 // |
| 3661 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3662 InterfaceType typeA = classA.type; |
| 3663 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
| 3664 CompilationUnitElement unit = library.definingCompilationUnit; |
| 3665 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
| 3666 JUnitTestCase.assertNull(typeA.lookUpSetter("s", library)); |
| 3667 } |
| 3668 |
| 3669 void test_setTypeArguments() { |
| 3670 InterfaceTypeImpl type = ElementFactory.classElement2("A", []).type as Inter
faceTypeImpl; |
| 3671 List<DartType> typeArguments = <DartType> [ |
| 3672 ElementFactory.classElement2("B", []).type, |
| 3673 ElementFactory.classElement2("C", []).type]; |
| 3674 type.typeArguments = typeArguments; |
| 3675 JUnitTestCase.assertEquals(typeArguments, type.typeArguments); |
| 3676 } |
| 3677 |
| 3678 void test_substitute_equal() { |
| 3679 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3680 TypeParameterElementImpl parameterElement = new TypeParameterElementImpl(Ast
Factory.identifier3("E")); |
| 3681 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); |
| 3682 TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(parameterElement
); |
| 3683 type.typeArguments = <DartType> [parameter]; |
| 3684 InterfaceType argumentType = ElementFactory.classElement2("B", []).type; |
| 3685 InterfaceType result = type.substitute2(<DartType> [argumentType], <DartType
> [parameter]); |
| 3686 JUnitTestCase.assertEquals(classA, result.element); |
| 3687 List<DartType> resultArguments = result.typeArguments; |
| 3688 EngineTestCase.assertLength(1, resultArguments); |
| 3689 JUnitTestCase.assertEquals(argumentType, resultArguments[0]); |
| 3690 } |
| 3691 |
| 3692 void test_substitute_exception() { |
| 3693 try { |
| 3694 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3695 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); |
| 3696 InterfaceType argumentType = ElementFactory.classElement2("B", []).type; |
| 3697 type.substitute2(<DartType> [argumentType], <DartType> []); |
| 3698 JUnitTestCase.fail("Expected to encounter exception, argument and paramete
r type array lengths not equal."); |
| 3699 } on JavaException catch (e) { |
| 3018 } | 3700 } |
| 3019 // B | 3701 } |
| 3020 { | 3702 |
| 3021 ClassElement elementB = unitElement.getType("B"); | 3703 void test_substitute_notEqual() { |
| 3022 ClassDeclaration nodeB = elementB.node; | 3704 ClassElementImpl classA = ElementFactory.classElement2("A", []); |
| 3023 JUnitTestCase.assertNotNull(nodeB); | 3705 TypeParameterElementImpl parameterElement = new TypeParameterElementImpl(Ast
Factory.identifier3("E")); |
| 3024 JUnitTestCase.assertEquals("B", nodeB.name.name); | 3706 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); |
| 3025 JUnitTestCase.assertSame(elementB, nodeB.element); | 3707 TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(parameterElement
); |
| 3026 } | 3708 type.typeArguments = <DartType> [parameter]; |
| 3027 } | 3709 InterfaceType argumentType = ElementFactory.classElement2("B", []).type; |
| 3028 | 3710 TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(new TypePara
meterElementImpl(AstFactory.identifier3("F"))); |
| 3029 void test_hasNonFinalField_false_const() { | 3711 InterfaceType result = type.substitute2(<DartType> [argumentType], <DartType
> [parameterType]); |
| 3030 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3712 JUnitTestCase.assertEquals(classA, result.element); |
| 3031 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, true, classA.type)]; | 3713 List<DartType> resultArguments = result.typeArguments; |
| 3032 JUnitTestCase.assertFalse(classA.hasNonFinalField); | 3714 EngineTestCase.assertLength(1, resultArguments); |
| 3033 } | 3715 JUnitTestCase.assertEquals(parameter, resultArguments[0]); |
| 3034 | |
| 3035 void test_hasNonFinalField_false_final() { | |
| 3036 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3037 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, true
, false, classA.type)]; | |
| 3038 JUnitTestCase.assertFalse(classA.hasNonFinalField); | |
| 3039 } | |
| 3040 | |
| 3041 void test_hasNonFinalField_false_recursive() { | |
| 3042 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3043 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 3044 classA.supertype = classB.type; | |
| 3045 JUnitTestCase.assertFalse(classA.hasNonFinalField); | |
| 3046 } | |
| 3047 | |
| 3048 void test_hasNonFinalField_true_immediate() { | |
| 3049 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3050 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, false, classA.type)]; | |
| 3051 JUnitTestCase.assertTrue(classA.hasNonFinalField); | |
| 3052 } | |
| 3053 | |
| 3054 void test_hasNonFinalField_true_inherited() { | |
| 3055 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3056 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 3057 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, false, classA.type)]; | |
| 3058 JUnitTestCase.assertTrue(classB.hasNonFinalField); | |
| 3059 } | |
| 3060 | |
| 3061 void test_hasStaticMember_false_empty() { | |
| 3062 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3063 // no members | |
| 3064 JUnitTestCase.assertFalse(classA.hasStaticMember); | |
| 3065 } | |
| 3066 | |
| 3067 void test_hasStaticMember_false_instanceMethod() { | |
| 3068 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3069 MethodElement method = ElementFactory.methodElement("foo", null, []); | |
| 3070 classA.methods = <MethodElement> [method]; | |
| 3071 JUnitTestCase.assertFalse(classA.hasStaticMember); | |
| 3072 } | |
| 3073 | |
| 3074 void test_hasStaticMember_instanceGetter() { | |
| 3075 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3076 PropertyAccessorElement getter = ElementFactory.getterElement("foo", false,
null); | |
| 3077 classA.accessors = <PropertyAccessorElement> [getter]; | |
| 3078 JUnitTestCase.assertFalse(classA.hasStaticMember); | |
| 3079 } | |
| 3080 | |
| 3081 void test_hasStaticMember_true_getter() { | |
| 3082 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3083 PropertyAccessorElementImpl getter = ElementFactory.getterElement("foo", fal
se, null); | |
| 3084 classA.accessors = <PropertyAccessorElement> [getter]; | |
| 3085 // "foo" is static | |
| 3086 getter.static = true; | |
| 3087 JUnitTestCase.assertTrue(classA.hasStaticMember); | |
| 3088 } | |
| 3089 | |
| 3090 void test_hasStaticMember_true_method() { | |
| 3091 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3092 MethodElementImpl method = ElementFactory.methodElement("foo", null, []); | |
| 3093 classA.methods = <MethodElement> [method]; | |
| 3094 // "foo" is static | |
| 3095 method.static = true; | |
| 3096 JUnitTestCase.assertTrue(classA.hasStaticMember); | |
| 3097 } | |
| 3098 | |
| 3099 void test_hasStaticMember_true_setter() { | |
| 3100 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3101 PropertyAccessorElementImpl setter = ElementFactory.setterElement("foo", fal
se, null); | |
| 3102 classA.accessors = <PropertyAccessorElement> [setter]; | |
| 3103 // "foo" is static | |
| 3104 setter.static = true; | |
| 3105 JUnitTestCase.assertTrue(classA.hasStaticMember); | |
| 3106 } | |
| 3107 | |
| 3108 void test_lookUpGetter_declared() { | |
| 3109 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3110 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3111 String getterName = "g"; | |
| 3112 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, null); | |
| 3113 classA.accessors = <PropertyAccessorElement> [getter]; | |
| 3114 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | |
| 3115 JUnitTestCase.assertSame(getter, classA.lookUpGetter(getterName, library)); | |
| 3116 } | |
| 3117 | |
| 3118 void test_lookUpGetter_inherited() { | |
| 3119 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3120 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3121 String getterName = "g"; | |
| 3122 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, null); | |
| 3123 classA.accessors = <PropertyAccessorElement> [getter]; | |
| 3124 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 3125 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | |
| 3126 JUnitTestCase.assertSame(getter, classB.lookUpGetter(getterName, library)); | |
| 3127 } | |
| 3128 | |
| 3129 void test_lookUpGetter_undeclared() { | |
| 3130 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3131 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3132 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | |
| 3133 JUnitTestCase.assertNull(classA.lookUpGetter("g", library)); | |
| 3134 } | |
| 3135 | |
| 3136 void test_lookUpGetter_undeclared_recursive() { | |
| 3137 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3138 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3139 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 3140 classA.supertype = classB.type; | |
| 3141 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | |
| 3142 JUnitTestCase.assertNull(classA.lookUpGetter("g", library)); | |
| 3143 } | |
| 3144 | |
| 3145 void test_lookUpMethod_declared() { | |
| 3146 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3147 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3148 String methodName = "m"; | |
| 3149 MethodElement method = ElementFactory.methodElement(methodName, null, []); | |
| 3150 classA.methods = <MethodElement> [method]; | |
| 3151 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | |
| 3152 JUnitTestCase.assertSame(method, classA.lookUpMethod(methodName, library)); | |
| 3153 } | |
| 3154 | |
| 3155 void test_lookUpMethod_inherited() { | |
| 3156 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3157 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3158 String methodName = "m"; | |
| 3159 MethodElement method = ElementFactory.methodElement(methodName, null, []); | |
| 3160 classA.methods = <MethodElement> [method]; | |
| 3161 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 3162 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | |
| 3163 JUnitTestCase.assertSame(method, classB.lookUpMethod(methodName, library)); | |
| 3164 } | |
| 3165 | |
| 3166 void test_lookUpMethod_undeclared() { | |
| 3167 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3168 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3169 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | |
| 3170 JUnitTestCase.assertNull(classA.lookUpMethod("m", library)); | |
| 3171 } | |
| 3172 | |
| 3173 void test_lookUpMethod_undeclared_recursive() { | |
| 3174 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3175 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3176 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 3177 classA.supertype = classB.type; | |
| 3178 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | |
| 3179 JUnitTestCase.assertNull(classA.lookUpMethod("m", library)); | |
| 3180 } | |
| 3181 | |
| 3182 void test_lookUpSetter_declared() { | |
| 3183 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3184 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3185 String setterName = "s"; | |
| 3186 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); | |
| 3187 classA.accessors = <PropertyAccessorElement> [setter]; | |
| 3188 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | |
| 3189 JUnitTestCase.assertSame(setter, classA.lookUpSetter(setterName, library)); | |
| 3190 } | |
| 3191 | |
| 3192 void test_lookUpSetter_inherited() { | |
| 3193 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3194 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3195 String setterName = "s"; | |
| 3196 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); | |
| 3197 classA.accessors = <PropertyAccessorElement> [setter]; | |
| 3198 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 3199 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | |
| 3200 JUnitTestCase.assertSame(setter, classB.lookUpSetter(setterName, library)); | |
| 3201 } | |
| 3202 | |
| 3203 void test_lookUpSetter_undeclared() { | |
| 3204 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3205 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3206 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | |
| 3207 JUnitTestCase.assertNull(classA.lookUpSetter("s", library)); | |
| 3208 } | |
| 3209 | |
| 3210 void test_lookUpSetter_undeclared_recursive() { | |
| 3211 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3212 ClassElementImpl classA = ElementFactory.classElement2("A", []); | |
| 3213 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | |
| 3214 classA.supertype = classB.type; | |
| 3215 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | |
| 3216 JUnitTestCase.assertNull(classA.lookUpSetter("s", library)); | |
| 3217 } | 3716 } |
| 3218 | 3717 |
| 3219 static dartSuite() { | 3718 static dartSuite() { |
| 3220 _ut.group('ClassElementImplTest', () { | 3719 _ut.group('InterfaceTypeImplTest', () { |
| 3221 _ut.test('test_getAllSupertypes_interface', () { | 3720 _ut.test('test_computeLongestInheritancePathToObject_multipleInterfacePath
s', () { |
| 3222 final __test = new ClassElementImplTest(); | 3721 final __test = new InterfaceTypeImplTest(); |
| 3223 runJUnitTest(__test, __test.test_getAllSupertypes_interface); | 3722 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_m
ultipleInterfacePaths); |
| 3224 }); | 3723 }); |
| 3225 _ut.test('test_getAllSupertypes_mixins', () { | 3724 _ut.test('test_computeLongestInheritancePathToObject_multipleSuperclassPat
hs', () { |
| 3226 final __test = new ClassElementImplTest(); | 3725 final __test = new InterfaceTypeImplTest(); |
| 3227 runJUnitTest(__test, __test.test_getAllSupertypes_mixins); | 3726 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_m
ultipleSuperclassPaths); |
| 3228 }); | 3727 }); |
| 3229 _ut.test('test_getAllSupertypes_recursive', () { | 3728 _ut.test('test_computeLongestInheritancePathToObject_object', () { |
| 3230 final __test = new ClassElementImplTest(); | 3729 final __test = new InterfaceTypeImplTest(); |
| 3231 runJUnitTest(__test, __test.test_getAllSupertypes_recursive); | 3730 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_o
bject); |
| 3232 }); | 3731 }); |
| 3233 _ut.test('test_getField', () { | 3732 _ut.test('test_computeLongestInheritancePathToObject_recursion', () { |
| 3234 final __test = new ClassElementImplTest(); | 3733 final __test = new InterfaceTypeImplTest(); |
| 3235 runJUnitTest(__test, __test.test_getField); | 3734 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_r
ecursion); |
| 3236 }); | 3735 }); |
| 3237 _ut.test('test_getMethod_declared', () { | 3736 _ut.test('test_computeLongestInheritancePathToObject_singleInterfacePath',
() { |
| 3238 final __test = new ClassElementImplTest(); | 3737 final __test = new InterfaceTypeImplTest(); |
| 3239 runJUnitTest(__test, __test.test_getMethod_declared); | 3738 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_s
ingleInterfacePath); |
| 3240 }); | 3739 }); |
| 3241 _ut.test('test_getMethod_undeclared', () { | 3740 _ut.test('test_computeLongestInheritancePathToObject_singleSuperclassPath'
, () { |
| 3242 final __test = new ClassElementImplTest(); | 3741 final __test = new InterfaceTypeImplTest(); |
| 3243 runJUnitTest(__test, __test.test_getMethod_undeclared); | 3742 runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_s
ingleSuperclassPath); |
| 3244 }); | 3743 }); |
| 3245 _ut.test('test_getNode', () { | 3744 _ut.test('test_computeSuperinterfaceSet_genericInterfacePath', () { |
| 3246 final __test = new ClassElementImplTest(); | 3745 final __test = new InterfaceTypeImplTest(); |
| 3247 runJUnitTest(__test, __test.test_getNode); | 3746 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_genericInterfa
cePath); |
| 3248 }); | 3747 }); |
| 3249 _ut.test('test_hasNonFinalField_false_const', () { | 3748 _ut.test('test_computeSuperinterfaceSet_genericSuperclassPath', () { |
| 3250 final __test = new ClassElementImplTest(); | 3749 final __test = new InterfaceTypeImplTest(); |
| 3251 runJUnitTest(__test, __test.test_hasNonFinalField_false_const); | 3750 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_genericSupercl
assPath); |
| 3252 }); | 3751 }); |
| 3253 _ut.test('test_hasNonFinalField_false_final', () { | 3752 _ut.test('test_computeSuperinterfaceSet_multipleInterfacePaths', () { |
| 3254 final __test = new ClassElementImplTest(); | 3753 final __test = new InterfaceTypeImplTest(); |
| 3255 runJUnitTest(__test, __test.test_hasNonFinalField_false_final); | 3754 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_multipleInterf
acePaths); |
| 3256 }); | 3755 }); |
| 3257 _ut.test('test_hasNonFinalField_false_recursive', () { | 3756 _ut.test('test_computeSuperinterfaceSet_multipleSuperclassPaths', () { |
| 3258 final __test = new ClassElementImplTest(); | 3757 final __test = new InterfaceTypeImplTest(); |
| 3259 runJUnitTest(__test, __test.test_hasNonFinalField_false_recursive); | 3758 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_multipleSuperc
lassPaths); |
| 3260 }); | 3759 }); |
| 3261 _ut.test('test_hasNonFinalField_true_immediate', () { | 3760 _ut.test('test_computeSuperinterfaceSet_recursion', () { |
| 3262 final __test = new ClassElementImplTest(); | 3761 final __test = new InterfaceTypeImplTest(); |
| 3263 runJUnitTest(__test, __test.test_hasNonFinalField_true_immediate); | 3762 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_recursion); |
| 3264 }); | 3763 }); |
| 3265 _ut.test('test_hasNonFinalField_true_inherited', () { | 3764 _ut.test('test_computeSuperinterfaceSet_singleInterfacePath', () { |
| 3266 final __test = new ClassElementImplTest(); | 3765 final __test = new InterfaceTypeImplTest(); |
| 3267 runJUnitTest(__test, __test.test_hasNonFinalField_true_inherited); | 3766 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_singleInterfac
ePath); |
| 3268 }); | 3767 }); |
| 3269 _ut.test('test_hasStaticMember_false_empty', () { | 3768 _ut.test('test_computeSuperinterfaceSet_singleSuperclassPath', () { |
| 3270 final __test = new ClassElementImplTest(); | 3769 final __test = new InterfaceTypeImplTest(); |
| 3271 runJUnitTest(__test, __test.test_hasStaticMember_false_empty); | 3770 runJUnitTest(__test, __test.test_computeSuperinterfaceSet_singleSupercla
ssPath); |
| 3272 }); | 3771 }); |
| 3273 _ut.test('test_hasStaticMember_false_instanceMethod', () { | 3772 _ut.test('test_creation', () { |
| 3274 final __test = new ClassElementImplTest(); | 3773 final __test = new InterfaceTypeImplTest(); |
| 3275 runJUnitTest(__test, __test.test_hasStaticMember_false_instanceMethod); | 3774 runJUnitTest(__test, __test.test_creation); |
| 3276 }); | 3775 }); |
| 3277 _ut.test('test_hasStaticMember_instanceGetter', () { | 3776 _ut.test('test_getAccessors', () { |
| 3278 final __test = new ClassElementImplTest(); | 3777 final __test = new InterfaceTypeImplTest(); |
| 3279 runJUnitTest(__test, __test.test_hasStaticMember_instanceGetter); | 3778 runJUnitTest(__test, __test.test_getAccessors); |
| 3280 }); | 3779 }); |
| 3281 _ut.test('test_hasStaticMember_true_getter', () { | 3780 _ut.test('test_getAccessors_empty', () { |
| 3282 final __test = new ClassElementImplTest(); | 3781 final __test = new InterfaceTypeImplTest(); |
| 3283 runJUnitTest(__test, __test.test_hasStaticMember_true_getter); | 3782 runJUnitTest(__test, __test.test_getAccessors_empty); |
| 3284 }); | 3783 }); |
| 3285 _ut.test('test_hasStaticMember_true_method', () { | 3784 _ut.test('test_getElement', () { |
| 3286 final __test = new ClassElementImplTest(); | 3785 final __test = new InterfaceTypeImplTest(); |
| 3287 runJUnitTest(__test, __test.test_hasStaticMember_true_method); | 3786 runJUnitTest(__test, __test.test_getElement); |
| 3288 }); | 3787 }); |
| 3289 _ut.test('test_hasStaticMember_true_setter', () { | 3788 _ut.test('test_getGetter_implemented', () { |
| 3290 final __test = new ClassElementImplTest(); | 3789 final __test = new InterfaceTypeImplTest(); |
| 3291 runJUnitTest(__test, __test.test_hasStaticMember_true_setter); | 3790 runJUnitTest(__test, __test.test_getGetter_implemented); |
| 3292 }); | 3791 }); |
| 3293 _ut.test('test_lookUpGetter_declared', () { | 3792 _ut.test('test_getGetter_parameterized', () { |
| 3294 final __test = new ClassElementImplTest(); | 3793 final __test = new InterfaceTypeImplTest(); |
| 3295 runJUnitTest(__test, __test.test_lookUpGetter_declared); | 3794 runJUnitTest(__test, __test.test_getGetter_parameterized); |
| 3795 }); |
| 3796 _ut.test('test_getGetter_unimplemented', () { |
| 3797 final __test = new InterfaceTypeImplTest(); |
| 3798 runJUnitTest(__test, __test.test_getGetter_unimplemented); |
| 3799 }); |
| 3800 _ut.test('test_getInterfaces_nonParameterized', () { |
| 3801 final __test = new InterfaceTypeImplTest(); |
| 3802 runJUnitTest(__test, __test.test_getInterfaces_nonParameterized); |
| 3803 }); |
| 3804 _ut.test('test_getInterfaces_parameterized', () { |
| 3805 final __test = new InterfaceTypeImplTest(); |
| 3806 runJUnitTest(__test, __test.test_getInterfaces_parameterized); |
| 3807 }); |
| 3808 _ut.test('test_getLeastUpperBound_directInterfaceCase', () { |
| 3809 final __test = new InterfaceTypeImplTest(); |
| 3810 runJUnitTest(__test, __test.test_getLeastUpperBound_directInterfaceCase)
; |
| 3811 }); |
| 3812 _ut.test('test_getLeastUpperBound_directSubclassCase', () { |
| 3813 final __test = new InterfaceTypeImplTest(); |
| 3814 runJUnitTest(__test, __test.test_getLeastUpperBound_directSubclassCase); |
| 3815 }); |
| 3816 _ut.test('test_getLeastUpperBound_functionType', () { |
| 3817 final __test = new InterfaceTypeImplTest(); |
| 3818 runJUnitTest(__test, __test.test_getLeastUpperBound_functionType); |
| 3819 }); |
| 3820 _ut.test('test_getLeastUpperBound_mixinCase', () { |
| 3821 final __test = new InterfaceTypeImplTest(); |
| 3822 runJUnitTest(__test, __test.test_getLeastUpperBound_mixinCase); |
| 3823 }); |
| 3824 _ut.test('test_getLeastUpperBound_null', () { |
| 3825 final __test = new InterfaceTypeImplTest(); |
| 3826 runJUnitTest(__test, __test.test_getLeastUpperBound_null); |
| 3827 }); |
| 3828 _ut.test('test_getLeastUpperBound_object', () { |
| 3829 final __test = new InterfaceTypeImplTest(); |
| 3830 runJUnitTest(__test, __test.test_getLeastUpperBound_object); |
| 3831 }); |
| 3832 _ut.test('test_getLeastUpperBound_self', () { |
| 3833 final __test = new InterfaceTypeImplTest(); |
| 3834 runJUnitTest(__test, __test.test_getLeastUpperBound_self); |
| 3835 }); |
| 3836 _ut.test('test_getLeastUpperBound_sharedSuperclass1', () { |
| 3837 final __test = new InterfaceTypeImplTest(); |
| 3838 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass1); |
| 3839 }); |
| 3840 _ut.test('test_getLeastUpperBound_sharedSuperclass2', () { |
| 3841 final __test = new InterfaceTypeImplTest(); |
| 3842 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass2); |
| 3843 }); |
| 3844 _ut.test('test_getLeastUpperBound_sharedSuperclass3', () { |
| 3845 final __test = new InterfaceTypeImplTest(); |
| 3846 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass3); |
| 3847 }); |
| 3848 _ut.test('test_getLeastUpperBound_sharedSuperclass4', () { |
| 3849 final __test = new InterfaceTypeImplTest(); |
| 3850 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass4); |
| 3851 }); |
| 3852 _ut.test('test_getLeastUpperBound_sharedSuperinterface1', () { |
| 3853 final __test = new InterfaceTypeImplTest(); |
| 3854 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
1); |
| 3855 }); |
| 3856 _ut.test('test_getLeastUpperBound_sharedSuperinterface2', () { |
| 3857 final __test = new InterfaceTypeImplTest(); |
| 3858 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
2); |
| 3859 }); |
| 3860 _ut.test('test_getLeastUpperBound_sharedSuperinterface3', () { |
| 3861 final __test = new InterfaceTypeImplTest(); |
| 3862 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
3); |
| 3863 }); |
| 3864 _ut.test('test_getLeastUpperBound_sharedSuperinterface4', () { |
| 3865 final __test = new InterfaceTypeImplTest(); |
| 3866 runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
4); |
| 3867 }); |
| 3868 _ut.test('test_getLeastUpperBound_twoComparables', () { |
| 3869 final __test = new InterfaceTypeImplTest(); |
| 3870 runJUnitTest(__test, __test.test_getLeastUpperBound_twoComparables); |
| 3871 }); |
| 3872 _ut.test('test_getLeastUpperBound_typeParameters_different', () { |
| 3873 final __test = new InterfaceTypeImplTest(); |
| 3874 runJUnitTest(__test, __test.test_getLeastUpperBound_typeParameters_diffe
rent); |
| 3875 }); |
| 3876 _ut.test('test_getLeastUpperBound_typeParameters_same', () { |
| 3877 final __test = new InterfaceTypeImplTest(); |
| 3878 runJUnitTest(__test, __test.test_getLeastUpperBound_typeParameters_same)
; |
| 3879 }); |
| 3880 _ut.test('test_getMethod_implemented', () { |
| 3881 final __test = new InterfaceTypeImplTest(); |
| 3882 runJUnitTest(__test, __test.test_getMethod_implemented); |
| 3883 }); |
| 3884 _ut.test('test_getMethod_parameterized', () { |
| 3885 final __test = new InterfaceTypeImplTest(); |
| 3886 runJUnitTest(__test, __test.test_getMethod_parameterized); |
| 3887 }); |
| 3888 _ut.test('test_getMethod_unimplemented', () { |
| 3889 final __test = new InterfaceTypeImplTest(); |
| 3890 runJUnitTest(__test, __test.test_getMethod_unimplemented); |
| 3891 }); |
| 3892 _ut.test('test_getMethods', () { |
| 3893 final __test = new InterfaceTypeImplTest(); |
| 3894 runJUnitTest(__test, __test.test_getMethods); |
| 3895 }); |
| 3896 _ut.test('test_getMethods_empty', () { |
| 3897 final __test = new InterfaceTypeImplTest(); |
| 3898 runJUnitTest(__test, __test.test_getMethods_empty); |
| 3899 }); |
| 3900 _ut.test('test_getMixins_nonParameterized', () { |
| 3901 final __test = new InterfaceTypeImplTest(); |
| 3902 runJUnitTest(__test, __test.test_getMixins_nonParameterized); |
| 3903 }); |
| 3904 _ut.test('test_getMixins_parameterized', () { |
| 3905 final __test = new InterfaceTypeImplTest(); |
| 3906 runJUnitTest(__test, __test.test_getMixins_parameterized); |
| 3907 }); |
| 3908 _ut.test('test_getSetter_implemented', () { |
| 3909 final __test = new InterfaceTypeImplTest(); |
| 3910 runJUnitTest(__test, __test.test_getSetter_implemented); |
| 3911 }); |
| 3912 _ut.test('test_getSetter_parameterized', () { |
| 3913 final __test = new InterfaceTypeImplTest(); |
| 3914 runJUnitTest(__test, __test.test_getSetter_parameterized); |
| 3915 }); |
| 3916 _ut.test('test_getSetter_unimplemented', () { |
| 3917 final __test = new InterfaceTypeImplTest(); |
| 3918 runJUnitTest(__test, __test.test_getSetter_unimplemented); |
| 3919 }); |
| 3920 _ut.test('test_getSuperclass_nonParameterized', () { |
| 3921 final __test = new InterfaceTypeImplTest(); |
| 3922 runJUnitTest(__test, __test.test_getSuperclass_nonParameterized); |
| 3923 }); |
| 3924 _ut.test('test_getSuperclass_parameterized', () { |
| 3925 final __test = new InterfaceTypeImplTest(); |
| 3926 runJUnitTest(__test, __test.test_getSuperclass_parameterized); |
| 3927 }); |
| 3928 _ut.test('test_getTypeArguments_empty', () { |
| 3929 final __test = new InterfaceTypeImplTest(); |
| 3930 runJUnitTest(__test, __test.test_getTypeArguments_empty); |
| 3931 }); |
| 3932 _ut.test('test_hashCode', () { |
| 3933 final __test = new InterfaceTypeImplTest(); |
| 3934 runJUnitTest(__test, __test.test_hashCode); |
| 3935 }); |
| 3936 _ut.test('test_isAssignableTo_typeVariables', () { |
| 3937 final __test = new InterfaceTypeImplTest(); |
| 3938 runJUnitTest(__test, __test.test_isAssignableTo_typeVariables); |
| 3939 }); |
| 3940 _ut.test('test_isAssignableTo_void', () { |
| 3941 final __test = new InterfaceTypeImplTest(); |
| 3942 runJUnitTest(__test, __test.test_isAssignableTo_void); |
| 3943 }); |
| 3944 _ut.test('test_isDirectSupertypeOf_extends', () { |
| 3945 final __test = new InterfaceTypeImplTest(); |
| 3946 runJUnitTest(__test, __test.test_isDirectSupertypeOf_extends); |
| 3947 }); |
| 3948 _ut.test('test_isDirectSupertypeOf_false', () { |
| 3949 final __test = new InterfaceTypeImplTest(); |
| 3950 runJUnitTest(__test, __test.test_isDirectSupertypeOf_false); |
| 3951 }); |
| 3952 _ut.test('test_isDirectSupertypeOf_implements', () { |
| 3953 final __test = new InterfaceTypeImplTest(); |
| 3954 runJUnitTest(__test, __test.test_isDirectSupertypeOf_implements); |
| 3955 }); |
| 3956 _ut.test('test_isDirectSupertypeOf_with', () { |
| 3957 final __test = new InterfaceTypeImplTest(); |
| 3958 runJUnitTest(__test, __test.test_isDirectSupertypeOf_with); |
| 3959 }); |
| 3960 _ut.test('test_isMoreSpecificThan_bottom', () { |
| 3961 final __test = new InterfaceTypeImplTest(); |
| 3962 runJUnitTest(__test, __test.test_isMoreSpecificThan_bottom); |
| 3963 }); |
| 3964 _ut.test('test_isMoreSpecificThan_covariance', () { |
| 3965 final __test = new InterfaceTypeImplTest(); |
| 3966 runJUnitTest(__test, __test.test_isMoreSpecificThan_covariance); |
| 3967 }); |
| 3968 _ut.test('test_isMoreSpecificThan_directSupertype', () { |
| 3969 final __test = new InterfaceTypeImplTest(); |
| 3970 runJUnitTest(__test, __test.test_isMoreSpecificThan_directSupertype); |
| 3971 }); |
| 3972 _ut.test('test_isMoreSpecificThan_dynamic', () { |
| 3973 final __test = new InterfaceTypeImplTest(); |
| 3974 runJUnitTest(__test, __test.test_isMoreSpecificThan_dynamic); |
| 3975 }); |
| 3976 _ut.test('test_isMoreSpecificThan_self', () { |
| 3977 final __test = new InterfaceTypeImplTest(); |
| 3978 runJUnitTest(__test, __test.test_isMoreSpecificThan_self); |
| 3979 }); |
| 3980 _ut.test('test_isMoreSpecificThan_transitive_interface', () { |
| 3981 final __test = new InterfaceTypeImplTest(); |
| 3982 runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_interface
); |
| 3983 }); |
| 3984 _ut.test('test_isMoreSpecificThan_transitive_mixin', () { |
| 3985 final __test = new InterfaceTypeImplTest(); |
| 3986 runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_mixin); |
| 3987 }); |
| 3988 _ut.test('test_isMoreSpecificThan_transitive_recursive', () { |
| 3989 final __test = new InterfaceTypeImplTest(); |
| 3990 runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_recursive
); |
| 3991 }); |
| 3992 _ut.test('test_isMoreSpecificThan_transitive_superclass', () { |
| 3993 final __test = new InterfaceTypeImplTest(); |
| 3994 runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_superclas
s); |
| 3995 }); |
| 3996 _ut.test('test_isMoreSpecificThan_typeParameterType', () { |
| 3997 final __test = new InterfaceTypeImplTest(); |
| 3998 runJUnitTest(__test, __test.test_isMoreSpecificThan_typeParameterType); |
| 3999 }); |
| 4000 _ut.test('test_isMoreSpecificThan_typeParameterType_withBound', () { |
| 4001 final __test = new InterfaceTypeImplTest(); |
| 4002 runJUnitTest(__test, __test.test_isMoreSpecificThan_typeParameterType_wi
thBound); |
| 4003 }); |
| 4004 _ut.test('test_isSubtypeOf_directSubtype', () { |
| 4005 final __test = new InterfaceTypeImplTest(); |
| 4006 runJUnitTest(__test, __test.test_isSubtypeOf_directSubtype); |
| 4007 }); |
| 4008 _ut.test('test_isSubtypeOf_dynamic', () { |
| 4009 final __test = new InterfaceTypeImplTest(); |
| 4010 runJUnitTest(__test, __test.test_isSubtypeOf_dynamic); |
| 4011 }); |
| 4012 _ut.test('test_isSubtypeOf_function', () { |
| 4013 final __test = new InterfaceTypeImplTest(); |
| 4014 runJUnitTest(__test, __test.test_isSubtypeOf_function); |
| 4015 }); |
| 4016 _ut.test('test_isSubtypeOf_interface', () { |
| 4017 final __test = new InterfaceTypeImplTest(); |
| 4018 runJUnitTest(__test, __test.test_isSubtypeOf_interface); |
| 4019 }); |
| 4020 _ut.test('test_isSubtypeOf_mixins', () { |
| 4021 final __test = new InterfaceTypeImplTest(); |
| 4022 runJUnitTest(__test, __test.test_isSubtypeOf_mixins); |
| 4023 }); |
| 4024 _ut.test('test_isSubtypeOf_object', () { |
| 4025 final __test = new InterfaceTypeImplTest(); |
| 4026 runJUnitTest(__test, __test.test_isSubtypeOf_object); |
| 4027 }); |
| 4028 _ut.test('test_isSubtypeOf_self', () { |
| 4029 final __test = new InterfaceTypeImplTest(); |
| 4030 runJUnitTest(__test, __test.test_isSubtypeOf_self); |
| 4031 }); |
| 4032 _ut.test('test_isSubtypeOf_transitive_recursive', () { |
| 4033 final __test = new InterfaceTypeImplTest(); |
| 4034 runJUnitTest(__test, __test.test_isSubtypeOf_transitive_recursive); |
| 4035 }); |
| 4036 _ut.test('test_isSubtypeOf_transitive_superclass', () { |
| 4037 final __test = new InterfaceTypeImplTest(); |
| 4038 runJUnitTest(__test, __test.test_isSubtypeOf_transitive_superclass); |
| 4039 }); |
| 4040 _ut.test('test_isSubtypeOf_typeArguments', () { |
| 4041 final __test = new InterfaceTypeImplTest(); |
| 4042 runJUnitTest(__test, __test.test_isSubtypeOf_typeArguments); |
| 4043 }); |
| 4044 _ut.test('test_isSubtypeOf_typeParameter', () { |
| 4045 final __test = new InterfaceTypeImplTest(); |
| 4046 runJUnitTest(__test, __test.test_isSubtypeOf_typeParameter); |
| 4047 }); |
| 4048 _ut.test('test_isSupertypeOf_directSupertype', () { |
| 4049 final __test = new InterfaceTypeImplTest(); |
| 4050 runJUnitTest(__test, __test.test_isSupertypeOf_directSupertype); |
| 4051 }); |
| 4052 _ut.test('test_isSupertypeOf_dynamic', () { |
| 4053 final __test = new InterfaceTypeImplTest(); |
| 4054 runJUnitTest(__test, __test.test_isSupertypeOf_dynamic); |
| 4055 }); |
| 4056 _ut.test('test_isSupertypeOf_indirectSupertype', () { |
| 4057 final __test = new InterfaceTypeImplTest(); |
| 4058 runJUnitTest(__test, __test.test_isSupertypeOf_indirectSupertype); |
| 4059 }); |
| 4060 _ut.test('test_isSupertypeOf_interface', () { |
| 4061 final __test = new InterfaceTypeImplTest(); |
| 4062 runJUnitTest(__test, __test.test_isSupertypeOf_interface); |
| 4063 }); |
| 4064 _ut.test('test_isSupertypeOf_mixins', () { |
| 4065 final __test = new InterfaceTypeImplTest(); |
| 4066 runJUnitTest(__test, __test.test_isSupertypeOf_mixins); |
| 4067 }); |
| 4068 _ut.test('test_isSupertypeOf_object', () { |
| 4069 final __test = new InterfaceTypeImplTest(); |
| 4070 runJUnitTest(__test, __test.test_isSupertypeOf_object); |
| 4071 }); |
| 4072 _ut.test('test_isSupertypeOf_self', () { |
| 4073 final __test = new InterfaceTypeImplTest(); |
| 4074 runJUnitTest(__test, __test.test_isSupertypeOf_self); |
| 4075 }); |
| 4076 _ut.test('test_lookUpGetter_implemented', () { |
| 4077 final __test = new InterfaceTypeImplTest(); |
| 4078 runJUnitTest(__test, __test.test_lookUpGetter_implemented); |
| 3296 }); | 4079 }); |
| 3297 _ut.test('test_lookUpGetter_inherited', () { | 4080 _ut.test('test_lookUpGetter_inherited', () { |
| 3298 final __test = new ClassElementImplTest(); | 4081 final __test = new InterfaceTypeImplTest(); |
| 3299 runJUnitTest(__test, __test.test_lookUpGetter_inherited); | 4082 runJUnitTest(__test, __test.test_lookUpGetter_inherited); |
| 3300 }); | 4083 }); |
| 3301 _ut.test('test_lookUpGetter_undeclared', () { | 4084 _ut.test('test_lookUpGetter_recursive', () { |
| 3302 final __test = new ClassElementImplTest(); | 4085 final __test = new InterfaceTypeImplTest(); |
| 3303 runJUnitTest(__test, __test.test_lookUpGetter_undeclared); | 4086 runJUnitTest(__test, __test.test_lookUpGetter_recursive); |
| 3304 }); | 4087 }); |
| 3305 _ut.test('test_lookUpGetter_undeclared_recursive', () { | 4088 _ut.test('test_lookUpGetter_unimplemented', () { |
| 3306 final __test = new ClassElementImplTest(); | 4089 final __test = new InterfaceTypeImplTest(); |
| 3307 runJUnitTest(__test, __test.test_lookUpGetter_undeclared_recursive); | 4090 runJUnitTest(__test, __test.test_lookUpGetter_unimplemented); |
| 3308 }); | 4091 }); |
| 3309 _ut.test('test_lookUpMethod_declared', () { | 4092 _ut.test('test_lookUpMethod_implemented', () { |
| 3310 final __test = new ClassElementImplTest(); | 4093 final __test = new InterfaceTypeImplTest(); |
| 3311 runJUnitTest(__test, __test.test_lookUpMethod_declared); | 4094 runJUnitTest(__test, __test.test_lookUpMethod_implemented); |
| 3312 }); | 4095 }); |
| 3313 _ut.test('test_lookUpMethod_inherited', () { | 4096 _ut.test('test_lookUpMethod_inherited', () { |
| 3314 final __test = new ClassElementImplTest(); | 4097 final __test = new InterfaceTypeImplTest(); |
| 3315 runJUnitTest(__test, __test.test_lookUpMethod_inherited); | 4098 runJUnitTest(__test, __test.test_lookUpMethod_inherited); |
| 3316 }); | 4099 }); |
| 3317 _ut.test('test_lookUpMethod_undeclared', () { | 4100 _ut.test('test_lookUpMethod_parameterized', () { |
| 3318 final __test = new ClassElementImplTest(); | 4101 final __test = new InterfaceTypeImplTest(); |
| 3319 runJUnitTest(__test, __test.test_lookUpMethod_undeclared); | 4102 runJUnitTest(__test, __test.test_lookUpMethod_parameterized); |
| 3320 }); | 4103 }); |
| 3321 _ut.test('test_lookUpMethod_undeclared_recursive', () { | 4104 _ut.test('test_lookUpMethod_recursive', () { |
| 3322 final __test = new ClassElementImplTest(); | 4105 final __test = new InterfaceTypeImplTest(); |
| 3323 runJUnitTest(__test, __test.test_lookUpMethod_undeclared_recursive); | 4106 runJUnitTest(__test, __test.test_lookUpMethod_recursive); |
| 3324 }); | 4107 }); |
| 3325 _ut.test('test_lookUpSetter_declared', () { | 4108 _ut.test('test_lookUpMethod_unimplemented', () { |
| 3326 final __test = new ClassElementImplTest(); | 4109 final __test = new InterfaceTypeImplTest(); |
| 3327 runJUnitTest(__test, __test.test_lookUpSetter_declared); | 4110 runJUnitTest(__test, __test.test_lookUpMethod_unimplemented); |
| 4111 }); |
| 4112 _ut.test('test_lookUpSetter_implemented', () { |
| 4113 final __test = new InterfaceTypeImplTest(); |
| 4114 runJUnitTest(__test, __test.test_lookUpSetter_implemented); |
| 3328 }); | 4115 }); |
| 3329 _ut.test('test_lookUpSetter_inherited', () { | 4116 _ut.test('test_lookUpSetter_inherited', () { |
| 3330 final __test = new ClassElementImplTest(); | 4117 final __test = new InterfaceTypeImplTest(); |
| 3331 runJUnitTest(__test, __test.test_lookUpSetter_inherited); | 4118 runJUnitTest(__test, __test.test_lookUpSetter_inherited); |
| 3332 }); | 4119 }); |
| 3333 _ut.test('test_lookUpSetter_undeclared', () { | 4120 _ut.test('test_lookUpSetter_recursive', () { |
| 3334 final __test = new ClassElementImplTest(); | 4121 final __test = new InterfaceTypeImplTest(); |
| 3335 runJUnitTest(__test, __test.test_lookUpSetter_undeclared); | 4122 runJUnitTest(__test, __test.test_lookUpSetter_recursive); |
| 3336 }); | 4123 }); |
| 3337 _ut.test('test_lookUpSetter_undeclared_recursive', () { | 4124 _ut.test('test_lookUpSetter_unimplemented', () { |
| 3338 final __test = new ClassElementImplTest(); | 4125 final __test = new InterfaceTypeImplTest(); |
| 3339 runJUnitTest(__test, __test.test_lookUpSetter_undeclared_recursive); | 4126 runJUnitTest(__test, __test.test_lookUpSetter_unimplemented); |
| 4127 }); |
| 4128 _ut.test('test_setTypeArguments', () { |
| 4129 final __test = new InterfaceTypeImplTest(); |
| 4130 runJUnitTest(__test, __test.test_setTypeArguments); |
| 4131 }); |
| 4132 _ut.test('test_substitute_equal', () { |
| 4133 final __test = new InterfaceTypeImplTest(); |
| 4134 runJUnitTest(__test, __test.test_substitute_equal); |
| 4135 }); |
| 4136 _ut.test('test_substitute_exception', () { |
| 4137 final __test = new InterfaceTypeImplTest(); |
| 4138 runJUnitTest(__test, __test.test_substitute_exception); |
| 4139 }); |
| 4140 _ut.test('test_substitute_notEqual', () { |
| 4141 final __test = new InterfaceTypeImplTest(); |
| 4142 runJUnitTest(__test, __test.test_substitute_notEqual); |
| 3340 }); | 4143 }); |
| 3341 }); | 4144 }); |
| 3342 } | 4145 } |
| 3343 } | 4146 } |
| 3344 | 4147 |
| 3345 class AngularPropertyKindTest extends EngineTestCase { | 4148 class VoidTypeImplTest extends EngineTestCase { |
| 3346 void test_ATTR() { | 4149 /** |
| 3347 AngularPropertyKind kind = AngularPropertyKind.ATTR; | 4150 * Reference {code VoidTypeImpl.getInstance()}. |
| 3348 JUnitTestCase.assertFalse(kind.callsGetter()); | 4151 */ |
| 3349 JUnitTestCase.assertTrue(kind.callsSetter()); | 4152 DartType _voidType = VoidTypeImpl.instance; |
| 3350 } | 4153 |
| 3351 | 4154 void test_isMoreSpecificThan_void_A() { |
| 3352 void test_CALLBACK() { | 4155 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3353 AngularPropertyKind kind = AngularPropertyKind.CALLBACK; | 4156 JUnitTestCase.assertFalse(_voidType.isMoreSpecificThan(classA.type)); |
| 3354 JUnitTestCase.assertFalse(kind.callsGetter()); | 4157 } |
| 3355 JUnitTestCase.assertTrue(kind.callsSetter()); | 4158 |
| 3356 } | 4159 void test_isMoreSpecificThan_void_dynamic() { |
| 3357 | 4160 JUnitTestCase.assertTrue(_voidType.isMoreSpecificThan(DynamicTypeImpl.instan
ce)); |
| 3358 void test_ONE_WAY() { | 4161 } |
| 3359 AngularPropertyKind kind = AngularPropertyKind.ONE_WAY; | 4162 |
| 3360 JUnitTestCase.assertFalse(kind.callsGetter()); | 4163 void test_isMoreSpecificThan_void_void() { |
| 3361 JUnitTestCase.assertTrue(kind.callsSetter()); | 4164 JUnitTestCase.assertTrue(_voidType.isMoreSpecificThan(_voidType)); |
| 3362 } | 4165 } |
| 3363 | 4166 |
| 3364 void test_ONE_WAY_ONE_TIME() { | 4167 void test_isSubtypeOf_void_A() { |
| 3365 AngularPropertyKind kind = AngularPropertyKind.ONE_WAY_ONE_TIME; | 4168 ClassElement classA = ElementFactory.classElement2("A", []); |
| 3366 JUnitTestCase.assertFalse(kind.callsGetter()); | 4169 JUnitTestCase.assertFalse(_voidType.isSubtypeOf(classA.type)); |
| 3367 JUnitTestCase.assertTrue(kind.callsSetter()); | 4170 } |
| 3368 } | 4171 |
| 3369 | 4172 void test_isSubtypeOf_void_dynamic() { |
| 3370 void test_TWO_WAY() { | 4173 JUnitTestCase.assertTrue(_voidType.isSubtypeOf(DynamicTypeImpl.instance)); |
| 3371 AngularPropertyKind kind = AngularPropertyKind.TWO_WAY; | 4174 } |
| 3372 JUnitTestCase.assertTrue(kind.callsGetter()); | 4175 |
| 3373 JUnitTestCase.assertTrue(kind.callsSetter()); | 4176 void test_isSubtypeOf_void_void() { |
| 4177 JUnitTestCase.assertTrue(_voidType.isSubtypeOf(_voidType)); |
| 4178 } |
| 4179 |
| 4180 void test_isVoid() { |
| 4181 JUnitTestCase.assertTrue(_voidType.isVoid); |
| 3374 } | 4182 } |
| 3375 | 4183 |
| 3376 static dartSuite() { | 4184 static dartSuite() { |
| 3377 _ut.group('AngularPropertyKindTest', () { | 4185 _ut.group('VoidTypeImplTest', () { |
| 3378 _ut.test('test_ATTR', () { | 4186 _ut.test('test_isMoreSpecificThan_void_A', () { |
| 3379 final __test = new AngularPropertyKindTest(); | 4187 final __test = new VoidTypeImplTest(); |
| 3380 runJUnitTest(__test, __test.test_ATTR); | 4188 runJUnitTest(__test, __test.test_isMoreSpecificThan_void_A); |
| 3381 }); | 4189 }); |
| 3382 _ut.test('test_CALLBACK', () { | 4190 _ut.test('test_isMoreSpecificThan_void_dynamic', () { |
| 3383 final __test = new AngularPropertyKindTest(); | 4191 final __test = new VoidTypeImplTest(); |
| 3384 runJUnitTest(__test, __test.test_CALLBACK); | 4192 runJUnitTest(__test, __test.test_isMoreSpecificThan_void_dynamic); |
| 3385 }); | 4193 }); |
| 3386 _ut.test('test_ONE_WAY', () { | 4194 _ut.test('test_isMoreSpecificThan_void_void', () { |
| 3387 final __test = new AngularPropertyKindTest(); | 4195 final __test = new VoidTypeImplTest(); |
| 3388 runJUnitTest(__test, __test.test_ONE_WAY); | 4196 runJUnitTest(__test, __test.test_isMoreSpecificThan_void_void); |
| 3389 }); | 4197 }); |
| 3390 _ut.test('test_ONE_WAY_ONE_TIME', () { | 4198 _ut.test('test_isSubtypeOf_void_A', () { |
| 3391 final __test = new AngularPropertyKindTest(); | 4199 final __test = new VoidTypeImplTest(); |
| 3392 runJUnitTest(__test, __test.test_ONE_WAY_ONE_TIME); | 4200 runJUnitTest(__test, __test.test_isSubtypeOf_void_A); |
| 3393 }); | 4201 }); |
| 3394 _ut.test('test_TWO_WAY', () { | 4202 _ut.test('test_isSubtypeOf_void_dynamic', () { |
| 3395 final __test = new AngularPropertyKindTest(); | 4203 final __test = new VoidTypeImplTest(); |
| 3396 runJUnitTest(__test, __test.test_TWO_WAY); | 4204 runJUnitTest(__test, __test.test_isSubtypeOf_void_dynamic); |
| 4205 }); |
| 4206 _ut.test('test_isSubtypeOf_void_void', () { |
| 4207 final __test = new VoidTypeImplTest(); |
| 4208 runJUnitTest(__test, __test.test_isSubtypeOf_void_void); |
| 4209 }); |
| 4210 _ut.test('test_isVoid', () { |
| 4211 final __test = new VoidTypeImplTest(); |
| 4212 runJUnitTest(__test, __test.test_isVoid); |
| 3397 }); | 4213 }); |
| 3398 }); | 4214 }); |
| 3399 } | 4215 } |
| 3400 } | 4216 } |
| 3401 | 4217 |
| 3402 class ElementImplTest extends EngineTestCase { | |
| 3403 void test_equals() { | |
| 3404 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3405 ClassElementImpl classElement = ElementFactory.classElement2("C", []); | |
| 3406 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; | |
| 3407 FieldElement field = ElementFactory.fieldElement("next", false, false, false
, classElement.type); | |
| 3408 classElement.fields = <FieldElement> [field]; | |
| 3409 JUnitTestCase.assertTrue(field == field); | |
| 3410 JUnitTestCase.assertFalse(field == field.getter); | |
| 3411 JUnitTestCase.assertFalse(field == field.setter); | |
| 3412 JUnitTestCase.assertFalse(field.getter == field.setter); | |
| 3413 } | |
| 3414 | |
| 3415 void test_isAccessibleIn_private_differentLibrary() { | |
| 3416 AnalysisContextImpl context = createAnalysisContext(); | |
| 3417 LibraryElementImpl library1 = ElementFactory.library(context, "lib1"); | |
| 3418 ClassElement classElement = ElementFactory.classElement2("_C", []); | |
| 3419 (library1.definingCompilationUnit as CompilationUnitElementImpl).types = <Cl
assElement> [classElement]; | |
| 3420 LibraryElementImpl library2 = ElementFactory.library(context, "lib2"); | |
| 3421 JUnitTestCase.assertFalse(classElement.isAccessibleIn(library2)); | |
| 3422 } | |
| 3423 | |
| 3424 void test_isAccessibleIn_private_sameLibrary() { | |
| 3425 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3426 ClassElement classElement = ElementFactory.classElement2("_C", []); | |
| 3427 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; | |
| 3428 JUnitTestCase.assertTrue(classElement.isAccessibleIn(library)); | |
| 3429 } | |
| 3430 | |
| 3431 void test_isAccessibleIn_public_differentLibrary() { | |
| 3432 AnalysisContextImpl context = createAnalysisContext(); | |
| 3433 LibraryElementImpl library1 = ElementFactory.library(context, "lib1"); | |
| 3434 ClassElement classElement = ElementFactory.classElement2("C", []); | |
| 3435 (library1.definingCompilationUnit as CompilationUnitElementImpl).types = <Cl
assElement> [classElement]; | |
| 3436 LibraryElementImpl library2 = ElementFactory.library(context, "lib2"); | |
| 3437 JUnitTestCase.assertTrue(classElement.isAccessibleIn(library2)); | |
| 3438 } | |
| 3439 | |
| 3440 void test_isAccessibleIn_public_sameLibrary() { | |
| 3441 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | |
| 3442 ClassElement classElement = ElementFactory.classElement2("C", []); | |
| 3443 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; | |
| 3444 JUnitTestCase.assertTrue(classElement.isAccessibleIn(library)); | |
| 3445 } | |
| 3446 | |
| 3447 void test_isPrivate_false() { | |
| 3448 Element element = ElementFactory.classElement2("C", []); | |
| 3449 JUnitTestCase.assertFalse(element.isPrivate); | |
| 3450 } | |
| 3451 | |
| 3452 void test_isPrivate_null() { | |
| 3453 Element element = ElementFactory.classElement2(null, []); | |
| 3454 JUnitTestCase.assertTrue(element.isPrivate); | |
| 3455 } | |
| 3456 | |
| 3457 void test_isPrivate_true() { | |
| 3458 Element element = ElementFactory.classElement2("_C", []); | |
| 3459 JUnitTestCase.assertTrue(element.isPrivate); | |
| 3460 } | |
| 3461 | |
| 3462 void test_isPublic_false() { | |
| 3463 Element element = ElementFactory.classElement2("_C", []); | |
| 3464 JUnitTestCase.assertFalse(element.isPublic); | |
| 3465 } | |
| 3466 | |
| 3467 void test_isPublic_null() { | |
| 3468 Element element = ElementFactory.classElement2(null, []); | |
| 3469 JUnitTestCase.assertFalse(element.isPublic); | |
| 3470 } | |
| 3471 | |
| 3472 void test_isPublic_true() { | |
| 3473 Element element = ElementFactory.classElement2("C", []); | |
| 3474 JUnitTestCase.assertTrue(element.isPublic); | |
| 3475 } | |
| 3476 | |
| 3477 void test_SORT_BY_OFFSET() { | |
| 3478 ClassElementImpl classElementA = ElementFactory.classElement2("A", []); | |
| 3479 classElementA.nameOffset = 1; | |
| 3480 ClassElementImpl classElementB = ElementFactory.classElement2("B", []); | |
| 3481 classElementB.nameOffset = 2; | |
| 3482 JUnitTestCase.assertEquals(0, Element.SORT_BY_OFFSET(classElementA, classEle
mentA)); | |
| 3483 JUnitTestCase.assertTrue(Element.SORT_BY_OFFSET(classElementA, classElementB
) < 0); | |
| 3484 JUnitTestCase.assertTrue(Element.SORT_BY_OFFSET(classElementB, classElementA
) > 0); | |
| 3485 } | |
| 3486 | |
| 3487 static dartSuite() { | |
| 3488 _ut.group('ElementImplTest', () { | |
| 3489 _ut.test('test_SORT_BY_OFFSET', () { | |
| 3490 final __test = new ElementImplTest(); | |
| 3491 runJUnitTest(__test, __test.test_SORT_BY_OFFSET); | |
| 3492 }); | |
| 3493 _ut.test('test_equals', () { | |
| 3494 final __test = new ElementImplTest(); | |
| 3495 runJUnitTest(__test, __test.test_equals); | |
| 3496 }); | |
| 3497 _ut.test('test_isAccessibleIn_private_differentLibrary', () { | |
| 3498 final __test = new ElementImplTest(); | |
| 3499 runJUnitTest(__test, __test.test_isAccessibleIn_private_differentLibrary
); | |
| 3500 }); | |
| 3501 _ut.test('test_isAccessibleIn_private_sameLibrary', () { | |
| 3502 final __test = new ElementImplTest(); | |
| 3503 runJUnitTest(__test, __test.test_isAccessibleIn_private_sameLibrary); | |
| 3504 }); | |
| 3505 _ut.test('test_isAccessibleIn_public_differentLibrary', () { | |
| 3506 final __test = new ElementImplTest(); | |
| 3507 runJUnitTest(__test, __test.test_isAccessibleIn_public_differentLibrary)
; | |
| 3508 }); | |
| 3509 _ut.test('test_isAccessibleIn_public_sameLibrary', () { | |
| 3510 final __test = new ElementImplTest(); | |
| 3511 runJUnitTest(__test, __test.test_isAccessibleIn_public_sameLibrary); | |
| 3512 }); | |
| 3513 _ut.test('test_isPrivate_false', () { | |
| 3514 final __test = new ElementImplTest(); | |
| 3515 runJUnitTest(__test, __test.test_isPrivate_false); | |
| 3516 }); | |
| 3517 _ut.test('test_isPrivate_null', () { | |
| 3518 final __test = new ElementImplTest(); | |
| 3519 runJUnitTest(__test, __test.test_isPrivate_null); | |
| 3520 }); | |
| 3521 _ut.test('test_isPrivate_true', () { | |
| 3522 final __test = new ElementImplTest(); | |
| 3523 runJUnitTest(__test, __test.test_isPrivate_true); | |
| 3524 }); | |
| 3525 _ut.test('test_isPublic_false', () { | |
| 3526 final __test = new ElementImplTest(); | |
| 3527 runJUnitTest(__test, __test.test_isPublic_false); | |
| 3528 }); | |
| 3529 _ut.test('test_isPublic_null', () { | |
| 3530 final __test = new ElementImplTest(); | |
| 3531 runJUnitTest(__test, __test.test_isPublic_null); | |
| 3532 }); | |
| 3533 _ut.test('test_isPublic_true', () { | |
| 3534 final __test = new ElementImplTest(); | |
| 3535 runJUnitTest(__test, __test.test_isPublic_true); | |
| 3536 }); | |
| 3537 }); | |
| 3538 } | |
| 3539 } | |
| 3540 | |
| 3541 class FunctionTypeImplTest extends EngineTestCase { | |
| 3542 void test_creation() { | |
| 3543 JUnitTestCase.assertNotNull(new FunctionTypeImpl.con1(new FunctionElementImp
l.forNode(AstFactory.identifier3("f")))); | |
| 3544 } | |
| 3545 | |
| 3546 void test_getElement() { | |
| 3547 FunctionElementImpl typeElement = new FunctionElementImpl.forNode(AstFactory
.identifier3("f")); | |
| 3548 FunctionTypeImpl type = new FunctionTypeImpl.con1(typeElement); | |
| 3549 JUnitTestCase.assertEquals(typeElement, type.element); | |
| 3550 } | |
| 3551 | |
| 3552 void test_getNamedParameterTypes() { | |
| 3553 FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.fo
rNode(AstFactory.identifier3("f"))); | |
| 3554 Map<String, DartType> types = type.namedParameterTypes; | |
| 3555 EngineTestCase.assertSizeOfMap(0, types); | |
| 3556 } | |
| 3557 | |
| 3558 void test_getNormalParameterTypes() { | |
| 3559 FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.fo
rNode(AstFactory.identifier3("f"))); | |
| 3560 List<DartType> types = type.normalParameterTypes; | |
| 3561 EngineTestCase.assertLength(0, types); | |
| 3562 } | |
| 3563 | |
| 3564 void test_getReturnType() { | |
| 3565 DartType expectedReturnType = VoidTypeImpl.instance; | |
| 3566 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3("f")); | |
| 3567 functionElement.returnType = expectedReturnType; | |
| 3568 FunctionTypeImpl type = new FunctionTypeImpl.con1(functionElement); | |
| 3569 DartType returnType = type.returnType; | |
| 3570 JUnitTestCase.assertEquals(expectedReturnType, returnType); | |
| 3571 } | |
| 3572 | |
| 3573 void test_getTypeArguments() { | |
| 3574 FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.fo
rNode(AstFactory.identifier3("f"))); | |
| 3575 List<DartType> types = type.typeArguments; | |
| 3576 EngineTestCase.assertLength(0, types); | |
| 3577 } | |
| 3578 | |
| 3579 void test_hashCode_element() { | |
| 3580 FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.fo
rNode(AstFactory.identifier3("f"))); | |
| 3581 type.hashCode; | |
| 3582 } | |
| 3583 | |
| 3584 void test_hashCode_noElement() { | |
| 3585 FunctionTypeImpl type = new FunctionTypeImpl.con1(null); | |
| 3586 type.hashCode; | |
| 3587 } | |
| 3588 | |
| 3589 void test_isAssignableTo_normalAndPositionalArgs() { | |
| 3590 // ([a]) -> void <: (a) -> void | |
| 3591 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3592 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | |
| 3593 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; | |
| 3594 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3595 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); | |
| 3596 // assignable iff subtype | |
| 3597 JUnitTestCase.assertTrue(t.isAssignableTo(s)); | |
| 3598 JUnitTestCase.assertFalse(s.isAssignableTo(t)); | |
| 3599 } | |
| 3600 | |
| 3601 void test_isSubtypeOf_baseCase_classFunction() { | |
| 3602 // () -> void <: Function | |
| 3603 ClassElementImpl functionElement = ElementFactory.classElement2("Function",
[]); | |
| 3604 InterfaceTypeImpl functionType = new InterfaceTypeImpl_FunctionTypeImplTest_
test_isSubtypeOf_baseCase_classFunction(functionElement); | |
| 3605 FunctionType f = ElementFactory.functionElement("f").type; | |
| 3606 JUnitTestCase.assertTrue(f.isSubtypeOf(functionType)); | |
| 3607 } | |
| 3608 | |
| 3609 void test_isSubtypeOf_baseCase_notFunctionType() { | |
| 3610 // class C | |
| 3611 // ! () -> void <: C | |
| 3612 FunctionType f = ElementFactory.functionElement("f").type; | |
| 3613 InterfaceType t = ElementFactory.classElement2("C", []).type; | |
| 3614 JUnitTestCase.assertFalse(f.isSubtypeOf(t)); | |
| 3615 } | |
| 3616 | |
| 3617 void test_isSubtypeOf_baseCase_null() { | |
| 3618 // ! () -> void <: null | |
| 3619 FunctionType f = ElementFactory.functionElement("f").type; | |
| 3620 JUnitTestCase.assertFalse(f.isSubtypeOf(null)); | |
| 3621 } | |
| 3622 | |
| 3623 void test_isSubtypeOf_baseCase_self() { | |
| 3624 // () -> void <: () -> void | |
| 3625 FunctionType f = ElementFactory.functionElement("f").type; | |
| 3626 JUnitTestCase.assertTrue(f.isSubtypeOf(f)); | |
| 3627 } | |
| 3628 | |
| 3629 void test_isSubtypeOf_namedParameters_isAssignable() { | |
| 3630 // B extends A | |
| 3631 // ({name: A}) -> void <: ({name: B}) -> void | |
| 3632 // ({name: B}) -> void <: ({name: A}) -> void | |
| 3633 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3634 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3635 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; | |
| 3636 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [b]).type; | |
| 3637 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3638 JUnitTestCase.assertTrue(s.isSubtypeOf(t)); | |
| 3639 } | |
| 3640 | |
| 3641 void test_isSubtypeOf_namedParameters_isNotAssignable() { | |
| 3642 // ! ({name: A}) -> void <: ({name: B}) -> void | |
| 3643 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [ElementFactory.classElement2("A", [])]).type; | |
| 3644 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [ElementFactory.classElement2("B", [])]).type; | |
| 3645 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3646 } | |
| 3647 | |
| 3648 void test_isSubtypeOf_namedParameters_namesDifferent() { | |
| 3649 // B extends A | |
| 3650 // void t({A name}) {} | |
| 3651 // void s({A diff}) {} | |
| 3652 // ! t <: s | |
| 3653 // ! s <: t | |
| 3654 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3655 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3656 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; | |
| 3657 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"diff"], <ClassElement> [b]).type; | |
| 3658 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3659 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); | |
| 3660 } | |
| 3661 | |
| 3662 void test_isSubtypeOf_namedParameters_orderOfParams() { | |
| 3663 // B extends A | |
| 3664 // ({A: A, B: B}) -> void <: ({B: B, A: A}) -> void | |
| 3665 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3666 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3667 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"A", "B"], <ClassElement> [a, b]).type; | |
| 3668 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B", "A"], <ClassElement> [b, a]).type; | |
| 3669 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3670 } | |
| 3671 | |
| 3672 void test_isSubtypeOf_namedParameters_orderOfParams2() { | |
| 3673 // B extends A | |
| 3674 // ! ({B: B}) -> void <: ({B: B, A: A}) -> void | |
| 3675 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3676 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3677 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"B"], <ClassElement> [b]).type; | |
| 3678 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B", "A"], <ClassElement> [b, a]).type; | |
| 3679 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3680 } | |
| 3681 | |
| 3682 void test_isSubtypeOf_namedParameters_orderOfParams3() { | |
| 3683 // B extends A | |
| 3684 // ({A: A, B: B}) -> void <: ({A: A}) -> void | |
| 3685 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3686 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3687 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"A", "B"], <ClassElement> [a, b]).type; | |
| 3688 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B"], <ClassElement> [b]).type; | |
| 3689 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3690 } | |
| 3691 | |
| 3692 void test_isSubtypeOf_namedParameters_sHasMoreParams() { | |
| 3693 // B extends A | |
| 3694 // ! ({name: A}) -> void <: ({name: B, name2: B}) -> void | |
| 3695 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3696 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3697 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; | |
| 3698 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name", "name2"], <ClassElement> [b, b]).type; | |
| 3699 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3700 } | |
| 3701 | |
| 3702 void test_isSubtypeOf_namedParameters_tHasMoreParams() { | |
| 3703 // B extends A | |
| 3704 // ({name: A, name2: A}) -> void <: ({name: B}) -> void | |
| 3705 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3706 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3707 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name", "name2"], <ClassElement> [a, a]).type; | |
| 3708 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [b]).type; | |
| 3709 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3710 } | |
| 3711 | |
| 3712 void test_isSubtypeOf_normalAndPositionalArgs_1() { | |
| 3713 // ([a]) -> void <: (a) -> void | |
| 3714 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3715 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | |
| 3716 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; | |
| 3717 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3718 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); | |
| 3719 } | |
| 3720 | |
| 3721 void test_isSubtypeOf_normalAndPositionalArgs_2() { | |
| 3722 // (a, [a]) -> void <: (a) -> void | |
| 3723 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3724 FunctionType t = ElementFactory.functionElement6("t", <ClassElement> [a], <C
lassElement> [a]).type; | |
| 3725 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; | |
| 3726 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3727 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); | |
| 3728 } | |
| 3729 | |
| 3730 void test_isSubtypeOf_normalAndPositionalArgs_3() { | |
| 3731 // ([a]) -> void <: () -> void | |
| 3732 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3733 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | |
| 3734 FunctionType s = ElementFactory.functionElement("s").type; | |
| 3735 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3736 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); | |
| 3737 } | |
| 3738 | |
| 3739 void test_isSubtypeOf_normalAndPositionalArgs_4() { | |
| 3740 // (a, b, [c, d, e]) -> void <: (a, b, c, [d]) -> void | |
| 3741 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3742 ClassElement b = ElementFactory.classElement2("B", []); | |
| 3743 ClassElement c = ElementFactory.classElement2("C", []); | |
| 3744 ClassElement d = ElementFactory.classElement2("D", []); | |
| 3745 ClassElement e = ElementFactory.classElement2("E", []); | |
| 3746 FunctionType t = ElementFactory.functionElement6("t", <ClassElement> [a, b],
<ClassElement> [c, d, e]).type; | |
| 3747 FunctionType s = ElementFactory.functionElement6("s", <ClassElement> [a, b,
c], <ClassElement> [d]).type; | |
| 3748 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3749 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); | |
| 3750 } | |
| 3751 | |
| 3752 void test_isSubtypeOf_normalParameters_isAssignable() { | |
| 3753 // B extends A | |
| 3754 // (a) -> void <: (b) -> void | |
| 3755 // (b) -> void <: (a) -> void | |
| 3756 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3757 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3758 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; | |
| 3759 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b]).ty
pe; | |
| 3760 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3761 JUnitTestCase.assertTrue(s.isSubtypeOf(t)); | |
| 3762 } | |
| 3763 | |
| 3764 void test_isSubtypeOf_normalParameters_isNotAssignable() { | |
| 3765 // ! (a) -> void <: (b) -> void | |
| 3766 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [Elemen
tFactory.classElement2("A", [])]).type; | |
| 3767 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [Elemen
tFactory.classElement2("B", [])]).type; | |
| 3768 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3769 } | |
| 3770 | |
| 3771 void test_isSubtypeOf_normalParameters_sHasMoreParams() { | |
| 3772 // B extends A | |
| 3773 // ! (a) -> void <: (b, b) -> void | |
| 3774 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3775 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3776 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; | |
| 3777 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b, b])
.type; | |
| 3778 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3779 } | |
| 3780 | |
| 3781 void test_isSubtypeOf_normalParameters_tHasMoreParams() { | |
| 3782 // B extends A | |
| 3783 // ! (a, a) -> void <: (a) -> void | |
| 3784 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3785 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3786 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a, a])
.type; | |
| 3787 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b]).ty
pe; | |
| 3788 // note, this is a different assertion from the other "tHasMoreParams" tests
, this is | |
| 3789 // intentional as it is a difference of the "normal parameters" | |
| 3790 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3791 } | |
| 3792 | |
| 3793 void test_isSubtypeOf_Object() { | |
| 3794 // () -> void <: Object | |
| 3795 FunctionType f = ElementFactory.functionElement("f").type; | |
| 3796 InterfaceType t = ElementFactory.object.type; | |
| 3797 JUnitTestCase.assertTrue(f.isSubtypeOf(t)); | |
| 3798 } | |
| 3799 | |
| 3800 void test_isSubtypeOf_positionalParameters_isAssignable() { | |
| 3801 // B extends A | |
| 3802 // ([a]) -> void <: ([b]) -> void | |
| 3803 // ([b]) -> void <: ([a]) -> void | |
| 3804 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3805 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3806 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | |
| 3807 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b]).type; | |
| 3808 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3809 JUnitTestCase.assertTrue(s.isSubtypeOf(t)); | |
| 3810 } | |
| 3811 | |
| 3812 void test_isSubtypeOf_positionalParameters_isNotAssignable() { | |
| 3813 // ! ([a]) -> void <: ([b]) -> void | |
| 3814 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
ElementFactory.classElement2("A", [])]).type; | |
| 3815 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
ElementFactory.classElement2("B", [])]).type; | |
| 3816 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3817 } | |
| 3818 | |
| 3819 void test_isSubtypeOf_positionalParameters_sHasMoreParams() { | |
| 3820 // B extends A | |
| 3821 // ! ([a]) -> void <: ([b, b]) -> void | |
| 3822 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3823 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3824 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | |
| 3825 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b, b]).type; | |
| 3826 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3827 } | |
| 3828 | |
| 3829 void test_isSubtypeOf_positionalParameters_tHasMoreParams() { | |
| 3830 // B extends A | |
| 3831 // ([a, a]) -> void <: ([b]) -> void | |
| 3832 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3833 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3834 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a, a]).type; | |
| 3835 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b]).type; | |
| 3836 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3837 } | |
| 3838 | |
| 3839 void test_isSubtypeOf_returnType_sIsVoid() { | |
| 3840 // () -> void <: void | |
| 3841 FunctionType t = ElementFactory.functionElement("t").type; | |
| 3842 FunctionType s = ElementFactory.functionElement("s").type; | |
| 3843 // function s has the implicit return type of void, we assert it here | |
| 3844 JUnitTestCase.assertTrue(VoidTypeImpl.instance == s.returnType); | |
| 3845 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3846 } | |
| 3847 | |
| 3848 void test_isSubtypeOf_returnType_tAssignableToS() { | |
| 3849 // B extends A | |
| 3850 // () -> A <: () -> B | |
| 3851 // () -> B <: () -> A | |
| 3852 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3853 ClassElement b = ElementFactory.classElement("B", a.type, []); | |
| 3854 FunctionType t = ElementFactory.functionElement2("t", a).type; | |
| 3855 FunctionType s = ElementFactory.functionElement2("s", b).type; | |
| 3856 JUnitTestCase.assertTrue(t.isSubtypeOf(s)); | |
| 3857 JUnitTestCase.assertTrue(s.isSubtypeOf(t)); | |
| 3858 } | |
| 3859 | |
| 3860 void test_isSubtypeOf_returnType_tNotAssignableToS() { | |
| 3861 // ! () -> A <: () -> B | |
| 3862 FunctionType t = ElementFactory.functionElement2("t", ElementFactory.classEl
ement2("A", [])).type; | |
| 3863 FunctionType s = ElementFactory.functionElement2("s", ElementFactory.classEl
ement2("B", [])).type; | |
| 3864 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3865 } | |
| 3866 | |
| 3867 void test_isSubtypeOf_typeParameters_matchesBounds() { | |
| 3868 TestTypeProvider provider = new TestTypeProvider(); | |
| 3869 InterfaceType boolType = provider.boolType; | |
| 3870 InterfaceType stringType = provider.stringType; | |
| 3871 TypeParameterElementImpl parameterB = new TypeParameterElementImpl(AstFactor
y.identifier3("B")); | |
| 3872 parameterB.bound = boolType; | |
| 3873 TypeParameterTypeImpl typeB = new TypeParameterTypeImpl(parameterB); | |
| 3874 TypeParameterElementImpl parameterS = new TypeParameterElementImpl(AstFactor
y.identifier3("S")); | |
| 3875 parameterS.bound = stringType; | |
| 3876 TypeParameterTypeImpl typeS = new TypeParameterTypeImpl(parameterS); | |
| 3877 FunctionElementImpl functionAliasElement = new FunctionElementImpl.forNode(A
stFactory.identifier3("func")); | |
| 3878 functionAliasElement.parameters = <ParameterElement> [ | |
| 3879 ElementFactory.requiredParameter2("a", typeB), | |
| 3880 ElementFactory.positionalParameter2("b", typeS)]; | |
| 3881 functionAliasElement.returnType = stringType; | |
| 3882 FunctionTypeImpl functionAliasType = new FunctionTypeImpl.con1(functionAlias
Element); | |
| 3883 functionAliasElement.type = functionAliasType; | |
| 3884 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3("f")); | |
| 3885 functionElement.parameters = <ParameterElement> [ | |
| 3886 ElementFactory.requiredParameter2("c", boolType), | |
| 3887 ElementFactory.positionalParameter2("d", stringType)]; | |
| 3888 functionElement.returnType = provider.dynamicType; | |
| 3889 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); | |
| 3890 functionElement.type = functionType; | |
| 3891 JUnitTestCase.assertTrue(functionType.isAssignableTo(functionAliasType)); | |
| 3892 } | |
| 3893 | |
| 3894 void test_isSubtypeOf_wrongFunctionType_normal_named() { | |
| 3895 // ! (a) -> void <: ({name: A}) -> void | |
| 3896 // ! ({name: A}) -> void <: (a) -> void | |
| 3897 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3898 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; | |
| 3899 FunctionType s = ElementFactory.functionElement7("s", null, <String> ["name"
], <ClassElement> [a]).type; | |
| 3900 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3901 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); | |
| 3902 } | |
| 3903 | |
| 3904 void test_isSubtypeOf_wrongFunctionType_optional_named() { | |
| 3905 // ! ([a]) -> void <: ({name: A}) -> void | |
| 3906 // ! ({name: A}) -> void <: ([a]) -> void | |
| 3907 ClassElement a = ElementFactory.classElement2("A", []); | |
| 3908 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | |
| 3909 FunctionType s = ElementFactory.functionElement7("s", null, <String> ["name"
], <ClassElement> [a]).type; | |
| 3910 JUnitTestCase.assertFalse(t.isSubtypeOf(s)); | |
| 3911 JUnitTestCase.assertFalse(s.isSubtypeOf(t)); | |
| 3912 } | |
| 3913 | |
| 3914 void test_setTypeArguments() { | |
| 3915 ClassElementImpl enclosingClass = ElementFactory.classElement2("C", ["E"]); | |
| 3916 MethodElementImpl methodElement = new MethodElementImpl.forNode(AstFactory.i
dentifier3("m")); | |
| 3917 enclosingClass.methods = <MethodElement> [methodElement]; | |
| 3918 FunctionTypeImpl type = new FunctionTypeImpl.con1(methodElement); | |
| 3919 DartType expectedType = enclosingClass.typeParameters[0].type; | |
| 3920 type.typeArguments = <DartType> [expectedType]; | |
| 3921 List<DartType> arguments = type.typeArguments; | |
| 3922 EngineTestCase.assertLength(1, arguments); | |
| 3923 JUnitTestCase.assertEquals(expectedType, arguments[0]); | |
| 3924 } | |
| 3925 | |
| 3926 void test_substitute2_equal() { | |
| 3927 ClassElementImpl definingClass = ElementFactory.classElement2("C", ["E"]); | |
| 3928 TypeParameterType parameterType = definingClass.typeParameters[0].type; | |
| 3929 MethodElementImpl functionElement = new MethodElementImpl.forNode(AstFactory
.identifier3("m")); | |
| 3930 String namedParameterName = "c"; | |
| 3931 functionElement.parameters = <ParameterElement> [ | |
| 3932 ElementFactory.requiredParameter2("a", parameterType), | |
| 3933 ElementFactory.positionalParameter2("b", parameterType), | |
| 3934 ElementFactory.namedParameter2(namedParameterName, parameterType)]; | |
| 3935 functionElement.returnType = parameterType; | |
| 3936 definingClass.methods = <MethodElement> [functionElement]; | |
| 3937 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); | |
| 3938 functionType.typeArguments = <DartType> [parameterType]; | |
| 3939 InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(new ClassElement
Impl(AstFactory.identifier3("D"))); | |
| 3940 FunctionType result = functionType.substitute2(<DartType> [argumentType], <D
artType> [parameterType]); | |
| 3941 JUnitTestCase.assertEquals(argumentType, result.returnType); | |
| 3942 List<DartType> normalParameters = result.normalParameterTypes; | |
| 3943 EngineTestCase.assertLength(1, normalParameters); | |
| 3944 JUnitTestCase.assertEquals(argumentType, normalParameters[0]); | |
| 3945 List<DartType> optionalParameters = result.optionalParameterTypes; | |
| 3946 EngineTestCase.assertLength(1, optionalParameters); | |
| 3947 JUnitTestCase.assertEquals(argumentType, optionalParameters[0]); | |
| 3948 Map<String, DartType> namedParameters = result.namedParameterTypes; | |
| 3949 EngineTestCase.assertSizeOfMap(1, namedParameters); | |
| 3950 JUnitTestCase.assertEquals(argumentType, namedParameters[namedParameterName]
); | |
| 3951 } | |
| 3952 | |
| 3953 void test_substitute2_notEqual() { | |
| 3954 DartType returnType = new InterfaceTypeImpl.con1(new ClassElementImpl(AstFac
tory.identifier3("R"))); | |
| 3955 DartType normalParameterType = new InterfaceTypeImpl.con1(new ClassElementIm
pl(AstFactory.identifier3("A"))); | |
| 3956 DartType optionalParameterType = new InterfaceTypeImpl.con1(new ClassElement
Impl(AstFactory.identifier3("B"))); | |
| 3957 DartType namedParameterType = new InterfaceTypeImpl.con1(new ClassElementImp
l(AstFactory.identifier3("C"))); | |
| 3958 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(AstFac
tory.identifier3("f")); | |
| 3959 String namedParameterName = "c"; | |
| 3960 functionElement.parameters = <ParameterElement> [ | |
| 3961 ElementFactory.requiredParameter2("a", normalParameterType), | |
| 3962 ElementFactory.positionalParameter2("b", optionalParameterType), | |
| 3963 ElementFactory.namedParameter2(namedParameterName, namedParameterType)]; | |
| 3964 functionElement.returnType = returnType; | |
| 3965 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); | |
| 3966 InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(new ClassElement
Impl(AstFactory.identifier3("D"))); | |
| 3967 TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(new TypePara
meterElementImpl(AstFactory.identifier3("E"))); | |
| 3968 FunctionType result = functionType.substitute2(<DartType> [argumentType], <D
artType> [parameterType]); | |
| 3969 JUnitTestCase.assertEquals(returnType, result.returnType); | |
| 3970 List<DartType> normalParameters = result.normalParameterTypes; | |
| 3971 EngineTestCase.assertLength(1, normalParameters); | |
| 3972 JUnitTestCase.assertEquals(normalParameterType, normalParameters[0]); | |
| 3973 List<DartType> optionalParameters = result.optionalParameterTypes; | |
| 3974 EngineTestCase.assertLength(1, optionalParameters); | |
| 3975 JUnitTestCase.assertEquals(optionalParameterType, optionalParameters[0]); | |
| 3976 Map<String, DartType> namedParameters = result.namedParameterTypes; | |
| 3977 EngineTestCase.assertSizeOfMap(1, namedParameters); | |
| 3978 JUnitTestCase.assertEquals(namedParameterType, namedParameters[namedParamete
rName]); | |
| 3979 } | |
| 3980 | |
| 3981 static dartSuite() { | |
| 3982 _ut.group('FunctionTypeImplTest', () { | |
| 3983 _ut.test('test_creation', () { | |
| 3984 final __test = new FunctionTypeImplTest(); | |
| 3985 runJUnitTest(__test, __test.test_creation); | |
| 3986 }); | |
| 3987 _ut.test('test_getElement', () { | |
| 3988 final __test = new FunctionTypeImplTest(); | |
| 3989 runJUnitTest(__test, __test.test_getElement); | |
| 3990 }); | |
| 3991 _ut.test('test_getNamedParameterTypes', () { | |
| 3992 final __test = new FunctionTypeImplTest(); | |
| 3993 runJUnitTest(__test, __test.test_getNamedParameterTypes); | |
| 3994 }); | |
| 3995 _ut.test('test_getNormalParameterTypes', () { | |
| 3996 final __test = new FunctionTypeImplTest(); | |
| 3997 runJUnitTest(__test, __test.test_getNormalParameterTypes); | |
| 3998 }); | |
| 3999 _ut.test('test_getReturnType', () { | |
| 4000 final __test = new FunctionTypeImplTest(); | |
| 4001 runJUnitTest(__test, __test.test_getReturnType); | |
| 4002 }); | |
| 4003 _ut.test('test_getTypeArguments', () { | |
| 4004 final __test = new FunctionTypeImplTest(); | |
| 4005 runJUnitTest(__test, __test.test_getTypeArguments); | |
| 4006 }); | |
| 4007 _ut.test('test_hashCode_element', () { | |
| 4008 final __test = new FunctionTypeImplTest(); | |
| 4009 runJUnitTest(__test, __test.test_hashCode_element); | |
| 4010 }); | |
| 4011 _ut.test('test_hashCode_noElement', () { | |
| 4012 final __test = new FunctionTypeImplTest(); | |
| 4013 runJUnitTest(__test, __test.test_hashCode_noElement); | |
| 4014 }); | |
| 4015 _ut.test('test_isAssignableTo_normalAndPositionalArgs', () { | |
| 4016 final __test = new FunctionTypeImplTest(); | |
| 4017 runJUnitTest(__test, __test.test_isAssignableTo_normalAndPositionalArgs)
; | |
| 4018 }); | |
| 4019 _ut.test('test_isSubtypeOf_Object', () { | |
| 4020 final __test = new FunctionTypeImplTest(); | |
| 4021 runJUnitTest(__test, __test.test_isSubtypeOf_Object); | |
| 4022 }); | |
| 4023 _ut.test('test_isSubtypeOf_baseCase_classFunction', () { | |
| 4024 final __test = new FunctionTypeImplTest(); | |
| 4025 runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_classFunction); | |
| 4026 }); | |
| 4027 _ut.test('test_isSubtypeOf_baseCase_notFunctionType', () { | |
| 4028 final __test = new FunctionTypeImplTest(); | |
| 4029 runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_notFunctionType); | |
| 4030 }); | |
| 4031 _ut.test('test_isSubtypeOf_baseCase_null', () { | |
| 4032 final __test = new FunctionTypeImplTest(); | |
| 4033 runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_null); | |
| 4034 }); | |
| 4035 _ut.test('test_isSubtypeOf_baseCase_self', () { | |
| 4036 final __test = new FunctionTypeImplTest(); | |
| 4037 runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_self); | |
| 4038 }); | |
| 4039 _ut.test('test_isSubtypeOf_namedParameters_isAssignable', () { | |
| 4040 final __test = new FunctionTypeImplTest(); | |
| 4041 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_isAssignabl
e); | |
| 4042 }); | |
| 4043 _ut.test('test_isSubtypeOf_namedParameters_isNotAssignable', () { | |
| 4044 final __test = new FunctionTypeImplTest(); | |
| 4045 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_isNotAssign
able); | |
| 4046 }); | |
| 4047 _ut.test('test_isSubtypeOf_namedParameters_namesDifferent', () { | |
| 4048 final __test = new FunctionTypeImplTest(); | |
| 4049 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_namesDiffer
ent); | |
| 4050 }); | |
| 4051 _ut.test('test_isSubtypeOf_namedParameters_orderOfParams', () { | |
| 4052 final __test = new FunctionTypeImplTest(); | |
| 4053 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_orderOfPara
ms); | |
| 4054 }); | |
| 4055 _ut.test('test_isSubtypeOf_namedParameters_orderOfParams2', () { | |
| 4056 final __test = new FunctionTypeImplTest(); | |
| 4057 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_orderOfPara
ms2); | |
| 4058 }); | |
| 4059 _ut.test('test_isSubtypeOf_namedParameters_orderOfParams3', () { | |
| 4060 final __test = new FunctionTypeImplTest(); | |
| 4061 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_orderOfPara
ms3); | |
| 4062 }); | |
| 4063 _ut.test('test_isSubtypeOf_namedParameters_sHasMoreParams', () { | |
| 4064 final __test = new FunctionTypeImplTest(); | |
| 4065 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_sHasMorePar
ams); | |
| 4066 }); | |
| 4067 _ut.test('test_isSubtypeOf_namedParameters_tHasMoreParams', () { | |
| 4068 final __test = new FunctionTypeImplTest(); | |
| 4069 runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_tHasMorePar
ams); | |
| 4070 }); | |
| 4071 _ut.test('test_isSubtypeOf_normalAndPositionalArgs_1', () { | |
| 4072 final __test = new FunctionTypeImplTest(); | |
| 4073 runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_1); | |
| 4074 }); | |
| 4075 _ut.test('test_isSubtypeOf_normalAndPositionalArgs_2', () { | |
| 4076 final __test = new FunctionTypeImplTest(); | |
| 4077 runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_2); | |
| 4078 }); | |
| 4079 _ut.test('test_isSubtypeOf_normalAndPositionalArgs_3', () { | |
| 4080 final __test = new FunctionTypeImplTest(); | |
| 4081 runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_3); | |
| 4082 }); | |
| 4083 _ut.test('test_isSubtypeOf_normalAndPositionalArgs_4', () { | |
| 4084 final __test = new FunctionTypeImplTest(); | |
| 4085 runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_4); | |
| 4086 }); | |
| 4087 _ut.test('test_isSubtypeOf_normalParameters_isAssignable', () { | |
| 4088 final __test = new FunctionTypeImplTest(); | |
| 4089 runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_isAssignab
le); | |
| 4090 }); | |
| 4091 _ut.test('test_isSubtypeOf_normalParameters_isNotAssignable', () { | |
| 4092 final __test = new FunctionTypeImplTest(); | |
| 4093 runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_isNotAssig
nable); | |
| 4094 }); | |
| 4095 _ut.test('test_isSubtypeOf_normalParameters_sHasMoreParams', () { | |
| 4096 final __test = new FunctionTypeImplTest(); | |
| 4097 runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_sHasMorePa
rams); | |
| 4098 }); | |
| 4099 _ut.test('test_isSubtypeOf_normalParameters_tHasMoreParams', () { | |
| 4100 final __test = new FunctionTypeImplTest(); | |
| 4101 runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_tHasMorePa
rams); | |
| 4102 }); | |
| 4103 _ut.test('test_isSubtypeOf_positionalParameters_isAssignable', () { | |
| 4104 final __test = new FunctionTypeImplTest(); | |
| 4105 runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_isAssi
gnable); | |
| 4106 }); | |
| 4107 _ut.test('test_isSubtypeOf_positionalParameters_isNotAssignable', () { | |
| 4108 final __test = new FunctionTypeImplTest(); | |
| 4109 runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_isNotA
ssignable); | |
| 4110 }); | |
| 4111 _ut.test('test_isSubtypeOf_positionalParameters_sHasMoreParams', () { | |
| 4112 final __test = new FunctionTypeImplTest(); | |
| 4113 runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_sHasMo
reParams); | |
| 4114 }); | |
| 4115 _ut.test('test_isSubtypeOf_positionalParameters_tHasMoreParams', () { | |
| 4116 final __test = new FunctionTypeImplTest(); | |
| 4117 runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_tHasMo
reParams); | |
| 4118 }); | |
| 4119 _ut.test('test_isSubtypeOf_returnType_sIsVoid', () { | |
| 4120 final __test = new FunctionTypeImplTest(); | |
| 4121 runJUnitTest(__test, __test.test_isSubtypeOf_returnType_sIsVoid); | |
| 4122 }); | |
| 4123 _ut.test('test_isSubtypeOf_returnType_tAssignableToS', () { | |
| 4124 final __test = new FunctionTypeImplTest(); | |
| 4125 runJUnitTest(__test, __test.test_isSubtypeOf_returnType_tAssignableToS); | |
| 4126 }); | |
| 4127 _ut.test('test_isSubtypeOf_returnType_tNotAssignableToS', () { | |
| 4128 final __test = new FunctionTypeImplTest(); | |
| 4129 runJUnitTest(__test, __test.test_isSubtypeOf_returnType_tNotAssignableTo
S); | |
| 4130 }); | |
| 4131 _ut.test('test_isSubtypeOf_typeParameters_matchesBounds', () { | |
| 4132 final __test = new FunctionTypeImplTest(); | |
| 4133 runJUnitTest(__test, __test.test_isSubtypeOf_typeParameters_matchesBound
s); | |
| 4134 }); | |
| 4135 _ut.test('test_isSubtypeOf_wrongFunctionType_normal_named', () { | |
| 4136 final __test = new FunctionTypeImplTest(); | |
| 4137 runJUnitTest(__test, __test.test_isSubtypeOf_wrongFunctionType_normal_na
med); | |
| 4138 }); | |
| 4139 _ut.test('test_isSubtypeOf_wrongFunctionType_optional_named', () { | |
| 4140 final __test = new FunctionTypeImplTest(); | |
| 4141 runJUnitTest(__test, __test.test_isSubtypeOf_wrongFunctionType_optional_
named); | |
| 4142 }); | |
| 4143 _ut.test('test_setTypeArguments', () { | |
| 4144 final __test = new FunctionTypeImplTest(); | |
| 4145 runJUnitTest(__test, __test.test_setTypeArguments); | |
| 4146 }); | |
| 4147 _ut.test('test_substitute2_equal', () { | |
| 4148 final __test = new FunctionTypeImplTest(); | |
| 4149 runJUnitTest(__test, __test.test_substitute2_equal); | |
| 4150 }); | |
| 4151 _ut.test('test_substitute2_notEqual', () { | |
| 4152 final __test = new FunctionTypeImplTest(); | |
| 4153 runJUnitTest(__test, __test.test_substitute2_notEqual); | |
| 4154 }); | |
| 4155 }); | |
| 4156 } | |
| 4157 } | |
| 4158 | |
| 4159 class InterfaceTypeImpl_FunctionTypeImplTest_test_isSubtypeOf_baseCase_classFunc
tion extends InterfaceTypeImpl { | |
| 4160 InterfaceTypeImpl_FunctionTypeImplTest_test_isSubtypeOf_baseCase_classFunction
(ClassElement arg0) : super.con1(arg0); | |
| 4161 | |
| 4162 @override | |
| 4163 bool get isDartCoreFunction => true; | |
| 4164 } | |
| 4165 | |
| 4166 main() { | 4218 main() { |
| 4167 ElementKindTest.dartSuite(); | |
| 4168 AngularPropertyKindTest.dartSuite(); | |
| 4169 FunctionTypeImplTest.dartSuite(); | 4219 FunctionTypeImplTest.dartSuite(); |
| 4170 InterfaceTypeImplTest.dartSuite(); | 4220 InterfaceTypeImplTest.dartSuite(); |
| 4171 TypeParameterTypeImplTest.dartSuite(); | 4221 TypeParameterTypeImplTest.dartSuite(); |
| 4172 VoidTypeImplTest.dartSuite(); | 4222 VoidTypeImplTest.dartSuite(); |
| 4173 ClassElementImplTest.dartSuite(); | 4223 ClassElementImplTest.dartSuite(); |
| 4174 ElementLocationImplTest.dartSuite(); | 4224 ElementLocationImplTest.dartSuite(); |
| 4175 ElementImplTest.dartSuite(); | 4225 ElementImplTest.dartSuite(); |
| 4176 HtmlElementImplTest.dartSuite(); | 4226 HtmlElementImplTest.dartSuite(); |
| 4177 LibraryElementImplTest.dartSuite(); | 4227 LibraryElementImplTest.dartSuite(); |
| 4178 MultiplyDefinedElementImplTest.dartSuite(); | 4228 MultiplyDefinedElementImplTest.dartSuite(); |
| 4229 AngularPropertyKindTest.dartSuite(); |
| 4230 ElementKindTest.dartSuite(); |
| 4179 } | 4231 } |
| OLD | NEW |