| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library world_test; | 5 library world_test; |
| 6 | 6 |
| 7 import 'package:expect/expect.dart'; | 7 import 'package:expect/expect.dart'; |
| 8 import 'package:async_helper/async_helper.dart'; | 8 import 'package:async_helper/async_helper.dart'; |
| 9 import 'type_test_helper.dart'; | 9 import 'type_test_helper.dart'; |
| 10 import 'package:compiler/src/common/names.dart'; | 10 import 'package:compiler/src/common/names.dart'; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 new C(); | 42 new C(); |
| 43 new D(); | 43 new D(); |
| 44 new E(); | 44 new E(); |
| 45 new F(); | 45 new F(); |
| 46 new G(); | 46 new G(); |
| 47 html.window; | 47 html.window; |
| 48 new html.Worker(''); | 48 new html.Worker(''); |
| 49 } | 49 } |
| 50 """, | 50 """, |
| 51 useMockCompiler: false); | 51 useMockCompiler: false); |
| 52 ClosedWorld closedWorld = env.compiler.closedWorld; | 52 ClosedWorld closedWorld = env.closedWorld; |
| 53 | 53 |
| 54 ClassElement Object_ = env.getElement("Object"); | 54 ClassElement Object_ = env.getElement("Object"); |
| 55 ClassElement A = env.getElement("A"); | 55 ClassElement A = env.getElement("A"); |
| 56 ClassElement B = env.getElement("B"); | 56 ClassElement B = env.getElement("B"); |
| 57 ClassElement C = env.getElement("C"); | 57 ClassElement C = env.getElement("C"); |
| 58 ClassElement D = env.getElement("D"); | 58 ClassElement D = env.getElement("D"); |
| 59 ClassElement E = env.getElement("E"); | 59 ClassElement E = env.getElement("E"); |
| 60 ClassElement F = env.getElement("F"); | 60 ClassElement F = env.getElement("F"); |
| 61 ClassElement G = env.getElement("G"); | 61 ClassElement G = env.getElement("G"); |
| 62 ClassElement X = env.getElement("X"); | 62 ClassElement X = env.getElement("X"); |
| 63 | 63 |
| 64 void checkClasses(String property, ClassElement cls, | 64 void checkClasses(String property, ClassElement cls, |
| 65 Iterable<ClassElement> foundClasses, List<ClassElement> expectedClasses, | 65 Iterable<ClassElement> foundClasses, List<ClassElement> expectedClasses, |
| 66 {bool exact: true}) { | 66 {bool exact: true}) { |
| 67 for (ClassElement expectedClass in expectedClasses) { | 67 for (ClassElement expectedClass in expectedClasses) { |
| 68 Expect.isTrue( | 68 Expect.isTrue( |
| 69 foundClasses.contains(expectedClass), | 69 foundClasses.contains(expectedClass), |
| 70 "Expect $expectedClass in '$property' on $cls. " | 70 "Expect $expectedClass in '$property' on $cls. " |
| 71 "Found:\n ${foundClasses.join('\n ')}\n" | 71 "Found:\n ${foundClasses.join('\n ')}\n" |
| 72 "${env.compiler.closedWorld.dump(cls)}"); | 72 "${closedWorld.dump(cls)}"); |
| 73 } | 73 } |
| 74 if (exact) { | 74 if (exact) { |
| 75 Expect.equals( | 75 Expect.equals( |
| 76 expectedClasses.length, | 76 expectedClasses.length, |
| 77 foundClasses.length, | 77 foundClasses.length, |
| 78 "Unexpected classes " | 78 "Unexpected classes " |
| 79 "${foundClasses.where((c) => !expectedClasses.contains(c))} " | 79 "${foundClasses.where((c) => !expectedClasses.contains(c))} " |
| 80 "in '$property' on $cls.\n" | 80 "in '$property' on $cls.\n" |
| 81 "${env.compiler.closedWorld.dump(cls)}"); | 81 "${closedWorld.dump(cls)}"); |
| 82 } | 82 } |
| 83 } | 83 } |
| 84 | 84 |
| 85 void check(String property, ClassElement cls, | 85 void check(String property, ClassElement cls, |
| 86 Iterable<ClassElement> foundClasses, List<ClassElement> expectedClasses, | 86 Iterable<ClassElement> foundClasses, List<ClassElement> expectedClasses, |
| 87 {bool exact: true, | 87 {bool exact: true, |
| 88 void forEach(ClassElement cls, ForEachFunction f), | 88 void forEach(ClassElement cls, ForEachFunction f), |
| 89 int getCount(ClassElement cls)}) { | 89 int getCount(ClassElement cls)}) { |
| 90 checkClasses(property, cls, foundClasses, expectedClasses, exact: exact); | 90 checkClasses(property, cls, foundClasses, expectedClasses, exact: exact); |
| 91 | 91 |
| 92 if (forEach != null) { | 92 if (forEach != null) { |
| 93 List<ClassElement> visited = <ClassElement>[]; | 93 List<ClassElement> visited = <ClassElement>[]; |
| 94 forEach(cls, (ClassElement c) { | 94 forEach(cls, (ClassElement c) { |
| 95 visited.add(c); | 95 visited.add(c); |
| 96 }); | 96 }); |
| 97 checkClasses('forEach($property)', cls, visited, expectedClasses, | 97 checkClasses('forEach($property)', cls, visited, expectedClasses, |
| 98 exact: exact); | 98 exact: exact); |
| 99 } | 99 } |
| 100 | 100 |
| 101 if (getCount != null && exact) { | 101 if (getCount != null && exact) { |
| 102 int count = getCount(cls); | 102 int count = getCount(cls); |
| 103 Expect.equals( | 103 Expect.equals( |
| 104 expectedClasses.length, | 104 expectedClasses.length, |
| 105 count, | 105 count, |
| 106 "Unexpected class count in '$property' on $cls.\n" | 106 "Unexpected class count in '$property' on $cls.\n" |
| 107 "${env.compiler.closedWorld.dump(cls)}"); | 107 "${closedWorld.dump(cls)}"); |
| 108 } | 108 } |
| 109 } | 109 } |
| 110 | 110 |
| 111 void testSubclasses(ClassElement cls, List<ClassElement> expectedClasses, | 111 void testSubclasses(ClassElement cls, List<ClassElement> expectedClasses, |
| 112 {bool exact: true}) { | 112 {bool exact: true}) { |
| 113 check('subclassesOf', cls, closedWorld.subclassesOf(cls), expectedClasses, | 113 check('subclassesOf', cls, closedWorld.subclassesOf(cls), expectedClasses, |
| 114 exact: exact); | 114 exact: exact); |
| 115 } | 115 } |
| 116 | 116 |
| 117 void testStrictSubclasses( | 117 void testStrictSubclasses( |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 new D2(); | 232 new D2(); |
| 233 new E3(); | 233 new E3(); |
| 234 new F1(); | 234 new F1(); |
| 235 new F2(); | 235 new F2(); |
| 236 new G2(); | 236 new G2(); |
| 237 new G3(); | 237 new G3(); |
| 238 new H4(); | 238 new H4(); |
| 239 } | 239 } |
| 240 """, | 240 """, |
| 241 useMockCompiler: false); | 241 useMockCompiler: false); |
| 242 ClosedWorld closedWorld = env.compiler.closedWorld; | 242 ClosedWorld closedWorld = env.closedWorld; |
| 243 | 243 |
| 244 check(String name, {bool hasStrictSubtype, bool hasOnlySubclasses}) { | 244 check(String name, {bool hasStrictSubtype, bool hasOnlySubclasses}) { |
| 245 ClassElement cls = env.getElement(name); | 245 ClassElement cls = env.getElement(name); |
| 246 Expect.equals(hasStrictSubtype, closedWorld.hasAnyStrictSubtype(cls), | 246 Expect.equals(hasStrictSubtype, closedWorld.hasAnyStrictSubtype(cls), |
| 247 "Unexpected hasAnyStrictSubtype property on $cls."); | 247 "Unexpected hasAnyStrictSubtype property on $cls."); |
| 248 Expect.equals(hasOnlySubclasses, closedWorld.hasOnlySubclasses(cls), | 248 Expect.equals(hasOnlySubclasses, closedWorld.hasOnlySubclasses(cls), |
| 249 "Unexpected hasOnlySubclasses property on $cls."); | 249 "Unexpected hasOnlySubclasses property on $cls."); |
| 250 } | 250 } |
| 251 | 251 |
| 252 check("Object", hasStrictSubtype: true, hasOnlySubclasses: true); | 252 check("Object", hasStrictSubtype: true, hasOnlySubclasses: true); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 mainSource: r""" | 309 mainSource: r""" |
| 310 import 'dart:html' as html; | 310 import 'dart:html' as html; |
| 311 main() { | 311 main() { |
| 312 html.window; // Creates 'Window'. | 312 html.window; // Creates 'Window'. |
| 313 new html.Worker(''); // Creates 'Worker'. | 313 new html.Worker(''); // Creates 'Worker'. |
| 314 new html.CanvasElement() // Creates CanvasElement | 314 new html.CanvasElement() // Creates CanvasElement |
| 315 ..getContext(''); // Creates CanvasRenderingContext2D | 315 ..getContext(''); // Creates CanvasRenderingContext2D |
| 316 } | 316 } |
| 317 """, | 317 """, |
| 318 useMockCompiler: false); | 318 useMockCompiler: false); |
| 319 ClosedWorld closedWorld = env.compiler.closedWorld; | 319 ClosedWorld closedWorld = env.closedWorld; |
| 320 LibraryElement dart_html = | 320 LibraryElement dart_html = |
| 321 env.compiler.libraryLoader.lookupLibrary(Uris.dart_html); | 321 env.compiler.libraryLoader.lookupLibrary(Uris.dart_html); |
| 322 | 322 |
| 323 ClassElement clsEventTarget = dart_html.findExported('EventTarget'); | 323 ClassElement clsEventTarget = dart_html.findExported('EventTarget'); |
| 324 ClassElement clsWindow = dart_html.findExported('Window'); | 324 ClassElement clsWindow = dart_html.findExported('Window'); |
| 325 ClassElement clsAbstractWorker = dart_html.findExported('AbstractWorker'); | 325 ClassElement clsAbstractWorker = dart_html.findExported('AbstractWorker'); |
| 326 ClassElement clsWorker = dart_html.findExported('Worker'); | 326 ClassElement clsWorker = dart_html.findExported('Worker'); |
| 327 ClassElement clsCanvasElement = dart_html.findExported('CanvasElement'); | 327 ClassElement clsCanvasElement = dart_html.findExported('CanvasElement'); |
| 328 ClassElement clsCanvasRenderingContext = | 328 ClassElement clsCanvasRenderingContext = |
| 329 dart_html.findExported('CanvasRenderingContext'); | 329 dart_html.findExported('CanvasRenderingContext'); |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 isDirectlyInstantiated: false, | 503 isDirectlyInstantiated: false, |
| 504 isAbstractlyInstantiated: true, | 504 isAbstractlyInstantiated: true, |
| 505 isIndirectlyInstantiated: false, | 505 isIndirectlyInstantiated: false, |
| 506 hasStrictSubtype: false, | 506 hasStrictSubtype: false, |
| 507 hasOnlySubclasses: true, | 507 hasOnlySubclasses: true, |
| 508 lubOfInstantiatedSubclasses: clsCanvasRenderingContext2D, | 508 lubOfInstantiatedSubclasses: clsCanvasRenderingContext2D, |
| 509 lubOfInstantiatedSubtypes: clsCanvasRenderingContext2D, | 509 lubOfInstantiatedSubtypes: clsCanvasRenderingContext2D, |
| 510 instantiatedSubclassCount: 0, | 510 instantiatedSubclassCount: 0, |
| 511 instantiatedSubtypeCount: 0); | 511 instantiatedSubtypeCount: 0); |
| 512 } | 512 } |
| OLD | NEW |