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

Side by Side Diff: pkg/analyzer/test/generated/element_test.dart

Issue 257773008: New analyzer snapshot, based on r35422. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Update pubspec.yaml Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698