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

Side by Side Diff: dart/tests/try/web/web_compiler_test_case.dart

Issue 809313006: Implement incremental tests with multiple files. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Merged with r42458. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « dart/tests/try/web/program_result.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // Helpers for writing compiler tests running in browser. 5 // Helpers for writing compiler tests running in browser.
6 library trydart.web_compiler_test_case; 6 library trydart.web_compiler_test_case;
7 7
8 import 'dart:async' show 8 import 'dart:async' show
9 EventSink, 9 EventSink,
10 Future; 10 Future;
(...skipping 10 matching lines...) Expand all
21 21
22 import 'package:compiler/compiler.dart' show 22 import 'package:compiler/compiler.dart' show
23 Diagnostic; 23 Diagnostic;
24 24
25 const String WEB_SCHEME = 'org.trydart.web'; 25 const String WEB_SCHEME = 'org.trydart.web';
26 26
27 /// A CompilerTestCase which runs in a browser. 27 /// A CompilerTestCase which runs in a browser.
28 class WebCompilerTestCase extends CompilerTestCase { 28 class WebCompilerTestCase extends CompilerTestCase {
29 final IncrementalCompiler incrementalCompiler; 29 final IncrementalCompiler incrementalCompiler;
30 30
31 WebCompilerTestCase.init(String source, Uri uri) 31 WebCompilerTestCase.init(/* Map or String */ source, Uri uri)
32 : this.incrementalCompiler = makeCompiler(source, uri), 32 : this.incrementalCompiler = makeCompiler(source, uri),
33 super.init(source, uri, null); 33 super.init(null, uri, null);
34 34
35 WebCompilerTestCase(String source, [String path]) 35 WebCompilerTestCase(/* Map or String */ source, [String path])
36 : this.init(source, customUri(path == null ? 'main.dart' : path)); 36 : this.init(source, customUri(path == null ? 'main.dart' : path));
37 37
38 Future run() { 38 Future run() {
39 return incrementalCompiler.compile(scriptUri).then((success) { 39 return incrementalCompiler.compile(scriptUri).then((success) {
40 if (!success) throw 'Compilation failed'; 40 if (!success) throw 'Compilation failed';
41 OutputProvider outputProvider = incrementalCompiler.outputProvider; 41 OutputProvider outputProvider = incrementalCompiler.outputProvider;
42 return outputProvider['.js']; 42 return outputProvider['.js'];
43 }); 43 });
44 } 44 }
45 45
46 static IncrementalCompiler makeCompiler(String source, Uri mainUri) { 46 static IncrementalCompiler makeCompiler(
47 /* Map or String */ source,
48 Uri mainUri) {
47 Uri libraryRoot = new Uri(scheme: WEB_SCHEME, path: '/sdk/'); 49 Uri libraryRoot = new Uri(scheme: WEB_SCHEME, path: '/sdk/');
48 Uri packageRoot = new Uri(scheme: WEB_SCHEME, path: '/packages/'); 50 Uri packageRoot = new Uri(scheme: WEB_SCHEME, path: '/packages/');
51
52 Map<Uri, String> sources = <Uri, String>{};
53 if (source is String) {
54 sources[mainUri] = source;
55 } else if (source is Map) {
56 source.forEach((String name, String code) {
57 sources[mainUri.resolve(name)] = code;
58 });
59 } else {
60 throw new ArgumentError("[source] should be a String or a Map");
61 }
62
49 WebInputProvider inputProvider = 63 WebInputProvider inputProvider =
50 new WebInputProvider(source, mainUri, libraryRoot, packageRoot); 64 new WebInputProvider(sources, libraryRoot, packageRoot);
51 65
52 void diagnosticHandler( 66 void diagnosticHandler(
53 Uri uri, int begin, int end, String message, Diagnostic kind) { 67 Uri uri, int begin, int end, String message, Diagnostic kind) {
54 if (uri == null) { 68 if (uri == null) {
55 print('[$kind] $message'); 69 print('[$kind] $message');
56 } else { 70 } else {
57 print('$uri@$begin+${end - begin}: [$kind] $message'); 71 print('$uri@$begin+${end - begin}: [$kind] $message');
58 } 72 }
59 } 73 }
60 74
61 return new IncrementalCompiler( 75 return new IncrementalCompiler(
62 libraryRoot: libraryRoot, 76 libraryRoot: libraryRoot,
63 packageRoot: packageRoot, 77 packageRoot: packageRoot,
64 inputProvider: inputProvider, 78 inputProvider: inputProvider,
65 diagnosticHandler: diagnosticHandler, 79 diagnosticHandler: diagnosticHandler,
66 outputProvider: new OutputProvider()); 80 outputProvider: new OutputProvider());
67 } 81 }
68 } 82 }
69 83
70 /// An input provider which provides input via [HttpRequest]. 84 /// An input provider which provides input via [HttpRequest].
71 /// Includes one in-memory compilation unit [source] which is returned when 85 /// Includes one in-memory compilation unit [source] which is returned when
72 /// [mainUri] is requested. 86 /// [mainUri] is requested.
73 class WebInputProvider { 87 class WebInputProvider {
74 final String source; 88 final Map<Uri, String> sources;
75
76 final Uri mainUri;
77 89
78 final Uri libraryRoot; 90 final Uri libraryRoot;
79 91
80 final Uri packageRoot; 92 final Uri packageRoot;
81 93
82 final Map<Uri, Future> cachedSources = new Map<Uri, Future>(); 94 final Map<Uri, Future> cachedSources = new Map<Uri, Future>();
83 95
84 static final Map<String, Future> cachedRequests = new Map<String, Future>(); 96 static final Map<String, Future> cachedRequests = new Map<String, Future>();
85 97
86 WebInputProvider( 98 WebInputProvider(this.sources, this.libraryRoot, this.packageRoot);
87 this.source, this.mainUri, this.libraryRoot, this.packageRoot);
88 99
89 Future call(Uri uri) { 100 Future call(Uri uri) {
90 return cachedSources.putIfAbsent(uri, () { 101 return cachedSources.putIfAbsent(uri, () {
91 if (uri == mainUri) return new Future.value(source); 102 if (sources.containsKey(uri)) return new Future.value(sources[uri]);
92 if (uri.scheme == WEB_SCHEME) { 103 if (uri.scheme == WEB_SCHEME) {
93 return cachedHttpRequest('/root_dart${uri.path}'); 104 return cachedHttpRequest('/root_dart${uri.path}');
94 } else { 105 } else {
95 return cachedHttpRequest('$uri'); 106 return cachedHttpRequest('$uri');
96 } 107 }
97 }); 108 });
98 } 109 }
99 110
100 static Future cachedHttpRequest(String uri) { 111 static Future cachedHttpRequest(String uri) {
101 return cachedRequests.putIfAbsent(uri, () => HttpRequest.getString(uri)); 112 return cachedRequests.putIfAbsent(uri, () => HttpRequest.getString(uri));
(...skipping 30 matching lines...) Expand all
132 throw 'addError($errorEvent, $stackTrace)'; 143 throw 'addError($errorEvent, $stackTrace)';
133 } 144 }
134 145
135 void close() { 146 void close() {
136 if (data != null) { 147 if (data != null) {
137 onClose(data.join()); 148 onClose(data.join());
138 data = null; 149 data = null;
139 } 150 }
140 } 151 }
141 } 152 }
OLDNEW
« no previous file with comments | « dart/tests/try/web/program_result.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698