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