awips2/components/polymer-test-tools/htmltest.js
2016-04-03 22:04:09 -05:00

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();
};