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

Unified Diff: lib/src/runner/browser/server.dart

Issue 1087303004: Add support for user-defined HTML files. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Code review changes Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/pub_serve.dart ('k') | pubspec.yaml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/runner/browser/server.dart
diff --git a/lib/src/runner/browser/server.dart b/lib/src/runner/browser/server.dart
index 007ebba54b306136585e3c792929106cbc86322e..fb0e55abddf6f16b6d0569b6715785ac54854bd8 100644
--- a/lib/src/runner/browser/server.dart
+++ b/lib/src/runner/browser/server.dart
@@ -151,8 +151,8 @@ class BrowserServer {
cascade = cascade
.add(_createPackagesHandler())
.add(_jsHandler.handler)
- .add(_wrapperHandler)
- .add(createStaticHandler(_root));
+ .add(createStaticHandler(_root))
+ .add(_wrapperHandler);
}
var pipeline = new shelf.Pipeline()
@@ -188,14 +188,12 @@ class BrowserServer {
/// A handler that serves wrapper files used to bootstrap tests.
shelf.Response _wrapperHandler(shelf.Request request) {
var path = p.fromUri(shelfUrl(request));
- var withoutExtensions = p.withoutExtension(p.withoutExtension(path));
- var base = p.basename(withoutExtensions);
if (path.endsWith(".browser_test.dart")) {
return new shelf.Response.ok('''
import "package:test/src/runner/browser/iframe_listener.dart";
-import "$base" as test;
+import "${p.basename(p.withoutExtension(p.withoutExtension(path)))}" as test;
void main() {
IframeListener.start(() => test.main);
@@ -203,17 +201,22 @@ void main() {
''', headers: {'Content-Type': 'application/dart'});
}
- if (path.endsWith(".browser_test.html")) {
- // TODO(nweiz): support user-authored HTML files.
+ if (path.endsWith(".html")) {
+ var test = p.withoutExtension(path) + ".dart";
+
+ // Link to the Dart wrapper on Dartium and the compiled JS version
+ // elsewhere.
+ var script = request.headers['user-agent'].contains('(Dart)')
+ ? 'type="application/dart" '
+ 'src="${HTML_ESCAPE.convert(test)}.browser_test.dart"'
+ : 'src="${HTML_ESCAPE.convert(test)}.browser_test.dart.js"';
+
return new shelf.Response.ok('''
<!DOCTYPE html>
<html>
<head>
- <title>${HTML_ESCAPE.convert(base)}.dart Test</title>
- <script type="application/dart"
- src="${HTML_ESCAPE.convert(base)}.browser_test.dart">
- </script>
- <script src="packages/browser/dart.js"></script>
+ <title>${HTML_ESCAPE.convert(test)} Test</title>
+ <script $script></script>
</head>
</html>
''', headers: {'Content-Type': 'text/html'});
@@ -232,20 +235,31 @@ void main() {
throw new ArgumentError("$browser is not a browser.");
}
+ var htmlPath = p.withoutExtension(path) + '.html';
+ if (new File(htmlPath).existsSync() &&
+ !new File(htmlPath).readAsStringSync()
+ .contains('packages/test/dart.js')) {
+ throw new LoadException(
+ path,
+ '"${htmlPath}" must contain <script src="packages/test/dart.js">'
+ '</script>.');
+ }
+
return new Future.sync(() {
if (_pubServeUrl != null) {
- var suitePrefix = p.relative(path, from: p.join(_root, 'test')) +
- '.browser_test';
- var jsUrl = _pubServeUrl.resolve('$suitePrefix.dart.js');
- return _pubServeSuite(path, jsUrl).then((_) =>
- _pubServeUrl.resolve('$suitePrefix.html'));
+ var suitePrefix = p.withoutExtension(
+ p.relative(path, from: p.join(_root, 'test')));
+ var jsUrl = _pubServeUrl.resolve(
+ '$suitePrefix.dart.browser_test.dart.js');
+ return _pubServeSuite(path, jsUrl)
+ .then((_) => _pubServeUrl.resolveUri(p.toUri('$suitePrefix.html')));
}
return new Future.sync(() => browser.isJS ? _compileSuite(path) : null)
.then((_) {
if (_closed) return null;
- return url.resolveUri(
- p.toUri(p.relative(path, from: _root) + ".browser_test.html"));
+ return url.resolveUri(p.toUri(
+ p.withoutExtension(p.relative(path, from: _root)) + ".html"));
});
}).then((suiteUrl) {
if (_closed) return null;
« no previous file with comments | « lib/pub_serve.dart ('k') | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698