Support dart and js scripts in HTML tests, on dartium.

BUG=
R=ricow@google.com

Review URL: https://codereview.chromium.org//705733003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41569 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
whesse@google.com 2014-11-06 17:03:24 +00:00
parent ca91f9f770
commit 562fb318a8
7 changed files with 127 additions and 26 deletions

View file

@ -27,6 +27,7 @@ custom/element_upgrade_test: Fail # Issue 17298
custom/created_callback_test: Fail # Support for created constructor.
fontface_loaded_test: Fail # Support for promises.
storage_quota_test: Fail # Support for promises.
scripts_htmltest: Fail # Issue 21514
[ $compiler == dart2js && ($runtime == safari || $runtime == safarimobilesim || $runtime == ff || $ie) ]
custom/entered_left_view_test/viewless_document: Fail # Polyfill does not handle this

View file

@ -1,6 +1,6 @@
<!DOCTYPE html>
<!--
Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
<!--
Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
for details. All rights reserved. Use of this source code is governed by a
BSD-style license that can be found in the LICENSE file.
-->
@ -14,20 +14,20 @@ END_HTML_DART_TEST
-->
<html>
<head>
<script>window.parent.dispatchEvent(new Event('detect_errors'));</script>
<title>No Linked Scripts HTML test</title>
<script>window.parent.dispatchEvent(new Event('detect_errors'));</script>
<title>No Linked Scripts HTML test</title>
</head><body>
<h1>No Linked Scripts HTML test</h1>
<script>
window.postMessage('fisk', '*');
window.postMessage('ged', '*');
window.postMessage('fisk', '*');
<h1>No Linked Scripts HTML test</h1>
<script>
window.postMessage('fisk', '*');
window.postMessage('ged', '*');
window.postMessage('fisk', '*');
function delayed() {
parent.postMessage('ko', '*');
window.postMessage('hest', '*');
}
setTimeout(delayed, 5000);
</script>
function delayed() {
parent.postMessage('ko', '*');
window.postMessage('hest', '*');
}
setTimeout(delayed, 5000);
</script>
</body>
</html>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<!--
Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
for details. All rights reserved. Use of this source code is governed by a
BSD-style license that can be found in the LICENSE file.
-->
<!--
START_HTML_DART_TEST
{
"scripts": ["scripts_test_dart.dart", "scripts_test_js.js"],
"expectedMessages": ["crab", "fish", "squid", "sea urchin"]
}
END_HTML_DART_TEST
-->
<html>
<head>
<script>window.parent.dispatchEvent(new Event('detect_errors'));</script>
<title>Scripts HTML test</title>
</head><body>
<h1>Scripts HTML test</h1>
<script src="scripts_test_dart.dart" type="application/dart"></script>
<script src="scripts_test_js.js"></script>
</body>
</html>

View file

@ -0,0 +1,16 @@
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library ScriptsTestDart;
import 'dart:html';
import 'dart:async';
main() {
window.postMessage('squid', '*');
window.postMessage('tiger', '*'); // Unexpected message OK.
new Timer(new Duration(seconds: 1), () {
window.postMessage('squid', '*'); // Duplicate message OK.
window.postMessage('sea urchin', '*');
});
}

View file

@ -0,0 +1,12 @@
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
window.postMessage('fish', '*');
function delayed() {
window.postMessage('cow', '*'); // Unexpected message OK.
parent.postMessage('weasel', '*'); // Message to parent OK.
window.postMessage('crab', '*');
}
setTimeout(delayed, 500);

View file

@ -44,4 +44,22 @@ HtmlTestInformation getInformation(String filename) {
String getContents(HtmlTestInformation info) {
String contents = new File(info.filePath.toNativePath()).readAsStringSync();
return contents.replaceFirst(htmlAnnotation, '');
}
}
String makeFailingHtmlFile(String message) {
return '''
<!DOCTYPE html>
<html>
<head>
<script>window.parent.dispatchEvent(new Event('detect_errors'));</script>
<title>Failing HTML test</title>
</head><body>
<h1>Failing HTML test</h1>
$message
<script>
throw "HTML test failed: $message";
</script>
</body>
</html>
''';
}

View file

@ -1165,21 +1165,51 @@ class StandardTestSuite extends TestSuite {
final String runtime = configuration['runtime'];
if (info is HtmlTestInformation) {
if (compiler != 'none' || runtime != 'dartium') {
// TODO(whesse): Enable compilation of scripts to dart2js, and
// rewriting of script links in html file. Currently unimplemented.
return;
final String tempDir = createOutputDirectory(info.filePath, '');
final Uri tempUri = new Uri.file('$tempDir/');
final Uri htmlFile = tempUri.resolve(filePath.filename);
new File.fromUri(htmlFile).writeAsStringSync(htmlTest.getContents(info));
void createFailingTest(String message) {
var msg = "$message: ${info.filePath}";
DebugLogger.warning(msg);
new File.fromUri(htmlFile).writeAsStringSync(
htmlTest.makeFailingHtmlFile(msg));
}
if (info.scripts.length > 0) {
// TODO(whesse): Copy scripts into output directory.
return;
Uri testUri = new Uri.file(filePath.toNativePath());
for (String scriptPath in info.scripts) {
if (!scriptPath.endsWith('.dart') && !scriptPath.endsWith('.js')) {
createFailingTest(
'HTML test scripts must be dart or javascript: $scriptPath');
break;
}
Uri uri = Uri.parse(scriptPath);
if (uri.isAbsolute) {
createFailingTest(
'HTML test scripts must have relative paths: $scriptPath');
break;
}
if (uri.pathSegments.length > 1) {
createFailingTest(
'HTML test scripts must be in test directory: $scriptPath');
break;
}
Uri script = testUri.resolveUri(uri);
if (compiler == 'none' || scriptPath.endsWith('.js')) {
Uri copiedScript = tempUri.resolveUri(uri);
new File.fromUri(copiedScript).writeAsStringSync(
new File.fromUri(script).readAsStringSync());
} else {
// TODO(21514): Compile scripts into output directory.
createFailingTest('HTML test scripts don\'t support dart2js yet');
break;
}
}
}
final String tempDir = createOutputDirectory(info.filePath, '');
final String htmlFile = '$tempDir/${filePath.filename}';
new File(htmlFile).writeAsStringSync(htmlTest.getContents(info));
String testDisplayName = '$suiteName/$testName';
var htmlPath = _createUrlPathFromFile(new Path(htmlFile));
var htmlPath = _createUrlPathFromFile(new Path(htmlFile.toFilePath()));
var fullHtmlPath = _getUriForBrowserTest(info, htmlPath,
null, null);
var commands = [CommandBuilder.instance.getBrowserHtmlTestCommand(