93 lines
2.3 KiB
JavaScript
93 lines
2.3 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.
|
|
*/
|
|
|
|
// if standalone
|
|
if (window.top === window) {
|
|
// if standalone
|
|
var failed = false;
|
|
window.done = function() {
|
|
window.onerror = null;
|
|
if (!failed) {
|
|
var d = document.createElement('pre');
|
|
d.style.cssText = 'padding: 6px; background-color: lightgreen; position: absolute; bottom:0; right:10px;';
|
|
d.textContent = 'Passed';
|
|
document.body.appendChild(d);
|
|
}
|
|
};
|
|
window.onerror = function(x) {
|
|
failed = true;
|
|
var d = document.createElement('pre');
|
|
d.style.cssText = 'padding: 6px; background-color: #FFE0E0; position: absolute; bottom:0; right:10px;';
|
|
d.textContent = 'FAILED: ' + x;
|
|
document.body.appendChild(d);
|
|
};
|
|
} else
|
|
// if part of a test suite
|
|
{
|
|
window.done = function() {
|
|
window.onerror = null;
|
|
parent.postMessage('ok', '*');
|
|
};
|
|
|
|
window.onerror = function(x) {
|
|
parent.postMessage({error: x}, '*');
|
|
};
|
|
}
|
|
|
|
window.asyncSeries = function(series, callback, forwardExceptions) {
|
|
series = series.slice();
|
|
var next = function(err) {
|
|
if (err) {
|
|
if (callback) {
|
|
callback(err);
|
|
}
|
|
} else {
|
|
var f = series.shift();
|
|
if (f) {
|
|
if (!forwardExceptions) {
|
|
f(next);
|
|
} else {
|
|
try {
|
|
f(next);
|
|
} catch(e) {
|
|
if (callback) {
|
|
callback(e);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
}
|
|
}
|
|
};
|
|
next();
|
|
};
|
|
|
|
window.waitFor = function(fn, next, intervalOrMutationEl, timeout, timeoutTime) {
|
|
timeoutTime = timeoutTime || Date.now() + (timeout || 1000);
|
|
intervalOrMutationEl = intervalOrMutationEl || 32;
|
|
try {
|
|
fn();
|
|
} catch (e) {
|
|
if (Date.now() > timeoutTime) {
|
|
throw e;
|
|
} else {
|
|
if (isNaN(intervalOrMutationEl)) {
|
|
intervalOrMutationEl.onMutation(intervalOrMutationEl, function() {
|
|
waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);
|
|
});
|
|
} else {
|
|
setTimeout(function() {
|
|
waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);
|
|
}, intervalOrMutationEl);
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
next();
|
|
};
|