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

Unified Diff: pkg/polymer/lib/testing/testing.js

Issue 23224003: move polymer.dart into dart svn (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: add --deploy to todomvc sample Created 7 years, 4 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 | « pkg/polymer/lib/testing/content_shell_test.dart ('k') | pkg/polymer/pubspec.yaml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/polymer/lib/testing/testing.js
diff --git a/pkg/polymer/lib/testing/testing.js b/pkg/polymer/lib/testing/testing.js
new file mode 100644
index 0000000000000000000000000000000000000000..de27047f288bd8051ae87c3d72d8ca7ea085845f
--- /dev/null
+++ b/pkg/polymer/lib/testing/testing.js
@@ -0,0 +1,147 @@
+// Copyright (c) 2012, 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.
+
+(function() {
+ var undoReplaceScripts = [];
+
+ var flags = {};
+ // populate flags from location
+ location.search.slice(1).split('&').forEach(function(o) {
+ o = o.split('=');
+ o[0] && (flags[o[0]] = o[1] || true);
+ });
+
+ // Webkit is migrating from layoutTestController to testRunner, we use
+ // layoutTestController as a fallback until that settles in.
+ var runner = window.testRunner || window.layoutTestController;
+
+ if (runner) {
+ runner.dumpAsText();
+ runner.waitUntilDone();
+ }
+
+ function dumpDOM() {
+ // Undo any scripts that were modified.
+ undoReplaceScripts.forEach(function(undo) { undo(); });
+
+ function expandShadowRoot(node) {
+ for (var n = node.firstChild; n; n = n.nextSibling) {
+ expandShadowRoot(n);
+ }
+ var shadow = node.shadowRoot || node.webkitShadowRoot ||
+ node.olderShadowRoot;
+
+ if (shadow) {
+ expandShadowRoot(shadow);
+
+ var name = 'shadow-root';
+ if (shadow == node.olderShadowRoot) name = 'older-' + name;
+
+ var fakeShadow = document.createElement(name);
+ while (shadow.firstChild) fakeShadow.appendChild(shadow.firstChild);
+ node.insertBefore(fakeShadow, node.firstChild);
+ }
+ }
+
+ // TODO(jmesserly): use querySelector to workaround unwrapped "document".
+ expandShadowRoot(document.querySelector('body'));
+
+ // Clean up all of the junk added to the DOM by js-interop and shadow CSS
+ // TODO(jmesserly): it seems like we're leaking lots of dart-port attributes
+ // for the document elemenet
+ function cleanTree(node) {
+ for (var n = node.firstChild; n; n = n.nextSibling) {
+ cleanTree(n);
+ }
+
+ // Remove dart-port attributes
+ if (node.attributes) {
+ for (var i = 0; i < node.attributes.length; i++) {
+ if (node.attributes[i].value.indexOf('dart-port') == 0) {
+ node.removeAttribute(i);
+ }
+ }
+ }
+
+ if (node.tagName == 'script' &&
+ node.textContent.indexOf('_DART_TEMPORARY_ATTACHED') >= 0) {
+ node.parentNode.removeChild(node);
+ }
+ }
+
+ // TODO(jmesserly): use querySelector to workaround unwrapped "document".
+ cleanTree(document.querySelector('html'));
+
+ var out = document.createElement('pre');
+ out.textContent = document.documentElement.outerHTML;
+ document.body.innerHTML = '';
+ document.body.appendChild(out);
+ }
+
+ function messageHandler(e) {
+ if (e.data == 'done' && runner) {
+ // On success, dump the DOM. Convert shadowRoot contents into
+ // <shadow-root>
+ dumpDOM();
+ runner.notifyDone();
+ }
+ }
+
+ window.addEventListener('message', messageHandler, false);
+
+ function errorHandler(e) {
+ if (runner) {
+ window.setTimeout(function() { runner.notifyDone(); }, 0);
+ }
+ window.console.log('FAIL');
+ }
+
+ window.addEventListener('error', errorHandler, false);
+
+ if (navigator.webkitStartDart && !flags.js) {
+ // TODO(jmesserly): fix this so we don't need to copy from browser/dart.js
+ if (!navigator.webkitStartDart()) {
+ document.body.innerHTML = 'This build has expired. Please download a new Dartium at http://www.dartlang.org/dartium/index.html';
+ }
+ } else {
+ if (flags.shadowdomjs) {
+ // Allow flags to force polyfill of ShadowDOM so we can test it.
+ window.__forceShadowDomPolyfill = true;
+ }
+
+ // TODO:
+ // - Support in-browser compilation.
+ // - Handle inline Dart scripts.
+ window.addEventListener("DOMContentLoaded", function (e) {
+ // Fall back to compiled JS. Run through all the scripts and
+ // replace them if they have a type that indicate that they source
+ // in Dart code.
+ //
+ // <script type="application/dart" src="..."></script>
+ //
+ var scripts = document.getElementsByTagName("script");
+ var length = scripts.length;
+ for (var i = 0; i < length; ++i) {
+ var script = scripts[i];
+ if (script.type == "application/dart") {
+ // Remap foo.dart to foo.dart.js.
+ if (script.src && script.src != '') {
+ var jsScript = document.createElement('script');
+ jsScript.src = script.src.replace(/\.dart(?=\?|$)/, '.dart.js');
+ var parent = script.parentNode;
+ // TODO(vsm): Find a solution for issue 8455 that works with more
+ // than one script.
+ document.currentScript = jsScript;
+
+ undoReplaceScripts.push(function() {
+ parent.replaceChild(script, jsScript);
+ });
+ parent.replaceChild(jsScript, script);
+ }
+ }
+ }
+ }, false);
+ }
+
+})();
« no previous file with comments | « pkg/polymer/lib/testing/content_shell_test.dart ('k') | pkg/polymer/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698