71 lines
1.8 KiB
JavaScript
71 lines
1.8 KiB
JavaScript
/*
|
|
* Copyright 2013 The Polymer Authors. 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 thisFile = 'lib/mocha-htmltest.js';
|
|
var base = '';
|
|
|
|
mocha.htmlbase = function(htmlbase) {
|
|
base = htmlbase;
|
|
};
|
|
|
|
(function() {
|
|
var s$ = document.querySelectorAll('script[src]');
|
|
Array.prototype.forEach.call(s$, function(s) {
|
|
var src = s.getAttribute('src');
|
|
var re = new RegExp(thisFile + '[^\\\\]*');
|
|
var match = src.match(re);
|
|
if (match) {
|
|
base = src.slice(0, -match[0].length);
|
|
}
|
|
});
|
|
})();
|
|
|
|
var next, iframe;
|
|
|
|
var listener = function(event) {
|
|
if (event.data === 'ok') {
|
|
next();
|
|
} else if (event.data && event.data.error) {
|
|
// errors cannot be cloned via postMessage according to spec, so we re-errorify them
|
|
throw new Error(event.data.error);
|
|
}
|
|
};
|
|
|
|
function htmlSetup() {
|
|
window.addEventListener("message", listener);
|
|
iframe = document.createElement('iframe');
|
|
iframe.style.cssText = 'position: absolute; left: -9000em; width:768px; height: 1024px';
|
|
document.body.appendChild(iframe);
|
|
}
|
|
|
|
function htmlTeardown() {
|
|
window.removeEventListener('message', listener);
|
|
document.body.removeChild(iframe);
|
|
}
|
|
|
|
function htmlTest(src) {
|
|
test(src, function(done) {
|
|
next = done;
|
|
var url = base + src;
|
|
var delimiter = url.indexOf('?') < 0 ? '?' : '&';
|
|
var docSearch = location.search.slice(1);
|
|
iframe.src = url + delimiter + Math.random() + '&' + docSearch;
|
|
});
|
|
};
|
|
|
|
function htmlSuite(inName, inFn) {
|
|
suite(inName, function() {
|
|
setup(htmlSetup);
|
|
teardown(htmlTeardown);
|
|
inFn();
|
|
});
|
|
};
|
|
|
|
window.htmlTest = htmlTest;
|
|
window.htmlSuite = htmlSuite;
|
|
})();
|