| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 // Test of "recursive" imports using the dart2js compiler API. | 5 // Test of "recursive" imports using the dart2js compiler API. |
| 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 'dart:async'; | 9 import 'dart:async'; |
| 10 import 'dummy_compiler_test.dart'; |
| 10 import '../../sdk/lib/_internal/compiler/compiler.dart'; | 11 import '../../sdk/lib/_internal/compiler/compiler.dart'; |
| 11 | 12 |
| 12 const CORE_LIB = """ | |
| 13 library core; | |
| 14 class Object { | |
| 15 const Object(); | |
| 16 operator==(other) {} | |
| 17 } | |
| 18 class bool {} | |
| 19 class num {} | |
| 20 class int {} | |
| 21 class double{} | |
| 22 class String{} | |
| 23 class Function{} | |
| 24 class List {} | |
| 25 class Map {} | |
| 26 class BoundClosure {} | |
| 27 class Closure {} | |
| 28 class Dynamic_ {} | |
| 29 class Type {} | |
| 30 class Null {} | |
| 31 class StackTrace {} | |
| 32 class LinkedHashMap {} | |
| 33 getRuntimeTypeInfo(o) {} | |
| 34 setRuntimeTypeInfo(o, i) {} | |
| 35 eqNull(a) {} | |
| 36 eqNullB(a) {} | |
| 37 class JSInvocationMirror {} // Should be in helper. | |
| 38 class _Proxy { const _Proxy(); } | |
| 39 const proxy = const _Proxy(); | |
| 40 """; | |
| 41 | |
| 42 const INTERCEPTORS_LIB = """ | |
| 43 library interceptors; | |
| 44 class JSIndexable { | |
| 45 get length {} | |
| 46 } | |
| 47 class JSMutableIndexable {} | |
| 48 class JSArray { | |
| 49 JSArray() {} | |
| 50 factory JSArray.typed(a) => a; | |
| 51 removeLast() => null; | |
| 52 add(x) { } | |
| 53 } | |
| 54 class JSMutableArray extends JSArray {} | |
| 55 class JSExtendableArray extends JSMutableArray {} | |
| 56 class JSFixedArray extends JSMutableArray {} | |
| 57 class JSString { | |
| 58 split(x) => null; | |
| 59 concat(x) => null; | |
| 60 toString() => null; | |
| 61 operator+(other) => null; | |
| 62 } | |
| 63 class JSNull { | |
| 64 bool operator ==(other) => identical(null, other); | |
| 65 int get hashCode => 0; | |
| 66 } | |
| 67 class JSBool { | |
| 68 } | |
| 69 """; | |
| 70 | |
| 71 const String RECURSIVE_MAIN = """ | 13 const String RECURSIVE_MAIN = """ |
| 72 library fisk; | 14 library fisk; |
| 73 import 'recurse/fisk.dart'; | 15 import 'recurse/fisk.dart'; |
| 74 main() {} | 16 main() {} |
| 75 """; | 17 """; |
| 76 | 18 |
| 77 | 19 |
| 78 main() { | 20 main() { |
| 79 int count = 0; | 21 int count = 0; |
| 80 Future<String> provider(Uri uri) { | 22 Future<String> provider(Uri uri) { |
| 81 String source; | 23 String source; |
| 82 if (uri.path.length > 100) { | 24 if (uri.path.length > 100) { |
| 83 // Simulate an OS error. | 25 // Simulate an OS error. |
| 84 throw 'Path length exceeded'; | 26 throw 'Path length exceeded'; |
| 85 } else if (uri.scheme == "main") { | 27 } else if (uri.scheme == "main") { |
| 86 count++; | 28 count++; |
| 87 source = RECURSIVE_MAIN; | 29 source = RECURSIVE_MAIN; |
| 88 } else if (uri.scheme == "lib") { | 30 } else if (uri.scheme == "lib") { |
| 89 if (uri.path.endsWith("/core.dart")) { | 31 source = libProvider(uri); |
| 90 source = CORE_LIB; | |
| 91 } else if (uri.path.endsWith('_patch.dart')) { | |
| 92 source = ''; | |
| 93 } else if (uri.path.endsWith('isolate_helper.dart')) { | |
| 94 source = 'class _WorkerStub {}'; | |
| 95 } else if (uri.path.endsWith('interceptors.dart')) { | |
| 96 source = INTERCEPTORS_LIB; | |
| 97 } else { | |
| 98 source = "library lib${uri.path.replaceAll('/', '.')};"; | |
| 99 } | |
| 100 } else { | 32 } else { |
| 101 return new Future.error("unexpected URI $uri"); | 33 return new Future.error("unexpected URI $uri"); |
| 102 } | 34 } |
| 103 return new Future.value(source); | 35 return new Future.value(source); |
| 104 } | 36 } |
| 105 | 37 |
| 106 int warningCount = 0; | 38 int warningCount = 0; |
| 107 int errorCount = 0; | 39 int errorCount = 0; |
| 108 void handler(Uri uri, int begin, int end, String message, Diagnostic kind) { | 40 void handler(Uri uri, int begin, int end, String message, Diagnostic kind) { |
| 109 if (uri != null) { | 41 if (uri != null) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 129 Expect.isNull(code); | 61 Expect.isNull(code); |
| 130 Expect.isTrue(10 < count); | 62 Expect.isTrue(10 < count); |
| 131 // Two warnings for each time RECURSIVE_MAIN is read, except the | 63 // Two warnings for each time RECURSIVE_MAIN is read, except the |
| 132 // first time. | 64 // first time. |
| 133 Expect.equals(2 * (count - 1), warningCount); | 65 Expect.equals(2 * (count - 1), warningCount); |
| 134 Expect.equals(1, errorCount); | 66 Expect.equals(1, errorCount); |
| 135 }, onError: (e) { | 67 }, onError: (e) { |
| 136 throw 'Compilation failed'; | 68 throw 'Compilation failed'; |
| 137 }).then(asyncSuccess); | 69 }).then(asyncSuccess); |
| 138 } | 70 } |
| OLD | NEW |