| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // This code was auto-generated, is not intended to be edited, and is subject to |  | 
| 2 // significant change. Please see the README file for more information. |  | 
| 3 library engine.element_test; |  | 
| 4 import 'package:analyzer_experimental/src/generated/java_core.dart'; |  | 
| 5 import 'package:analyzer_experimental/src/generated/java_engine_io.dart'; |  | 
| 6 import 'package:analyzer_experimental/src/generated/java_junit.dart'; |  | 
| 7 import 'package:analyzer_experimental/src/generated/source_io.dart'; |  | 
| 8 import 'package:analyzer_experimental/src/generated/utilities_dart.dart'; |  | 
| 9 import 'package:analyzer_experimental/src/generated/ast.dart'; |  | 
| 10 import 'package:analyzer_experimental/src/generated/element.dart'; |  | 
| 11 import 'package:analyzer_experimental/src/generated/engine.dart' show AnalysisCo
      ntext, AnalysisContextImpl; |  | 
| 12 import 'package:unittest/unittest.dart' as _ut; |  | 
| 13 import 'test_support.dart'; |  | 
| 14 import 'ast_test.dart' show ASTFactory; |  | 
| 15 import 'resolver_test.dart' show TestTypeProvider; |  | 
| 16 class ElementLocationImplTest extends EngineTestCase { |  | 
| 17   void test_create_encoding() { |  | 
| 18     String encoding = "a;b;c"; |  | 
| 19     ElementLocationImpl location = new ElementLocationImpl.con2(encoding); |  | 
| 20     JUnitTestCase.assertEquals(encoding, location.encoding); |  | 
| 21   } |  | 
| 22   void test_equals_equal() { |  | 
| 23     String encoding = "a;b;c"; |  | 
| 24     ElementLocationImpl first = new ElementLocationImpl.con2(encoding); |  | 
| 25     ElementLocationImpl second = new ElementLocationImpl.con2(encoding); |  | 
| 26     JUnitTestCase.assertTrue(first == second); |  | 
| 27   } |  | 
| 28   void test_equals_equalWithDifferentUriKind() { |  | 
| 29     ElementLocationImpl first = new ElementLocationImpl.con2("fa;fb;c"); |  | 
| 30     ElementLocationImpl second = new ElementLocationImpl.con2("pa;pb;c"); |  | 
| 31     JUnitTestCase.assertTrue(first == second); |  | 
| 32   } |  | 
| 33   void test_equals_notEqual_differentLengths() { |  | 
| 34     ElementLocationImpl first = new ElementLocationImpl.con2("a;b;c"); |  | 
| 35     ElementLocationImpl second = new ElementLocationImpl.con2("a;b;c;d"); |  | 
| 36     JUnitTestCase.assertFalse(first == second); |  | 
| 37   } |  | 
| 38   void test_equals_notEqual_notLocation() { |  | 
| 39     ElementLocationImpl first = new ElementLocationImpl.con2("a;b;c"); |  | 
| 40     JUnitTestCase.assertFalse(first == "a;b;d"); |  | 
| 41   } |  | 
| 42   void test_equals_notEqual_sameLengths() { |  | 
| 43     ElementLocationImpl first = new ElementLocationImpl.con2("a;b;c"); |  | 
| 44     ElementLocationImpl second = new ElementLocationImpl.con2("a;b;d"); |  | 
| 45     JUnitTestCase.assertFalse(first == second); |  | 
| 46   } |  | 
| 47   void test_getComponents() { |  | 
| 48     String encoding = "a;b;c"; |  | 
| 49     ElementLocationImpl location = new ElementLocationImpl.con2(encoding); |  | 
| 50     List<String> components = location.components; |  | 
| 51     EngineTestCase.assertLength(3, components); |  | 
| 52     JUnitTestCase.assertEquals("a", components[0]); |  | 
| 53     JUnitTestCase.assertEquals("b", components[1]); |  | 
| 54     JUnitTestCase.assertEquals("c", components[2]); |  | 
| 55   } |  | 
| 56   void test_getEncoding() { |  | 
| 57     String encoding = "a;b;c;;d"; |  | 
| 58     ElementLocationImpl location = new ElementLocationImpl.con2(encoding); |  | 
| 59     JUnitTestCase.assertEquals(encoding, location.encoding); |  | 
| 60   } |  | 
| 61   void test_hashCode_equal() { |  | 
| 62     String encoding = "a;b;c"; |  | 
| 63     ElementLocationImpl first = new ElementLocationImpl.con2(encoding); |  | 
| 64     ElementLocationImpl second = new ElementLocationImpl.con2(encoding); |  | 
| 65     JUnitTestCase.assertTrue(first.hashCode == second.hashCode); |  | 
| 66   } |  | 
| 67   void test_hashCode_equalWithDifferentUriKind() { |  | 
| 68     ElementLocationImpl first = new ElementLocationImpl.con2("fa;fb;c"); |  | 
| 69     ElementLocationImpl second = new ElementLocationImpl.con2("pa;pb;c"); |  | 
| 70     JUnitTestCase.assertTrue(first.hashCode == second.hashCode); |  | 
| 71   } |  | 
| 72   static dartSuite() { |  | 
| 73     _ut.group('ElementLocationImplTest', () { |  | 
| 74       _ut.test('test_create_encoding', () { |  | 
| 75         final __test = new ElementLocationImplTest(); |  | 
| 76         runJUnitTest(__test, __test.test_create_encoding); |  | 
| 77       }); |  | 
| 78       _ut.test('test_equals_equal', () { |  | 
| 79         final __test = new ElementLocationImplTest(); |  | 
| 80         runJUnitTest(__test, __test.test_equals_equal); |  | 
| 81       }); |  | 
| 82       _ut.test('test_equals_equalWithDifferentUriKind', () { |  | 
| 83         final __test = new ElementLocationImplTest(); |  | 
| 84         runJUnitTest(__test, __test.test_equals_equalWithDifferentUriKind); |  | 
| 85       }); |  | 
| 86       _ut.test('test_equals_notEqual_differentLengths', () { |  | 
| 87         final __test = new ElementLocationImplTest(); |  | 
| 88         runJUnitTest(__test, __test.test_equals_notEqual_differentLengths); |  | 
| 89       }); |  | 
| 90       _ut.test('test_equals_notEqual_notLocation', () { |  | 
| 91         final __test = new ElementLocationImplTest(); |  | 
| 92         runJUnitTest(__test, __test.test_equals_notEqual_notLocation); |  | 
| 93       }); |  | 
| 94       _ut.test('test_equals_notEqual_sameLengths', () { |  | 
| 95         final __test = new ElementLocationImplTest(); |  | 
| 96         runJUnitTest(__test, __test.test_equals_notEqual_sameLengths); |  | 
| 97       }); |  | 
| 98       _ut.test('test_getComponents', () { |  | 
| 99         final __test = new ElementLocationImplTest(); |  | 
| 100         runJUnitTest(__test, __test.test_getComponents); |  | 
| 101       }); |  | 
| 102       _ut.test('test_getEncoding', () { |  | 
| 103         final __test = new ElementLocationImplTest(); |  | 
| 104         runJUnitTest(__test, __test.test_getEncoding); |  | 
| 105       }); |  | 
| 106       _ut.test('test_hashCode_equal', () { |  | 
| 107         final __test = new ElementLocationImplTest(); |  | 
| 108         runJUnitTest(__test, __test.test_hashCode_equal); |  | 
| 109       }); |  | 
| 110       _ut.test('test_hashCode_equalWithDifferentUriKind', () { |  | 
| 111         final __test = new ElementLocationImplTest(); |  | 
| 112         runJUnitTest(__test, __test.test_hashCode_equalWithDifferentUriKind); |  | 
| 113       }); |  | 
| 114     }); |  | 
| 115   } |  | 
| 116 } |  | 
| 117 class MultiplyDefinedElementImplTest extends EngineTestCase { |  | 
| 118   void test_fromElements_conflicting() { |  | 
| 119     Element firstElement = ElementFactory.localVariableElement2("xx"); |  | 
| 120     Element secondElement = ElementFactory.localVariableElement2("yy"); |  | 
| 121     Element result = MultiplyDefinedElementImpl.fromElements(null, firstElement,
       secondElement); |  | 
| 122     EngineTestCase.assertInstanceOf(MultiplyDefinedElement, result); |  | 
| 123     List<Element> elements = ((result as MultiplyDefinedElement)).conflictingEle
      ments; |  | 
| 124     EngineTestCase.assertLength(2, elements); |  | 
| 125     for (int i = 0; i < elements.length; i++) { |  | 
| 126       EngineTestCase.assertInstanceOf(LocalVariableElement, elements[i]); |  | 
| 127     } |  | 
| 128   } |  | 
| 129   void test_fromElements_multiple() { |  | 
| 130     Element firstElement = ElementFactory.localVariableElement2("xx"); |  | 
| 131     Element secondElement = ElementFactory.localVariableElement2("yy"); |  | 
| 132     Element thirdElement = ElementFactory.localVariableElement2("zz"); |  | 
| 133     Element result = MultiplyDefinedElementImpl.fromElements(null, MultiplyDefin
      edElementImpl.fromElements(null, firstElement, secondElement), thirdElement); |  | 
| 134     EngineTestCase.assertInstanceOf(MultiplyDefinedElement, result); |  | 
| 135     List<Element> elements = ((result as MultiplyDefinedElement)).conflictingEle
      ments; |  | 
| 136     EngineTestCase.assertLength(3, elements); |  | 
| 137     for (int i = 0; i < elements.length; i++) { |  | 
| 138       EngineTestCase.assertInstanceOf(LocalVariableElement, elements[i]); |  | 
| 139     } |  | 
| 140   } |  | 
| 141   void test_fromElements_nonConflicting() { |  | 
| 142     Element element = ElementFactory.localVariableElement2("xx"); |  | 
| 143     JUnitTestCase.assertSame(element, MultiplyDefinedElementImpl.fromElements(nu
      ll, element, element)); |  | 
| 144   } |  | 
| 145   static dartSuite() { |  | 
| 146     _ut.group('MultiplyDefinedElementImplTest', () { |  | 
| 147       _ut.test('test_fromElements_conflicting', () { |  | 
| 148         final __test = new MultiplyDefinedElementImplTest(); |  | 
| 149         runJUnitTest(__test, __test.test_fromElements_conflicting); |  | 
| 150       }); |  | 
| 151       _ut.test('test_fromElements_multiple', () { |  | 
| 152         final __test = new MultiplyDefinedElementImplTest(); |  | 
| 153         runJUnitTest(__test, __test.test_fromElements_multiple); |  | 
| 154       }); |  | 
| 155       _ut.test('test_fromElements_nonConflicting', () { |  | 
| 156         final __test = new MultiplyDefinedElementImplTest(); |  | 
| 157         runJUnitTest(__test, __test.test_fromElements_nonConflicting); |  | 
| 158       }); |  | 
| 159     }); |  | 
| 160   } |  | 
| 161 } |  | 
| 162 class LibraryElementImplTest extends EngineTestCase { |  | 
| 163   void test_creation() { |  | 
| 164     JUnitTestCase.assertNotNull(new LibraryElementImpl(createAnalysisContext(), 
      ASTFactory.libraryIdentifier2(["l"]))); |  | 
| 165   } |  | 
| 166   void test_getImportedLibraries() { |  | 
| 167     AnalysisContext context = createAnalysisContext(); |  | 
| 168     LibraryElementImpl library1 = ElementFactory.library(context, "l1"); |  | 
| 169     LibraryElementImpl library2 = ElementFactory.library(context, "l2"); |  | 
| 170     LibraryElementImpl library3 = ElementFactory.library(context, "l3"); |  | 
| 171     LibraryElementImpl library4 = ElementFactory.library(context, "l4"); |  | 
| 172     PrefixElement prefixA = new PrefixElementImpl(ASTFactory.identifier3("a")); |  | 
| 173     PrefixElement prefixB = new PrefixElementImpl(ASTFactory.identifier3("b")); |  | 
| 174     List<ImportElementImpl> imports = [ |  | 
| 175         ElementFactory.importFor(library2, null, []), |  | 
| 176         ElementFactory.importFor(library2, prefixB, []), |  | 
| 177         ElementFactory.importFor(library3, null, []), |  | 
| 178         ElementFactory.importFor(library3, prefixA, []), |  | 
| 179         ElementFactory.importFor(library3, prefixB, []), |  | 
| 180         ElementFactory.importFor(library4, prefixA, [])]; |  | 
| 181     library1.imports = imports; |  | 
| 182     List<LibraryElement> libraries = library1.importedLibraries; |  | 
| 183     EngineTestCase.assertEqualsIgnoreOrder(<LibraryElement> [library2, library3,
       library4], libraries); |  | 
| 184   } |  | 
| 185   void test_getPrefixes() { |  | 
| 186     AnalysisContext context = createAnalysisContext(); |  | 
| 187     LibraryElementImpl library = ElementFactory.library(context, "l1"); |  | 
| 188     PrefixElement prefixA = new PrefixElementImpl(ASTFactory.identifier3("a")); |  | 
| 189     PrefixElement prefixB = new PrefixElementImpl(ASTFactory.identifier3("b")); |  | 
| 190     List<ImportElementImpl> imports = [ |  | 
| 191         ElementFactory.importFor(ElementFactory.library(context, "l2"), null, []
      ), |  | 
| 192         ElementFactory.importFor(ElementFactory.library(context, "l3"), null, []
      ), |  | 
| 193         ElementFactory.importFor(ElementFactory.library(context, "l4"), prefixA,
       []), |  | 
| 194         ElementFactory.importFor(ElementFactory.library(context, "l5"), prefixA,
       []), |  | 
| 195         ElementFactory.importFor(ElementFactory.library(context, "l6"), prefixB,
       [])]; |  | 
| 196     library.imports = imports; |  | 
| 197     List<PrefixElement> prefixes = library.prefixes; |  | 
| 198     EngineTestCase.assertLength(2, prefixes); |  | 
| 199     if (identical(prefixA, prefixes[0])) { |  | 
| 200       JUnitTestCase.assertSame(prefixB, prefixes[1]); |  | 
| 201     } else { |  | 
| 202       JUnitTestCase.assertSame(prefixB, prefixes[0]); |  | 
| 203       JUnitTestCase.assertSame(prefixA, prefixes[1]); |  | 
| 204     } |  | 
| 205   } |  | 
| 206   void test_isUpToDate() { |  | 
| 207     AnalysisContext context = createAnalysisContext(); |  | 
| 208     context.sourceFactory = new SourceFactory.con2([]); |  | 
| 209     LibraryElement library = ElementFactory.library(context, "foo"); |  | 
| 210     context.sourceFactory.setContents(library.definingCompilationUnit.source, "s
      dfsdff"); |  | 
| 211     JUnitTestCase.assertFalse(library.isUpToDate2(0)); |  | 
| 212     JUnitTestCase.assertTrue(library.isUpToDate2(JavaSystem.currentTimeMillis() 
      + 1000)); |  | 
| 213   } |  | 
| 214   void test_setImports() { |  | 
| 215     AnalysisContext context = createAnalysisContext(); |  | 
| 216     LibraryElementImpl library = new LibraryElementImpl(context, ASTFactory.libr
      aryIdentifier2(["l1"])); |  | 
| 217     List<ImportElementImpl> expectedImports = [ |  | 
| 218         ElementFactory.importFor(ElementFactory.library(context, "l2"), null, []
      ), |  | 
| 219         ElementFactory.importFor(ElementFactory.library(context, "l3"), null, []
      )]; |  | 
| 220     library.imports = expectedImports; |  | 
| 221     List<ImportElement> actualImports = library.imports; |  | 
| 222     EngineTestCase.assertLength(expectedImports.length, actualImports); |  | 
| 223     for (int i = 0; i < actualImports.length; i++) { |  | 
| 224       JUnitTestCase.assertSame(expectedImports[i], actualImports[i]); |  | 
| 225     } |  | 
| 226   } |  | 
| 227   static dartSuite() { |  | 
| 228     _ut.group('LibraryElementImplTest', () { |  | 
| 229       _ut.test('test_creation', () { |  | 
| 230         final __test = new LibraryElementImplTest(); |  | 
| 231         runJUnitTest(__test, __test.test_creation); |  | 
| 232       }); |  | 
| 233       _ut.test('test_getImportedLibraries', () { |  | 
| 234         final __test = new LibraryElementImplTest(); |  | 
| 235         runJUnitTest(__test, __test.test_getImportedLibraries); |  | 
| 236       }); |  | 
| 237       _ut.test('test_getPrefixes', () { |  | 
| 238         final __test = new LibraryElementImplTest(); |  | 
| 239         runJUnitTest(__test, __test.test_getPrefixes); |  | 
| 240       }); |  | 
| 241       _ut.test('test_isUpToDate', () { |  | 
| 242         final __test = new LibraryElementImplTest(); |  | 
| 243         runJUnitTest(__test, __test.test_isUpToDate); |  | 
| 244       }); |  | 
| 245       _ut.test('test_setImports', () { |  | 
| 246         final __test = new LibraryElementImplTest(); |  | 
| 247         runJUnitTest(__test, __test.test_setImports); |  | 
| 248       }); |  | 
| 249     }); |  | 
| 250   } |  | 
| 251 } |  | 
| 252 class TypeParameterTypeImplTest extends EngineTestCase { |  | 
| 253   void test_creation() { |  | 
| 254     JUnitTestCase.assertNotNull(new TypeParameterTypeImpl(new TypeParameterEleme
      ntImpl(ASTFactory.identifier3("E")))); |  | 
| 255   } |  | 
| 256   void test_getElement() { |  | 
| 257     TypeParameterElementImpl element = new TypeParameterElementImpl(ASTFactory.i
      dentifier3("E")); |  | 
| 258     TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |  | 
| 259     JUnitTestCase.assertEquals(element, type.element); |  | 
| 260   } |  | 
| 261   void test_isMoreSpecificThan_typeArguments_bottom() { |  | 
| 262     TypeParameterElementImpl element = new TypeParameterElementImpl(ASTFactory.i
      dentifier3("E")); |  | 
| 263     TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |  | 
| 264     JUnitTestCase.assertTrue(type.isMoreSpecificThan(BottomTypeImpl.instance)); |  | 
| 265   } |  | 
| 266   void test_isMoreSpecificThan_typeArguments_dynamic() { |  | 
| 267     TypeParameterElementImpl element = new TypeParameterElementImpl(ASTFactory.i
      dentifier3("E")); |  | 
| 268     TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |  | 
| 269     JUnitTestCase.assertTrue(type.isMoreSpecificThan(DynamicTypeImpl.instance)); |  | 
| 270   } |  | 
| 271   void test_isMoreSpecificThan_typeArguments_object() { |  | 
| 272     TypeParameterElementImpl element = new TypeParameterElementImpl(ASTFactory.i
      dentifier3("E")); |  | 
| 273     TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |  | 
| 274     JUnitTestCase.assertTrue(type.isMoreSpecificThan(ElementFactory.object.type)
      ); |  | 
| 275   } |  | 
| 276   void test_isMoreSpecificThan_typeArguments_resursive() { |  | 
| 277     ClassElementImpl classS = ElementFactory.classElement2("A", []); |  | 
| 278     TypeParameterElementImpl typeParameterU = new TypeParameterElementImpl(ASTFa
      ctory.identifier3("U")); |  | 
| 279     TypeParameterTypeImpl typeParameterTypeU = new TypeParameterTypeImpl(typePar
      ameterU); |  | 
| 280     TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl(ASTFa
      ctory.identifier3("T")); |  | 
| 281     TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
      ameterT); |  | 
| 282     typeParameterT.bound = typeParameterTypeU; |  | 
| 283     typeParameterU.bound = typeParameterTypeU; |  | 
| 284     JUnitTestCase.assertFalse(typeParameterTypeT.isMoreSpecificThan(classS.type)
      ); |  | 
| 285   } |  | 
| 286   void test_isMoreSpecificThan_typeArguments_self() { |  | 
| 287     TypeParameterElementImpl element = new TypeParameterElementImpl(ASTFactory.i
      dentifier3("E")); |  | 
| 288     TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |  | 
| 289     JUnitTestCase.assertTrue(type.isMoreSpecificThan(type)); |  | 
| 290   } |  | 
| 291   void test_isMoreSpecificThan_typeArguments_transitivity_interfaceTypes() { |  | 
| 292     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 293     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 294     InterfaceType typeA = classA.type; |  | 
| 295     InterfaceType typeB = classB.type; |  | 
| 296     TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl(ASTFa
      ctory.identifier3("T")); |  | 
| 297     typeParameterT.bound = typeB; |  | 
| 298     TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
      ameterT); |  | 
| 299     JUnitTestCase.assertTrue(typeParameterTypeT.isMoreSpecificThan(typeA)); |  | 
| 300   } |  | 
| 301   void test_isMoreSpecificThan_typeArguments_transitivity_typeParameters() { |  | 
| 302     ClassElementImpl classS = ElementFactory.classElement2("A", []); |  | 
| 303     TypeParameterElementImpl typeParameterU = new TypeParameterElementImpl(ASTFa
      ctory.identifier3("U")); |  | 
| 304     typeParameterU.bound = classS.type; |  | 
| 305     TypeParameterTypeImpl typeParameterTypeU = new TypeParameterTypeImpl(typePar
      ameterU); |  | 
| 306     TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl(ASTFa
      ctory.identifier3("T")); |  | 
| 307     typeParameterT.bound = typeParameterTypeU; |  | 
| 308     TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
      ameterT); |  | 
| 309     JUnitTestCase.assertTrue(typeParameterTypeT.isMoreSpecificThan(classS.type))
      ; |  | 
| 310   } |  | 
| 311   void test_isMoreSpecificThan_typeArguments_upperBound() { |  | 
| 312     ClassElementImpl classS = ElementFactory.classElement2("A", []); |  | 
| 313     TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl(ASTFa
      ctory.identifier3("T")); |  | 
| 314     typeParameterT.bound = classS.type; |  | 
| 315     TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
      ameterT); |  | 
| 316     JUnitTestCase.assertTrue(typeParameterTypeT.isMoreSpecificThan(classS.type))
      ; |  | 
| 317   } |  | 
| 318   void test_substitute_equal() { |  | 
| 319     TypeParameterElementImpl element = new TypeParameterElementImpl(ASTFactory.i
      dentifier3("E")); |  | 
| 320     TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |  | 
| 321     InterfaceTypeImpl argument = new InterfaceTypeImpl.con1(new ClassElementImpl
      (ASTFactory.identifier3("A"))); |  | 
| 322     TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(element); |  | 
| 323     JUnitTestCase.assertSame(argument, type.substitute2(<Type2> [argument], <Typ
      e2> [parameter])); |  | 
| 324   } |  | 
| 325   void test_substitute_notEqual() { |  | 
| 326     TypeParameterTypeImpl type = new TypeParameterTypeImpl(new TypeParameterElem
      entImpl(ASTFactory.identifier3("E"))); |  | 
| 327     InterfaceTypeImpl argument = new InterfaceTypeImpl.con1(new ClassElementImpl
      (ASTFactory.identifier3("A"))); |  | 
| 328     TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(new TypeParamete
      rElementImpl(ASTFactory.identifier3("F"))); |  | 
| 329     JUnitTestCase.assertSame(type, type.substitute2(<Type2> [argument], <Type2> 
      [parameter])); |  | 
| 330   } |  | 
| 331   static dartSuite() { |  | 
| 332     _ut.group('TypeParameterTypeImplTest', () { |  | 
| 333       _ut.test('test_creation', () { |  | 
| 334         final __test = new TypeParameterTypeImplTest(); |  | 
| 335         runJUnitTest(__test, __test.test_creation); |  | 
| 336       }); |  | 
| 337       _ut.test('test_getElement', () { |  | 
| 338         final __test = new TypeParameterTypeImplTest(); |  | 
| 339         runJUnitTest(__test, __test.test_getElement); |  | 
| 340       }); |  | 
| 341       _ut.test('test_isMoreSpecificThan_typeArguments_bottom', () { |  | 
| 342         final __test = new TypeParameterTypeImplTest(); |  | 
| 343         runJUnitTest(__test, __test.test_isMoreSpecificThan_typeArguments_bottom
      ); |  | 
| 344       }); |  | 
| 345       _ut.test('test_isMoreSpecificThan_typeArguments_dynamic', () { |  | 
| 346         final __test = new TypeParameterTypeImplTest(); |  | 
| 347         runJUnitTest(__test, __test.test_isMoreSpecificThan_typeArguments_dynami
      c); |  | 
| 348       }); |  | 
| 349       _ut.test('test_isMoreSpecificThan_typeArguments_object', () { |  | 
| 350         final __test = new TypeParameterTypeImplTest(); |  | 
| 351         runJUnitTest(__test, __test.test_isMoreSpecificThan_typeArguments_object
      ); |  | 
| 352       }); |  | 
| 353       _ut.test('test_isMoreSpecificThan_typeArguments_resursive', () { |  | 
| 354         final __test = new TypeParameterTypeImplTest(); |  | 
| 355         runJUnitTest(__test, __test.test_isMoreSpecificThan_typeArguments_resurs
      ive); |  | 
| 356       }); |  | 
| 357       _ut.test('test_isMoreSpecificThan_typeArguments_self', () { |  | 
| 358         final __test = new TypeParameterTypeImplTest(); |  | 
| 359         runJUnitTest(__test, __test.test_isMoreSpecificThan_typeArguments_self); |  | 
| 360       }); |  | 
| 361       _ut.test('test_isMoreSpecificThan_typeArguments_transitivity_interfaceType
      s', () { |  | 
| 362         final __test = new TypeParameterTypeImplTest(); |  | 
| 363         runJUnitTest(__test, __test.test_isMoreSpecificThan_typeArguments_transi
      tivity_interfaceTypes); |  | 
| 364       }); |  | 
| 365       _ut.test('test_isMoreSpecificThan_typeArguments_transitivity_typeParameter
      s', () { |  | 
| 366         final __test = new TypeParameterTypeImplTest(); |  | 
| 367         runJUnitTest(__test, __test.test_isMoreSpecificThan_typeArguments_transi
      tivity_typeParameters); |  | 
| 368       }); |  | 
| 369       _ut.test('test_isMoreSpecificThan_typeArguments_upperBound', () { |  | 
| 370         final __test = new TypeParameterTypeImplTest(); |  | 
| 371         runJUnitTest(__test, __test.test_isMoreSpecificThan_typeArguments_upperB
      ound); |  | 
| 372       }); |  | 
| 373       _ut.test('test_substitute_equal', () { |  | 
| 374         final __test = new TypeParameterTypeImplTest(); |  | 
| 375         runJUnitTest(__test, __test.test_substitute_equal); |  | 
| 376       }); |  | 
| 377       _ut.test('test_substitute_notEqual', () { |  | 
| 378         final __test = new TypeParameterTypeImplTest(); |  | 
| 379         runJUnitTest(__test, __test.test_substitute_notEqual); |  | 
| 380       }); |  | 
| 381     }); |  | 
| 382   } |  | 
| 383 } |  | 
| 384 class InterfaceTypeImplTest extends EngineTestCase { |  | 
| 385 |  | 
| 386   /** |  | 
| 387    * The type provider used to access the types. |  | 
| 388    */ |  | 
| 389   TestTypeProvider _typeProvider; |  | 
| 390   void setUp() { |  | 
| 391     _typeProvider = new TestTypeProvider(); |  | 
| 392   } |  | 
| 393   void test_computeLongestInheritancePathToObject_multipleInterfacePaths() { |  | 
| 394     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 395     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 396     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 397     ClassElementImpl classD = ElementFactory.classElement2("D", []); |  | 
| 398     ClassElementImpl classE = ElementFactory.classElement2("E", []); |  | 
| 399     classB.interfaces = <InterfaceType> [classA.type]; |  | 
| 400     classC.interfaces = <InterfaceType> [classA.type]; |  | 
| 401     classD.interfaces = <InterfaceType> [classC.type]; |  | 
| 402     classE.interfaces = <InterfaceType> [classB.type, classD.type]; |  | 
| 403     JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classB.type)); |  | 
| 404     JUnitTestCase.assertEquals(4, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classE.type)); |  | 
| 405   } |  | 
| 406   void test_computeLongestInheritancePathToObject_multipleSuperclassPaths() { |  | 
| 407     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 408     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 409     ClassElement classC = ElementFactory.classElement("C", classA.type, []); |  | 
| 410     ClassElement classD = ElementFactory.classElement("D", classC.type, []); |  | 
| 411     ClassElementImpl classE = ElementFactory.classElement("E", classB.type, []); |  | 
| 412     classE.interfaces = <InterfaceType> [classD.type]; |  | 
| 413     JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classB.type)); |  | 
| 414     JUnitTestCase.assertEquals(4, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classE.type)); |  | 
| 415   } |  | 
| 416   void test_computeLongestInheritancePathToObject_object() { |  | 
| 417     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 418     InterfaceType object = classA.supertype; |  | 
| 419     JUnitTestCase.assertEquals(0, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(object)); |  | 
| 420   } |  | 
| 421   void test_computeLongestInheritancePathToObject_recursion() { |  | 
| 422     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 423     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 424     classA.supertype = classB.type; |  | 
| 425     JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classA.type)); |  | 
| 426   } |  | 
| 427   void test_computeLongestInheritancePathToObject_singleInterfacePath() { |  | 
| 428     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 429     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 430     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 431     classB.interfaces = <InterfaceType> [classA.type]; |  | 
| 432     classC.interfaces = <InterfaceType> [classB.type]; |  | 
| 433     JUnitTestCase.assertEquals(1, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classA.type)); |  | 
| 434     JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classB.type)); |  | 
| 435     JUnitTestCase.assertEquals(3, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classC.type)); |  | 
| 436   } |  | 
| 437   void test_computeLongestInheritancePathToObject_singleSuperclassPath() { |  | 
| 438     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 439     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 440     ClassElement classC = ElementFactory.classElement("C", classB.type, []); |  | 
| 441     JUnitTestCase.assertEquals(1, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classA.type)); |  | 
| 442     JUnitTestCase.assertEquals(2, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classB.type)); |  | 
| 443     JUnitTestCase.assertEquals(3, InterfaceTypeImpl.computeLongestInheritancePat
      hToObject(classC.type)); |  | 
| 444   } |  | 
| 445   void test_computeSuperinterfaceSet_multipleInterfacePaths() { |  | 
| 446     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 447     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 448     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 449     ClassElementImpl classD = ElementFactory.classElement2("D", []); |  | 
| 450     ClassElementImpl classE = ElementFactory.classElement2("E", []); |  | 
| 451     classB.interfaces = <InterfaceType> [classA.type]; |  | 
| 452     classC.interfaces = <InterfaceType> [classA.type]; |  | 
| 453     classD.interfaces = <InterfaceType> [classC.type]; |  | 
| 454     classE.interfaces = <InterfaceType> [classB.type, classD.type]; |  | 
| 455     Set<InterfaceType> superinterfacesOfD = InterfaceTypeImpl.computeSuperinterf
      aceSet(classD.type); |  | 
| 456     EngineTestCase.assertSize3(3, superinterfacesOfD); |  | 
| 457     JUnitTestCase.assertTrue(superinterfacesOfD.contains(ElementFactory.object.t
      ype)); |  | 
| 458     JUnitTestCase.assertTrue(superinterfacesOfD.contains(classA.type)); |  | 
| 459     JUnitTestCase.assertTrue(superinterfacesOfD.contains(classC.type)); |  | 
| 460     Set<InterfaceType> superinterfacesOfE = InterfaceTypeImpl.computeSuperinterf
      aceSet(classE.type); |  | 
| 461     EngineTestCase.assertSize3(5, superinterfacesOfE); |  | 
| 462     JUnitTestCase.assertTrue(superinterfacesOfE.contains(ElementFactory.object.t
      ype)); |  | 
| 463     JUnitTestCase.assertTrue(superinterfacesOfE.contains(classA.type)); |  | 
| 464     JUnitTestCase.assertTrue(superinterfacesOfE.contains(classB.type)); |  | 
| 465     JUnitTestCase.assertTrue(superinterfacesOfE.contains(classC.type)); |  | 
| 466     JUnitTestCase.assertTrue(superinterfacesOfE.contains(classD.type)); |  | 
| 467   } |  | 
| 468   void test_computeSuperinterfaceSet_multipleSuperclassPaths() { |  | 
| 469     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 470     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 471     ClassElement classC = ElementFactory.classElement("C", classA.type, []); |  | 
| 472     ClassElement classD = ElementFactory.classElement("D", classC.type, []); |  | 
| 473     ClassElementImpl classE = ElementFactory.classElement("E", classB.type, []); |  | 
| 474     classE.interfaces = <InterfaceType> [classD.type]; |  | 
| 475     Set<InterfaceType> superinterfacesOfD = InterfaceTypeImpl.computeSuperinterf
      aceSet(classD.type); |  | 
| 476     EngineTestCase.assertSize3(3, superinterfacesOfD); |  | 
| 477     JUnitTestCase.assertTrue(superinterfacesOfD.contains(ElementFactory.object.t
      ype)); |  | 
| 478     JUnitTestCase.assertTrue(superinterfacesOfD.contains(classA.type)); |  | 
| 479     JUnitTestCase.assertTrue(superinterfacesOfD.contains(classC.type)); |  | 
| 480     Set<InterfaceType> superinterfacesOfE = InterfaceTypeImpl.computeSuperinterf
      aceSet(classE.type); |  | 
| 481     EngineTestCase.assertSize3(5, superinterfacesOfE); |  | 
| 482     JUnitTestCase.assertTrue(superinterfacesOfE.contains(ElementFactory.object.t
      ype)); |  | 
| 483     JUnitTestCase.assertTrue(superinterfacesOfE.contains(classA.type)); |  | 
| 484     JUnitTestCase.assertTrue(superinterfacesOfE.contains(classB.type)); |  | 
| 485     JUnitTestCase.assertTrue(superinterfacesOfE.contains(classC.type)); |  | 
| 486     JUnitTestCase.assertTrue(superinterfacesOfE.contains(classD.type)); |  | 
| 487   } |  | 
| 488   void test_computeSuperinterfaceSet_recursion() { |  | 
| 489     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 490     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 491     classA.supertype = classB.type; |  | 
| 492     Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
      aceSet(classB.type); |  | 
| 493     EngineTestCase.assertSize3(2, superinterfacesOfB); |  | 
| 494   } |  | 
| 495   void test_computeSuperinterfaceSet_singleInterfacePath() { |  | 
| 496     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 497     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 498     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 499     classB.interfaces = <InterfaceType> [classA.type]; |  | 
| 500     classC.interfaces = <InterfaceType> [classB.type]; |  | 
| 501     Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
      aceSet(classA.type); |  | 
| 502     EngineTestCase.assertSize3(1, superinterfacesOfA); |  | 
| 503     JUnitTestCase.assertTrue(superinterfacesOfA.contains(ElementFactory.object.t
      ype)); |  | 
| 504     Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
      aceSet(classB.type); |  | 
| 505     EngineTestCase.assertSize3(2, superinterfacesOfB); |  | 
| 506     JUnitTestCase.assertTrue(superinterfacesOfB.contains(ElementFactory.object.t
      ype)); |  | 
| 507     JUnitTestCase.assertTrue(superinterfacesOfB.contains(classA.type)); |  | 
| 508     Set<InterfaceType> superinterfacesOfC = InterfaceTypeImpl.computeSuperinterf
      aceSet(classC.type); |  | 
| 509     EngineTestCase.assertSize3(3, superinterfacesOfC); |  | 
| 510     JUnitTestCase.assertTrue(superinterfacesOfC.contains(ElementFactory.object.t
      ype)); |  | 
| 511     JUnitTestCase.assertTrue(superinterfacesOfC.contains(classA.type)); |  | 
| 512     JUnitTestCase.assertTrue(superinterfacesOfC.contains(classB.type)); |  | 
| 513   } |  | 
| 514   void test_computeSuperinterfaceSet_singleSuperclassPath() { |  | 
| 515     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 516     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 517     ClassElement classC = ElementFactory.classElement("C", classB.type, []); |  | 
| 518     Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
      aceSet(classA.type); |  | 
| 519     EngineTestCase.assertSize3(1, superinterfacesOfA); |  | 
| 520     JUnitTestCase.assertTrue(superinterfacesOfA.contains(ElementFactory.object.t
      ype)); |  | 
| 521     Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
      aceSet(classB.type); |  | 
| 522     EngineTestCase.assertSize3(2, superinterfacesOfB); |  | 
| 523     JUnitTestCase.assertTrue(superinterfacesOfB.contains(ElementFactory.object.t
      ype)); |  | 
| 524     JUnitTestCase.assertTrue(superinterfacesOfB.contains(classA.type)); |  | 
| 525     Set<InterfaceType> superinterfacesOfC = InterfaceTypeImpl.computeSuperinterf
      aceSet(classC.type); |  | 
| 526     EngineTestCase.assertSize3(3, superinterfacesOfC); |  | 
| 527     JUnitTestCase.assertTrue(superinterfacesOfC.contains(ElementFactory.object.t
      ype)); |  | 
| 528     JUnitTestCase.assertTrue(superinterfacesOfC.contains(classA.type)); |  | 
| 529     JUnitTestCase.assertTrue(superinterfacesOfC.contains(classB.type)); |  | 
| 530   } |  | 
| 531   void test_creation() { |  | 
| 532     JUnitTestCase.assertNotNull(new InterfaceTypeImpl.con1(ElementFactory.classE
      lement2("A", []))); |  | 
| 533   } |  | 
| 534   void test_getAccessors() { |  | 
| 535     ClassElementImpl typeElement = ElementFactory.classElement2("A", []); |  | 
| 536     PropertyAccessorElement getterG = ElementFactory.getterElement("g", false, n
      ull); |  | 
| 537     PropertyAccessorElement getterH = ElementFactory.getterElement("h", false, n
      ull); |  | 
| 538     typeElement.accessors = <PropertyAccessorElement> [getterG, getterH]; |  | 
| 539     InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |  | 
| 540     JUnitTestCase.assertEquals(2, type.accessors.length); |  | 
| 541   } |  | 
| 542   void test_getAccessors_empty() { |  | 
| 543     ClassElementImpl typeElement = ElementFactory.classElement2("A", []); |  | 
| 544     InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |  | 
| 545     JUnitTestCase.assertEquals(0, type.accessors.length); |  | 
| 546   } |  | 
| 547   void test_getElement() { |  | 
| 548     ClassElementImpl typeElement = ElementFactory.classElement2("A", []); |  | 
| 549     InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |  | 
| 550     JUnitTestCase.assertEquals(typeElement, type.element); |  | 
| 551   } |  | 
| 552   void test_getGetter_implemented() { |  | 
| 553     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 554     String getterName = "g"; |  | 
| 555     PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
      alse, null); |  | 
| 556     classA.accessors = <PropertyAccessorElement> [getterG]; |  | 
| 557     InterfaceType typeA = classA.type; |  | 
| 558     JUnitTestCase.assertSame(getterG, typeA.getGetter(getterName)); |  | 
| 559   } |  | 
| 560   void test_getGetter_parameterized() { |  | 
| 561     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |  | 
| 562     Type2 typeE = classA.type.typeArguments[0]; |  | 
| 563     String getterName = "g"; |  | 
| 564     PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
      alse, typeE); |  | 
| 565     classA.accessors = <PropertyAccessorElement> [getterG]; |  | 
| 566     ((getterG.type as FunctionTypeImpl)).typeArguments = classA.type.typeArgumen
      ts; |  | 
| 567     InterfaceType typeI = ElementFactory.classElement2("I", []).type; |  | 
| 568     InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |  | 
| 569     typeAI.typeArguments = <Type2> [typeI]; |  | 
| 570     PropertyAccessorElement getter = typeAI.getGetter(getterName); |  | 
| 571     JUnitTestCase.assertNotNull(getter); |  | 
| 572     FunctionType getterType = getter.type; |  | 
| 573     JUnitTestCase.assertSame(typeI, getterType.returnType); |  | 
| 574   } |  | 
| 575   void test_getGetter_unimplemented() { |  | 
| 576     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 577     InterfaceType typeA = classA.type; |  | 
| 578     JUnitTestCase.assertNull(typeA.getGetter("g")); |  | 
| 579   } |  | 
| 580   void test_getInterfaces_nonParameterized() { |  | 
| 581     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 582     InterfaceType typeA = classA.type; |  | 
| 583     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 584     InterfaceType typeB = classB.type; |  | 
| 585     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 586     classC.interfaces = <InterfaceType> [typeA, typeB]; |  | 
| 587     List<InterfaceType> interfaces = classC.type.interfaces; |  | 
| 588     EngineTestCase.assertLength(2, interfaces); |  | 
| 589     if (identical(interfaces[0], typeA)) { |  | 
| 590       JUnitTestCase.assertSame(typeB, interfaces[1]); |  | 
| 591     } else { |  | 
| 592       JUnitTestCase.assertSame(typeB, interfaces[0]); |  | 
| 593       JUnitTestCase.assertSame(typeA, interfaces[1]); |  | 
| 594     } |  | 
| 595   } |  | 
| 596   void test_getInterfaces_parameterized() { |  | 
| 597     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |  | 
| 598     ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |  | 
| 599     InterfaceType typeB = classB.type; |  | 
| 600     InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |  | 
| 601     typeAF.typeArguments = <Type2> [typeB.typeArguments[0]]; |  | 
| 602     classB.interfaces = <InterfaceType> [typeAF]; |  | 
| 603     InterfaceType typeI = ElementFactory.classElement2("I", []).type; |  | 
| 604     InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |  | 
| 605     typeBI.typeArguments = <Type2> [typeI]; |  | 
| 606     List<InterfaceType> interfaces = typeBI.interfaces; |  | 
| 607     EngineTestCase.assertLength(1, interfaces); |  | 
| 608     InterfaceType result = interfaces[0]; |  | 
| 609     JUnitTestCase.assertSame(classA, result.element); |  | 
| 610     JUnitTestCase.assertSame(typeI, result.typeArguments[0]); |  | 
| 611   } |  | 
| 612   void test_getLeastUpperBound_directInterfaceCase() { |  | 
| 613     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 614     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 615     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 616     InterfaceType typeA = classA.type; |  | 
| 617     InterfaceType typeB = classB.type; |  | 
| 618     InterfaceType typeC = classC.type; |  | 
| 619     classB.interfaces = <InterfaceType> [typeA]; |  | 
| 620     classC.interfaces = <InterfaceType> [typeB]; |  | 
| 621     JUnitTestCase.assertEquals(typeB, typeB.getLeastUpperBound(typeC)); |  | 
| 622     JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeB)); |  | 
| 623   } |  | 
| 624   void test_getLeastUpperBound_directSubclassCase() { |  | 
| 625     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 626     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 627     ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); |  | 
| 628     InterfaceType typeB = classB.type; |  | 
| 629     InterfaceType typeC = classC.type; |  | 
| 630     JUnitTestCase.assertEquals(typeB, typeB.getLeastUpperBound(typeC)); |  | 
| 631     JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeB)); |  | 
| 632   } |  | 
| 633   void test_getLeastUpperBound_functionType() { |  | 
| 634     Type2 interfaceType = ElementFactory.classElement2("A", []).type; |  | 
| 635     FunctionTypeImpl functionType = new FunctionTypeImpl.con1(new FunctionElemen
      tImpl.con1(ASTFactory.identifier3("f"))); |  | 
| 636     JUnitTestCase.assertNull(interfaceType.getLeastUpperBound(functionType)); |  | 
| 637   } |  | 
| 638   void test_getLeastUpperBound_mixinCase() { |  | 
| 639     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 640     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 641     ClassElement classC = ElementFactory.classElement("C", classA.type, []); |  | 
| 642     ClassElementImpl classD = ElementFactory.classElement("D", classB.type, []); |  | 
| 643     InterfaceType typeA = classA.type; |  | 
| 644     InterfaceType typeC = classC.type; |  | 
| 645     InterfaceType typeD = classD.type; |  | 
| 646     classD.mixins = <InterfaceType> [ |  | 
| 647         ElementFactory.classElement2("M", []).type, |  | 
| 648         ElementFactory.classElement2("N", []).type, |  | 
| 649         ElementFactory.classElement2("O", []).type, |  | 
| 650         ElementFactory.classElement2("P", []).type]; |  | 
| 651     JUnitTestCase.assertEquals(typeA, typeD.getLeastUpperBound(typeC)); |  | 
| 652     JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeD)); |  | 
| 653   } |  | 
| 654   void test_getLeastUpperBound_null() { |  | 
| 655     Type2 interfaceType = ElementFactory.classElement2("A", []).type; |  | 
| 656     JUnitTestCase.assertNull(interfaceType.getLeastUpperBound(null)); |  | 
| 657   } |  | 
| 658   void test_getLeastUpperBound_object() { |  | 
| 659     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 660     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 661     InterfaceType typeA = classA.type; |  | 
| 662     InterfaceType typeB = classB.type; |  | 
| 663     Type2 typeObject = typeA.element.supertype; |  | 
| 664     JUnitTestCase.assertNull(((typeObject.element as ClassElement)).supertype); |  | 
| 665     JUnitTestCase.assertEquals(typeObject, typeB.element.supertype); |  | 
| 666     JUnitTestCase.assertEquals(typeObject, typeA.getLeastUpperBound(typeB)); |  | 
| 667   } |  | 
| 668   void test_getLeastUpperBound_self() { |  | 
| 669     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 670     InterfaceType typeA = classA.type; |  | 
| 671     JUnitTestCase.assertEquals(typeA, typeA.getLeastUpperBound(typeA)); |  | 
| 672   } |  | 
| 673   void test_getLeastUpperBound_sharedSuperclass1() { |  | 
| 674     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 675     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 676     ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); |  | 
| 677     InterfaceType typeA = classA.type; |  | 
| 678     InterfaceType typeB = classB.type; |  | 
| 679     InterfaceType typeC = classC.type; |  | 
| 680     JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); |  | 
| 681     JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); |  | 
| 682   } |  | 
| 683   void test_getLeastUpperBound_sharedSuperclass2() { |  | 
| 684     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 685     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 686     ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); |  | 
| 687     ClassElementImpl classD = ElementFactory.classElement("D", classC.type, []); |  | 
| 688     InterfaceType typeA = classA.type; |  | 
| 689     InterfaceType typeB = classB.type; |  | 
| 690     InterfaceType typeD = classD.type; |  | 
| 691     JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeD)); |  | 
| 692     JUnitTestCase.assertEquals(typeA, typeD.getLeastUpperBound(typeB)); |  | 
| 693   } |  | 
| 694   void test_getLeastUpperBound_sharedSuperclass3() { |  | 
| 695     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 696     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 697     ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); |  | 
| 698     ClassElementImpl classD = ElementFactory.classElement("D", classB.type, []); |  | 
| 699     InterfaceType typeB = classB.type; |  | 
| 700     InterfaceType typeC = classC.type; |  | 
| 701     InterfaceType typeD = classD.type; |  | 
| 702     JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeD)); |  | 
| 703     JUnitTestCase.assertEquals(typeB, typeD.getLeastUpperBound(typeC)); |  | 
| 704   } |  | 
| 705   void test_getLeastUpperBound_sharedSuperclass4() { |  | 
| 706     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 707     ClassElement classA2 = ElementFactory.classElement2("A2", []); |  | 
| 708     ClassElement classA3 = ElementFactory.classElement2("A3", []); |  | 
| 709     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 710     ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); |  | 
| 711     InterfaceType typeA = classA.type; |  | 
| 712     InterfaceType typeA2 = classA2.type; |  | 
| 713     InterfaceType typeA3 = classA3.type; |  | 
| 714     InterfaceType typeB = classB.type; |  | 
| 715     InterfaceType typeC = classC.type; |  | 
| 716     classB.interfaces = <InterfaceType> [typeA2]; |  | 
| 717     classC.interfaces = <InterfaceType> [typeA3]; |  | 
| 718     JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); |  | 
| 719     JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); |  | 
| 720   } |  | 
| 721   void test_getLeastUpperBound_sharedSuperinterface1() { |  | 
| 722     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 723     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 724     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 725     InterfaceType typeA = classA.type; |  | 
| 726     InterfaceType typeB = classB.type; |  | 
| 727     InterfaceType typeC = classC.type; |  | 
| 728     classB.interfaces = <InterfaceType> [typeA]; |  | 
| 729     classC.interfaces = <InterfaceType> [typeA]; |  | 
| 730     JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); |  | 
| 731     JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); |  | 
| 732   } |  | 
| 733   void test_getLeastUpperBound_sharedSuperinterface2() { |  | 
| 734     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 735     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 736     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 737     ClassElementImpl classD = ElementFactory.classElement2("D", []); |  | 
| 738     InterfaceType typeA = classA.type; |  | 
| 739     InterfaceType typeB = classB.type; |  | 
| 740     InterfaceType typeC = classC.type; |  | 
| 741     InterfaceType typeD = classD.type; |  | 
| 742     classB.interfaces = <InterfaceType> [typeA]; |  | 
| 743     classC.interfaces = <InterfaceType> [typeA]; |  | 
| 744     classD.interfaces = <InterfaceType> [typeC]; |  | 
| 745     JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeD)); |  | 
| 746     JUnitTestCase.assertEquals(typeA, typeD.getLeastUpperBound(typeB)); |  | 
| 747   } |  | 
| 748   void test_getLeastUpperBound_sharedSuperinterface3() { |  | 
| 749     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 750     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 751     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 752     ClassElementImpl classD = ElementFactory.classElement2("D", []); |  | 
| 753     InterfaceType typeA = classA.type; |  | 
| 754     InterfaceType typeB = classB.type; |  | 
| 755     InterfaceType typeC = classC.type; |  | 
| 756     InterfaceType typeD = classD.type; |  | 
| 757     classB.interfaces = <InterfaceType> [typeA]; |  | 
| 758     classC.interfaces = <InterfaceType> [typeB]; |  | 
| 759     classD.interfaces = <InterfaceType> [typeB]; |  | 
| 760     JUnitTestCase.assertEquals(typeB, typeC.getLeastUpperBound(typeD)); |  | 
| 761     JUnitTestCase.assertEquals(typeB, typeD.getLeastUpperBound(typeC)); |  | 
| 762   } |  | 
| 763   void test_getLeastUpperBound_sharedSuperinterface4() { |  | 
| 764     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 765     ClassElement classA2 = ElementFactory.classElement2("A2", []); |  | 
| 766     ClassElement classA3 = ElementFactory.classElement2("A3", []); |  | 
| 767     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 768     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 769     InterfaceType typeA = classA.type; |  | 
| 770     InterfaceType typeA2 = classA2.type; |  | 
| 771     InterfaceType typeA3 = classA3.type; |  | 
| 772     InterfaceType typeB = classB.type; |  | 
| 773     InterfaceType typeC = classC.type; |  | 
| 774     classB.interfaces = <InterfaceType> [typeA, typeA2]; |  | 
| 775     classC.interfaces = <InterfaceType> [typeA, typeA3]; |  | 
| 776     JUnitTestCase.assertEquals(typeA, typeB.getLeastUpperBound(typeC)); |  | 
| 777     JUnitTestCase.assertEquals(typeA, typeC.getLeastUpperBound(typeB)); |  | 
| 778   } |  | 
| 779   void test_getLeastUpperBound_twoComparables() { |  | 
| 780     InterfaceType string = _typeProvider.stringType; |  | 
| 781     InterfaceType num = _typeProvider.numType; |  | 
| 782     JUnitTestCase.assertEquals(_typeProvider.objectType, string.getLeastUpperBou
      nd(num)); |  | 
| 783   } |  | 
| 784   void test_getLeastUpperBound_typeParameters_different() { |  | 
| 785     InterfaceType listType = _typeProvider.listType; |  | 
| 786     InterfaceType intType = _typeProvider.intType; |  | 
| 787     InterfaceType doubleType = _typeProvider.doubleType; |  | 
| 788     InterfaceType listOfIntType = listType.substitute4(<Type2> [intType]); |  | 
| 789     InterfaceType listOfDoubleType = listType.substitute4(<Type2> [doubleType]); |  | 
| 790     JUnitTestCase.assertEquals(listType.substitute4(<Type2> [_typeProvider.dynam
      icType]), listOfIntType.getLeastUpperBound(listOfDoubleType)); |  | 
| 791   } |  | 
| 792   void test_getLeastUpperBound_typeParameters_same() { |  | 
| 793     InterfaceType listType = _typeProvider.listType; |  | 
| 794     InterfaceType intType = _typeProvider.intType; |  | 
| 795     InterfaceType listOfIntType = listType.substitute4(<Type2> [intType]); |  | 
| 796     JUnitTestCase.assertEquals(listOfIntType, listOfIntType.getLeastUpperBound(l
      istOfIntType)); |  | 
| 797   } |  | 
| 798   void test_getMethod_implemented() { |  | 
| 799     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 800     String methodName = "m"; |  | 
| 801     MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
      ]); |  | 
| 802     classA.methods = <MethodElement> [methodM]; |  | 
| 803     InterfaceType typeA = classA.type; |  | 
| 804     JUnitTestCase.assertSame(methodM, typeA.getMethod(methodName)); |  | 
| 805   } |  | 
| 806   void test_getMethod_parameterized() { |  | 
| 807     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |  | 
| 808     Type2 typeE = classA.type.typeArguments[0]; |  | 
| 809     String methodName = "m"; |  | 
| 810     MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE, 
      [typeE]); |  | 
| 811     classA.methods = <MethodElement> [methodM]; |  | 
| 812     ((methodM.type as FunctionTypeImpl)).typeArguments = classA.type.typeArgumen
      ts; |  | 
| 813     InterfaceType typeI = ElementFactory.classElement2("I", []).type; |  | 
| 814     InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |  | 
| 815     typeAI.typeArguments = <Type2> [typeI]; |  | 
| 816     MethodElement method = typeAI.getMethod(methodName); |  | 
| 817     JUnitTestCase.assertNotNull(method); |  | 
| 818     FunctionType methodType = method.type; |  | 
| 819     JUnitTestCase.assertSame(typeI, methodType.returnType); |  | 
| 820     List<Type2> parameterTypes = methodType.normalParameterTypes; |  | 
| 821     EngineTestCase.assertLength(1, parameterTypes); |  | 
| 822     JUnitTestCase.assertSame(typeI, parameterTypes[0]); |  | 
| 823   } |  | 
| 824   void test_getMethod_unimplemented() { |  | 
| 825     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 826     InterfaceType typeA = classA.type; |  | 
| 827     JUnitTestCase.assertNull(typeA.getMethod("m")); |  | 
| 828   } |  | 
| 829   void test_getMethods() { |  | 
| 830     ClassElementImpl typeElement = ElementFactory.classElement2("A", []); |  | 
| 831     MethodElementImpl methodOne = ElementFactory.methodElement("one", null, []); |  | 
| 832     MethodElementImpl methodTwo = ElementFactory.methodElement("two", null, []); |  | 
| 833     typeElement.methods = <MethodElement> [methodOne, methodTwo]; |  | 
| 834     InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |  | 
| 835     JUnitTestCase.assertEquals(2, type.methods.length); |  | 
| 836   } |  | 
| 837   void test_getMethods_empty() { |  | 
| 838     ClassElementImpl typeElement = ElementFactory.classElement2("A", []); |  | 
| 839     InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |  | 
| 840     JUnitTestCase.assertEquals(0, type.methods.length); |  | 
| 841   } |  | 
| 842   void test_getMixins_nonParameterized() { |  | 
| 843     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 844     InterfaceType typeA = classA.type; |  | 
| 845     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 846     InterfaceType typeB = classB.type; |  | 
| 847     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 848     classC.mixins = <InterfaceType> [typeA, typeB]; |  | 
| 849     List<InterfaceType> interfaces = classC.type.mixins; |  | 
| 850     EngineTestCase.assertLength(2, interfaces); |  | 
| 851     if (identical(interfaces[0], typeA)) { |  | 
| 852       JUnitTestCase.assertSame(typeB, interfaces[1]); |  | 
| 853     } else { |  | 
| 854       JUnitTestCase.assertSame(typeB, interfaces[0]); |  | 
| 855       JUnitTestCase.assertSame(typeA, interfaces[1]); |  | 
| 856     } |  | 
| 857   } |  | 
| 858   void test_getMixins_parameterized() { |  | 
| 859     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |  | 
| 860     ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |  | 
| 861     InterfaceType typeB = classB.type; |  | 
| 862     InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |  | 
| 863     typeAF.typeArguments = <Type2> [typeB.typeArguments[0]]; |  | 
| 864     classB.mixins = <InterfaceType> [typeAF]; |  | 
| 865     InterfaceType typeI = ElementFactory.classElement2("I", []).type; |  | 
| 866     InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |  | 
| 867     typeBI.typeArguments = <Type2> [typeI]; |  | 
| 868     List<InterfaceType> interfaces = typeBI.mixins; |  | 
| 869     EngineTestCase.assertLength(1, interfaces); |  | 
| 870     InterfaceType result = interfaces[0]; |  | 
| 871     JUnitTestCase.assertSame(classA, result.element); |  | 
| 872     JUnitTestCase.assertSame(typeI, result.typeArguments[0]); |  | 
| 873   } |  | 
| 874   void test_getSetter_implemented() { |  | 
| 875     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 876     String setterName = "s"; |  | 
| 877     PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
      alse, null); |  | 
| 878     classA.accessors = <PropertyAccessorElement> [setterS]; |  | 
| 879     InterfaceType typeA = classA.type; |  | 
| 880     JUnitTestCase.assertSame(setterS, typeA.getSetter(setterName)); |  | 
| 881   } |  | 
| 882   void test_getSetter_parameterized() { |  | 
| 883     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |  | 
| 884     Type2 typeE = classA.type.typeArguments[0]; |  | 
| 885     String setterName = "s"; |  | 
| 886     PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
      alse, typeE); |  | 
| 887     classA.accessors = <PropertyAccessorElement> [setterS]; |  | 
| 888     ((setterS.type as FunctionTypeImpl)).typeArguments = classA.type.typeArgumen
      ts; |  | 
| 889     InterfaceType typeI = ElementFactory.classElement2("I", []).type; |  | 
| 890     InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |  | 
| 891     typeAI.typeArguments = <Type2> [typeI]; |  | 
| 892     PropertyAccessorElement setter = typeAI.getSetter(setterName); |  | 
| 893     JUnitTestCase.assertNotNull(setter); |  | 
| 894     FunctionType setterType = setter.type; |  | 
| 895     List<Type2> parameterTypes = setterType.normalParameterTypes; |  | 
| 896     EngineTestCase.assertLength(1, parameterTypes); |  | 
| 897     JUnitTestCase.assertSame(typeI, parameterTypes[0]); |  | 
| 898   } |  | 
| 899   void test_getSetter_unimplemented() { |  | 
| 900     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 901     InterfaceType typeA = classA.type; |  | 
| 902     JUnitTestCase.assertNull(typeA.getSetter("s")); |  | 
| 903   } |  | 
| 904   void test_getSuperclass_nonParameterized() { |  | 
| 905     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 906     InterfaceType typeA = classA.type; |  | 
| 907     ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); |  | 
| 908     InterfaceType typeB = classB.type; |  | 
| 909     JUnitTestCase.assertSame(typeA, typeB.superclass); |  | 
| 910   } |  | 
| 911   void test_getSuperclass_parameterized() { |  | 
| 912     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |  | 
| 913     ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |  | 
| 914     InterfaceType typeB = classB.type; |  | 
| 915     InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |  | 
| 916     typeAF.typeArguments = <Type2> [typeB.typeArguments[0]]; |  | 
| 917     classB.supertype = typeAF; |  | 
| 918     InterfaceType typeI = ElementFactory.classElement2("I", []).type; |  | 
| 919     InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |  | 
| 920     typeBI.typeArguments = <Type2> [typeI]; |  | 
| 921     InterfaceType superclass = typeBI.superclass; |  | 
| 922     JUnitTestCase.assertSame(classA, superclass.element); |  | 
| 923     JUnitTestCase.assertSame(typeI, superclass.typeArguments[0]); |  | 
| 924   } |  | 
| 925   void test_getTypeArguments_empty() { |  | 
| 926     InterfaceType type = ElementFactory.classElement2("A", []).type; |  | 
| 927     EngineTestCase.assertLength(0, type.typeArguments); |  | 
| 928   } |  | 
| 929   void test_hashCode() { |  | 
| 930     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 931     InterfaceType typeA = classA.type; |  | 
| 932     JUnitTestCase.assertFalse(0 == typeA.hashCode); |  | 
| 933   } |  | 
| 934   void test_isDirectSupertypeOf_extends() { |  | 
| 935     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 936     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 937     InterfaceType typeA = classA.type; |  | 
| 938     InterfaceType typeB = classB.type; |  | 
| 939     JUnitTestCase.assertTrue(typeA.isDirectSupertypeOf(typeB)); |  | 
| 940   } |  | 
| 941   void test_isDirectSupertypeOf_false() { |  | 
| 942     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 943     ClassElement classB = ElementFactory.classElement2("B", []); |  | 
| 944     ClassElement classC = ElementFactory.classElement("C", classB.type, []); |  | 
| 945     InterfaceType typeA = classA.type; |  | 
| 946     InterfaceType typeC = classC.type; |  | 
| 947     JUnitTestCase.assertFalse(typeA.isDirectSupertypeOf(typeC)); |  | 
| 948   } |  | 
| 949   void test_isDirectSupertypeOf_implements() { |  | 
| 950     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 951     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 952     InterfaceType typeA = classA.type; |  | 
| 953     InterfaceType typeB = classB.type; |  | 
| 954     classB.interfaces = <InterfaceType> [typeA]; |  | 
| 955     JUnitTestCase.assertTrue(typeA.isDirectSupertypeOf(typeB)); |  | 
| 956   } |  | 
| 957   void test_isDirectSupertypeOf_with() { |  | 
| 958     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 959     ClassElementImpl classB = ElementFactory.classElement2("B", []); |  | 
| 960     InterfaceType typeA = classA.type; |  | 
| 961     InterfaceType typeB = classB.type; |  | 
| 962     classB.mixins = <InterfaceType> [typeA]; |  | 
| 963     JUnitTestCase.assertTrue(typeA.isDirectSupertypeOf(typeB)); |  | 
| 964   } |  | 
| 965   void test_isMoreSpecificThan_bottom() { |  | 
| 966     Type2 type = ElementFactory.classElement2("A", []).type; |  | 
| 967     JUnitTestCase.assertTrue(BottomTypeImpl.instance.isMoreSpecificThan(type)); |  | 
| 968   } |  | 
| 969   void test_isMoreSpecificThan_covariance() { |  | 
| 970     ClassElement classA = ElementFactory.classElement2("A", ["E"]); |  | 
| 971     ClassElement classI = ElementFactory.classElement2("I", []); |  | 
| 972     ClassElement classJ = ElementFactory.classElement("J", classI.type, []); |  | 
| 973     InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |  | 
| 974     InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA); |  | 
| 975     typeAI.typeArguments = <Type2> [classI.type]; |  | 
| 976     typeAJ.typeArguments = <Type2> [classJ.type]; |  | 
| 977     JUnitTestCase.assertTrue(typeAJ.isMoreSpecificThan(typeAI)); |  | 
| 978     JUnitTestCase.assertFalse(typeAI.isMoreSpecificThan(typeAJ)); |  | 
| 979   } |  | 
| 980   void test_isMoreSpecificThan_directSupertype() { |  | 
| 981     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 982     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 983     InterfaceType typeA = classA.type; |  | 
| 984     InterfaceType typeB = classB.type; |  | 
| 985     JUnitTestCase.assertTrue(typeB.isMoreSpecificThan(typeA)); |  | 
| 986     JUnitTestCase.assertFalse(typeA.isMoreSpecificThan(typeB)); |  | 
| 987   } |  | 
| 988   void test_isMoreSpecificThan_dynamic() { |  | 
| 989     InterfaceType type = ElementFactory.classElement2("A", []).type; |  | 
| 990     JUnitTestCase.assertTrue(type.isMoreSpecificThan(DynamicTypeImpl.instance)); |  | 
| 991   } |  | 
| 992   void test_isMoreSpecificThan_self() { |  | 
| 993     InterfaceType type = ElementFactory.classElement2("A", []).type; |  | 
| 994     JUnitTestCase.assertTrue(type.isMoreSpecificThan(type)); |  | 
| 995   } |  | 
| 996   void test_isMoreSpecificThan_transitive_interface() { |  | 
| 997     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 998     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 999     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 1000     classC.interfaces = <InterfaceType> [classB.type]; |  | 
| 1001     InterfaceType typeA = classA.type; |  | 
| 1002     InterfaceType typeC = classC.type; |  | 
| 1003     JUnitTestCase.assertTrue(typeC.isMoreSpecificThan(typeA)); |  | 
| 1004   } |  | 
| 1005   void test_isMoreSpecificThan_transitive_mixin() { |  | 
| 1006     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1007     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1008     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 1009     classC.mixins = <InterfaceType> [classB.type]; |  | 
| 1010     InterfaceType typeA = classA.type; |  | 
| 1011     InterfaceType typeC = classC.type; |  | 
| 1012     JUnitTestCase.assertTrue(typeC.isMoreSpecificThan(typeA)); |  | 
| 1013   } |  | 
| 1014   void test_isMoreSpecificThan_transitive_recursive() { |  | 
| 1015     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1016     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1017     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 1018     InterfaceType typeA = classA.type; |  | 
| 1019     InterfaceType typeC = classC.type; |  | 
| 1020     classA.supertype = classB.type; |  | 
| 1021     JUnitTestCase.assertFalse(typeA.isMoreSpecificThan(typeC)); |  | 
| 1022   } |  | 
| 1023   void test_isMoreSpecificThan_transitive_superclass() { |  | 
| 1024     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1025     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1026     ClassElement classC = ElementFactory.classElement("C", classB.type, []); |  | 
| 1027     InterfaceType typeA = classA.type; |  | 
| 1028     InterfaceType typeC = classC.type; |  | 
| 1029     JUnitTestCase.assertTrue(typeC.isMoreSpecificThan(typeA)); |  | 
| 1030   } |  | 
| 1031   void test_isSubtypeOf_directSubtype() { |  | 
| 1032     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1033     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1034     InterfaceType typeA = classA.type; |  | 
| 1035     InterfaceType typeB = classB.type; |  | 
| 1036     JUnitTestCase.assertTrue(typeB.isSubtypeOf(typeA)); |  | 
| 1037     JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeB)); |  | 
| 1038   } |  | 
| 1039   void test_isSubtypeOf_dynamic() { |  | 
| 1040     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1041     InterfaceType typeA = classA.type; |  | 
| 1042     Type2 dynamicType = DynamicTypeImpl.instance; |  | 
| 1043     JUnitTestCase.assertTrue(dynamicType.isSubtypeOf(typeA)); |  | 
| 1044     JUnitTestCase.assertTrue(typeA.isSubtypeOf(dynamicType)); |  | 
| 1045   } |  | 
| 1046   void test_isSubtypeOf_function() { |  | 
| 1047     InterfaceType stringType = _typeProvider.stringType; |  | 
| 1048     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1049     classA.methods = <MethodElement> [ElementFactory.methodElement("call", VoidT
      ypeImpl.instance, [stringType])]; |  | 
| 1050     FunctionType functionType = ElementFactory.functionElement5("f", <ClassEleme
      nt> [stringType.element]).type; |  | 
| 1051     JUnitTestCase.assertTrue(classA.type.isSubtypeOf(functionType)); |  | 
| 1052   } |  | 
| 1053   void test_isSubtypeOf_interface() { |  | 
| 1054     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1055     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1056     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 1057     InterfaceType typeObject = classA.supertype; |  | 
| 1058     InterfaceType typeA = classA.type; |  | 
| 1059     InterfaceType typeB = classB.type; |  | 
| 1060     InterfaceType typeC = classC.type; |  | 
| 1061     classC.interfaces = <InterfaceType> [typeB]; |  | 
| 1062     JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeB)); |  | 
| 1063     JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeObject)); |  | 
| 1064     JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeA)); |  | 
| 1065     JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); |  | 
| 1066   } |  | 
| 1067   void test_isSubtypeOf_mixins() { |  | 
| 1068     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1069     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1070     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 1071     InterfaceType typeObject = classA.supertype; |  | 
| 1072     InterfaceType typeA = classA.type; |  | 
| 1073     InterfaceType typeB = classB.type; |  | 
| 1074     InterfaceType typeC = classC.type; |  | 
| 1075     classC.mixins = <InterfaceType> [typeB]; |  | 
| 1076     JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeB)); |  | 
| 1077     JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeObject)); |  | 
| 1078     JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeA)); |  | 
| 1079     JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); |  | 
| 1080   } |  | 
| 1081   void test_isSubtypeOf_object() { |  | 
| 1082     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1083     InterfaceType typeA = classA.type; |  | 
| 1084     InterfaceType typeObject = classA.supertype; |  | 
| 1085     JUnitTestCase.assertTrue(typeA.isSubtypeOf(typeObject)); |  | 
| 1086     JUnitTestCase.assertFalse(typeObject.isSubtypeOf(typeA)); |  | 
| 1087   } |  | 
| 1088   void test_isSubtypeOf_self() { |  | 
| 1089     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1090     InterfaceType typeA = classA.type; |  | 
| 1091     JUnitTestCase.assertTrue(typeA.isSubtypeOf(typeA)); |  | 
| 1092   } |  | 
| 1093   void test_isSubtypeOf_transitive_recursive() { |  | 
| 1094     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1095     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1096     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 1097     InterfaceType typeA = classA.type; |  | 
| 1098     InterfaceType typeC = classC.type; |  | 
| 1099     classA.supertype = classB.type; |  | 
| 1100     JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); |  | 
| 1101   } |  | 
| 1102   void test_isSubtypeOf_transitive_superclass() { |  | 
| 1103     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1104     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1105     ClassElement classC = ElementFactory.classElement("C", classB.type, []); |  | 
| 1106     InterfaceType typeA = classA.type; |  | 
| 1107     InterfaceType typeC = classC.type; |  | 
| 1108     JUnitTestCase.assertTrue(typeC.isSubtypeOf(typeA)); |  | 
| 1109     JUnitTestCase.assertFalse(typeA.isSubtypeOf(typeC)); |  | 
| 1110   } |  | 
| 1111   void test_isSubtypeOf_typeArguments() { |  | 
| 1112     Type2 dynamicType = DynamicTypeImpl.instance; |  | 
| 1113     ClassElement classA = ElementFactory.classElement2("A", ["E"]); |  | 
| 1114     ClassElement classI = ElementFactory.classElement2("I", []); |  | 
| 1115     ClassElement classJ = ElementFactory.classElement("J", classI.type, []); |  | 
| 1116     ClassElement classK = ElementFactory.classElement2("K", []); |  | 
| 1117     InterfaceType typeA = classA.type; |  | 
| 1118     InterfaceType typeA_dynamic = typeA.substitute4(<Type2> [dynamicType]); |  | 
| 1119     InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |  | 
| 1120     InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA); |  | 
| 1121     InterfaceTypeImpl typeAK = new InterfaceTypeImpl.con1(classA); |  | 
| 1122     typeAI.typeArguments = <Type2> [classI.type]; |  | 
| 1123     typeAJ.typeArguments = <Type2> [classJ.type]; |  | 
| 1124     typeAK.typeArguments = <Type2> [classK.type]; |  | 
| 1125     JUnitTestCase.assertTrue(typeAJ.isSubtypeOf(typeAI)); |  | 
| 1126     JUnitTestCase.assertFalse(typeAI.isSubtypeOf(typeAJ)); |  | 
| 1127     JUnitTestCase.assertTrue(typeAI.isSubtypeOf(typeAI)); |  | 
| 1128     JUnitTestCase.assertTrue(typeA_dynamic.isSubtypeOf(typeAI)); |  | 
| 1129     JUnitTestCase.assertTrue(typeA_dynamic.isSubtypeOf(typeAJ)); |  | 
| 1130     JUnitTestCase.assertTrue(typeAI.isSubtypeOf(typeA_dynamic)); |  | 
| 1131     JUnitTestCase.assertTrue(typeAJ.isSubtypeOf(typeA_dynamic)); |  | 
| 1132     JUnitTestCase.assertFalse(typeAI.isSubtypeOf(typeAK)); |  | 
| 1133     JUnitTestCase.assertFalse(typeAK.isSubtypeOf(typeAI)); |  | 
| 1134   } |  | 
| 1135   void test_isSupertypeOf_directSupertype() { |  | 
| 1136     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1137     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1138     InterfaceType typeA = classA.type; |  | 
| 1139     InterfaceType typeB = classB.type; |  | 
| 1140     JUnitTestCase.assertFalse(typeB.isSupertypeOf(typeA)); |  | 
| 1141     JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeB)); |  | 
| 1142   } |  | 
| 1143   void test_isSupertypeOf_dynamic() { |  | 
| 1144     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1145     InterfaceType typeA = classA.type; |  | 
| 1146     Type2 dynamicType = DynamicTypeImpl.instance; |  | 
| 1147     JUnitTestCase.assertTrue(dynamicType.isSupertypeOf(typeA)); |  | 
| 1148     JUnitTestCase.assertTrue(typeA.isSupertypeOf(dynamicType)); |  | 
| 1149   } |  | 
| 1150   void test_isSupertypeOf_indirectSupertype() { |  | 
| 1151     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1152     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1153     ClassElement classC = ElementFactory.classElement("C", classB.type, []); |  | 
| 1154     InterfaceType typeA = classA.type; |  | 
| 1155     InterfaceType typeC = classC.type; |  | 
| 1156     JUnitTestCase.assertFalse(typeC.isSupertypeOf(typeA)); |  | 
| 1157     JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeC)); |  | 
| 1158   } |  | 
| 1159   void test_isSupertypeOf_interface() { |  | 
| 1160     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1161     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1162     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 1163     InterfaceType typeObject = classA.supertype; |  | 
| 1164     InterfaceType typeA = classA.type; |  | 
| 1165     InterfaceType typeB = classB.type; |  | 
| 1166     InterfaceType typeC = classC.type; |  | 
| 1167     classC.interfaces = <InterfaceType> [typeB]; |  | 
| 1168     JUnitTestCase.assertTrue(typeB.isSupertypeOf(typeC)); |  | 
| 1169     JUnitTestCase.assertTrue(typeObject.isSupertypeOf(typeC)); |  | 
| 1170     JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeC)); |  | 
| 1171     JUnitTestCase.assertFalse(typeC.isSupertypeOf(typeA)); |  | 
| 1172   } |  | 
| 1173   void test_isSupertypeOf_mixins() { |  | 
| 1174     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1175     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1176     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 1177     InterfaceType typeObject = classA.supertype; |  | 
| 1178     InterfaceType typeA = classA.type; |  | 
| 1179     InterfaceType typeB = classB.type; |  | 
| 1180     InterfaceType typeC = classC.type; |  | 
| 1181     classC.mixins = <InterfaceType> [typeB]; |  | 
| 1182     JUnitTestCase.assertTrue(typeB.isSupertypeOf(typeC)); |  | 
| 1183     JUnitTestCase.assertTrue(typeObject.isSupertypeOf(typeC)); |  | 
| 1184     JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeC)); |  | 
| 1185     JUnitTestCase.assertFalse(typeC.isSupertypeOf(typeA)); |  | 
| 1186   } |  | 
| 1187   void test_isSupertypeOf_object() { |  | 
| 1188     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1189     InterfaceType typeA = classA.type; |  | 
| 1190     InterfaceType typeObject = classA.supertype; |  | 
| 1191     JUnitTestCase.assertFalse(typeA.isSupertypeOf(typeObject)); |  | 
| 1192     JUnitTestCase.assertTrue(typeObject.isSupertypeOf(typeA)); |  | 
| 1193   } |  | 
| 1194   void test_isSupertypeOf_self() { |  | 
| 1195     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 1196     InterfaceType typeA = classA.type; |  | 
| 1197     JUnitTestCase.assertTrue(typeA.isSupertypeOf(typeA)); |  | 
| 1198   } |  | 
| 1199   void test_lookUpGetter_implemented() { |  | 
| 1200     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1201     String getterName = "g"; |  | 
| 1202     PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
      alse, null); |  | 
| 1203     classA.accessors = <PropertyAccessorElement> [getterG]; |  | 
| 1204     InterfaceType typeA = classA.type; |  | 
| 1205     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1206     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1207     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA]; |  | 
| 1208     JUnitTestCase.assertSame(getterG, typeA.lookUpGetter(getterName, library)); |  | 
| 1209   } |  | 
| 1210   void test_lookUpGetter_inherited() { |  | 
| 1211     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1212     String getterName = "g"; |  | 
| 1213     PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
      alse, null); |  | 
| 1214     classA.accessors = <PropertyAccessorElement> [getterG]; |  | 
| 1215     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1216     InterfaceType typeB = classB.type; |  | 
| 1217     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1218     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1219     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, class
      B]; |  | 
| 1220     JUnitTestCase.assertSame(getterG, typeB.lookUpGetter(getterName, library)); |  | 
| 1221   } |  | 
| 1222   void test_lookUpGetter_recursive() { |  | 
| 1223     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1224     InterfaceType typeA = classA.type; |  | 
| 1225     ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); |  | 
| 1226     classA.supertype = classB.type; |  | 
| 1227     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1228     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1229     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, class
      B]; |  | 
| 1230     JUnitTestCase.assertNull(typeA.lookUpGetter("g", library)); |  | 
| 1231   } |  | 
| 1232   void test_lookUpGetter_unimplemented() { |  | 
| 1233     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1234     InterfaceType typeA = classA.type; |  | 
| 1235     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1236     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1237     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA]; |  | 
| 1238     JUnitTestCase.assertNull(typeA.lookUpGetter("g", library)); |  | 
| 1239   } |  | 
| 1240   void test_lookUpMethod_implemented() { |  | 
| 1241     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1242     String methodName = "m"; |  | 
| 1243     MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
      ]); |  | 
| 1244     classA.methods = <MethodElement> [methodM]; |  | 
| 1245     InterfaceType typeA = classA.type; |  | 
| 1246     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1247     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1248     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA]; |  | 
| 1249     JUnitTestCase.assertSame(methodM, typeA.lookUpMethod(methodName, library)); |  | 
| 1250   } |  | 
| 1251   void test_lookUpMethod_inherited() { |  | 
| 1252     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1253     String methodName = "m"; |  | 
| 1254     MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
      ]); |  | 
| 1255     classA.methods = <MethodElement> [methodM]; |  | 
| 1256     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1257     InterfaceType typeB = classB.type; |  | 
| 1258     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1259     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1260     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, class
      B]; |  | 
| 1261     JUnitTestCase.assertSame(methodM, typeB.lookUpMethod(methodName, library)); |  | 
| 1262   } |  | 
| 1263   void test_lookUpMethod_parameterized() { |  | 
| 1264     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |  | 
| 1265     Type2 typeE = classA.type.typeArguments[0]; |  | 
| 1266     String methodName = "m"; |  | 
| 1267     MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE, 
      [typeE]); |  | 
| 1268     classA.methods = <MethodElement> [methodM]; |  | 
| 1269     ((methodM.type as FunctionTypeImpl)).typeArguments = classA.type.typeArgumen
      ts; |  | 
| 1270     ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |  | 
| 1271     InterfaceType typeB = classB.type; |  | 
| 1272     InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |  | 
| 1273     typeAF.typeArguments = <Type2> [typeB.typeArguments[0]]; |  | 
| 1274     classB.supertype = typeAF; |  | 
| 1275     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1276     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1277     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA]; |  | 
| 1278     InterfaceType typeI = ElementFactory.classElement2("I", []).type; |  | 
| 1279     InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |  | 
| 1280     typeBI.typeArguments = <Type2> [typeI]; |  | 
| 1281     MethodElement method = typeBI.lookUpMethod(methodName, library); |  | 
| 1282     JUnitTestCase.assertNotNull(method); |  | 
| 1283     FunctionType methodType = method.type; |  | 
| 1284     JUnitTestCase.assertSame(typeI, methodType.returnType); |  | 
| 1285     List<Type2> parameterTypes = methodType.normalParameterTypes; |  | 
| 1286     EngineTestCase.assertLength(1, parameterTypes); |  | 
| 1287     JUnitTestCase.assertSame(typeI, parameterTypes[0]); |  | 
| 1288   } |  | 
| 1289   void test_lookUpMethod_recursive() { |  | 
| 1290     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1291     InterfaceType typeA = classA.type; |  | 
| 1292     ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); |  | 
| 1293     classA.supertype = classB.type; |  | 
| 1294     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1295     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1296     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, class
      B]; |  | 
| 1297     JUnitTestCase.assertNull(typeA.lookUpMethod("m", library)); |  | 
| 1298   } |  | 
| 1299   void test_lookUpMethod_unimplemented() { |  | 
| 1300     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1301     InterfaceType typeA = classA.type; |  | 
| 1302     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1303     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1304     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA]; |  | 
| 1305     JUnitTestCase.assertNull(typeA.lookUpMethod("m", library)); |  | 
| 1306   } |  | 
| 1307   void test_lookUpSetter_implemented() { |  | 
| 1308     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1309     String setterName = "s"; |  | 
| 1310     PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
      alse, null); |  | 
| 1311     classA.accessors = <PropertyAccessorElement> [setterS]; |  | 
| 1312     InterfaceType typeA = classA.type; |  | 
| 1313     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1314     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1315     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA]; |  | 
| 1316     JUnitTestCase.assertSame(setterS, typeA.lookUpSetter(setterName, library)); |  | 
| 1317   } |  | 
| 1318   void test_lookUpSetter_inherited() { |  | 
| 1319     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1320     String setterName = "g"; |  | 
| 1321     PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
      alse, null); |  | 
| 1322     classA.accessors = <PropertyAccessorElement> [setterS]; |  | 
| 1323     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 1324     InterfaceType typeB = classB.type; |  | 
| 1325     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1326     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1327     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, class
      B]; |  | 
| 1328     JUnitTestCase.assertSame(setterS, typeB.lookUpSetter(setterName, library)); |  | 
| 1329   } |  | 
| 1330   void test_lookUpSetter_recursive() { |  | 
| 1331     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1332     InterfaceType typeA = classA.type; |  | 
| 1333     ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); |  | 
| 1334     classA.supertype = classB.type; |  | 
| 1335     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1336     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1337     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, class
      B]; |  | 
| 1338     JUnitTestCase.assertNull(typeA.lookUpSetter("s", library)); |  | 
| 1339   } |  | 
| 1340   void test_lookUpSetter_unimplemented() { |  | 
| 1341     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1342     InterfaceType typeA = classA.type; |  | 
| 1343     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 1344     CompilationUnitElement unit = library.definingCompilationUnit; |  | 
| 1345     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA]; |  | 
| 1346     JUnitTestCase.assertNull(typeA.lookUpSetter("s", library)); |  | 
| 1347   } |  | 
| 1348   void test_setTypeArguments() { |  | 
| 1349     InterfaceTypeImpl type = ElementFactory.classElement2("A", []).type as Inter
      faceTypeImpl; |  | 
| 1350     List<Type2> typeArguments = <Type2> [ |  | 
| 1351         ElementFactory.classElement2("B", []).type, |  | 
| 1352         ElementFactory.classElement2("C", []).type]; |  | 
| 1353     type.typeArguments = typeArguments; |  | 
| 1354     JUnitTestCase.assertEquals(typeArguments, type.typeArguments); |  | 
| 1355   } |  | 
| 1356   void test_substitute_equal() { |  | 
| 1357     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1358     TypeParameterElementImpl parameterElement = new TypeParameterElementImpl(AST
      Factory.identifier3("E")); |  | 
| 1359     InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); |  | 
| 1360     TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(parameterElement
      ); |  | 
| 1361     type.typeArguments = <Type2> [parameter]; |  | 
| 1362     InterfaceType argumentType = ElementFactory.classElement2("B", []).type; |  | 
| 1363     InterfaceType result = type.substitute2(<Type2> [argumentType], <Type2> [par
      ameter]); |  | 
| 1364     JUnitTestCase.assertEquals(classA, result.element); |  | 
| 1365     List<Type2> resultArguments = result.typeArguments; |  | 
| 1366     EngineTestCase.assertLength(1, resultArguments); |  | 
| 1367     JUnitTestCase.assertEquals(argumentType, resultArguments[0]); |  | 
| 1368   } |  | 
| 1369   void test_substitute_exception() { |  | 
| 1370     try { |  | 
| 1371       ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1372       InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); |  | 
| 1373       InterfaceType argumentType = ElementFactory.classElement2("B", []).type; |  | 
| 1374       type.substitute2(<Type2> [argumentType], <Type2> []); |  | 
| 1375       JUnitTestCase.fail("Expected to encounter exception, argument and paramete
      r type array lengths not equal."); |  | 
| 1376     } on JavaException catch (e) { |  | 
| 1377     } |  | 
| 1378   } |  | 
| 1379   void test_substitute_notEqual() { |  | 
| 1380     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 1381     TypeParameterElementImpl parameterElement = new TypeParameterElementImpl(AST
      Factory.identifier3("E")); |  | 
| 1382     InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); |  | 
| 1383     TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(parameterElement
      ); |  | 
| 1384     type.typeArguments = <Type2> [parameter]; |  | 
| 1385     InterfaceType argumentType = ElementFactory.classElement2("B", []).type; |  | 
| 1386     TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(new TypePara
      meterElementImpl(ASTFactory.identifier3("F"))); |  | 
| 1387     InterfaceType result = type.substitute2(<Type2> [argumentType], <Type2> [par
      ameterType]); |  | 
| 1388     JUnitTestCase.assertEquals(classA, result.element); |  | 
| 1389     List<Type2> resultArguments = result.typeArguments; |  | 
| 1390     EngineTestCase.assertLength(1, resultArguments); |  | 
| 1391     JUnitTestCase.assertEquals(parameter, resultArguments[0]); |  | 
| 1392   } |  | 
| 1393   static dartSuite() { |  | 
| 1394     _ut.group('InterfaceTypeImplTest', () { |  | 
| 1395       _ut.test('test_computeLongestInheritancePathToObject_multipleInterfacePath
      s', () { |  | 
| 1396         final __test = new InterfaceTypeImplTest(); |  | 
| 1397         runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_m
      ultipleInterfacePaths); |  | 
| 1398       }); |  | 
| 1399       _ut.test('test_computeLongestInheritancePathToObject_multipleSuperclassPat
      hs', () { |  | 
| 1400         final __test = new InterfaceTypeImplTest(); |  | 
| 1401         runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_m
      ultipleSuperclassPaths); |  | 
| 1402       }); |  | 
| 1403       _ut.test('test_computeLongestInheritancePathToObject_object', () { |  | 
| 1404         final __test = new InterfaceTypeImplTest(); |  | 
| 1405         runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_o
      bject); |  | 
| 1406       }); |  | 
| 1407       _ut.test('test_computeLongestInheritancePathToObject_recursion', () { |  | 
| 1408         final __test = new InterfaceTypeImplTest(); |  | 
| 1409         runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_r
      ecursion); |  | 
| 1410       }); |  | 
| 1411       _ut.test('test_computeLongestInheritancePathToObject_singleInterfacePath',
       () { |  | 
| 1412         final __test = new InterfaceTypeImplTest(); |  | 
| 1413         runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_s
      ingleInterfacePath); |  | 
| 1414       }); |  | 
| 1415       _ut.test('test_computeLongestInheritancePathToObject_singleSuperclassPath'
      , () { |  | 
| 1416         final __test = new InterfaceTypeImplTest(); |  | 
| 1417         runJUnitTest(__test, __test.test_computeLongestInheritancePathToObject_s
      ingleSuperclassPath); |  | 
| 1418       }); |  | 
| 1419       _ut.test('test_computeSuperinterfaceSet_multipleInterfacePaths', () { |  | 
| 1420         final __test = new InterfaceTypeImplTest(); |  | 
| 1421         runJUnitTest(__test, __test.test_computeSuperinterfaceSet_multipleInterf
      acePaths); |  | 
| 1422       }); |  | 
| 1423       _ut.test('test_computeSuperinterfaceSet_multipleSuperclassPaths', () { |  | 
| 1424         final __test = new InterfaceTypeImplTest(); |  | 
| 1425         runJUnitTest(__test, __test.test_computeSuperinterfaceSet_multipleSuperc
      lassPaths); |  | 
| 1426       }); |  | 
| 1427       _ut.test('test_computeSuperinterfaceSet_recursion', () { |  | 
| 1428         final __test = new InterfaceTypeImplTest(); |  | 
| 1429         runJUnitTest(__test, __test.test_computeSuperinterfaceSet_recursion); |  | 
| 1430       }); |  | 
| 1431       _ut.test('test_computeSuperinterfaceSet_singleInterfacePath', () { |  | 
| 1432         final __test = new InterfaceTypeImplTest(); |  | 
| 1433         runJUnitTest(__test, __test.test_computeSuperinterfaceSet_singleInterfac
      ePath); |  | 
| 1434       }); |  | 
| 1435       _ut.test('test_computeSuperinterfaceSet_singleSuperclassPath', () { |  | 
| 1436         final __test = new InterfaceTypeImplTest(); |  | 
| 1437         runJUnitTest(__test, __test.test_computeSuperinterfaceSet_singleSupercla
      ssPath); |  | 
| 1438       }); |  | 
| 1439       _ut.test('test_creation', () { |  | 
| 1440         final __test = new InterfaceTypeImplTest(); |  | 
| 1441         runJUnitTest(__test, __test.test_creation); |  | 
| 1442       }); |  | 
| 1443       _ut.test('test_getAccessors', () { |  | 
| 1444         final __test = new InterfaceTypeImplTest(); |  | 
| 1445         runJUnitTest(__test, __test.test_getAccessors); |  | 
| 1446       }); |  | 
| 1447       _ut.test('test_getAccessors_empty', () { |  | 
| 1448         final __test = new InterfaceTypeImplTest(); |  | 
| 1449         runJUnitTest(__test, __test.test_getAccessors_empty); |  | 
| 1450       }); |  | 
| 1451       _ut.test('test_getElement', () { |  | 
| 1452         final __test = new InterfaceTypeImplTest(); |  | 
| 1453         runJUnitTest(__test, __test.test_getElement); |  | 
| 1454       }); |  | 
| 1455       _ut.test('test_getGetter_implemented', () { |  | 
| 1456         final __test = new InterfaceTypeImplTest(); |  | 
| 1457         runJUnitTest(__test, __test.test_getGetter_implemented); |  | 
| 1458       }); |  | 
| 1459       _ut.test('test_getGetter_parameterized', () { |  | 
| 1460         final __test = new InterfaceTypeImplTest(); |  | 
| 1461         runJUnitTest(__test, __test.test_getGetter_parameterized); |  | 
| 1462       }); |  | 
| 1463       _ut.test('test_getGetter_unimplemented', () { |  | 
| 1464         final __test = new InterfaceTypeImplTest(); |  | 
| 1465         runJUnitTest(__test, __test.test_getGetter_unimplemented); |  | 
| 1466       }); |  | 
| 1467       _ut.test('test_getInterfaces_nonParameterized', () { |  | 
| 1468         final __test = new InterfaceTypeImplTest(); |  | 
| 1469         runJUnitTest(__test, __test.test_getInterfaces_nonParameterized); |  | 
| 1470       }); |  | 
| 1471       _ut.test('test_getInterfaces_parameterized', () { |  | 
| 1472         final __test = new InterfaceTypeImplTest(); |  | 
| 1473         runJUnitTest(__test, __test.test_getInterfaces_parameterized); |  | 
| 1474       }); |  | 
| 1475       _ut.test('test_getLeastUpperBound_directInterfaceCase', () { |  | 
| 1476         final __test = new InterfaceTypeImplTest(); |  | 
| 1477         runJUnitTest(__test, __test.test_getLeastUpperBound_directInterfaceCase)
      ; |  | 
| 1478       }); |  | 
| 1479       _ut.test('test_getLeastUpperBound_directSubclassCase', () { |  | 
| 1480         final __test = new InterfaceTypeImplTest(); |  | 
| 1481         runJUnitTest(__test, __test.test_getLeastUpperBound_directSubclassCase); |  | 
| 1482       }); |  | 
| 1483       _ut.test('test_getLeastUpperBound_functionType', () { |  | 
| 1484         final __test = new InterfaceTypeImplTest(); |  | 
| 1485         runJUnitTest(__test, __test.test_getLeastUpperBound_functionType); |  | 
| 1486       }); |  | 
| 1487       _ut.test('test_getLeastUpperBound_mixinCase', () { |  | 
| 1488         final __test = new InterfaceTypeImplTest(); |  | 
| 1489         runJUnitTest(__test, __test.test_getLeastUpperBound_mixinCase); |  | 
| 1490       }); |  | 
| 1491       _ut.test('test_getLeastUpperBound_null', () { |  | 
| 1492         final __test = new InterfaceTypeImplTest(); |  | 
| 1493         runJUnitTest(__test, __test.test_getLeastUpperBound_null); |  | 
| 1494       }); |  | 
| 1495       _ut.test('test_getLeastUpperBound_object', () { |  | 
| 1496         final __test = new InterfaceTypeImplTest(); |  | 
| 1497         runJUnitTest(__test, __test.test_getLeastUpperBound_object); |  | 
| 1498       }); |  | 
| 1499       _ut.test('test_getLeastUpperBound_self', () { |  | 
| 1500         final __test = new InterfaceTypeImplTest(); |  | 
| 1501         runJUnitTest(__test, __test.test_getLeastUpperBound_self); |  | 
| 1502       }); |  | 
| 1503       _ut.test('test_getLeastUpperBound_sharedSuperclass1', () { |  | 
| 1504         final __test = new InterfaceTypeImplTest(); |  | 
| 1505         runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass1); |  | 
| 1506       }); |  | 
| 1507       _ut.test('test_getLeastUpperBound_sharedSuperclass2', () { |  | 
| 1508         final __test = new InterfaceTypeImplTest(); |  | 
| 1509         runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass2); |  | 
| 1510       }); |  | 
| 1511       _ut.test('test_getLeastUpperBound_sharedSuperclass3', () { |  | 
| 1512         final __test = new InterfaceTypeImplTest(); |  | 
| 1513         runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass3); |  | 
| 1514       }); |  | 
| 1515       _ut.test('test_getLeastUpperBound_sharedSuperclass4', () { |  | 
| 1516         final __test = new InterfaceTypeImplTest(); |  | 
| 1517         runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperclass4); |  | 
| 1518       }); |  | 
| 1519       _ut.test('test_getLeastUpperBound_sharedSuperinterface1', () { |  | 
| 1520         final __test = new InterfaceTypeImplTest(); |  | 
| 1521         runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
      1); |  | 
| 1522       }); |  | 
| 1523       _ut.test('test_getLeastUpperBound_sharedSuperinterface2', () { |  | 
| 1524         final __test = new InterfaceTypeImplTest(); |  | 
| 1525         runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
      2); |  | 
| 1526       }); |  | 
| 1527       _ut.test('test_getLeastUpperBound_sharedSuperinterface3', () { |  | 
| 1528         final __test = new InterfaceTypeImplTest(); |  | 
| 1529         runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
      3); |  | 
| 1530       }); |  | 
| 1531       _ut.test('test_getLeastUpperBound_sharedSuperinterface4', () { |  | 
| 1532         final __test = new InterfaceTypeImplTest(); |  | 
| 1533         runJUnitTest(__test, __test.test_getLeastUpperBound_sharedSuperinterface
      4); |  | 
| 1534       }); |  | 
| 1535       _ut.test('test_getLeastUpperBound_twoComparables', () { |  | 
| 1536         final __test = new InterfaceTypeImplTest(); |  | 
| 1537         runJUnitTest(__test, __test.test_getLeastUpperBound_twoComparables); |  | 
| 1538       }); |  | 
| 1539       _ut.test('test_getLeastUpperBound_typeParameters_different', () { |  | 
| 1540         final __test = new InterfaceTypeImplTest(); |  | 
| 1541         runJUnitTest(__test, __test.test_getLeastUpperBound_typeParameters_diffe
      rent); |  | 
| 1542       }); |  | 
| 1543       _ut.test('test_getLeastUpperBound_typeParameters_same', () { |  | 
| 1544         final __test = new InterfaceTypeImplTest(); |  | 
| 1545         runJUnitTest(__test, __test.test_getLeastUpperBound_typeParameters_same)
      ; |  | 
| 1546       }); |  | 
| 1547       _ut.test('test_getMethod_implemented', () { |  | 
| 1548         final __test = new InterfaceTypeImplTest(); |  | 
| 1549         runJUnitTest(__test, __test.test_getMethod_implemented); |  | 
| 1550       }); |  | 
| 1551       _ut.test('test_getMethod_parameterized', () { |  | 
| 1552         final __test = new InterfaceTypeImplTest(); |  | 
| 1553         runJUnitTest(__test, __test.test_getMethod_parameterized); |  | 
| 1554       }); |  | 
| 1555       _ut.test('test_getMethod_unimplemented', () { |  | 
| 1556         final __test = new InterfaceTypeImplTest(); |  | 
| 1557         runJUnitTest(__test, __test.test_getMethod_unimplemented); |  | 
| 1558       }); |  | 
| 1559       _ut.test('test_getMethods', () { |  | 
| 1560         final __test = new InterfaceTypeImplTest(); |  | 
| 1561         runJUnitTest(__test, __test.test_getMethods); |  | 
| 1562       }); |  | 
| 1563       _ut.test('test_getMethods_empty', () { |  | 
| 1564         final __test = new InterfaceTypeImplTest(); |  | 
| 1565         runJUnitTest(__test, __test.test_getMethods_empty); |  | 
| 1566       }); |  | 
| 1567       _ut.test('test_getMixins_nonParameterized', () { |  | 
| 1568         final __test = new InterfaceTypeImplTest(); |  | 
| 1569         runJUnitTest(__test, __test.test_getMixins_nonParameterized); |  | 
| 1570       }); |  | 
| 1571       _ut.test('test_getMixins_parameterized', () { |  | 
| 1572         final __test = new InterfaceTypeImplTest(); |  | 
| 1573         runJUnitTest(__test, __test.test_getMixins_parameterized); |  | 
| 1574       }); |  | 
| 1575       _ut.test('test_getSetter_implemented', () { |  | 
| 1576         final __test = new InterfaceTypeImplTest(); |  | 
| 1577         runJUnitTest(__test, __test.test_getSetter_implemented); |  | 
| 1578       }); |  | 
| 1579       _ut.test('test_getSetter_parameterized', () { |  | 
| 1580         final __test = new InterfaceTypeImplTest(); |  | 
| 1581         runJUnitTest(__test, __test.test_getSetter_parameterized); |  | 
| 1582       }); |  | 
| 1583       _ut.test('test_getSetter_unimplemented', () { |  | 
| 1584         final __test = new InterfaceTypeImplTest(); |  | 
| 1585         runJUnitTest(__test, __test.test_getSetter_unimplemented); |  | 
| 1586       }); |  | 
| 1587       _ut.test('test_getSuperclass_nonParameterized', () { |  | 
| 1588         final __test = new InterfaceTypeImplTest(); |  | 
| 1589         runJUnitTest(__test, __test.test_getSuperclass_nonParameterized); |  | 
| 1590       }); |  | 
| 1591       _ut.test('test_getSuperclass_parameterized', () { |  | 
| 1592         final __test = new InterfaceTypeImplTest(); |  | 
| 1593         runJUnitTest(__test, __test.test_getSuperclass_parameterized); |  | 
| 1594       }); |  | 
| 1595       _ut.test('test_getTypeArguments_empty', () { |  | 
| 1596         final __test = new InterfaceTypeImplTest(); |  | 
| 1597         runJUnitTest(__test, __test.test_getTypeArguments_empty); |  | 
| 1598       }); |  | 
| 1599       _ut.test('test_hashCode', () { |  | 
| 1600         final __test = new InterfaceTypeImplTest(); |  | 
| 1601         runJUnitTest(__test, __test.test_hashCode); |  | 
| 1602       }); |  | 
| 1603       _ut.test('test_isDirectSupertypeOf_extends', () { |  | 
| 1604         final __test = new InterfaceTypeImplTest(); |  | 
| 1605         runJUnitTest(__test, __test.test_isDirectSupertypeOf_extends); |  | 
| 1606       }); |  | 
| 1607       _ut.test('test_isDirectSupertypeOf_false', () { |  | 
| 1608         final __test = new InterfaceTypeImplTest(); |  | 
| 1609         runJUnitTest(__test, __test.test_isDirectSupertypeOf_false); |  | 
| 1610       }); |  | 
| 1611       _ut.test('test_isDirectSupertypeOf_implements', () { |  | 
| 1612         final __test = new InterfaceTypeImplTest(); |  | 
| 1613         runJUnitTest(__test, __test.test_isDirectSupertypeOf_implements); |  | 
| 1614       }); |  | 
| 1615       _ut.test('test_isDirectSupertypeOf_with', () { |  | 
| 1616         final __test = new InterfaceTypeImplTest(); |  | 
| 1617         runJUnitTest(__test, __test.test_isDirectSupertypeOf_with); |  | 
| 1618       }); |  | 
| 1619       _ut.test('test_isMoreSpecificThan_bottom', () { |  | 
| 1620         final __test = new InterfaceTypeImplTest(); |  | 
| 1621         runJUnitTest(__test, __test.test_isMoreSpecificThan_bottom); |  | 
| 1622       }); |  | 
| 1623       _ut.test('test_isMoreSpecificThan_covariance', () { |  | 
| 1624         final __test = new InterfaceTypeImplTest(); |  | 
| 1625         runJUnitTest(__test, __test.test_isMoreSpecificThan_covariance); |  | 
| 1626       }); |  | 
| 1627       _ut.test('test_isMoreSpecificThan_directSupertype', () { |  | 
| 1628         final __test = new InterfaceTypeImplTest(); |  | 
| 1629         runJUnitTest(__test, __test.test_isMoreSpecificThan_directSupertype); |  | 
| 1630       }); |  | 
| 1631       _ut.test('test_isMoreSpecificThan_dynamic', () { |  | 
| 1632         final __test = new InterfaceTypeImplTest(); |  | 
| 1633         runJUnitTest(__test, __test.test_isMoreSpecificThan_dynamic); |  | 
| 1634       }); |  | 
| 1635       _ut.test('test_isMoreSpecificThan_self', () { |  | 
| 1636         final __test = new InterfaceTypeImplTest(); |  | 
| 1637         runJUnitTest(__test, __test.test_isMoreSpecificThan_self); |  | 
| 1638       }); |  | 
| 1639       _ut.test('test_isMoreSpecificThan_transitive_interface', () { |  | 
| 1640         final __test = new InterfaceTypeImplTest(); |  | 
| 1641         runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_interface
      ); |  | 
| 1642       }); |  | 
| 1643       _ut.test('test_isMoreSpecificThan_transitive_mixin', () { |  | 
| 1644         final __test = new InterfaceTypeImplTest(); |  | 
| 1645         runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_mixin); |  | 
| 1646       }); |  | 
| 1647       _ut.test('test_isMoreSpecificThan_transitive_recursive', () { |  | 
| 1648         final __test = new InterfaceTypeImplTest(); |  | 
| 1649         runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_recursive
      ); |  | 
| 1650       }); |  | 
| 1651       _ut.test('test_isMoreSpecificThan_transitive_superclass', () { |  | 
| 1652         final __test = new InterfaceTypeImplTest(); |  | 
| 1653         runJUnitTest(__test, __test.test_isMoreSpecificThan_transitive_superclas
      s); |  | 
| 1654       }); |  | 
| 1655       _ut.test('test_isSubtypeOf_directSubtype', () { |  | 
| 1656         final __test = new InterfaceTypeImplTest(); |  | 
| 1657         runJUnitTest(__test, __test.test_isSubtypeOf_directSubtype); |  | 
| 1658       }); |  | 
| 1659       _ut.test('test_isSubtypeOf_dynamic', () { |  | 
| 1660         final __test = new InterfaceTypeImplTest(); |  | 
| 1661         runJUnitTest(__test, __test.test_isSubtypeOf_dynamic); |  | 
| 1662       }); |  | 
| 1663       _ut.test('test_isSubtypeOf_function', () { |  | 
| 1664         final __test = new InterfaceTypeImplTest(); |  | 
| 1665         runJUnitTest(__test, __test.test_isSubtypeOf_function); |  | 
| 1666       }); |  | 
| 1667       _ut.test('test_isSubtypeOf_interface', () { |  | 
| 1668         final __test = new InterfaceTypeImplTest(); |  | 
| 1669         runJUnitTest(__test, __test.test_isSubtypeOf_interface); |  | 
| 1670       }); |  | 
| 1671       _ut.test('test_isSubtypeOf_mixins', () { |  | 
| 1672         final __test = new InterfaceTypeImplTest(); |  | 
| 1673         runJUnitTest(__test, __test.test_isSubtypeOf_mixins); |  | 
| 1674       }); |  | 
| 1675       _ut.test('test_isSubtypeOf_object', () { |  | 
| 1676         final __test = new InterfaceTypeImplTest(); |  | 
| 1677         runJUnitTest(__test, __test.test_isSubtypeOf_object); |  | 
| 1678       }); |  | 
| 1679       _ut.test('test_isSubtypeOf_self', () { |  | 
| 1680         final __test = new InterfaceTypeImplTest(); |  | 
| 1681         runJUnitTest(__test, __test.test_isSubtypeOf_self); |  | 
| 1682       }); |  | 
| 1683       _ut.test('test_isSubtypeOf_transitive_recursive', () { |  | 
| 1684         final __test = new InterfaceTypeImplTest(); |  | 
| 1685         runJUnitTest(__test, __test.test_isSubtypeOf_transitive_recursive); |  | 
| 1686       }); |  | 
| 1687       _ut.test('test_isSubtypeOf_transitive_superclass', () { |  | 
| 1688         final __test = new InterfaceTypeImplTest(); |  | 
| 1689         runJUnitTest(__test, __test.test_isSubtypeOf_transitive_superclass); |  | 
| 1690       }); |  | 
| 1691       _ut.test('test_isSubtypeOf_typeArguments', () { |  | 
| 1692         final __test = new InterfaceTypeImplTest(); |  | 
| 1693         runJUnitTest(__test, __test.test_isSubtypeOf_typeArguments); |  | 
| 1694       }); |  | 
| 1695       _ut.test('test_isSupertypeOf_directSupertype', () { |  | 
| 1696         final __test = new InterfaceTypeImplTest(); |  | 
| 1697         runJUnitTest(__test, __test.test_isSupertypeOf_directSupertype); |  | 
| 1698       }); |  | 
| 1699       _ut.test('test_isSupertypeOf_dynamic', () { |  | 
| 1700         final __test = new InterfaceTypeImplTest(); |  | 
| 1701         runJUnitTest(__test, __test.test_isSupertypeOf_dynamic); |  | 
| 1702       }); |  | 
| 1703       _ut.test('test_isSupertypeOf_indirectSupertype', () { |  | 
| 1704         final __test = new InterfaceTypeImplTest(); |  | 
| 1705         runJUnitTest(__test, __test.test_isSupertypeOf_indirectSupertype); |  | 
| 1706       }); |  | 
| 1707       _ut.test('test_isSupertypeOf_interface', () { |  | 
| 1708         final __test = new InterfaceTypeImplTest(); |  | 
| 1709         runJUnitTest(__test, __test.test_isSupertypeOf_interface); |  | 
| 1710       }); |  | 
| 1711       _ut.test('test_isSupertypeOf_mixins', () { |  | 
| 1712         final __test = new InterfaceTypeImplTest(); |  | 
| 1713         runJUnitTest(__test, __test.test_isSupertypeOf_mixins); |  | 
| 1714       }); |  | 
| 1715       _ut.test('test_isSupertypeOf_object', () { |  | 
| 1716         final __test = new InterfaceTypeImplTest(); |  | 
| 1717         runJUnitTest(__test, __test.test_isSupertypeOf_object); |  | 
| 1718       }); |  | 
| 1719       _ut.test('test_isSupertypeOf_self', () { |  | 
| 1720         final __test = new InterfaceTypeImplTest(); |  | 
| 1721         runJUnitTest(__test, __test.test_isSupertypeOf_self); |  | 
| 1722       }); |  | 
| 1723       _ut.test('test_lookUpGetter_implemented', () { |  | 
| 1724         final __test = new InterfaceTypeImplTest(); |  | 
| 1725         runJUnitTest(__test, __test.test_lookUpGetter_implemented); |  | 
| 1726       }); |  | 
| 1727       _ut.test('test_lookUpGetter_inherited', () { |  | 
| 1728         final __test = new InterfaceTypeImplTest(); |  | 
| 1729         runJUnitTest(__test, __test.test_lookUpGetter_inherited); |  | 
| 1730       }); |  | 
| 1731       _ut.test('test_lookUpGetter_recursive', () { |  | 
| 1732         final __test = new InterfaceTypeImplTest(); |  | 
| 1733         runJUnitTest(__test, __test.test_lookUpGetter_recursive); |  | 
| 1734       }); |  | 
| 1735       _ut.test('test_lookUpGetter_unimplemented', () { |  | 
| 1736         final __test = new InterfaceTypeImplTest(); |  | 
| 1737         runJUnitTest(__test, __test.test_lookUpGetter_unimplemented); |  | 
| 1738       }); |  | 
| 1739       _ut.test('test_lookUpMethod_implemented', () { |  | 
| 1740         final __test = new InterfaceTypeImplTest(); |  | 
| 1741         runJUnitTest(__test, __test.test_lookUpMethod_implemented); |  | 
| 1742       }); |  | 
| 1743       _ut.test('test_lookUpMethod_inherited', () { |  | 
| 1744         final __test = new InterfaceTypeImplTest(); |  | 
| 1745         runJUnitTest(__test, __test.test_lookUpMethod_inherited); |  | 
| 1746       }); |  | 
| 1747       _ut.test('test_lookUpMethod_parameterized', () { |  | 
| 1748         final __test = new InterfaceTypeImplTest(); |  | 
| 1749         runJUnitTest(__test, __test.test_lookUpMethod_parameterized); |  | 
| 1750       }); |  | 
| 1751       _ut.test('test_lookUpMethod_recursive', () { |  | 
| 1752         final __test = new InterfaceTypeImplTest(); |  | 
| 1753         runJUnitTest(__test, __test.test_lookUpMethod_recursive); |  | 
| 1754       }); |  | 
| 1755       _ut.test('test_lookUpMethod_unimplemented', () { |  | 
| 1756         final __test = new InterfaceTypeImplTest(); |  | 
| 1757         runJUnitTest(__test, __test.test_lookUpMethod_unimplemented); |  | 
| 1758       }); |  | 
| 1759       _ut.test('test_lookUpSetter_implemented', () { |  | 
| 1760         final __test = new InterfaceTypeImplTest(); |  | 
| 1761         runJUnitTest(__test, __test.test_lookUpSetter_implemented); |  | 
| 1762       }); |  | 
| 1763       _ut.test('test_lookUpSetter_inherited', () { |  | 
| 1764         final __test = new InterfaceTypeImplTest(); |  | 
| 1765         runJUnitTest(__test, __test.test_lookUpSetter_inherited); |  | 
| 1766       }); |  | 
| 1767       _ut.test('test_lookUpSetter_recursive', () { |  | 
| 1768         final __test = new InterfaceTypeImplTest(); |  | 
| 1769         runJUnitTest(__test, __test.test_lookUpSetter_recursive); |  | 
| 1770       }); |  | 
| 1771       _ut.test('test_lookUpSetter_unimplemented', () { |  | 
| 1772         final __test = new InterfaceTypeImplTest(); |  | 
| 1773         runJUnitTest(__test, __test.test_lookUpSetter_unimplemented); |  | 
| 1774       }); |  | 
| 1775       _ut.test('test_setTypeArguments', () { |  | 
| 1776         final __test = new InterfaceTypeImplTest(); |  | 
| 1777         runJUnitTest(__test, __test.test_setTypeArguments); |  | 
| 1778       }); |  | 
| 1779       _ut.test('test_substitute_equal', () { |  | 
| 1780         final __test = new InterfaceTypeImplTest(); |  | 
| 1781         runJUnitTest(__test, __test.test_substitute_equal); |  | 
| 1782       }); |  | 
| 1783       _ut.test('test_substitute_exception', () { |  | 
| 1784         final __test = new InterfaceTypeImplTest(); |  | 
| 1785         runJUnitTest(__test, __test.test_substitute_exception); |  | 
| 1786       }); |  | 
| 1787       _ut.test('test_substitute_notEqual', () { |  | 
| 1788         final __test = new InterfaceTypeImplTest(); |  | 
| 1789         runJUnitTest(__test, __test.test_substitute_notEqual); |  | 
| 1790       }); |  | 
| 1791     }); |  | 
| 1792   } |  | 
| 1793 } |  | 
| 1794 /** |  | 
| 1795  * The class `ElementFactory` defines utility methods used to create elements fo
      r testing |  | 
| 1796  * purposes. The elements that are created are complete in the sense that as muc
      h of the element |  | 
| 1797  * model as can be created, given the provided information, has been created. |  | 
| 1798  */ |  | 
| 1799 class ElementFactory { |  | 
| 1800 |  | 
| 1801   /** |  | 
| 1802    * The element representing the class 'Object'. |  | 
| 1803    */ |  | 
| 1804   static ClassElementImpl _objectElement; |  | 
| 1805   static ClassElementImpl classElement(String typeName, InterfaceType superclass
      Type, List<String> parameterNames) { |  | 
| 1806     ClassElementImpl element = new ClassElementImpl(ASTFactory.identifier3(typeN
      ame)); |  | 
| 1807     element.supertype = superclassType; |  | 
| 1808     InterfaceTypeImpl type = new InterfaceTypeImpl.con1(element); |  | 
| 1809     element.type = type; |  | 
| 1810     int count = parameterNames.length; |  | 
| 1811     if (count > 0) { |  | 
| 1812       List<TypeParameterElementImpl> typeParameters = new List<TypeParameterElem
      entImpl>(count); |  | 
| 1813       List<TypeParameterTypeImpl> typeParameterTypes = new List<TypeParameterTyp
      eImpl>(count); |  | 
| 1814       for (int i = 0; i < count; i++) { |  | 
| 1815         TypeParameterElementImpl typeParameter = new TypeParameterElementImpl(AS
      TFactory.identifier3(parameterNames[i])); |  | 
| 1816         typeParameters[i] = typeParameter; |  | 
| 1817         typeParameterTypes[i] = new TypeParameterTypeImpl(typeParameter); |  | 
| 1818         typeParameter.type = typeParameterTypes[i]; |  | 
| 1819       } |  | 
| 1820       element.typeParameters = typeParameters; |  | 
| 1821       type.typeArguments = typeParameterTypes; |  | 
| 1822     } |  | 
| 1823     return element; |  | 
| 1824   } |  | 
| 1825   static ClassElementImpl classElement2(String typeName, List<String> parameterN
      ames) => classElement(typeName, object.type, parameterNames); |  | 
| 1826   static ConstructorElementImpl constructorElement(ClassElement definingClass, S
      tring name) { |  | 
| 1827     Type2 type = definingClass.type; |  | 
| 1828     ConstructorElementImpl constructor = new ConstructorElementImpl(name == null
       ? null : ASTFactory.identifier3(name)); |  | 
| 1829     constructor.returnType = type; |  | 
| 1830     FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor); |  | 
| 1831     constructor.type = constructorType; |  | 
| 1832     return constructor; |  | 
| 1833   } |  | 
| 1834   static ExportElementImpl exportFor(LibraryElement exportedLibrary, List<Namesp
      aceCombinator> combinators) { |  | 
| 1835     ExportElementImpl spec = new ExportElementImpl(); |  | 
| 1836     spec.exportedLibrary = exportedLibrary; |  | 
| 1837     spec.combinators = combinators; |  | 
| 1838     return spec; |  | 
| 1839   } |  | 
| 1840   static FieldElementImpl fieldElement(String name, bool isStatic, bool isFinal,
       bool isConst, Type2 type) { |  | 
| 1841     FieldElementImpl field = new FieldElementImpl.con1(ASTFactory.identifier3(na
      me)); |  | 
| 1842     field.const3 = isConst; |  | 
| 1843     field.final2 = isFinal; |  | 
| 1844     field.static = isStatic; |  | 
| 1845     field.type = type; |  | 
| 1846     PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl.con2(fi
      eld); |  | 
| 1847     getter.getter = true; |  | 
| 1848     getter.static = isStatic; |  | 
| 1849     getter.synthetic = true; |  | 
| 1850     getter.variable = field; |  | 
| 1851     getter.returnType = type; |  | 
| 1852     field.getter = getter; |  | 
| 1853     FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); |  | 
| 1854     getter.type = getterType; |  | 
| 1855     if (!isConst && !isFinal) { |  | 
| 1856       PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl.con2(
      field); |  | 
| 1857       setter.setter = true; |  | 
| 1858       setter.static = isStatic; |  | 
| 1859       setter.synthetic = true; |  | 
| 1860       setter.variable = field; |  | 
| 1861       setter.parameters = <ParameterElement> [requiredParameter2("_${name}", typ
      e)]; |  | 
| 1862       setter.returnType = VoidTypeImpl.instance; |  | 
| 1863       setter.type = new FunctionTypeImpl.con1(setter); |  | 
| 1864       field.setter = setter; |  | 
| 1865     } |  | 
| 1866     return field; |  | 
| 1867   } |  | 
| 1868   static FieldFormalParameterElementImpl fieldFormalParameter(Identifier name) =
      > new FieldFormalParameterElementImpl(name); |  | 
| 1869   static FunctionElementImpl functionElement(String functionName) => functionEle
      ment4(functionName, null, null, null, null); |  | 
| 1870   static FunctionElementImpl functionElement2(String functionName, ClassElement 
      returnElement) => functionElement3(functionName, returnElement, null, null); |  | 
| 1871   static FunctionElementImpl functionElement3(String functionName, ClassElement 
      returnElement, List<ClassElement> normalParameters, List<ClassElement> optionalP
      arameters) { |  | 
| 1872     FunctionElementImpl functionElement = new FunctionElementImpl.con1(ASTFactor
      y.identifier3(functionName)); |  | 
| 1873     FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |  | 
| 1874     functionElement.type = functionType; |  | 
| 1875     if (returnElement == null) { |  | 
| 1876       functionElement.returnType = VoidTypeImpl.instance; |  | 
| 1877     } else { |  | 
| 1878       functionElement.returnType = returnElement.type; |  | 
| 1879     } |  | 
| 1880     int normalCount = normalParameters == null ? 0 : normalParameters.length; |  | 
| 1881     int optionalCount = optionalParameters == null ? 0 : optionalParameters.leng
      th; |  | 
| 1882     int totalCount = normalCount + optionalCount; |  | 
| 1883     List<ParameterElement> parameters = new List<ParameterElement>(totalCount); |  | 
| 1884     for (int i = 0; i < totalCount; i++) { |  | 
| 1885       ParameterElementImpl parameter = new ParameterElementImpl.con1(ASTFactory.
      identifier3("a${i}")); |  | 
| 1886       if (i < normalCount) { |  | 
| 1887         parameter.type = normalParameters[i].type; |  | 
| 1888         parameter.parameterKind = ParameterKind.REQUIRED; |  | 
| 1889       } else { |  | 
| 1890         parameter.type = optionalParameters[i - normalCount].type; |  | 
| 1891         parameter.parameterKind = ParameterKind.POSITIONAL; |  | 
| 1892       } |  | 
| 1893       parameters[i] = parameter; |  | 
| 1894     } |  | 
| 1895     functionElement.parameters = parameters; |  | 
| 1896     return functionElement; |  | 
| 1897   } |  | 
| 1898   static FunctionElementImpl functionElement4(String functionName, ClassElement 
      returnElement, List<ClassElement> normalParameters, List<String> names, List<Cla
      ssElement> namedParameters) { |  | 
| 1899     FunctionElementImpl functionElement = new FunctionElementImpl.con1(ASTFactor
      y.identifier3(functionName)); |  | 
| 1900     FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |  | 
| 1901     functionElement.type = functionType; |  | 
| 1902     int normalCount = normalParameters == null ? 0 : normalParameters.length; |  | 
| 1903     int nameCount = names == null ? 0 : names.length; |  | 
| 1904     int typeCount = namedParameters == null ? 0 : namedParameters.length; |  | 
| 1905     if (names != null && nameCount != typeCount) { |  | 
| 1906       throw new IllegalStateException("The passed String[] and ClassElement[] ar
      rays had different lengths."); |  | 
| 1907     } |  | 
| 1908     int totalCount = normalCount + nameCount; |  | 
| 1909     List<ParameterElement> parameters = new List<ParameterElement>(totalCount); |  | 
| 1910     for (int i = 0; i < totalCount; i++) { |  | 
| 1911       if (i < normalCount) { |  | 
| 1912         ParameterElementImpl parameter = new ParameterElementImpl.con1(ASTFactor
      y.identifier3("a${i}")); |  | 
| 1913         parameter.type = normalParameters[i].type; |  | 
| 1914         parameter.parameterKind = ParameterKind.REQUIRED; |  | 
| 1915         parameters[i] = parameter; |  | 
| 1916       } else { |  | 
| 1917         ParameterElementImpl parameter = new ParameterElementImpl.con1(ASTFactor
      y.identifier3(names[i - normalCount])); |  | 
| 1918         parameter.type = namedParameters[i - normalCount].type; |  | 
| 1919         parameter.parameterKind = ParameterKind.NAMED; |  | 
| 1920         parameters[i] = parameter; |  | 
| 1921       } |  | 
| 1922     } |  | 
| 1923     functionElement.parameters = parameters; |  | 
| 1924     if (returnElement == null) { |  | 
| 1925       functionElement.returnType = VoidTypeImpl.instance; |  | 
| 1926     } else { |  | 
| 1927       functionElement.returnType = returnElement.type; |  | 
| 1928     } |  | 
| 1929     return functionElement; |  | 
| 1930   } |  | 
| 1931   static FunctionElementImpl functionElement5(String functionName, List<ClassEle
      ment> normalParameters) => functionElement3(functionName, null, normalParameters
      , null); |  | 
| 1932   static FunctionElementImpl functionElement6(String functionName, List<ClassEle
      ment> normalParameters, List<ClassElement> optionalParameters) => functionElemen
      t3(functionName, null, normalParameters, optionalParameters); |  | 
| 1933   static FunctionElementImpl functionElement7(String functionName, List<ClassEle
      ment> normalParameters, List<String> names, List<ClassElement> namedParameters) 
      => functionElement4(functionName, null, normalParameters, names, namedParameters
      ); |  | 
| 1934   static ClassElementImpl get object { |  | 
| 1935     if (_objectElement == null) { |  | 
| 1936       _objectElement = classElement("Object", null as InterfaceType, []); |  | 
| 1937     } |  | 
| 1938     return _objectElement; |  | 
| 1939   } |  | 
| 1940   static PropertyAccessorElementImpl getterElement(String name, bool isStatic, T
      ype2 type) { |  | 
| 1941     FieldElementImpl field = new FieldElementImpl.con1(ASTFactory.identifier3(na
      me)); |  | 
| 1942     field.static = isStatic; |  | 
| 1943     field.synthetic = true; |  | 
| 1944     field.type = type; |  | 
| 1945     PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl.con2(fi
      eld); |  | 
| 1946     getter.getter = true; |  | 
| 1947     getter.static = isStatic; |  | 
| 1948     getter.variable = field; |  | 
| 1949     getter.returnType = type; |  | 
| 1950     field.getter = getter; |  | 
| 1951     FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); |  | 
| 1952     getter.type = getterType; |  | 
| 1953     return getter; |  | 
| 1954   } |  | 
| 1955   static ImportElementImpl importFor(LibraryElement importedLibrary, PrefixEleme
      nt prefix, List<NamespaceCombinator> combinators) { |  | 
| 1956     ImportElementImpl spec = new ImportElementImpl(); |  | 
| 1957     spec.importedLibrary = importedLibrary; |  | 
| 1958     spec.prefix = prefix; |  | 
| 1959     spec.combinators = combinators; |  | 
| 1960     return spec; |  | 
| 1961   } |  | 
| 1962   static LibraryElementImpl library(AnalysisContext context, String libraryName)
       { |  | 
| 1963     String fileName = "/${libraryName}.dart"; |  | 
| 1964     FileBasedSource source = new FileBasedSource.con1(context.sourceFactory.cont
      entCache, FileUtilities2.createFile(fileName)); |  | 
| 1965     CompilationUnitElementImpl unit = new CompilationUnitElementImpl(fileName); |  | 
| 1966     unit.source = source; |  | 
| 1967     LibraryElementImpl library = new LibraryElementImpl(context, ASTFactory.libr
      aryIdentifier2([libraryName])); |  | 
| 1968     library.definingCompilationUnit = unit; |  | 
| 1969     return library; |  | 
| 1970   } |  | 
| 1971   static LocalVariableElementImpl localVariableElement(Identifier name) => new L
      ocalVariableElementImpl(name); |  | 
| 1972   static LocalVariableElementImpl localVariableElement2(String name) => new Loca
      lVariableElementImpl(ASTFactory.identifier3(name)); |  | 
| 1973   static MethodElementImpl methodElement(String methodName, Type2 returnType, Li
      st<Type2> argumentTypes) { |  | 
| 1974     MethodElementImpl method = new MethodElementImpl.con1(ASTFactory.identifier3
      (methodName)); |  | 
| 1975     int count = argumentTypes.length; |  | 
| 1976     List<ParameterElement> parameters = new List<ParameterElement>(count); |  | 
| 1977     for (int i = 0; i < count; i++) { |  | 
| 1978       ParameterElementImpl parameter = new ParameterElementImpl.con1(ASTFactory.
      identifier3("a${i}")); |  | 
| 1979       parameter.type = argumentTypes[i]; |  | 
| 1980       parameter.parameterKind = ParameterKind.REQUIRED; |  | 
| 1981       parameters[i] = parameter; |  | 
| 1982     } |  | 
| 1983     method.parameters = parameters; |  | 
| 1984     method.returnType = returnType; |  | 
| 1985     FunctionTypeImpl methodType = new FunctionTypeImpl.con1(method); |  | 
| 1986     method.type = methodType; |  | 
| 1987     return method; |  | 
| 1988   } |  | 
| 1989   static ParameterElementImpl namedParameter(String name) { |  | 
| 1990     ParameterElementImpl parameter = new ParameterElementImpl.con1(ASTFactory.id
      entifier3(name)); |  | 
| 1991     parameter.parameterKind = ParameterKind.NAMED; |  | 
| 1992     return parameter; |  | 
| 1993   } |  | 
| 1994   static ParameterElementImpl namedParameter2(String name, Type2 type) { |  | 
| 1995     ParameterElementImpl parameter = new ParameterElementImpl.con1(ASTFactory.id
      entifier3(name)); |  | 
| 1996     parameter.parameterKind = ParameterKind.NAMED; |  | 
| 1997     parameter.type = type; |  | 
| 1998     return parameter; |  | 
| 1999   } |  | 
| 2000   static ParameterElementImpl positionalParameter(String name) { |  | 
| 2001     ParameterElementImpl parameter = new ParameterElementImpl.con1(ASTFactory.id
      entifier3(name)); |  | 
| 2002     parameter.parameterKind = ParameterKind.POSITIONAL; |  | 
| 2003     return parameter; |  | 
| 2004   } |  | 
| 2005   static ParameterElementImpl positionalParameter2(String name, Type2 type) { |  | 
| 2006     ParameterElementImpl parameter = new ParameterElementImpl.con1(ASTFactory.id
      entifier3(name)); |  | 
| 2007     parameter.parameterKind = ParameterKind.POSITIONAL; |  | 
| 2008     parameter.type = type; |  | 
| 2009     return parameter; |  | 
| 2010   } |  | 
| 2011   static PrefixElementImpl prefix(String name) => new PrefixElementImpl(ASTFacto
      ry.identifier3(name)); |  | 
| 2012   static ParameterElementImpl requiredParameter(String name) { |  | 
| 2013     ParameterElementImpl parameter = new ParameterElementImpl.con1(ASTFactory.id
      entifier3(name)); |  | 
| 2014     parameter.parameterKind = ParameterKind.REQUIRED; |  | 
| 2015     return parameter; |  | 
| 2016   } |  | 
| 2017   static ParameterElementImpl requiredParameter2(String name, Type2 type) { |  | 
| 2018     ParameterElementImpl parameter = new ParameterElementImpl.con1(ASTFactory.id
      entifier3(name)); |  | 
| 2019     parameter.parameterKind = ParameterKind.REQUIRED; |  | 
| 2020     parameter.type = type; |  | 
| 2021     return parameter; |  | 
| 2022   } |  | 
| 2023   static PropertyAccessorElementImpl setterElement(String name, bool isStatic, T
      ype2 type) { |  | 
| 2024     FieldElementImpl field = new FieldElementImpl.con1(ASTFactory.identifier3(na
      me)); |  | 
| 2025     field.static = isStatic; |  | 
| 2026     field.synthetic = true; |  | 
| 2027     field.type = type; |  | 
| 2028     PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl.con2(fi
      eld); |  | 
| 2029     getter.getter = true; |  | 
| 2030     getter.static = isStatic; |  | 
| 2031     getter.variable = field; |  | 
| 2032     getter.returnType = type; |  | 
| 2033     field.getter = getter; |  | 
| 2034     FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); |  | 
| 2035     getter.type = getterType; |  | 
| 2036     ParameterElementImpl parameter = requiredParameter2("a", type); |  | 
| 2037     PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl.con2(fi
      eld); |  | 
| 2038     setter.setter = true; |  | 
| 2039     setter.static = isStatic; |  | 
| 2040     setter.synthetic = true; |  | 
| 2041     setter.variable = field; |  | 
| 2042     setter.parameters = <ParameterElement> [parameter]; |  | 
| 2043     setter.returnType = VoidTypeImpl.instance; |  | 
| 2044     setter.type = new FunctionTypeImpl.con1(setter); |  | 
| 2045     field.setter = setter; |  | 
| 2046     return setter; |  | 
| 2047   } |  | 
| 2048   static TopLevelVariableElementImpl topLevelVariableElement(Identifier name) =>
       new TopLevelVariableElementImpl.con1(name); |  | 
| 2049   static TopLevelVariableElementImpl topLevelVariableElement2(String name) => ne
      w TopLevelVariableElementImpl.con2(name); |  | 
| 2050   static TopLevelVariableElementImpl topLevelVariableElement3(String name, bool 
      isFinal, Type2 type) { |  | 
| 2051     TopLevelVariableElementImpl variable = new TopLevelVariableElementImpl.con2(
      name); |  | 
| 2052     variable.final2 = isFinal; |  | 
| 2053     PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl.con2(va
      riable); |  | 
| 2054     getter.getter = true; |  | 
| 2055     getter.static = true; |  | 
| 2056     getter.synthetic = true; |  | 
| 2057     getter.variable = variable; |  | 
| 2058     getter.returnType = type; |  | 
| 2059     variable.getter = getter; |  | 
| 2060     FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); |  | 
| 2061     getter.type = getterType; |  | 
| 2062     if (!isFinal) { |  | 
| 2063       PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl.con2(
      variable); |  | 
| 2064       setter.setter = true; |  | 
| 2065       setter.static = true; |  | 
| 2066       setter.synthetic = true; |  | 
| 2067       setter.variable = variable; |  | 
| 2068       setter.parameters = <ParameterElement> [requiredParameter2("_${name}", typ
      e)]; |  | 
| 2069       setter.returnType = VoidTypeImpl.instance; |  | 
| 2070       setter.type = new FunctionTypeImpl.con1(setter); |  | 
| 2071       variable.setter = setter; |  | 
| 2072     } |  | 
| 2073     return variable; |  | 
| 2074   } |  | 
| 2075 } |  | 
| 2076 class ElementKindTest extends EngineTestCase { |  | 
| 2077   void test_of_nonNull() { |  | 
| 2078     JUnitTestCase.assertSame(ElementKind.CLASS, ElementKind.of(ElementFactory.cl
      assElement2("A", []))); |  | 
| 2079   } |  | 
| 2080   void test_of_null() { |  | 
| 2081     JUnitTestCase.assertSame(ElementKind.ERROR, ElementKind.of(null)); |  | 
| 2082   } |  | 
| 2083   static dartSuite() { |  | 
| 2084     _ut.group('ElementKindTest', () { |  | 
| 2085       _ut.test('test_of_nonNull', () { |  | 
| 2086         final __test = new ElementKindTest(); |  | 
| 2087         runJUnitTest(__test, __test.test_of_nonNull); |  | 
| 2088       }); |  | 
| 2089       _ut.test('test_of_null', () { |  | 
| 2090         final __test = new ElementKindTest(); |  | 
| 2091         runJUnitTest(__test, __test.test_of_null); |  | 
| 2092       }); |  | 
| 2093     }); |  | 
| 2094   } |  | 
| 2095 } |  | 
| 2096 class ClassElementImplTest extends EngineTestCase { |  | 
| 2097   void test_getAllSupertypes_interface() { |  | 
| 2098     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 2099     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2100     ClassElementImpl elementC = ElementFactory.classElement2("C", []); |  | 
| 2101     InterfaceType typeObject = classA.supertype; |  | 
| 2102     InterfaceType typeA = classA.type; |  | 
| 2103     InterfaceType typeB = classB.type; |  | 
| 2104     InterfaceType typeC = elementC.type; |  | 
| 2105     elementC.interfaces = <InterfaceType> [typeB]; |  | 
| 2106     List<InterfaceType> supers = elementC.allSupertypes; |  | 
| 2107     List<InterfaceType> types = new List<InterfaceType>(); |  | 
| 2108     types.addAll(supers); |  | 
| 2109     JUnitTestCase.assertTrue(types.contains(typeA)); |  | 
| 2110     JUnitTestCase.assertTrue(types.contains(typeB)); |  | 
| 2111     JUnitTestCase.assertTrue(types.contains(typeObject)); |  | 
| 2112     JUnitTestCase.assertFalse(types.contains(typeC)); |  | 
| 2113   } |  | 
| 2114   void test_getAllSupertypes_mixins() { |  | 
| 2115     ClassElement classA = ElementFactory.classElement2("A", []); |  | 
| 2116     ClassElement classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2117     ClassElementImpl classC = ElementFactory.classElement2("C", []); |  | 
| 2118     InterfaceType typeObject = classA.supertype; |  | 
| 2119     InterfaceType typeA = classA.type; |  | 
| 2120     InterfaceType typeB = classB.type; |  | 
| 2121     InterfaceType typeC = classC.type; |  | 
| 2122     classC.mixins = <InterfaceType> [typeB]; |  | 
| 2123     List<InterfaceType> supers = classC.allSupertypes; |  | 
| 2124     List<InterfaceType> types = new List<InterfaceType>(); |  | 
| 2125     types.addAll(supers); |  | 
| 2126     JUnitTestCase.assertFalse(types.contains(typeA)); |  | 
| 2127     JUnitTestCase.assertTrue(types.contains(typeB)); |  | 
| 2128     JUnitTestCase.assertTrue(types.contains(typeObject)); |  | 
| 2129     JUnitTestCase.assertFalse(types.contains(typeC)); |  | 
| 2130   } |  | 
| 2131   void test_getAllSupertypes_recursive() { |  | 
| 2132     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2133     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2134     classA.supertype = classB.type; |  | 
| 2135     List<InterfaceType> supers = classB.allSupertypes; |  | 
| 2136     EngineTestCase.assertLength(1, supers); |  | 
| 2137   } |  | 
| 2138   void test_getMethod_declared() { |  | 
| 2139     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2140     String methodName = "m"; |  | 
| 2141     MethodElement method = ElementFactory.methodElement(methodName, null, []); |  | 
| 2142     classA.methods = <MethodElement> [method]; |  | 
| 2143     JUnitTestCase.assertSame(method, classA.getMethod(methodName)); |  | 
| 2144   } |  | 
| 2145   void test_getMethod_undeclared() { |  | 
| 2146     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2147     String methodName = "m"; |  | 
| 2148     MethodElement method = ElementFactory.methodElement(methodName, null, []); |  | 
| 2149     classA.methods = <MethodElement> [method]; |  | 
| 2150     JUnitTestCase.assertNull(classA.getMethod("${methodName}x")); |  | 
| 2151   } |  | 
| 2152   void test_hasNonFinalField_false_const() { |  | 
| 2153     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2154     classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
      e, true, classA.type)]; |  | 
| 2155     JUnitTestCase.assertFalse(classA.hasNonFinalField()); |  | 
| 2156   } |  | 
| 2157   void test_hasNonFinalField_false_final() { |  | 
| 2158     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2159     classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, true
      , false, classA.type)]; |  | 
| 2160     JUnitTestCase.assertFalse(classA.hasNonFinalField()); |  | 
| 2161   } |  | 
| 2162   void test_hasNonFinalField_false_recursive() { |  | 
| 2163     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2164     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2165     classA.supertype = classB.type; |  | 
| 2166     JUnitTestCase.assertFalse(classA.hasNonFinalField()); |  | 
| 2167   } |  | 
| 2168   void test_hasNonFinalField_true_immediate() { |  | 
| 2169     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2170     classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
      e, false, classA.type)]; |  | 
| 2171     JUnitTestCase.assertTrue(classA.hasNonFinalField()); |  | 
| 2172   } |  | 
| 2173   void test_hasNonFinalField_true_inherited() { |  | 
| 2174     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2175     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2176     classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
      e, false, classA.type)]; |  | 
| 2177     JUnitTestCase.assertTrue(classB.hasNonFinalField()); |  | 
| 2178   } |  | 
| 2179   void test_lookUpGetter_declared() { |  | 
| 2180     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2181     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2182     String getterName = "g"; |  | 
| 2183     PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
      lse, null); |  | 
| 2184     classA.accessors = <PropertyAccessorElement> [getter]; |  | 
| 2185     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA]; |  | 
| 2186     JUnitTestCase.assertSame(getter, classA.lookUpGetter(getterName, library)); |  | 
| 2187   } |  | 
| 2188   void test_lookUpGetter_inherited() { |  | 
| 2189     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2190     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2191     String getterName = "g"; |  | 
| 2192     PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
      lse, null); |  | 
| 2193     classA.accessors = <PropertyAccessorElement> [getter]; |  | 
| 2194     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2195     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA, classB]; |  | 
| 2196     JUnitTestCase.assertSame(getter, classB.lookUpGetter(getterName, library)); |  | 
| 2197   } |  | 
| 2198   void test_lookUpGetter_undeclared() { |  | 
| 2199     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2200     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2201     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA]; |  | 
| 2202     JUnitTestCase.assertNull(classA.lookUpGetter("g", library)); |  | 
| 2203   } |  | 
| 2204   void test_lookUpGetter_undeclared_recursive() { |  | 
| 2205     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2206     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2207     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2208     classA.supertype = classB.type; |  | 
| 2209     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA, classB]; |  | 
| 2210     JUnitTestCase.assertNull(classA.lookUpGetter("g", library)); |  | 
| 2211   } |  | 
| 2212   void test_lookUpMethod_declared() { |  | 
| 2213     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2214     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2215     String methodName = "m"; |  | 
| 2216     MethodElement method = ElementFactory.methodElement(methodName, null, []); |  | 
| 2217     classA.methods = <MethodElement> [method]; |  | 
| 2218     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA]; |  | 
| 2219     JUnitTestCase.assertSame(method, classA.lookUpMethod(methodName, library)); |  | 
| 2220   } |  | 
| 2221   void test_lookUpMethod_inherited() { |  | 
| 2222     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2223     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2224     String methodName = "m"; |  | 
| 2225     MethodElement method = ElementFactory.methodElement(methodName, null, []); |  | 
| 2226     classA.methods = <MethodElement> [method]; |  | 
| 2227     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2228     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA, classB]; |  | 
| 2229     JUnitTestCase.assertSame(method, classB.lookUpMethod(methodName, library)); |  | 
| 2230   } |  | 
| 2231   void test_lookUpMethod_undeclared() { |  | 
| 2232     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2233     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2234     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA]; |  | 
| 2235     JUnitTestCase.assertNull(classA.lookUpMethod("m", library)); |  | 
| 2236   } |  | 
| 2237   void test_lookUpMethod_undeclared_recursive() { |  | 
| 2238     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2239     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2240     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2241     classA.supertype = classB.type; |  | 
| 2242     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA, classB]; |  | 
| 2243     JUnitTestCase.assertNull(classA.lookUpMethod("m", library)); |  | 
| 2244   } |  | 
| 2245   void test_lookUpSetter_declared() { |  | 
| 2246     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2247     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2248     String setterName = "s"; |  | 
| 2249     PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
      lse, null); |  | 
| 2250     classA.accessors = <PropertyAccessorElement> [setter]; |  | 
| 2251     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA]; |  | 
| 2252     JUnitTestCase.assertSame(setter, classA.lookUpSetter(setterName, library)); |  | 
| 2253   } |  | 
| 2254   void test_lookUpSetter_inherited() { |  | 
| 2255     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2256     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2257     String setterName = "s"; |  | 
| 2258     PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
      lse, null); |  | 
| 2259     classA.accessors = <PropertyAccessorElement> [setter]; |  | 
| 2260     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2261     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA, classB]; |  | 
| 2262     JUnitTestCase.assertSame(setter, classB.lookUpSetter(setterName, library)); |  | 
| 2263   } |  | 
| 2264   void test_lookUpSetter_undeclared() { |  | 
| 2265     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2266     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2267     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA]; |  | 
| 2268     JUnitTestCase.assertNull(classA.lookUpSetter("s", library)); |  | 
| 2269   } |  | 
| 2270   void test_lookUpSetter_undeclared_recursive() { |  | 
| 2271     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2272     ClassElementImpl classA = ElementFactory.classElement2("A", []); |  | 
| 2273     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); |  | 
| 2274     classA.supertype = classB.type; |  | 
| 2275     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classA, classB]; |  | 
| 2276     JUnitTestCase.assertNull(classA.lookUpSetter("s", library)); |  | 
| 2277   } |  | 
| 2278   static dartSuite() { |  | 
| 2279     _ut.group('ClassElementImplTest', () { |  | 
| 2280       _ut.test('test_getAllSupertypes_interface', () { |  | 
| 2281         final __test = new ClassElementImplTest(); |  | 
| 2282         runJUnitTest(__test, __test.test_getAllSupertypes_interface); |  | 
| 2283       }); |  | 
| 2284       _ut.test('test_getAllSupertypes_mixins', () { |  | 
| 2285         final __test = new ClassElementImplTest(); |  | 
| 2286         runJUnitTest(__test, __test.test_getAllSupertypes_mixins); |  | 
| 2287       }); |  | 
| 2288       _ut.test('test_getAllSupertypes_recursive', () { |  | 
| 2289         final __test = new ClassElementImplTest(); |  | 
| 2290         runJUnitTest(__test, __test.test_getAllSupertypes_recursive); |  | 
| 2291       }); |  | 
| 2292       _ut.test('test_getMethod_declared', () { |  | 
| 2293         final __test = new ClassElementImplTest(); |  | 
| 2294         runJUnitTest(__test, __test.test_getMethod_declared); |  | 
| 2295       }); |  | 
| 2296       _ut.test('test_getMethod_undeclared', () { |  | 
| 2297         final __test = new ClassElementImplTest(); |  | 
| 2298         runJUnitTest(__test, __test.test_getMethod_undeclared); |  | 
| 2299       }); |  | 
| 2300       _ut.test('test_hasNonFinalField_false_const', () { |  | 
| 2301         final __test = new ClassElementImplTest(); |  | 
| 2302         runJUnitTest(__test, __test.test_hasNonFinalField_false_const); |  | 
| 2303       }); |  | 
| 2304       _ut.test('test_hasNonFinalField_false_final', () { |  | 
| 2305         final __test = new ClassElementImplTest(); |  | 
| 2306         runJUnitTest(__test, __test.test_hasNonFinalField_false_final); |  | 
| 2307       }); |  | 
| 2308       _ut.test('test_hasNonFinalField_false_recursive', () { |  | 
| 2309         final __test = new ClassElementImplTest(); |  | 
| 2310         runJUnitTest(__test, __test.test_hasNonFinalField_false_recursive); |  | 
| 2311       }); |  | 
| 2312       _ut.test('test_hasNonFinalField_true_immediate', () { |  | 
| 2313         final __test = new ClassElementImplTest(); |  | 
| 2314         runJUnitTest(__test, __test.test_hasNonFinalField_true_immediate); |  | 
| 2315       }); |  | 
| 2316       _ut.test('test_hasNonFinalField_true_inherited', () { |  | 
| 2317         final __test = new ClassElementImplTest(); |  | 
| 2318         runJUnitTest(__test, __test.test_hasNonFinalField_true_inherited); |  | 
| 2319       }); |  | 
| 2320       _ut.test('test_lookUpGetter_declared', () { |  | 
| 2321         final __test = new ClassElementImplTest(); |  | 
| 2322         runJUnitTest(__test, __test.test_lookUpGetter_declared); |  | 
| 2323       }); |  | 
| 2324       _ut.test('test_lookUpGetter_inherited', () { |  | 
| 2325         final __test = new ClassElementImplTest(); |  | 
| 2326         runJUnitTest(__test, __test.test_lookUpGetter_inherited); |  | 
| 2327       }); |  | 
| 2328       _ut.test('test_lookUpGetter_undeclared', () { |  | 
| 2329         final __test = new ClassElementImplTest(); |  | 
| 2330         runJUnitTest(__test, __test.test_lookUpGetter_undeclared); |  | 
| 2331       }); |  | 
| 2332       _ut.test('test_lookUpGetter_undeclared_recursive', () { |  | 
| 2333         final __test = new ClassElementImplTest(); |  | 
| 2334         runJUnitTest(__test, __test.test_lookUpGetter_undeclared_recursive); |  | 
| 2335       }); |  | 
| 2336       _ut.test('test_lookUpMethod_declared', () { |  | 
| 2337         final __test = new ClassElementImplTest(); |  | 
| 2338         runJUnitTest(__test, __test.test_lookUpMethod_declared); |  | 
| 2339       }); |  | 
| 2340       _ut.test('test_lookUpMethod_inherited', () { |  | 
| 2341         final __test = new ClassElementImplTest(); |  | 
| 2342         runJUnitTest(__test, __test.test_lookUpMethod_inherited); |  | 
| 2343       }); |  | 
| 2344       _ut.test('test_lookUpMethod_undeclared', () { |  | 
| 2345         final __test = new ClassElementImplTest(); |  | 
| 2346         runJUnitTest(__test, __test.test_lookUpMethod_undeclared); |  | 
| 2347       }); |  | 
| 2348       _ut.test('test_lookUpMethod_undeclared_recursive', () { |  | 
| 2349         final __test = new ClassElementImplTest(); |  | 
| 2350         runJUnitTest(__test, __test.test_lookUpMethod_undeclared_recursive); |  | 
| 2351       }); |  | 
| 2352       _ut.test('test_lookUpSetter_declared', () { |  | 
| 2353         final __test = new ClassElementImplTest(); |  | 
| 2354         runJUnitTest(__test, __test.test_lookUpSetter_declared); |  | 
| 2355       }); |  | 
| 2356       _ut.test('test_lookUpSetter_inherited', () { |  | 
| 2357         final __test = new ClassElementImplTest(); |  | 
| 2358         runJUnitTest(__test, __test.test_lookUpSetter_inherited); |  | 
| 2359       }); |  | 
| 2360       _ut.test('test_lookUpSetter_undeclared', () { |  | 
| 2361         final __test = new ClassElementImplTest(); |  | 
| 2362         runJUnitTest(__test, __test.test_lookUpSetter_undeclared); |  | 
| 2363       }); |  | 
| 2364       _ut.test('test_lookUpSetter_undeclared_recursive', () { |  | 
| 2365         final __test = new ClassElementImplTest(); |  | 
| 2366         runJUnitTest(__test, __test.test_lookUpSetter_undeclared_recursive); |  | 
| 2367       }); |  | 
| 2368     }); |  | 
| 2369   } |  | 
| 2370 } |  | 
| 2371 class ElementImplTest extends EngineTestCase { |  | 
| 2372   void test_equals() { |  | 
| 2373     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2374     ClassElementImpl classElement = ElementFactory.classElement2("C", []); |  | 
| 2375     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classElement]; |  | 
| 2376     FieldElement field = ElementFactory.fieldElement("next", false, false, false
      , classElement.type); |  | 
| 2377     classElement.fields = <FieldElement> [field]; |  | 
| 2378     JUnitTestCase.assertTrue(field == field); |  | 
| 2379     JUnitTestCase.assertFalse(field == field.getter); |  | 
| 2380     JUnitTestCase.assertFalse(field == field.setter); |  | 
| 2381     JUnitTestCase.assertFalse(field.getter == field.setter); |  | 
| 2382   } |  | 
| 2383   void test_isAccessibleIn_private_differentLibrary() { |  | 
| 2384     AnalysisContextImpl context = createAnalysisContext(); |  | 
| 2385     LibraryElementImpl library1 = ElementFactory.library(context, "lib1"); |  | 
| 2386     ClassElement classElement = ElementFactory.classElement2("_C", []); |  | 
| 2387     ((library1.definingCompilationUnit as CompilationUnitElementImpl)).types = <
      ClassElement> [classElement]; |  | 
| 2388     LibraryElementImpl library2 = ElementFactory.library(context, "lib2"); |  | 
| 2389     JUnitTestCase.assertFalse(classElement.isAccessibleIn(library2)); |  | 
| 2390   } |  | 
| 2391   void test_isAccessibleIn_private_sameLibrary() { |  | 
| 2392     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2393     ClassElement classElement = ElementFactory.classElement2("_C", []); |  | 
| 2394     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classElement]; |  | 
| 2395     JUnitTestCase.assertTrue(classElement.isAccessibleIn(library)); |  | 
| 2396   } |  | 
| 2397   void test_isAccessibleIn_public_differentLibrary() { |  | 
| 2398     AnalysisContextImpl context = createAnalysisContext(); |  | 
| 2399     LibraryElementImpl library1 = ElementFactory.library(context, "lib1"); |  | 
| 2400     ClassElement classElement = ElementFactory.classElement2("C", []); |  | 
| 2401     ((library1.definingCompilationUnit as CompilationUnitElementImpl)).types = <
      ClassElement> [classElement]; |  | 
| 2402     LibraryElementImpl library2 = ElementFactory.library(context, "lib2"); |  | 
| 2403     JUnitTestCase.assertTrue(classElement.isAccessibleIn(library2)); |  | 
| 2404   } |  | 
| 2405   void test_isAccessibleIn_public_sameLibrary() { |  | 
| 2406     LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
       "lib"); |  | 
| 2407     ClassElement classElement = ElementFactory.classElement2("C", []); |  | 
| 2408     ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <C
      lassElement> [classElement]; |  | 
| 2409     JUnitTestCase.assertTrue(classElement.isAccessibleIn(library)); |  | 
| 2410   } |  | 
| 2411   void test_SORT_BY_OFFSET() { |  | 
| 2412     ClassElementImpl classElementA = ElementFactory.classElement2("A", []); |  | 
| 2413     classElementA.nameOffset = 1; |  | 
| 2414     ClassElementImpl classElementB = ElementFactory.classElement2("B", []); |  | 
| 2415     classElementB.nameOffset = 2; |  | 
| 2416     JUnitTestCase.assertEquals(0, Element.SORT_BY_OFFSET(classElementA, classEle
      mentA)); |  | 
| 2417     JUnitTestCase.assertTrue(Element.SORT_BY_OFFSET(classElementA, classElementB
      ) < 0); |  | 
| 2418     JUnitTestCase.assertTrue(Element.SORT_BY_OFFSET(classElementB, classElementA
      ) > 0); |  | 
| 2419   } |  | 
| 2420   static dartSuite() { |  | 
| 2421     _ut.group('ElementImplTest', () { |  | 
| 2422       _ut.test('test_SORT_BY_OFFSET', () { |  | 
| 2423         final __test = new ElementImplTest(); |  | 
| 2424         runJUnitTest(__test, __test.test_SORT_BY_OFFSET); |  | 
| 2425       }); |  | 
| 2426       _ut.test('test_equals', () { |  | 
| 2427         final __test = new ElementImplTest(); |  | 
| 2428         runJUnitTest(__test, __test.test_equals); |  | 
| 2429       }); |  | 
| 2430       _ut.test('test_isAccessibleIn_private_differentLibrary', () { |  | 
| 2431         final __test = new ElementImplTest(); |  | 
| 2432         runJUnitTest(__test, __test.test_isAccessibleIn_private_differentLibrary
      ); |  | 
| 2433       }); |  | 
| 2434       _ut.test('test_isAccessibleIn_private_sameLibrary', () { |  | 
| 2435         final __test = new ElementImplTest(); |  | 
| 2436         runJUnitTest(__test, __test.test_isAccessibleIn_private_sameLibrary); |  | 
| 2437       }); |  | 
| 2438       _ut.test('test_isAccessibleIn_public_differentLibrary', () { |  | 
| 2439         final __test = new ElementImplTest(); |  | 
| 2440         runJUnitTest(__test, __test.test_isAccessibleIn_public_differentLibrary)
      ; |  | 
| 2441       }); |  | 
| 2442       _ut.test('test_isAccessibleIn_public_sameLibrary', () { |  | 
| 2443         final __test = new ElementImplTest(); |  | 
| 2444         runJUnitTest(__test, __test.test_isAccessibleIn_public_sameLibrary); |  | 
| 2445       }); |  | 
| 2446     }); |  | 
| 2447   } |  | 
| 2448 } |  | 
| 2449 class FunctionTypeImplTest extends EngineTestCase { |  | 
| 2450   void test_creation() { |  | 
| 2451     JUnitTestCase.assertNotNull(new FunctionTypeImpl.con1(new FunctionElementImp
      l.con1(ASTFactory.identifier3("f")))); |  | 
| 2452   } |  | 
| 2453   void test_getElement() { |  | 
| 2454     FunctionElementImpl typeElement = new FunctionElementImpl.con1(ASTFactory.id
      entifier3("f")); |  | 
| 2455     FunctionTypeImpl type = new FunctionTypeImpl.con1(typeElement); |  | 
| 2456     JUnitTestCase.assertEquals(typeElement, type.element); |  | 
| 2457   } |  | 
| 2458   void test_getNamedParameterTypes() { |  | 
| 2459     FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.co
      n1(ASTFactory.identifier3("f"))); |  | 
| 2460     Map<String, Type2> types = type.namedParameterTypes; |  | 
| 2461     EngineTestCase.assertSize2(0, types); |  | 
| 2462   } |  | 
| 2463   void test_getNormalParameterTypes() { |  | 
| 2464     FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.co
      n1(ASTFactory.identifier3("f"))); |  | 
| 2465     List<Type2> types = type.normalParameterTypes; |  | 
| 2466     EngineTestCase.assertLength(0, types); |  | 
| 2467   } |  | 
| 2468   void test_getReturnType() { |  | 
| 2469     Type2 expectedReturnType = VoidTypeImpl.instance; |  | 
| 2470     FunctionElementImpl functionElement = new FunctionElementImpl.con1(ASTFactor
      y.identifier3("f")); |  | 
| 2471     functionElement.returnType = expectedReturnType; |  | 
| 2472     FunctionTypeImpl type = new FunctionTypeImpl.con1(functionElement); |  | 
| 2473     Type2 returnType = type.returnType; |  | 
| 2474     JUnitTestCase.assertEquals(expectedReturnType, returnType); |  | 
| 2475   } |  | 
| 2476   void test_getTypeArguments() { |  | 
| 2477     FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.co
      n1(ASTFactory.identifier3("f"))); |  | 
| 2478     List<Type2> types = type.typeArguments; |  | 
| 2479     EngineTestCase.assertLength(0, types); |  | 
| 2480   } |  | 
| 2481   void test_hashCode_element() { |  | 
| 2482     FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.co
      n1(ASTFactory.identifier3("f"))); |  | 
| 2483     type.hashCode; |  | 
| 2484   } |  | 
| 2485   void test_hashCode_noElement() { |  | 
| 2486     FunctionTypeImpl type = new FunctionTypeImpl.con1(null as ExecutableElement)
      ; |  | 
| 2487     type.hashCode; |  | 
| 2488   } |  | 
| 2489   void test_isAssignableTo_normalAndPositionalArgs() { |  | 
| 2490     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2491     FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
      a]).type; |  | 
| 2492     FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
      pe; |  | 
| 2493     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2494     JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |  | 
| 2495     JUnitTestCase.assertTrue(t.isAssignableTo(s)); |  | 
| 2496     JUnitTestCase.assertFalse(s.isAssignableTo(t)); |  | 
| 2497   } |  | 
| 2498   void test_isSubtypeOf_baseCase_classFunction() { |  | 
| 2499     ClassElementImpl functionElement = ElementFactory.classElement2("Function", 
      []); |  | 
| 2500     InterfaceTypeImpl functionType = new InterfaceTypeImpl_23(functionElement); |  | 
| 2501     FunctionType f = ElementFactory.functionElement("f").type; |  | 
| 2502     JUnitTestCase.assertTrue(f.isSubtypeOf(functionType)); |  | 
| 2503   } |  | 
| 2504   void test_isSubtypeOf_baseCase_notFunctionType() { |  | 
| 2505     FunctionType f = ElementFactory.functionElement("f").type; |  | 
| 2506     InterfaceType t = ElementFactory.classElement2("C", []).type; |  | 
| 2507     JUnitTestCase.assertFalse(f.isSubtypeOf(t)); |  | 
| 2508   } |  | 
| 2509   void test_isSubtypeOf_baseCase_null() { |  | 
| 2510     FunctionType f = ElementFactory.functionElement("f").type; |  | 
| 2511     JUnitTestCase.assertFalse(f.isSubtypeOf(null)); |  | 
| 2512   } |  | 
| 2513   void test_isSubtypeOf_baseCase_self() { |  | 
| 2514     FunctionType f = ElementFactory.functionElement("f").type; |  | 
| 2515     JUnitTestCase.assertTrue(f.isSubtypeOf(f)); |  | 
| 2516   } |  | 
| 2517   void test_isSubtypeOf_namedParameters_isAssignable() { |  | 
| 2518     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2519     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2520     FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
      "name"], <ClassElement> [a]).type; |  | 
| 2521     FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
      "name"], <ClassElement> [b]).type; |  | 
| 2522     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2523     JUnitTestCase.assertTrue(s.isSubtypeOf(t)); |  | 
| 2524   } |  | 
| 2525   void test_isSubtypeOf_namedParameters_isNotAssignable() { |  | 
| 2526     FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
      "name"], <ClassElement> [ElementFactory.classElement2("A", [])]).type; |  | 
| 2527     FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
      "name"], <ClassElement> [ElementFactory.classElement2("B", [])]).type; |  | 
| 2528     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2529   } |  | 
| 2530   void test_isSubtypeOf_namedParameters_namesDifferent() { |  | 
| 2531     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2532     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2533     FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
      "name"], <ClassElement> [a]).type; |  | 
| 2534     FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
      "diff"], <ClassElement> [b]).type; |  | 
| 2535     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2536     JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |  | 
| 2537   } |  | 
| 2538   void test_isSubtypeOf_namedParameters_orderOfParams() { |  | 
| 2539     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2540     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2541     FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
      "A", "B"], <ClassElement> [a, b]).type; |  | 
| 2542     FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
      "B", "A"], <ClassElement> [b, a]).type; |  | 
| 2543     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2544   } |  | 
| 2545   void test_isSubtypeOf_namedParameters_orderOfParams2() { |  | 
| 2546     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2547     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2548     FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
      "B"], <ClassElement> [b]).type; |  | 
| 2549     FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
      "B", "A"], <ClassElement> [b, a]).type; |  | 
| 2550     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2551   } |  | 
| 2552   void test_isSubtypeOf_namedParameters_orderOfParams3() { |  | 
| 2553     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2554     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2555     FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
      "A", "B"], <ClassElement> [a, b]).type; |  | 
| 2556     FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
      "B"], <ClassElement> [b]).type; |  | 
| 2557     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2558   } |  | 
| 2559   void test_isSubtypeOf_namedParameters_sHasMoreParams() { |  | 
| 2560     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2561     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2562     FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
      "name"], <ClassElement> [a]).type; |  | 
| 2563     FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
      "name", "name2"], <ClassElement> [b, b]).type; |  | 
| 2564     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2565   } |  | 
| 2566   void test_isSubtypeOf_namedParameters_tHasMoreParams() { |  | 
| 2567     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2568     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2569     FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
      "name", "name2"], <ClassElement> [a, a]).type; |  | 
| 2570     FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
      "name"], <ClassElement> [b]).type; |  | 
| 2571     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2572   } |  | 
| 2573   void test_isSubtypeOf_normalAndPositionalArgs_1() { |  | 
| 2574     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2575     FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
      a]).type; |  | 
| 2576     FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
      pe; |  | 
| 2577     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2578     JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |  | 
| 2579   } |  | 
| 2580   void test_isSubtypeOf_normalAndPositionalArgs_2() { |  | 
| 2581     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2582     FunctionType t = ElementFactory.functionElement6("t", <ClassElement> [a], <C
      lassElement> [a]).type; |  | 
| 2583     FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
      pe; |  | 
| 2584     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2585     JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |  | 
| 2586   } |  | 
| 2587   void test_isSubtypeOf_normalAndPositionalArgs_3() { |  | 
| 2588     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2589     FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
      a]).type; |  | 
| 2590     FunctionType s = ElementFactory.functionElement("s").type; |  | 
| 2591     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2592     JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |  | 
| 2593   } |  | 
| 2594   void test_isSubtypeOf_normalAndPositionalArgs_4() { |  | 
| 2595     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2596     ClassElement b = ElementFactory.classElement2("B", []); |  | 
| 2597     ClassElement c = ElementFactory.classElement2("C", []); |  | 
| 2598     ClassElement d = ElementFactory.classElement2("D", []); |  | 
| 2599     ClassElement e = ElementFactory.classElement2("E", []); |  | 
| 2600     FunctionType t = ElementFactory.functionElement6("t", <ClassElement> [a, b],
       <ClassElement> [c, d, e]).type; |  | 
| 2601     FunctionType s = ElementFactory.functionElement6("s", <ClassElement> [a, b, 
      c], <ClassElement> [d]).type; |  | 
| 2602     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2603     JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |  | 
| 2604   } |  | 
| 2605   void test_isSubtypeOf_normalParameters_isAssignable() { |  | 
| 2606     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2607     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2608     FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
      pe; |  | 
| 2609     FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b]).ty
      pe; |  | 
| 2610     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2611     JUnitTestCase.assertTrue(s.isSubtypeOf(t)); |  | 
| 2612   } |  | 
| 2613   void test_isSubtypeOf_normalParameters_isNotAssignable() { |  | 
| 2614     FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [Elemen
      tFactory.classElement2("A", [])]).type; |  | 
| 2615     FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [Elemen
      tFactory.classElement2("B", [])]).type; |  | 
| 2616     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2617   } |  | 
| 2618   void test_isSubtypeOf_normalParameters_sHasMoreParams() { |  | 
| 2619     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2620     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2621     FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
      pe; |  | 
| 2622     FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b, b])
      .type; |  | 
| 2623     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2624   } |  | 
| 2625   void test_isSubtypeOf_normalParameters_tHasMoreParams() { |  | 
| 2626     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2627     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2628     FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a, a])
      .type; |  | 
| 2629     FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b]).ty
      pe; |  | 
| 2630     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2631   } |  | 
| 2632   void test_isSubtypeOf_Object() { |  | 
| 2633     FunctionType f = ElementFactory.functionElement("f").type; |  | 
| 2634     InterfaceType t = ElementFactory.object.type; |  | 
| 2635     JUnitTestCase.assertTrue(f.isSubtypeOf(t)); |  | 
| 2636   } |  | 
| 2637   void test_isSubtypeOf_positionalParameters_isAssignable() { |  | 
| 2638     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2639     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2640     FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
      a]).type; |  | 
| 2641     FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
      b]).type; |  | 
| 2642     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2643     JUnitTestCase.assertTrue(s.isSubtypeOf(t)); |  | 
| 2644   } |  | 
| 2645   void test_isSubtypeOf_positionalParameters_isNotAssignable() { |  | 
| 2646     FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
      ElementFactory.classElement2("A", [])]).type; |  | 
| 2647     FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
      ElementFactory.classElement2("B", [])]).type; |  | 
| 2648     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2649   } |  | 
| 2650   void test_isSubtypeOf_positionalParameters_sHasMoreParams() { |  | 
| 2651     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2652     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2653     FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
      a]).type; |  | 
| 2654     FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
      b, b]).type; |  | 
| 2655     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2656   } |  | 
| 2657   void test_isSubtypeOf_positionalParameters_tHasMoreParams() { |  | 
| 2658     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2659     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2660     FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
      a, a]).type; |  | 
| 2661     FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
      b]).type; |  | 
| 2662     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2663   } |  | 
| 2664   void test_isSubtypeOf_returnType_sIsVoid() { |  | 
| 2665     FunctionType t = ElementFactory.functionElement("t").type; |  | 
| 2666     FunctionType s = ElementFactory.functionElement("s").type; |  | 
| 2667     JUnitTestCase.assertTrue(VoidTypeImpl.instance == s.returnType); |  | 
| 2668     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2669   } |  | 
| 2670   void test_isSubtypeOf_returnType_tAssignableToS() { |  | 
| 2671     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2672     ClassElement b = ElementFactory.classElement("B", a.type, []); |  | 
| 2673     FunctionType t = ElementFactory.functionElement2("t", a).type; |  | 
| 2674     FunctionType s = ElementFactory.functionElement2("s", b).type; |  | 
| 2675     JUnitTestCase.assertTrue(t.isSubtypeOf(s)); |  | 
| 2676     JUnitTestCase.assertTrue(s.isSubtypeOf(t)); |  | 
| 2677   } |  | 
| 2678   void test_isSubtypeOf_returnType_tNotAssignableToS() { |  | 
| 2679     FunctionType t = ElementFactory.functionElement2("t", ElementFactory.classEl
      ement2("A", [])).type; |  | 
| 2680     FunctionType s = ElementFactory.functionElement2("s", ElementFactory.classEl
      ement2("B", [])).type; |  | 
| 2681     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2682   } |  | 
| 2683   void test_isSubtypeOf_typeParameters_matchesBounds() { |  | 
| 2684     TestTypeProvider provider = new TestTypeProvider(); |  | 
| 2685     InterfaceType boolType = provider.boolType; |  | 
| 2686     InterfaceType stringType = provider.stringType; |  | 
| 2687     TypeParameterElementImpl parameterB = new TypeParameterElementImpl(ASTFactor
      y.identifier3("B")); |  | 
| 2688     parameterB.bound = boolType; |  | 
| 2689     TypeParameterTypeImpl typeB = new TypeParameterTypeImpl(parameterB); |  | 
| 2690     TypeParameterElementImpl parameterS = new TypeParameterElementImpl(ASTFactor
      y.identifier3("S")); |  | 
| 2691     parameterS.bound = stringType; |  | 
| 2692     TypeParameterTypeImpl typeS = new TypeParameterTypeImpl(parameterS); |  | 
| 2693     FunctionElementImpl functionAliasElement = new FunctionElementImpl.con1(ASTF
      actory.identifier3("func")); |  | 
| 2694     functionAliasElement.parameters = <ParameterElement> [ |  | 
| 2695         ElementFactory.requiredParameter2("a", typeB), |  | 
| 2696         ElementFactory.positionalParameter2("b", typeS)]; |  | 
| 2697     functionAliasElement.returnType = stringType; |  | 
| 2698     FunctionTypeImpl functionAliasType = new FunctionTypeImpl.con1(functionAlias
      Element); |  | 
| 2699     functionAliasElement.type = functionAliasType; |  | 
| 2700     FunctionElementImpl functionElement = new FunctionElementImpl.con1(ASTFactor
      y.identifier3("f")); |  | 
| 2701     functionElement.parameters = <ParameterElement> [ |  | 
| 2702         ElementFactory.requiredParameter2("c", boolType), |  | 
| 2703         ElementFactory.positionalParameter2("d", stringType)]; |  | 
| 2704     functionElement.returnType = provider.dynamicType; |  | 
| 2705     FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |  | 
| 2706     functionElement.type = functionType; |  | 
| 2707     JUnitTestCase.assertTrue(functionType.isAssignableTo(functionAliasType)); |  | 
| 2708   } |  | 
| 2709   void test_isSubtypeOf_wrongFunctionType_normal_named() { |  | 
| 2710     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2711     FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
      pe; |  | 
| 2712     FunctionType s = ElementFactory.functionElement7("s", null, <String> ["name"
      ], <ClassElement> [a]).type; |  | 
| 2713     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2714     JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |  | 
| 2715   } |  | 
| 2716   void test_isSubtypeOf_wrongFunctionType_optional_named() { |  | 
| 2717     ClassElement a = ElementFactory.classElement2("A", []); |  | 
| 2718     FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
      a]).type; |  | 
| 2719     FunctionType s = ElementFactory.functionElement7("s", null, <String> ["name"
      ], <ClassElement> [a]).type; |  | 
| 2720     JUnitTestCase.assertFalse(t.isSubtypeOf(s)); |  | 
| 2721     JUnitTestCase.assertFalse(s.isSubtypeOf(t)); |  | 
| 2722   } |  | 
| 2723   void test_setTypeArguments() { |  | 
| 2724     ClassElementImpl enclosingClass = ElementFactory.classElement2("C", ["E"]); |  | 
| 2725     MethodElementImpl methodElement = new MethodElementImpl.con1(ASTFactory.iden
      tifier3("m")); |  | 
| 2726     enclosingClass.methods = <MethodElement> [methodElement]; |  | 
| 2727     FunctionTypeImpl type = new FunctionTypeImpl.con1(methodElement); |  | 
| 2728     Type2 expectedType = enclosingClass.typeParameters[0].type; |  | 
| 2729     type.typeArguments = <Type2> [expectedType]; |  | 
| 2730     List<Type2> arguments = type.typeArguments; |  | 
| 2731     EngineTestCase.assertLength(1, arguments); |  | 
| 2732     JUnitTestCase.assertEquals(expectedType, arguments[0]); |  | 
| 2733   } |  | 
| 2734   void test_substitute2_equal() { |  | 
| 2735     ClassElementImpl definingClass = ElementFactory.classElement2("C", ["E"]); |  | 
| 2736     TypeParameterType parameterType = definingClass.typeParameters[0].type; |  | 
| 2737     MethodElementImpl functionElement = new MethodElementImpl.con1(ASTFactory.id
      entifier3("m")); |  | 
| 2738     String namedParameterName = "c"; |  | 
| 2739     functionElement.parameters = <ParameterElement> [ |  | 
| 2740         ElementFactory.requiredParameter2("a", parameterType), |  | 
| 2741         ElementFactory.positionalParameter2("b", parameterType), |  | 
| 2742         ElementFactory.namedParameter2(namedParameterName, parameterType)]; |  | 
| 2743     functionElement.returnType = parameterType; |  | 
| 2744     definingClass.methods = <MethodElement> [functionElement]; |  | 
| 2745     FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |  | 
| 2746     functionType.typeArguments = <Type2> [parameterType]; |  | 
| 2747     InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(new ClassElement
      Impl(ASTFactory.identifier3("D"))); |  | 
| 2748     FunctionType result = functionType.substitute2(<Type2> [argumentType], <Type
      2> [parameterType]); |  | 
| 2749     JUnitTestCase.assertEquals(argumentType, result.returnType); |  | 
| 2750     List<Type2> normalParameters = result.normalParameterTypes; |  | 
| 2751     EngineTestCase.assertLength(1, normalParameters); |  | 
| 2752     JUnitTestCase.assertEquals(argumentType, normalParameters[0]); |  | 
| 2753     List<Type2> optionalParameters = result.optionalParameterTypes; |  | 
| 2754     EngineTestCase.assertLength(1, optionalParameters); |  | 
| 2755     JUnitTestCase.assertEquals(argumentType, optionalParameters[0]); |  | 
| 2756     Map<String, Type2> namedParameters = result.namedParameterTypes; |  | 
| 2757     EngineTestCase.assertSize2(1, namedParameters); |  | 
| 2758     JUnitTestCase.assertEquals(argumentType, namedParameters[namedParameterName]
      ); |  | 
| 2759   } |  | 
| 2760   void test_substitute2_notEqual() { |  | 
| 2761     Type2 returnType = new InterfaceTypeImpl.con1(new ClassElementImpl(ASTFactor
      y.identifier3("R"))); |  | 
| 2762     Type2 normalParameterType = new InterfaceTypeImpl.con1(new ClassElementImpl(
      ASTFactory.identifier3("A"))); |  | 
| 2763     Type2 optionalParameterType = new InterfaceTypeImpl.con1(new ClassElementImp
      l(ASTFactory.identifier3("B"))); |  | 
| 2764     Type2 namedParameterType = new InterfaceTypeImpl.con1(new ClassElementImpl(A
      STFactory.identifier3("C"))); |  | 
| 2765     FunctionElementImpl functionElement = new FunctionElementImpl.con1(ASTFactor
      y.identifier3("f")); |  | 
| 2766     String namedParameterName = "c"; |  | 
| 2767     functionElement.parameters = <ParameterElement> [ |  | 
| 2768         ElementFactory.requiredParameter2("a", normalParameterType), |  | 
| 2769         ElementFactory.positionalParameter2("b", optionalParameterType), |  | 
| 2770         ElementFactory.namedParameter2(namedParameterName, namedParameterType)]; |  | 
| 2771     functionElement.returnType = returnType; |  | 
| 2772     FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |  | 
| 2773     InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(new ClassElement
      Impl(ASTFactory.identifier3("D"))); |  | 
| 2774     TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(new TypePara
      meterElementImpl(ASTFactory.identifier3("E"))); |  | 
| 2775     FunctionType result = functionType.substitute2(<Type2> [argumentType], <Type
      2> [parameterType]); |  | 
| 2776     JUnitTestCase.assertEquals(returnType, result.returnType); |  | 
| 2777     List<Type2> normalParameters = result.normalParameterTypes; |  | 
| 2778     EngineTestCase.assertLength(1, normalParameters); |  | 
| 2779     JUnitTestCase.assertEquals(normalParameterType, normalParameters[0]); |  | 
| 2780     List<Type2> optionalParameters = result.optionalParameterTypes; |  | 
| 2781     EngineTestCase.assertLength(1, optionalParameters); |  | 
| 2782     JUnitTestCase.assertEquals(optionalParameterType, optionalParameters[0]); |  | 
| 2783     Map<String, Type2> namedParameters = result.namedParameterTypes; |  | 
| 2784     EngineTestCase.assertSize2(1, namedParameters); |  | 
| 2785     JUnitTestCase.assertEquals(namedParameterType, namedParameters[namedParamete
      rName]); |  | 
| 2786   } |  | 
| 2787   static dartSuite() { |  | 
| 2788     _ut.group('FunctionTypeImplTest', () { |  | 
| 2789       _ut.test('test_creation', () { |  | 
| 2790         final __test = new FunctionTypeImplTest(); |  | 
| 2791         runJUnitTest(__test, __test.test_creation); |  | 
| 2792       }); |  | 
| 2793       _ut.test('test_getElement', () { |  | 
| 2794         final __test = new FunctionTypeImplTest(); |  | 
| 2795         runJUnitTest(__test, __test.test_getElement); |  | 
| 2796       }); |  | 
| 2797       _ut.test('test_getNamedParameterTypes', () { |  | 
| 2798         final __test = new FunctionTypeImplTest(); |  | 
| 2799         runJUnitTest(__test, __test.test_getNamedParameterTypes); |  | 
| 2800       }); |  | 
| 2801       _ut.test('test_getNormalParameterTypes', () { |  | 
| 2802         final __test = new FunctionTypeImplTest(); |  | 
| 2803         runJUnitTest(__test, __test.test_getNormalParameterTypes); |  | 
| 2804       }); |  | 
| 2805       _ut.test('test_getReturnType', () { |  | 
| 2806         final __test = new FunctionTypeImplTest(); |  | 
| 2807         runJUnitTest(__test, __test.test_getReturnType); |  | 
| 2808       }); |  | 
| 2809       _ut.test('test_getTypeArguments', () { |  | 
| 2810         final __test = new FunctionTypeImplTest(); |  | 
| 2811         runJUnitTest(__test, __test.test_getTypeArguments); |  | 
| 2812       }); |  | 
| 2813       _ut.test('test_hashCode_element', () { |  | 
| 2814         final __test = new FunctionTypeImplTest(); |  | 
| 2815         runJUnitTest(__test, __test.test_hashCode_element); |  | 
| 2816       }); |  | 
| 2817       _ut.test('test_hashCode_noElement', () { |  | 
| 2818         final __test = new FunctionTypeImplTest(); |  | 
| 2819         runJUnitTest(__test, __test.test_hashCode_noElement); |  | 
| 2820       }); |  | 
| 2821       _ut.test('test_isAssignableTo_normalAndPositionalArgs', () { |  | 
| 2822         final __test = new FunctionTypeImplTest(); |  | 
| 2823         runJUnitTest(__test, __test.test_isAssignableTo_normalAndPositionalArgs)
      ; |  | 
| 2824       }); |  | 
| 2825       _ut.test('test_isSubtypeOf_Object', () { |  | 
| 2826         final __test = new FunctionTypeImplTest(); |  | 
| 2827         runJUnitTest(__test, __test.test_isSubtypeOf_Object); |  | 
| 2828       }); |  | 
| 2829       _ut.test('test_isSubtypeOf_baseCase_classFunction', () { |  | 
| 2830         final __test = new FunctionTypeImplTest(); |  | 
| 2831         runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_classFunction); |  | 
| 2832       }); |  | 
| 2833       _ut.test('test_isSubtypeOf_baseCase_notFunctionType', () { |  | 
| 2834         final __test = new FunctionTypeImplTest(); |  | 
| 2835         runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_notFunctionType); |  | 
| 2836       }); |  | 
| 2837       _ut.test('test_isSubtypeOf_baseCase_null', () { |  | 
| 2838         final __test = new FunctionTypeImplTest(); |  | 
| 2839         runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_null); |  | 
| 2840       }); |  | 
| 2841       _ut.test('test_isSubtypeOf_baseCase_self', () { |  | 
| 2842         final __test = new FunctionTypeImplTest(); |  | 
| 2843         runJUnitTest(__test, __test.test_isSubtypeOf_baseCase_self); |  | 
| 2844       }); |  | 
| 2845       _ut.test('test_isSubtypeOf_namedParameters_isAssignable', () { |  | 
| 2846         final __test = new FunctionTypeImplTest(); |  | 
| 2847         runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_isAssignabl
      e); |  | 
| 2848       }); |  | 
| 2849       _ut.test('test_isSubtypeOf_namedParameters_isNotAssignable', () { |  | 
| 2850         final __test = new FunctionTypeImplTest(); |  | 
| 2851         runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_isNotAssign
      able); |  | 
| 2852       }); |  | 
| 2853       _ut.test('test_isSubtypeOf_namedParameters_namesDifferent', () { |  | 
| 2854         final __test = new FunctionTypeImplTest(); |  | 
| 2855         runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_namesDiffer
      ent); |  | 
| 2856       }); |  | 
| 2857       _ut.test('test_isSubtypeOf_namedParameters_orderOfParams', () { |  | 
| 2858         final __test = new FunctionTypeImplTest(); |  | 
| 2859         runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_orderOfPara
      ms); |  | 
| 2860       }); |  | 
| 2861       _ut.test('test_isSubtypeOf_namedParameters_orderOfParams2', () { |  | 
| 2862         final __test = new FunctionTypeImplTest(); |  | 
| 2863         runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_orderOfPara
      ms2); |  | 
| 2864       }); |  | 
| 2865       _ut.test('test_isSubtypeOf_namedParameters_orderOfParams3', () { |  | 
| 2866         final __test = new FunctionTypeImplTest(); |  | 
| 2867         runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_orderOfPara
      ms3); |  | 
| 2868       }); |  | 
| 2869       _ut.test('test_isSubtypeOf_namedParameters_sHasMoreParams', () { |  | 
| 2870         final __test = new FunctionTypeImplTest(); |  | 
| 2871         runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_sHasMorePar
      ams); |  | 
| 2872       }); |  | 
| 2873       _ut.test('test_isSubtypeOf_namedParameters_tHasMoreParams', () { |  | 
| 2874         final __test = new FunctionTypeImplTest(); |  | 
| 2875         runJUnitTest(__test, __test.test_isSubtypeOf_namedParameters_tHasMorePar
      ams); |  | 
| 2876       }); |  | 
| 2877       _ut.test('test_isSubtypeOf_normalAndPositionalArgs_1', () { |  | 
| 2878         final __test = new FunctionTypeImplTest(); |  | 
| 2879         runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_1); |  | 
| 2880       }); |  | 
| 2881       _ut.test('test_isSubtypeOf_normalAndPositionalArgs_2', () { |  | 
| 2882         final __test = new FunctionTypeImplTest(); |  | 
| 2883         runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_2); |  | 
| 2884       }); |  | 
| 2885       _ut.test('test_isSubtypeOf_normalAndPositionalArgs_3', () { |  | 
| 2886         final __test = new FunctionTypeImplTest(); |  | 
| 2887         runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_3); |  | 
| 2888       }); |  | 
| 2889       _ut.test('test_isSubtypeOf_normalAndPositionalArgs_4', () { |  | 
| 2890         final __test = new FunctionTypeImplTest(); |  | 
| 2891         runJUnitTest(__test, __test.test_isSubtypeOf_normalAndPositionalArgs_4); |  | 
| 2892       }); |  | 
| 2893       _ut.test('test_isSubtypeOf_normalParameters_isAssignable', () { |  | 
| 2894         final __test = new FunctionTypeImplTest(); |  | 
| 2895         runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_isAssignab
      le); |  | 
| 2896       }); |  | 
| 2897       _ut.test('test_isSubtypeOf_normalParameters_isNotAssignable', () { |  | 
| 2898         final __test = new FunctionTypeImplTest(); |  | 
| 2899         runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_isNotAssig
      nable); |  | 
| 2900       }); |  | 
| 2901       _ut.test('test_isSubtypeOf_normalParameters_sHasMoreParams', () { |  | 
| 2902         final __test = new FunctionTypeImplTest(); |  | 
| 2903         runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_sHasMorePa
      rams); |  | 
| 2904       }); |  | 
| 2905       _ut.test('test_isSubtypeOf_normalParameters_tHasMoreParams', () { |  | 
| 2906         final __test = new FunctionTypeImplTest(); |  | 
| 2907         runJUnitTest(__test, __test.test_isSubtypeOf_normalParameters_tHasMorePa
      rams); |  | 
| 2908       }); |  | 
| 2909       _ut.test('test_isSubtypeOf_positionalParameters_isAssignable', () { |  | 
| 2910         final __test = new FunctionTypeImplTest(); |  | 
| 2911         runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_isAssi
      gnable); |  | 
| 2912       }); |  | 
| 2913       _ut.test('test_isSubtypeOf_positionalParameters_isNotAssignable', () { |  | 
| 2914         final __test = new FunctionTypeImplTest(); |  | 
| 2915         runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_isNotA
      ssignable); |  | 
| 2916       }); |  | 
| 2917       _ut.test('test_isSubtypeOf_positionalParameters_sHasMoreParams', () { |  | 
| 2918         final __test = new FunctionTypeImplTest(); |  | 
| 2919         runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_sHasMo
      reParams); |  | 
| 2920       }); |  | 
| 2921       _ut.test('test_isSubtypeOf_positionalParameters_tHasMoreParams', () { |  | 
| 2922         final __test = new FunctionTypeImplTest(); |  | 
| 2923         runJUnitTest(__test, __test.test_isSubtypeOf_positionalParameters_tHasMo
      reParams); |  | 
| 2924       }); |  | 
| 2925       _ut.test('test_isSubtypeOf_returnType_sIsVoid', () { |  | 
| 2926         final __test = new FunctionTypeImplTest(); |  | 
| 2927         runJUnitTest(__test, __test.test_isSubtypeOf_returnType_sIsVoid); |  | 
| 2928       }); |  | 
| 2929       _ut.test('test_isSubtypeOf_returnType_tAssignableToS', () { |  | 
| 2930         final __test = new FunctionTypeImplTest(); |  | 
| 2931         runJUnitTest(__test, __test.test_isSubtypeOf_returnType_tAssignableToS); |  | 
| 2932       }); |  | 
| 2933       _ut.test('test_isSubtypeOf_returnType_tNotAssignableToS', () { |  | 
| 2934         final __test = new FunctionTypeImplTest(); |  | 
| 2935         runJUnitTest(__test, __test.test_isSubtypeOf_returnType_tNotAssignableTo
      S); |  | 
| 2936       }); |  | 
| 2937       _ut.test('test_isSubtypeOf_typeParameters_matchesBounds', () { |  | 
| 2938         final __test = new FunctionTypeImplTest(); |  | 
| 2939         runJUnitTest(__test, __test.test_isSubtypeOf_typeParameters_matchesBound
      s); |  | 
| 2940       }); |  | 
| 2941       _ut.test('test_isSubtypeOf_wrongFunctionType_normal_named', () { |  | 
| 2942         final __test = new FunctionTypeImplTest(); |  | 
| 2943         runJUnitTest(__test, __test.test_isSubtypeOf_wrongFunctionType_normal_na
      med); |  | 
| 2944       }); |  | 
| 2945       _ut.test('test_isSubtypeOf_wrongFunctionType_optional_named', () { |  | 
| 2946         final __test = new FunctionTypeImplTest(); |  | 
| 2947         runJUnitTest(__test, __test.test_isSubtypeOf_wrongFunctionType_optional_
      named); |  | 
| 2948       }); |  | 
| 2949       _ut.test('test_setTypeArguments', () { |  | 
| 2950         final __test = new FunctionTypeImplTest(); |  | 
| 2951         runJUnitTest(__test, __test.test_setTypeArguments); |  | 
| 2952       }); |  | 
| 2953       _ut.test('test_substitute2_equal', () { |  | 
| 2954         final __test = new FunctionTypeImplTest(); |  | 
| 2955         runJUnitTest(__test, __test.test_substitute2_equal); |  | 
| 2956       }); |  | 
| 2957       _ut.test('test_substitute2_notEqual', () { |  | 
| 2958         final __test = new FunctionTypeImplTest(); |  | 
| 2959         runJUnitTest(__test, __test.test_substitute2_notEqual); |  | 
| 2960       }); |  | 
| 2961     }); |  | 
| 2962   } |  | 
| 2963 } |  | 
| 2964 class InterfaceTypeImpl_23 extends InterfaceTypeImpl { |  | 
| 2965   InterfaceTypeImpl_23(ClassElement arg0) : super.con1(arg0); |  | 
| 2966   bool get isDartCoreFunction => true; |  | 
| 2967 } |  | 
| 2968 main() { |  | 
| 2969   ElementKindTest.dartSuite(); |  | 
| 2970   FunctionTypeImplTest.dartSuite(); |  | 
| 2971   InterfaceTypeImplTest.dartSuite(); |  | 
| 2972   TypeParameterTypeImplTest.dartSuite(); |  | 
| 2973   ClassElementImplTest.dartSuite(); |  | 
| 2974   ElementLocationImplTest.dartSuite(); |  | 
| 2975   ElementImplTest.dartSuite(); |  | 
| 2976   LibraryElementImplTest.dartSuite(); |  | 
| 2977   MultiplyDefinedElementImplTest.dartSuite(); |  | 
| 2978 } |  | 
| OLD | NEW | 
|---|