summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/browser.js.map
blob: 89893182811de0acc0ba93b77e43065d38859857 (plain)
1
{"version":3,"file":"browser.js.map","sources":["browser/environment/helpers.js","browser/config.js","browser/util.js","browser/childrunner.js","browser/clisocket.js","browser/reporters/console.js","browser/reporters/html.js","browser/reporters/multi.js","browser/reporters/title.js","browser/suites.js","browser/reporters.js","browser/environment.js","browser/environment/errors.js","browser/mocha/extend.js","browser/mocha/fixture.js","browser/mocha/stub.js","browser/mocha/replace.js","browser/mocha.js","browser/index.js"],"sourcesContent":["/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n// Make sure that we use native timers, in case they're being stubbed out.\nvar nativeSetInterval = window.setInterval;\nvar nativeSetTimeout = window.setTimeout;\nvar nativeRequestAnimationFrame = window.requestAnimationFrame;\n/**\n * Runs `stepFn`, catching any error and passing it to `callback` (Node-style).\n * Otherwise, calls `callback` with no arguments on success.\n *\n * @param {function()} callback\n * @param {function()} stepFn\n */\nfunction safeStep(callback, stepFn) {\n    var err;\n    try {\n        stepFn();\n    }\n    catch (error) {\n        err = error;\n    }\n    callback(err);\n}\n/**\n * Runs your test at declaration time (before Mocha has begun tests). Handy for\n * when you need to test document initialization.\n *\n * Be aware that any errors thrown asynchronously cannot be tied to your test.\n * You may want to catch them and pass them to the done event, instead. See\n * `safeStep`.\n *\n * @param {string} name The name of the test.\n * @param {function(?function())} testFn The test function. If an argument is\n *     accepted, the test will be treated as async, just like Mocha tests.\n */\nfunction testImmediate(name, testFn) {\n    if (testFn.length > 0) {\n        return testImmediateAsync(name, testFn);\n    }\n    var err;\n    try {\n        testFn();\n    }\n    catch (error) {\n        err = error;\n    }\n    test(name, function (done) {\n        done(err);\n    });\n}\n/**\n * An async-only variant of `testImmediate`.\n *\n * @param {string} name\n * @param {function(?function())} testFn\n */\nfunction testImmediateAsync(name, testFn) {\n    var testComplete = false;\n    var err;\n    test(name, function (done) {\n        var intervalId = nativeSetInterval(function () {\n            if (!testComplete)\n                return;\n            clearInterval(intervalId);\n            done(err);\n        }, 10);\n    });\n    try {\n        testFn(function (error) {\n            if (error)\n                err = error;\n            testComplete = true;\n        });\n    }\n    catch (error) {\n        err = error;\n        testComplete = true;\n    }\n}\n/**\n * Triggers a flush of any pending events, observations, etc and calls you back\n * after they have been processed.\n *\n * @param {function()} callback\n */\nfunction flush(callback) {\n    // Ideally, this function would be a call to Polymer.dom.flush, but that\n    // doesn't support a callback yet\n    // (https://github.com/Polymer/polymer-dev/issues/851),\n    // ...and there's cross-browser flakiness to deal with.\n    // Make sure that we're invoking the callback with no arguments so that the\n    // caller can pass Mocha callbacks, etc.\n    var done = function done() {\n        callback();\n    };\n    // Because endOfMicrotask is flaky for IE, we perform microtask checkpoints\n    // ourselves (https://github.com/Polymer/polymer-dev/issues/114):\n    var isIE = navigator.appName === 'Microsoft Internet Explorer';\n    if (isIE && window.Platform && window.Platform.performMicrotaskCheckpoint) {\n        var reallyDone_1 = done;\n        done = function doneIE() {\n            Platform.performMicrotaskCheckpoint();\n            nativeSetTimeout(reallyDone_1, 0);\n        };\n    }\n    // Everyone else gets a regular flush.\n    var scope;\n    if (window.Polymer && window.Polymer.dom && window.Polymer.dom.flush) {\n        scope = window.Polymer.dom;\n    }\n    else if (window.Polymer && window.Polymer.flush) {\n        scope = window.Polymer;\n    }\n    else if (window.WebComponents && window.WebComponents.flush) {\n        scope = window.WebComponents;\n    }\n    if (scope) {\n        scope.flush();\n    }\n    // Ensure that we are creating a new _task_ to allow all active microtasks to\n    // finish (the code you're testing may be using endOfMicrotask, too).\n    nativeSetTimeout(done, 0);\n}\n/**\n * Advances a single animation frame.\n *\n * Calls `flush`, `requestAnimationFrame`, `flush`, and `callback` sequentially\n * @param {function()} callback\n */\nfunction animationFrameFlush(callback) {\n    flush(function () {\n        nativeRequestAnimationFrame(function () {\n            flush(callback);\n        });\n    });\n}\n/**\n * DEPRECATED: Use `flush`.\n * @param {function} callback\n */\nfunction asyncPlatformFlush(callback) {\n    console.warn('asyncPlatformFlush is deprecated in favor of the more terse flush()');\n    return window.flush(callback);\n}\n/**\n *\n */\nfunction waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime) {\n    timeoutTime = timeoutTime || Date.now() + (timeout || 1000);\n    intervalOrMutationEl = intervalOrMutationEl || 32;\n    try {\n        fn();\n    }\n    catch (e) {\n        if (Date.now() > timeoutTime) {\n            throw e;\n        }\n        else {\n            if (typeof intervalOrMutationEl !== 'number') {\n                intervalOrMutationEl.onMutation(intervalOrMutationEl, function () {\n                    waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);\n                });\n            }\n            else {\n                nativeSetTimeout(function () {\n                    waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);\n                }, intervalOrMutationEl);\n            }\n            return;\n        }\n    }\n    next();\n}\nwindow.safeStep = safeStep;\nwindow.testImmediate = testImmediate;\nwindow.testImmediateAsync = testImmediateAsync;\nwindow.flush = flush;\nwindow.animationFrameFlush = animationFrameFlush;\nwindow.asyncPlatformFlush = asyncPlatformFlush;\nwindow.waitFor = waitFor;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as util from './util.js';\n/**\n * The global configuration state for WCT's browser client.\n */\nexport var _config = {\n    environmentScripts: !!window.__wctUseNpm ?\n        [\n            'stacky/browser.js', 'async/lib/async.js', 'lodash/index.js',\n            'mocha/mocha.js', 'chai/chai.js', '@polymer/sinonjs/sinon.js',\n            'sinon-chai/lib/sinon-chai.js',\n            'accessibility-developer-tools/dist/js/axs_testing.js',\n            '@polymer/test-fixture/test-fixture.js'\n        ] :\n        [\n            'stacky/browser.js', 'async/lib/async.js', 'lodash/lodash.js',\n            'mocha/mocha.js', 'chai/chai.js', 'sinonjs/sinon.js',\n            'sinon-chai/lib/sinon-chai.js',\n            'accessibility-developer-tools/dist/js/axs_testing.js'\n        ],\n    environmentImports: !!window.__wctUseNpm ? [] :\n        ['test-fixture/test-fixture.html'],\n    root: null,\n    waitForFrameworks: true,\n    waitFor: null,\n    numConcurrentSuites: 1,\n    trackConsoleError: true,\n    mochaOptions: { timeout: 10 * 1000 },\n    verbose: false,\n};\n/**\n * Merges initial `options` into WCT's global configuration.\n *\n * @param {Object} options The options to merge. See `browser/config.js` for a\n *     reference.\n */\nexport function setup(options) {\n    var childRunner = ChildRunner.current();\n    if (childRunner) {\n        _deepMerge(_config, childRunner.parentScope.WCT._config);\n        // But do not force the mocha UI\n        delete _config.mochaOptions.ui;\n    }\n    if (options && typeof options === 'object') {\n        _deepMerge(_config, options);\n    }\n    if (!_config.root) {\n        // Sibling dependencies.\n        var root = util.scriptPrefix('browser.js');\n        _config.root = util.basePath(root.substr(0, root.length - 1));\n        if (!_config.root) {\n            throw new Error('Unable to detect root URL for WCT sources. Please set WCT.root before including browser.js');\n        }\n    }\n}\n/**\n * Retrieves a configuration value.\n */\nexport function get(key) {\n    return _config[key];\n}\n// Internal\nfunction _deepMerge(target, source) {\n    Object.keys(source).forEach(function (key) {\n        if (target[key] !== null && typeof target[key] === 'object' &&\n            !Array.isArray(target[key])) {\n            _deepMerge(target[key], source[key]);\n        }\n        else {\n            target[key] = source[key];\n        }\n    });\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from './config.js';\n/**\n * @param {function()} callback A function to call when the active web component\n *     frameworks have loaded.\n */\nexport function whenFrameworksReady(callback) {\n    debug('whenFrameworksReady');\n    var done = function () {\n        debug('whenFrameworksReady done');\n        callback();\n    };\n    // If webcomponents script is in the document, wait for WebComponentsReady.\n    if (window.WebComponents && !window.WebComponents.ready) {\n        debug('WebComponentsReady?');\n        window.addEventListener('WebComponentsReady', function wcReady() {\n            window.removeEventListener('WebComponentsReady', wcReady);\n            debug('WebComponentsReady');\n            done();\n        });\n    }\n    else {\n        done();\n    }\n}\n/**\n * @return {string} '<count> <kind> tests' or '<count> <kind> test'.\n */\nexport function pluralizedStat(count, kind) {\n    if (count === 1) {\n        return count + ' ' + kind + ' test';\n    }\n    else {\n        return count + ' ' + kind + ' tests';\n    }\n}\n/**\n * @param {string} path The URI of the script to load.\n * @param {function} done\n */\nexport function loadScript(path, done) {\n    var script = document.createElement('script');\n    script.src = path;\n    if (done) {\n        script.onload = done.bind(null, null);\n        script.onerror = done.bind(null, 'Failed to load script ' + script.src);\n    }\n    document.head.appendChild(script);\n}\n/**\n * @param {string} path The URI of the stylesheet to load.\n * @param {function} done\n */\nexport function loadStyle(path, done) {\n    var link = document.createElement('link');\n    link.rel = 'stylesheet';\n    link.href = path;\n    if (done) {\n        link.onload = done.bind(null, null);\n        link.onerror = done.bind(null, 'Failed to load stylesheet ' + link.href);\n    }\n    document.head.appendChild(link);\n}\n/**\n * @param {...*} var_args Logs values to the console when the `debug`\n *     configuration option is true.\n */\nexport function debug() {\n    var var_args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        var_args[_i] = arguments[_i];\n    }\n    if (!config.get('verbose')) {\n        return;\n    }\n    var args = [window.location.pathname].concat(var_args);\n    (console.debug || console.log).apply(console, args);\n}\n// URL Processing\n/**\n * @param {string} url\n * @return {{base: string, params: string}}\n */\nexport function parseUrl(url) {\n    var parts = url.match(/^(.*?)(?:\\?(.*))?$/);\n    return {\n        base: parts[1],\n        params: getParams(parts[2] || ''),\n    };\n}\n/**\n * Expands a URL that may or may not be relative to `base`.\n *\n * @param {string} url\n * @param {string} base\n * @return {string}\n */\nexport function expandUrl(url, base) {\n    if (!base)\n        return url;\n    if (url.match(/^(\\/|https?:\\/\\/)/))\n        return url;\n    if (base.substr(base.length - 1) !== '/') {\n        base = base + '/';\n    }\n    return base + url;\n}\n/**\n * @param {string=} opt_query A query string to parse.\n * @return {!Object<string, !Array<string>>} All params on the URL's query.\n */\nexport function getParams(query) {\n    query = typeof query === 'string' ? query : window.location.search;\n    if (query.substring(0, 1) === '?') {\n        query = query.substring(1);\n    }\n    // python's SimpleHTTPServer tacks a `/` on the end of query strings :(\n    if (query.slice(-1) === '/') {\n        query = query.substring(0, query.length - 1);\n    }\n    if (query === '')\n        return {};\n    var result = {};\n    query.split('&').forEach(function (part) {\n        var pair = part.split('=');\n        if (pair.length !== 2) {\n            console.warn('Invalid URL query part:', part);\n            return;\n        }\n        var key = decodeURIComponent(pair[0]);\n        var value = decodeURIComponent(pair[1]);\n        if (!result[key]) {\n            result[key] = [];\n        }\n        result[key].push(value);\n    });\n    return result;\n}\n/**\n * Merges params from `source` into `target` (mutating `target`).\n *\n * @param {!Object<string, !Array<string>>} target\n * @param {!Object<string, !Array<string>>} source\n */\nexport function mergeParams(target, source) {\n    Object.keys(source).forEach(function (key) {\n        if (!(key in target)) {\n            target[key] = [];\n        }\n        target[key] = target[key].concat(source[key]);\n    });\n}\n/**\n * @param {string} param The param to return a value for.\n * @return {?string} The first value for `param`, if found.\n */\nexport function getParam(param) {\n    var params = getParams();\n    return params[param] ? params[param][0] : null;\n}\n/**\n * @param {!Object<string, !Array<string>>} params\n * @return {string} `params` encoded as a URI query.\n */\nexport function paramsToQuery(params) {\n    var pairs = [];\n    Object.keys(params).forEach(function (key) {\n        params[key].forEach(function (value) {\n            pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n        });\n    });\n    return (pairs.length > 0) ? ('?' + pairs.join('&')) : '';\n}\nfunction getPathName(location) {\n    return typeof location === 'string' ? location : location.pathname;\n}\nexport function basePath(location) {\n    return getPathName(location).match(/^.*\\//)[0];\n}\nexport function relativeLocation(location, basePath) {\n    var path = getPathName(location);\n    if (path.indexOf(basePath) === 0) {\n        path = path.substring(basePath.length);\n    }\n    return path;\n}\nexport function cleanLocation(location) {\n    var path = getPathName(location);\n    if (path.slice(-11) === '/index.html') {\n        path = path.slice(0, path.length - 10);\n    }\n    return path;\n}\nexport function parallel(runners, maybeLimit, done) {\n    var limit;\n    if (typeof maybeLimit !== 'number') {\n        done = maybeLimit;\n        limit = 0;\n    }\n    else {\n        limit = maybeLimit;\n    }\n    if (!runners.length) {\n        return done();\n    }\n    var called = false;\n    var total = runners.length;\n    var numActive = 0;\n    var numDone = 0;\n    function runnerDone(error) {\n        if (called) {\n            return;\n        }\n        numDone = numDone + 1;\n        numActive = numActive - 1;\n        if (error || numDone >= total) {\n            called = true;\n            done(error);\n        }\n        else {\n            runOne();\n        }\n    }\n    function runOne() {\n        if (limit && numActive >= limit) {\n            return;\n        }\n        if (!runners.length) {\n            return;\n        }\n        numActive = numActive + 1;\n        runners.shift()(runnerDone);\n    }\n    runners.forEach(runOne);\n}\n/**\n * Finds the directory that a loaded script is hosted on.\n *\n * @param {string} filename\n * @return {string?}\n */\nexport function scriptPrefix(filename) {\n    var scripts = document.querySelectorAll('script[src*=\"' + filename + '\"]');\n    if (scripts.length !== 1) {\n        return null;\n    }\n    var script = scripts[0].src;\n    return script.substring(0, script.indexOf(filename));\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from './util.js';\n/**\n * A Mocha suite (or suites) run within a child iframe, but reported as if they\n * are part of the current context.\n */\nvar ChildRunner = /** @class */ (function () {\n    function ChildRunner(url, parentScope) {\n        var urlBits = util.parseUrl(url);\n        util.mergeParams(urlBits.params, util.getParams(parentScope.location.search));\n        delete urlBits.params.cli_browser_id;\n        this.url = urlBits.base + util.paramsToQuery(urlBits.params);\n        this.parentScope = parentScope;\n        this.state = 'initializing';\n    }\n    /**\n     * @return {ChildRunner} The `ChildRunner` that was registered for this\n     * window.\n     */\n    ChildRunner.current = function () {\n        return ChildRunner.get(window);\n    };\n    /**\n     * @param {!Window} target A window to find the ChildRunner of.\n     * @param {boolean} traversal Whether this is a traversal from a child window.\n     * @return {ChildRunner} The `ChildRunner` that was registered for `target`.\n     */\n    ChildRunner.get = function (target, traversal) {\n        var childRunner = ChildRunner._byUrl[target.location.href];\n        if (childRunner) {\n            return childRunner;\n        }\n        if (window.parent === window) {\n            if (traversal) {\n                console.warn('Subsuite loaded but was never registered. This most likely is due to wonky history behavior. Reloading...');\n                window.location.reload();\n            }\n            return null;\n        }\n        // Otherwise, traverse.\n        return window.parent.WCT._ChildRunner.get(target, true);\n    };\n    /**\n     * Loads and runs the subsuite.\n     *\n     * @param {function} done Node-style callback.\n     */\n    ChildRunner.prototype.run = function (done) {\n        util.debug('ChildRunner#run', this.url);\n        this.state = 'loading';\n        this.onRunComplete = done;\n        this.iframe = document.createElement('iframe');\n        this.iframe.src = this.url;\n        this.iframe.classList.add('subsuite');\n        var container = document.getElementById('subsuites');\n        if (!container) {\n            container = document.createElement('div');\n            container.id = 'subsuites';\n            document.body.appendChild(container);\n        }\n        container.appendChild(this.iframe);\n        // let the iframe expand the URL for us.\n        this.url = this.iframe.src;\n        ChildRunner._byUrl[this.url] = this;\n        this.timeoutId = setTimeout(this.loaded.bind(this, new Error('Timed out loading ' + this.url)), ChildRunner.loadTimeout);\n        this.iframe.addEventListener('error', this.loaded.bind(this, new Error('Failed to load document ' + this.url)));\n        this.iframe.contentWindow.addEventListener('DOMContentLoaded', this.loaded.bind(this, null));\n    };\n    /**\n     * Called when the sub suite's iframe has loaded (or errored during load).\n     *\n     * @param {*} error The error that occured, if any.\n     */\n    ChildRunner.prototype.loaded = function (error) {\n        util.debug('ChildRunner#loaded', this.url, error);\n        // Not all targets have WCT loaded (compatiblity mode)\n        if (this.iframe.contentWindow.WCT) {\n            this.share = this.iframe.contentWindow.WCT.share;\n        }\n        if (error) {\n            this.signalRunComplete(error);\n            this.done();\n        }\n    };\n    /**\n     * Called in mocha/run.js when all dependencies have loaded, and the child is\n     * ready to start running tests\n     *\n     * @param {*} error The error that occured, if any.\n     */\n    ChildRunner.prototype.ready = function (error) {\n        util.debug('ChildRunner#ready', this.url, error);\n        if (this.timeoutId) {\n            clearTimeout(this.timeoutId);\n        }\n        if (error) {\n            this.signalRunComplete(error);\n            this.done();\n        }\n    };\n    /**\n     * Called when the sub suite's tests are complete, so that it can clean up.\n     */\n    ChildRunner.prototype.done = function () {\n        util.debug('ChildRunner#done', this.url, arguments);\n        // make sure to clear that timeout\n        this.ready();\n        this.signalRunComplete();\n        if (!this.iframe)\n            return;\n        // Be safe and avoid potential browser crashes when logic attempts to\n        // interact with the removed iframe.\n        setTimeout(function () {\n            this.iframe.parentNode.removeChild(this.iframe);\n            this.iframe = null;\n        }.bind(this), 1);\n    };\n    ChildRunner.prototype.signalRunComplete = function (error) {\n        if (!this.onRunComplete)\n            return;\n        this.state = 'complete';\n        this.onRunComplete(error);\n        this.onRunComplete = null;\n    };\n    // ChildRunners get a pretty generous load timeout by default.\n    ChildRunner.loadTimeout = 60000;\n    // We can't maintain properties on iframe elements in Firefox/Safari/???, so\n    // we track childRunners by URL.\n    ChildRunner._byUrl = {};\n    return ChildRunner;\n}());\nexport default ChildRunner;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as util from './util.js';\nvar SOCKETIO_ENDPOINT = window.location.protocol + '//' + window.location.host;\nvar SOCKETIO_LIBRARY = SOCKETIO_ENDPOINT + '/socket.io/socket.io.js';\n/**\n * A socket for communication between the CLI and browser runners.\n *\n * @param {string} browserId An ID generated by the CLI runner.\n * @param {!io.Socket} socket The socket.io `Socket` to communicate over.\n */\nvar CLISocket = /** @class */ (function () {\n    function CLISocket(browserId, socket) {\n        this.browserId = browserId;\n        this.socket = socket;\n    }\n    /**\n     * @param {!Mocha.Runner} runner The Mocha `Runner` to observe, reporting\n     *     interesting events back to the CLI runner.\n     */\n    CLISocket.prototype.observe = function (runner) {\n        var _this = this;\n        this.emitEvent('browser-start', {\n            url: window.location.toString(),\n        });\n        // We only emit a subset of events that we care about, and follow a more\n        // general event format that is hopefully applicable to test runners beyond\n        // mocha.\n        //\n        // For all possible mocha events, see:\n        // https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36\n        runner.on('test', function (test) {\n            _this.emitEvent('test-start', { test: getTitles(test) });\n        });\n        runner.on('test end', function (test) {\n            _this.emitEvent('test-end', {\n                state: getState(test),\n                test: getTitles(test),\n                duration: test.duration,\n                error: test.err,\n            });\n        });\n        runner.on('fail', function (test, err) {\n            // fail the test run if we catch errors outside of a test function\n            if (test.type !== 'test') {\n                _this.emitEvent('browser-fail', 'Error thrown outside of test function: ' + err.stack);\n            }\n        });\n        runner.on('childRunner start', function (childRunner) {\n            _this.emitEvent('sub-suite-start', childRunner.share);\n        });\n        runner.on('childRunner end', function (childRunner) {\n            _this.emitEvent('sub-suite-end', childRunner.share);\n        });\n        runner.on('end', function () {\n            _this.emitEvent('browser-end');\n        });\n    };\n    /**\n     * @param {string} event The name of the event to fire.\n     * @param {*} data Additional data to pass with the event.\n     */\n    CLISocket.prototype.emitEvent = function (event, data) {\n        this.socket.emit('client-event', {\n            browserId: this.browserId,\n            event: event,\n            data: data,\n        });\n    };\n    /**\n     * Builds a `CLISocket` if we are within a CLI-run environment; short-circuits\n     * otherwise.\n     *\n     * @param {function(*, CLISocket)} done Node-style callback.\n     */\n    CLISocket.init = function (done) {\n        var browserId = util.getParam('cli_browser_id');\n        if (!browserId)\n            return done();\n        // Only fire up the socket for root runners.\n        if (ChildRunner.current())\n            return done();\n        util.loadScript(SOCKETIO_LIBRARY, function (error) {\n            if (error)\n                return done(error);\n            var socket = io(SOCKETIO_ENDPOINT);\n            socket.on('error', function (error) {\n                socket.off();\n                done(error);\n            });\n            socket.on('connect', function () {\n                socket.off();\n                done(null, new CLISocket(browserId, socket));\n            });\n        });\n    };\n    return CLISocket;\n}());\nexport default CLISocket;\n// Misc Utility\n/**\n * @param {!Mocha.Runnable} runnable The test or suite to extract titles from.\n * @return {!Array.<string>} The titles of the runnable and its parents.\n */\nfunction getTitles(runnable) {\n    var titles = [];\n    while (runnable && !runnable.root && runnable.title) {\n        titles.unshift(runnable.title);\n        runnable = runnable.parent;\n    }\n    return titles;\n}\n/**\n * @param {!Mocha.Runnable} runnable\n * @return {string}\n */\nfunction getState(runnable) {\n    if (runnable.state === 'passed') {\n        return 'passing';\n    }\n    else if (runnable.state === 'failed') {\n        return 'failing';\n    }\n    else if (runnable.pending) {\n        return 'pending';\n    }\n    else {\n        return 'unknown';\n    }\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\n// We capture console events when running tests; so make sure we have a\n// reference to the original one.\nvar console = window.console;\nvar FONT = ';font: normal 13px \"Roboto\", \"Helvetica Neue\", \"Helvetica\", sans-serif;';\nvar STYLES = {\n    plain: FONT,\n    suite: 'color: #5c6bc0' + FONT,\n    test: FONT,\n    passing: 'color: #259b24' + FONT,\n    pending: 'color: #e65100' + FONT,\n    failing: 'color: #c41411' + FONT,\n    stack: 'color: #c41411',\n    results: FONT + 'font-size: 16px',\n};\n// I don't think we can feature detect this one...\nvar userAgent = navigator.userAgent.toLowerCase();\nvar CAN_STYLE_LOG = userAgent.match('firefox') || userAgent.match('webkit');\nvar CAN_STYLE_GROUP = userAgent.match('webkit');\n// Track the indent for faked `console.group`\nvar logIndent = '';\nfunction log(text, style) {\n    text = text.split('\\n')\n        .map(function (l) {\n        return logIndent + l;\n    })\n        .join('\\n');\n    if (CAN_STYLE_LOG) {\n        console.log('%c' + text, STYLES[style] || STYLES.plain);\n    }\n    else {\n        console.log(text);\n    }\n}\nfunction logGroup(text, style) {\n    if (CAN_STYLE_GROUP) {\n        console.group('%c' + text, STYLES[style] || STYLES.plain);\n    }\n    else if (console.group) {\n        console.group(text);\n    }\n    else {\n        logIndent = logIndent + '  ';\n        log(text, style);\n    }\n}\nfunction logGroupEnd() {\n    if (console.groupEnd) {\n        console.groupEnd();\n    }\n    else {\n        logIndent = logIndent.substr(0, logIndent.length - 2);\n    }\n}\nfunction logException(error) {\n    log(error.stack || error.message || (error + ''), 'stack');\n}\n/**\n * A Mocha reporter that logs results out to the web `console`.\n */\nvar Console = /** @class */ (function () {\n    /**\n     * @param runner The runner that is being reported on.\n     */\n    function Console(runner) {\n        Mocha.reporters.Base.call(this, runner);\n        runner.on('suite', function (suite) {\n            if (suite.root) {\n                return;\n            }\n            logGroup(suite.title, 'suite');\n        }.bind(this));\n        runner.on('suite end', function (suite) {\n            if (suite.root) {\n                return;\n            }\n            logGroupEnd();\n        }.bind(this));\n        runner.on('test', function (test) {\n            logGroup(test.title, 'test');\n        }.bind(this));\n        runner.on('pending', function (test) {\n            logGroup(test.title, 'pending');\n        }.bind(this));\n        runner.on('fail', function (_test, error) {\n            logException(error);\n        }.bind(this));\n        runner.on('test end', function (_test) {\n            logGroupEnd();\n        }.bind(this));\n        runner.on('end', this.logSummary.bind(this));\n    }\n    /** Prints out a final summary of test results. */\n    Console.prototype.logSummary = function () {\n        logGroup('Test Results', 'results');\n        if (this.stats.failures > 0) {\n            log(util.pluralizedStat(this.stats.failures, 'failing'), 'failing');\n        }\n        if (this.stats.pending > 0) {\n            log(util.pluralizedStat(this.stats.pending, 'pending'), 'pending');\n        }\n        log(util.pluralizedStat(this.stats.passes, 'passing'));\n        if (!this.stats.failures) {\n            log('test suite passed', 'passing');\n        }\n        log('Evaluated ' + this.stats.tests + ' tests in ' +\n            this.stats.duration + 'ms.');\n        logGroupEnd();\n    };\n    return Console;\n}());\nexport default Console;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**\n * WCT-specific behavior on top of Mocha's default HTML reporter.\n *\n * @param {!Mocha.Runner} runner The runner that is being reported on.\n */\nexport default function HTML(runner) {\n    var output = document.createElement('div');\n    output.id = 'mocha';\n    document.body.appendChild(output);\n    runner.on('suite', function (_test) {\n        this.total = runner.total;\n    }.bind(this));\n    Mocha.reporters.HTML.call(this, runner);\n}\n// Woo! What a hack. This just saves us from adding a bunch of complexity around\n// style loading.\nvar style = document.createElement('style');\nstyle.textContent = \"\\n    html, body {\\n      position: relative;\\n      height: 100%;\\n      width:  100%;\\n      min-width: 900px;\\n    }\\n    #mocha, #subsuites {\\n      height: 100%;\\n      position: absolute;\\n      top: 0;\\n    }\\n    #mocha {\\n      box-sizing: border-box;\\n      margin: 0 !important;\\n      padding: 60px 20px;\\n      right: 0;\\n      left: 500px;\\n    }\\n    #subsuites {\\n      -ms-flex-direction: column;\\n      -webkit-flex-direction: column;\\n      display: -ms-flexbox;\\n      display: -webkit-flex;\\n      display: flex;\\n      flex-direction: column;\\n      left: 0;\\n      width: 500px;\\n    }\\n    #subsuites .subsuite {\\n      border: 0;\\n      width: 100%;\\n      height: 100%;\\n    }\\n    #mocha .test.pass .duration {\\n      color: #555 !important;\\n    }\\n\";\ndocument.head.appendChild(style);\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\nvar STACKY_CONFIG = {\n    indent: '  ',\n    locationStrip: [\n        /^https?:\\/\\/[^\\/]+/,\n        /\\?.*$/,\n    ],\n    filter: function (line) {\n        return !!line.location.match(/\\/web-component-tester\\/[^\\/]+(\\?.*)?$/);\n    },\n};\n// https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36-46\nvar MOCHA_EVENTS = [\n    'start', 'end', 'suite', 'suite end', 'test', 'test end', 'hook', 'hook end',\n    'pass', 'fail', 'pending', 'childRunner end'\n];\n// Until a suite has loaded, we assume this many tests in it.\nvar ESTIMATED_TESTS_PER_SUITE = 3;\n/**\n * A Mocha-like reporter that combines the output of multiple Mocha suites.\n */\nvar MultiReporter = /** @class */ (function () {\n    /**\n     * @param numSuites The number of suites that will be run, in order to\n     *     estimate the total number of tests that will be performed.\n     * @param reporters The set of reporters that\n     *     should receive the unified event stream.\n     * @param parent The parent reporter, if present.\n     */\n    function MultiReporter(numSuites, reporters, parent) {\n        var _this = this;\n        this.reporters = reporters.map(function (reporter) {\n            return new reporter(_this);\n        });\n        this.parent = parent;\n        this.basePath = parent && parent.basePath || util.basePath(window.location);\n        this.total = numSuites * ESTIMATED_TESTS_PER_SUITE;\n        // Mocha reporters assume a stream of events, so we have to be careful to\n        // only report on one runner at a time...\n        this.currentRunner = null;\n        // ...while we buffer events for any other active runners.\n        this.pendingEvents = [];\n        this.emit('start');\n    }\n    /**\n     * @param location The location this reporter represents.\n     * @return A reporter-like \"class\" for each child suite\n     *     that should be passed to `mocha.run`.\n     */\n    MultiReporter.prototype.childReporter = function (location) {\n        var name = this.suiteTitle(location);\n        // The reporter is used as a constructor, so we can't depend on `this` being\n        // properly bound.\n        var self = this;\n        return _a = /** @class */ (function () {\n                function ChildReporter(runner) {\n                    runner.name = window.name;\n                    self.bindChildRunner(runner);\n                }\n                return ChildReporter;\n            }()),\n            _a.title = window.name,\n            _a;\n        var _a;\n    };\n    /** Must be called once all runners have finished. */\n    MultiReporter.prototype.done = function () {\n        this.complete = true;\n        this.flushPendingEvents();\n        this.emit('end');\n    };\n    /**\n     * Emit a top level test that is not part of any suite managed by this\n     * reporter.\n     *\n     * Helpful for reporting on global errors, loading issues, etc.\n     *\n     * @param title The title of the test.\n     * @param error An error associated with this test. If falsy, test is\n     *     considered to be passing.\n     * @param suiteTitle Title for the suite that's wrapping the test.\n     * @param estimated If this test was included in the original\n     *     estimate of `numSuites`.\n     */\n    MultiReporter.prototype.emitOutOfBandTest = function (title, error, suiteTitle, estimated) {\n        util.debug('MultiReporter#emitOutOfBandTest(', arguments, ')');\n        var root = new Mocha.Suite(suiteTitle || '');\n        var test = new Mocha.Test(title, function () { });\n        test.parent = root;\n        test.state = error ? 'failed' : 'passed';\n        test.err = error;\n        if (!estimated) {\n            this.total = this.total + ESTIMATED_TESTS_PER_SUITE;\n        }\n        var runner = { total: 1 };\n        this.proxyEvent('start', runner);\n        this.proxyEvent('suite', runner, root);\n        this.proxyEvent('test', runner, test);\n        if (error) {\n            this.proxyEvent('fail', runner, test, error);\n        }\n        else {\n            this.proxyEvent('pass', runner, test);\n        }\n        this.proxyEvent('test end', runner, test);\n        this.proxyEvent('suite end', runner, root);\n        this.proxyEvent('end', runner);\n    };\n    /**\n     * @param {!Location|string} location\n     * @return {string}\n     */\n    MultiReporter.prototype.suiteTitle = function (location) {\n        var path = util.relativeLocation(location, this.basePath);\n        path = util.cleanLocation(path);\n        return path;\n    };\n    // Internal Interface\n    /** @param {!Mocha.runners.Base} runner The runner to listen to events for. */\n    MultiReporter.prototype.bindChildRunner = function (runner) {\n        var _this = this;\n        MOCHA_EVENTS.forEach(function (eventName) {\n            runner.on(eventName, _this.proxyEvent.bind(_this, eventName, runner));\n        });\n    };\n    /**\n     * Evaluates an event fired by `runner`, proxying it forward or buffering it.\n     *\n     * @param {string} eventName\n     * @param {!Mocha.runners.Base} runner The runner that emitted this event.\n     * @param {...*} var_args Any additional data passed as part of the event.\n     */\n    MultiReporter.prototype.proxyEvent = function (eventName, runner) {\n        var _args = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            _args[_i - 2] = arguments[_i];\n        }\n        var extraArgs = Array.prototype.slice.call(arguments, 2);\n        if (this.complete) {\n            console.warn('out of order Mocha event for ' + runner.name + ':', eventName, extraArgs);\n            return;\n        }\n        if (this.currentRunner && runner !== this.currentRunner) {\n            this.pendingEvents.push(Array.prototype.slice.call(arguments));\n            return;\n        }\n        util.debug('MultiReporter#proxyEvent(', arguments, ')');\n        // This appears to be a Mocha bug: Tests failed by passing an error to their\n        // done function don't set `err` properly.\n        //\n        // TODO(nevir): Track down.\n        if (eventName === 'fail' && !extraArgs[0].err) {\n            extraArgs[0].err = extraArgs[1];\n        }\n        if (eventName === 'start') {\n            this.onRunnerStart(runner);\n        }\n        else if (eventName === 'end') {\n            this.onRunnerEnd(runner);\n        }\n        else {\n            this.cleanEvent(eventName, runner, extraArgs);\n            this.emit.apply(this, [eventName].concat(extraArgs));\n        }\n    };\n    /**\n     * Cleans or modifies an event if needed.\n     *\n     * @param eventName\n     * @param runner The runner that emitted this event.\n     * @param extraArgs\n     */\n    MultiReporter.prototype.cleanEvent = function (eventName, _runner, extraArgs) {\n        // Suite hierarchy\n        if (extraArgs[0]) {\n            extraArgs[0] = this.showRootSuite(extraArgs[0]);\n        }\n        // Normalize errors\n        if (eventName === 'fail') {\n            extraArgs[1] = Stacky.normalize(extraArgs[1], STACKY_CONFIG);\n        }\n        if (extraArgs[0] && extraArgs[0].err) {\n            extraArgs[0].err = Stacky.normalize(extraArgs[0].err, STACKY_CONFIG);\n        }\n    };\n    /**\n     * We like to show the root suite's title, which requires a little bit of\n     * trickery in the suite hierarchy.\n     *\n     * @param {!Mocha.Runnable} node\n     */\n    MultiReporter.prototype.showRootSuite = function (node) {\n        var leaf = node = Object.create(node);\n        while (node && node.parent) {\n            var wrappedParent = Object.create(node.parent);\n            node.parent = wrappedParent;\n            node = wrappedParent;\n        }\n        node.root = false;\n        return leaf;\n    };\n    /** @param {!Mocha.runners.Base} runner */\n    MultiReporter.prototype.onRunnerStart = function (runner) {\n        util.debug('MultiReporter#onRunnerStart:', runner.name);\n        this.total = this.total - ESTIMATED_TESTS_PER_SUITE + runner.total;\n        this.currentRunner = runner;\n    };\n    /** @param {!Mocha.runners.Base} runner */\n    MultiReporter.prototype.onRunnerEnd = function (runner) {\n        util.debug('MultiReporter#onRunnerEnd:', runner.name);\n        this.currentRunner = null;\n        this.flushPendingEvents();\n    };\n    /**\n     * Flushes any buffered events and runs them through `proxyEvent`. This will\n     * loop until all buffered runners are complete, or we have run out of\n     * buffered events.\n     */\n    MultiReporter.prototype.flushPendingEvents = function () {\n        var _this = this;\n        var events = this.pendingEvents;\n        this.pendingEvents = [];\n        events.forEach(function (eventArgs) {\n            _this.proxyEvent.apply(_this, eventArgs);\n        });\n    };\n    return MultiReporter;\n}());\nexport default MultiReporter;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\nvar ARC_OFFSET = 0; // start at the right.\nvar ARC_WIDTH = 6;\n/**\n * A Mocha reporter that updates the document's title and favicon with\n * at-a-glance stats.\n *\n * @param {!Mocha.Runner} runner The runner that is being reported on.\n */\nvar Title = /** @class */ (function () {\n    function Title(runner) {\n        Mocha.reporters.Base.call(this, runner);\n        runner.on('test end', this.report.bind(this));\n    }\n    /** Reports current stats via the page title and favicon. */\n    Title.prototype.report = function () {\n        this.updateTitle();\n        this.updateFavicon();\n    };\n    /** Updates the document title with a summary of current stats. */\n    Title.prototype.updateTitle = function () {\n        if (this.stats.failures > 0) {\n            document.title = util.pluralizedStat(this.stats.failures, 'failing');\n        }\n        else {\n            document.title = util.pluralizedStat(this.stats.passes, 'passing');\n        }\n    };\n    /** Updates the document's favicon w/ a summary of current stats. */\n    Title.prototype.updateFavicon = function () {\n        var canvas = document.createElement('canvas');\n        canvas.height = canvas.width = 32;\n        var context = canvas.getContext('2d');\n        var passing = this.stats.passes;\n        var pending = this.stats.pending;\n        var failing = this.stats.failures;\n        var total = Math.max(this.runner.total, passing + pending + failing);\n        drawFaviconArc(context, total, 0, passing, '#0e9c57');\n        drawFaviconArc(context, total, passing, pending, '#f3b300');\n        drawFaviconArc(context, total, pending + passing, failing, '#ff5621');\n        this.setFavicon(canvas.toDataURL());\n    };\n    /** Sets the current favicon by URL. */\n    Title.prototype.setFavicon = function (url) {\n        var current = document.head.querySelector('link[rel=\"icon\"]');\n        if (current) {\n            document.head.removeChild(current);\n        }\n        var link = document.createElement('link');\n        link.rel = 'icon';\n        link.type = 'image/x-icon';\n        link.href = url;\n        link.setAttribute('sizes', '32x32');\n        document.head.appendChild(link);\n    };\n    return Title;\n}());\nexport default Title;\n/**\n * Draws an arc for the favicon status, relative to the total number of tests.\n */\nfunction drawFaviconArc(context, total, start, length, color) {\n    var arcStart = ARC_OFFSET + Math.PI * 2 * (start / total);\n    var arcEnd = ARC_OFFSET + Math.PI * 2 * ((start + length) / total);\n    context.beginPath();\n    context.strokeStyle = color;\n    context.lineWidth = ARC_WIDTH;\n    context.arc(16, 16, 16 - ARC_WIDTH / 2, arcStart, arcEnd);\n    context.stroke();\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as config from './config.js';\nimport * as util from './util.js';\nexport var htmlSuites = [];\nexport var jsSuites = [];\n// We process grep ourselves to avoid loading suites that will be filtered.\nvar GREP = util.getParam('grep');\n// work around mocha bug (https://github.com/mochajs/mocha/issues/2070)\nif (GREP) {\n    GREP = GREP.replace(/\\\\\\./g, '.');\n}\n/**\n * Loads suites of tests, supporting both `.js` and `.html` files.\n *\n * @param files The files to load.\n */\nexport function loadSuites(files) {\n    files.forEach(function (file) {\n        if (/\\.js(\\?.*)?$/.test(file)) {\n            jsSuites.push(file);\n        }\n        else if (/\\.html(\\?.*)?$/.test(file)) {\n            htmlSuites.push(file);\n        }\n        else {\n            throw new Error('Unknown resource type: ' + file);\n        }\n    });\n}\n/**\n * @return The child suites that should be loaded, ignoring\n *     those that would not match `GREP`.\n */\nexport function activeChildSuites() {\n    var subsuites = htmlSuites;\n    if (GREP) {\n        var cleanSubsuites = [];\n        for (var i = 0, subsuite = void 0; subsuite = subsuites[i]; i++) {\n            if (GREP.indexOf(util.cleanLocation(subsuite)) !== -1) {\n                cleanSubsuites.push(subsuite);\n            }\n        }\n        subsuites = cleanSubsuites;\n    }\n    return subsuites;\n}\n/**\n * Loads all `.js` sources requested by the current suite.\n */\nexport function loadJsSuites(_reporter, done) {\n    util.debug('loadJsSuites', jsSuites);\n    var loaders = jsSuites.map(function (file) {\n        // We only support `.js` dependencies for now.\n        return util.loadScript.bind(util, file);\n    });\n    util.parallel(loaders, done);\n}\nexport function runSuites(reporter, childSuites, done) {\n    util.debug('runSuites');\n    var suiteRunners = [\n        // Run the local tests (if any) first, not stopping on error;\n        _runMocha.bind(null, reporter),\n    ];\n    // As well as any sub suites. Again, don't stop on error.\n    childSuites.forEach(function (file) {\n        suiteRunners.push(function (next) {\n            var childRunner = new ChildRunner(file, window);\n            reporter.emit('childRunner start', childRunner);\n            childRunner.run(function (error) {\n                reporter.emit('childRunner end', childRunner);\n                if (error)\n                    reporter.emitOutOfBandTest(file, error);\n                next();\n            });\n        });\n    });\n    util.parallel(suiteRunners, config.get('numConcurrentSuites'), function (error) {\n        reporter.done();\n        done(error);\n    });\n}\n/**\n * Kicks off a mocha run, waiting for frameworks to load if necessary.\n *\n * @param {!MultiReporter} reporter Where to send Mocha's events.\n * @param {function} done A callback fired, _no error is passed_.\n */\nfunction _runMocha(reporter, done, waited) {\n    if (config.get('waitForFrameworks') && !waited) {\n        var waitFor = (config.get('waitFor') || util.whenFrameworksReady).bind(window);\n        waitFor(function () {\n            _fixCustomElements();\n            _runMocha(reporter, done, true);\n        });\n        return;\n    }\n    util.debug('_runMocha');\n    var mocha = window.mocha;\n    var Mocha = window.Mocha;\n    mocha.reporter(reporter.childReporter(window.location));\n    mocha.suite.title = reporter.suiteTitle(window.location);\n    mocha.grep(GREP);\n    // We can't use `mocha.run` because it bashes over grep, invert, and friends.\n    // See https://github.com/visionmedia/mocha/blob/master/support/tail.js#L137\n    var runner = Mocha.prototype.run.call(mocha, function (_error) {\n        if (document.getElementById('mocha')) {\n            Mocha.utils.highlightTags('code');\n        }\n        done(); // We ignore the Mocha failure count.\n    });\n    // Mocha's default `onerror` handling strips the stack (to support really old\n    // browsers). We upgrade this to get better stacks for async errors.\n    //\n    // TODO(nevir): Can we expand support to other browsers?\n    if (navigator.userAgent.match(/chrome/i)) {\n        window.onerror = null;\n        window.addEventListener('error', function (event) {\n            if (!event.error)\n                return;\n            if (event.error.ignore)\n                return;\n            runner.uncaught(event.error);\n        });\n    }\n}\n/**\n * In Chrome57 custom elements in the document might not get upgraded when\n * there is a high GC\n * https://bugs.chromium.org/p/chromium/issues/detail?id=701601 We clone and\n * replace the ones that weren't upgraded.\n */\nfunction _fixCustomElements() {\n    // Bail out if it is not Chrome 57.\n    var raw = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n    var isM57 = raw && raw[2] === '57';\n    if (!isM57)\n        return;\n    var elements = document.body.querySelectorAll('*:not(script):not(style)');\n    var constructors = {};\n    for (var i = 0; i < elements.length; i++) {\n        var el = elements[i];\n        // This child has already been cloned and replaced by its parent, skip it!\n        if (!el.isConnected)\n            continue;\n        var tag = el.localName;\n        // Not a custom element!\n        if (tag.indexOf('-') === -1)\n            continue;\n        // Memoize correct constructors.\n        constructors[tag] =\n            constructors[tag] || document.createElement(tag).constructor;\n        // This one was correctly upgraded.\n        if (el instanceof constructors[tag])\n            continue;\n        util.debug('_fixCustomElements: found non-upgraded custom element ' + el);\n        var clone = document.importNode(el, true);\n        el.parentNode.replaceChild(clone, el);\n    }\n}\n","import ConsoleReporter from './reporters/console.js';\nimport HTMLReporter from './reporters/html.js';\nimport MultiReporter from './reporters/multi.js';\nimport TitleReporter from './reporters/title.js';\nimport * as suites from './suites.js';\nexport var htmlSuites = [];\nexport var jsSuites = [];\n/**\n * @param {CLISocket} socket The CLI socket, if present.\n * @param {MultiReporter} parent The parent reporter, if present.\n * @return {!Array.<!Mocha.reporters.Base} The reporters that should be used.\n */\nexport function determineReporters(socket, parent) {\n    // Parents are greedy.\n    if (parent) {\n        return [parent.childReporter(window.location)];\n    }\n    // Otherwise, we get to run wild without any parental supervision!\n    var reporters = [TitleReporter, ConsoleReporter];\n    if (socket) {\n        reporters.push(function (runner) {\n            socket.observe(runner);\n        });\n    }\n    if (suites.htmlSuites.length > 0 || suites.jsSuites.length > 0) {\n        reporters.push(HTMLReporter);\n    }\n    return reporters;\n}\n/**\n * Yeah, hideous, but this allows us to be loaded before Mocha, which is handy.\n */\nexport function injectMocha(Mocha) {\n    _injectPrototype(ConsoleReporter, Mocha.reporters.Base.prototype);\n    _injectPrototype(HTMLReporter, Mocha.reporters.HTML.prototype);\n    // Mocha doesn't expose its `EventEmitter` shim directly, so:\n    _injectPrototype(MultiReporter, Object.getPrototypeOf(Mocha.Runner.prototype));\n}\nfunction _injectPrototype(klass, prototype) {\n    var newPrototype = Object.create(prototype);\n    // Only support\n    Object.keys(klass.prototype).forEach(function (key) {\n        newPrototype[key] = klass.prototype[key];\n    });\n    klass.prototype = newPrototype;\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from './config.js';\nimport * as reporters from './reporters.js';\nimport * as util from './util.js';\n/**\n * Loads all environment scripts ...synchronously ...after us.\n */\nexport function loadSync() {\n    util.debug('Loading environment scripts:');\n    var a11ySuiteScriptPath = 'web-component-tester/data/a11ySuite.js';\n    var scripts = config.get('environmentScripts');\n    var a11ySuiteWillBeLoaded = window.__generatedByWct || scripts.indexOf(a11ySuiteScriptPath) > -1;\n    // We can't inject a11ySuite when running the npm version because it is a\n    // module-based script that needs `<script type=module>` and compilation\n    // for browsers without module support.\n    if (!a11ySuiteWillBeLoaded && !window.__wctUseNpm) {\n        // wct is running as a bower dependency, load a11ySuite from data/\n        scripts.push(a11ySuiteScriptPath);\n    }\n    scripts.forEach(function (path) {\n        var url = util.expandUrl(path, config.get('root'));\n        util.debug('Loading environment script:', url);\n        // Synchronous load.\n        document.write('<script src=\"' + encodeURI(url) +\n            '\"></script>'); // jshint ignore:line\n    });\n    util.debug('Environment scripts loaded');\n    var imports = config.get('environmentImports');\n    imports.forEach(function (path) {\n        var url = util.expandUrl(path, config.get('root'));\n        util.debug('Loading environment import:', url);\n        // Synchronous load.\n        document.write('<link rel=\"import\" href=\"' + encodeURI(url) +\n            '\">'); // jshint ignore:line\n    });\n    util.debug('Environment imports loaded');\n}\n/**\n * We have some hard dependencies on things that should be loaded via\n * `environmentScripts`, so we assert that they're present here; and do any\n * post-facto setup.\n */\nexport function ensureDependenciesPresent() {\n    _ensureMocha();\n    _checkChai();\n}\nfunction _ensureMocha() {\n    var Mocha = window.Mocha;\n    if (!Mocha) {\n        throw new Error('WCT requires Mocha. Please ensure that it is present in WCT.environmentScripts, or that you load it before loading web-component-tester/browser.js');\n    }\n    reporters.injectMocha(Mocha);\n    // Magic loading of mocha's stylesheet\n    var mochaPrefix = util.scriptPrefix('mocha.js');\n    // only load mocha stylesheet for the test runner output\n    // Not the end of the world, if it doesn't load.\n    if (mochaPrefix && window.top === window.self) {\n        util.loadStyle(mochaPrefix + 'mocha.css');\n    }\n}\nfunction _checkChai() {\n    if (!window.chai) {\n        util.debug('Chai not present; not registering shorthands');\n        return;\n    }\n    window.assert = window.chai.assert;\n    window.expect = window.chai.expect;\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from '../config.js';\n// We may encounter errors during initialization (for example, syntax errors in\n// a test file). Hang onto those (and more) until we are ready to report them.\nexport var globalErrors = [];\n/**\n * Hook the environment to pick up on global errors.\n */\nexport function listenForErrors() {\n    window.addEventListener('error', function (event) {\n        globalErrors.push(event.error);\n    });\n    // Also, we treat `console.error` as a test failure. Unless you prefer not.\n    var origConsole = console;\n    var origError = console.error;\n    console.error = function wctShimmedError() {\n        origError.apply(origConsole, arguments);\n        if (config.get('trackConsoleError')) {\n            throw 'console.error: ' + Array.prototype.join.call(arguments, ' ');\n        }\n    };\n}\n","var interfaceExtensions = [];\n/**\n * Registers an extension that extends the global `Mocha` implementation\n * with new helper methods. These helper methods will be added to the `window`\n * when tests run for both BDD and TDD interfaces.\n */\nexport function extendInterfaces(helperName, helperFactory) {\n    interfaceExtensions.push(function () {\n        var Mocha = window.Mocha;\n        // For all Mocha interfaces (probably just TDD and BDD):\n        Object.keys(Mocha.interfaces)\n            .forEach(function (interfaceName) {\n            // This is the original callback that defines the interface (TDD or\n            // BDD):\n            var originalInterface = Mocha.interfaces[interfaceName];\n            // This is the name of the \"teardown\" or \"afterEach\" property for the\n            // current interface:\n            var teardownProperty = interfaceName === 'tdd' ? 'teardown' : 'afterEach';\n            // The original callback is monkey patched with a new one that appends\n            // to the global context however we want it to:\n            Mocha.interfaces[interfaceName] = function (suite) {\n                // Call back to the original callback so that we get the base\n                // interface:\n                originalInterface.apply(this, arguments);\n                // Register a listener so that we can further extend the base\n                // interface:\n                suite.on('pre-require', function (context, _file, _mocha) {\n                    // Capture a bound reference to the teardown function as a\n                    // convenience:\n                    var teardown = context[teardownProperty].bind(context);\n                    // Add our new helper to the testing context. The helper is\n                    // generated by a factory method that receives the context,\n                    // the teardown function and the interface name and returns\n                    // the new method to be added to that context:\n                    context[helperName] =\n                        helperFactory(context, teardown, interfaceName);\n                });\n            };\n        });\n    });\n}\n/**\n * Applies any registered interface extensions. The extensions will be applied\n * as many times as this function is called, so don't call it more than once.\n */\nexport function applyExtensions() {\n    interfaceExtensions.forEach(function (applyExtension) {\n        applyExtension();\n    });\n}\n","import { extendInterfaces } from './extend.js';\nextendInterfaces('fixture', function (context, teardown) {\n    // Return context.fixture if it is already a thing, for backwards\n    // compatibility with `test-fixture-mocha.js`:\n    return context.fixture || function fixture(fixtureId, model) {\n        // Automatically register a teardown callback that will restore the\n        // test-fixture:\n        teardown(function () {\n            document.getElementById(fixtureId).restore();\n        });\n        // Find the test-fixture with the provided ID and create it, returning\n        // the results:\n        return document.getElementById(fixtureId).create(model);\n    };\n});\n","import { extendInterfaces } from './extend.js';\n/**\n * stub\n *\n * The stub addon allows the tester to partially replace the implementation of\n * an element with some custom implementation. Usage example:\n *\n * beforeEach(function() {\n *   stub('x-foo', {\n *     attached: function() {\n *       // Custom implementation of the `attached` method of element `x-foo`..\n *     },\n *     otherMethod: function() {\n *       // More custom implementation..\n *     },\n *     getterSetterProperty: {\n *       get: function() {\n *         // Custom getter implementation..\n *       },\n *       set: function() {\n *         // Custom setter implementation..\n *       }\n *     },\n *     // etc..\n *   });\n * });\n */\nextendInterfaces('stub', function (_context, teardown) {\n    return function stub(tagName, implementation) {\n        // Find the prototype of the element being stubbed:\n        var proto = document.createElement(tagName).constructor.prototype;\n        // For all keys in the implementation to stub with..\n        var stubs = Object.keys(implementation).map(function (key) {\n            // Stub the method on the element prototype with Sinon:\n            return sinon.stub(proto, key, implementation[key]);\n        });\n        // After all tests..\n        teardown(function () {\n            stubs.forEach(function (stub) {\n                stub.restore();\n            });\n        });\n    };\n});\n","import { extendInterfaces } from './extend.js';\n// replacement map stores what should be\nvar replacements = {};\nvar replaceTeardownAttached = false;\n/**\n * replace\n *\n * The replace addon allows the tester to replace all usages of one element with\n * another element within all Polymer elements created within the time span of\n * the test. Usage example:\n *\n * beforeEach(function() {\n *   replace('x-foo').with('x-fake-foo');\n * });\n *\n * All annotations and attributes will be set on the placement element the way\n * they were set for the original element.\n */\nextendInterfaces('replace', function (_context, teardown) {\n    return function replace(oldTagName) {\n        return {\n            with: function (tagName) {\n                // Standardizes our replacements map\n                oldTagName = oldTagName.toLowerCase();\n                tagName = tagName.toLowerCase();\n                replacements[oldTagName] = tagName;\n                // If the function is already a stub, restore it to original\n                if (document.importNode.isSinonProxy) {\n                    return;\n                }\n                if (!window.Polymer.Element) {\n                    window.Polymer.Element = function () { };\n                    window.Polymer.Element.prototype._stampTemplate = function () { };\n                }\n                // Keep a reference to the original `document.importNode`\n                // implementation for later:\n                var originalImportNode = document.importNode;\n                // Use Sinon to stub `document.ImportNode`:\n                sinon.stub(document, 'importNode', function (origContent, deep) {\n                    var templateClone = document.createElement('template');\n                    var content = templateClone.content;\n                    var inertDoc = content.ownerDocument;\n                    // imports node from inertDoc which holds inert nodes.\n                    templateClone.content.appendChild(inertDoc.importNode(origContent, true));\n                    // optional arguments are not optional on IE.\n                    var nodeIterator = document.createNodeIterator(content, NodeFilter.SHOW_ELEMENT, null, true);\n                    var node;\n                    // Traverses the tree. A recently-replaced node will be put next,\n                    // so if a node is replaced, it will be checked if it needs to be\n                    // replaced again.\n                    while (node = nodeIterator.nextNode()) {\n                        var currentTagName = node.tagName.toLowerCase();\n                        if (replacements.hasOwnProperty(currentTagName)) {\n                            currentTagName = replacements[currentTagName];\n                            // find the final tag name.\n                            while (replacements[currentTagName]) {\n                                currentTagName = replacements[currentTagName];\n                            }\n                            // Create a replacement:\n                            var replacement = document.createElement(currentTagName);\n                            // For all attributes in the original node..\n                            for (var index = 0; index < node.attributes.length; ++index) {\n                                // Set that attribute on the replacement:\n                                replacement.setAttribute(node.attributes[index].name, node.attributes[index].value);\n                            }\n                            // Replace the original node with the replacement node:\n                            node.parentNode.replaceChild(replacement, node);\n                        }\n                    }\n                    return originalImportNode.call(this, content, deep);\n                });\n                if (!replaceTeardownAttached) {\n                    // After each test...\n                    teardown(function () {\n                        replaceTeardownAttached = true;\n                        // Restore the stubbed version of `document.importNode`:\n                        var documentImportNode = document.importNode;\n                        if (documentImportNode.isSinonProxy) {\n                            documentImportNode.restore();\n                        }\n                        // Empty the replacement map\n                        replacements = {};\n                    });\n                }\n            }\n        };\n    };\n});\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport './mocha/fixture.js';\nimport './mocha/stub.js';\nimport './mocha/replace.js';\nimport * as config from './config.js';\nimport { applyExtensions } from './mocha/extend.js';\n// Mocha global helpers, broken out by testing method.\n//\n// Keys are the method for a particular interface; values are their analog in\n// the opposite interface.\nvar MOCHA_EXPORTS = {\n    // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/tdd.js\n    tdd: {\n        'setup': '\"before\"',\n        'teardown': '\"after\"',\n        'suiteSetup': '\"beforeEach\"',\n        'suiteTeardown': '\"afterEach\"',\n        'suite': '\"describe\" or \"context\"',\n        'test': '\"it\" or \"specify\"',\n    },\n    // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/bdd.js\n    bdd: {\n        'before': '\"setup\"',\n        'after': '\"teardown\"',\n        'beforeEach': '\"suiteSetup\"',\n        'afterEach': '\"suiteTeardown\"',\n        'describe': '\"suite\"',\n        'context': '\"suite\"',\n        'xdescribe': '\"suite.skip\"',\n        'xcontext': '\"suite.skip\"',\n        'it': '\"test\"',\n        'xit': '\"test.skip\"',\n        'specify': '\"test\"',\n        'xspecify': '\"test.skip\"',\n    },\n};\n/**\n * Exposes all Mocha methods up front, configuring and running mocha\n * automatically when you call them.\n *\n * The assumption is that it is a one-off (sub-)suite of tests being run.\n */\nexport function stubInterfaces() {\n    var keys = Object.keys(MOCHA_EXPORTS);\n    keys.forEach(function (ui) {\n        Object.keys(MOCHA_EXPORTS[ui]).forEach(function (key) {\n            window[key] = function wrappedMochaFunction() {\n                _setupMocha(ui, key, MOCHA_EXPORTS[ui][key]);\n                if (!window[key] || window[key] === wrappedMochaFunction) {\n                    throw new Error('Expected mocha.setup to define ' + key);\n                }\n                window[key].apply(window, arguments);\n            };\n        });\n    });\n}\n// Whether we've called `mocha.setup`\nvar _mochaIsSetup = false;\n/**\n * @param {string} ui Sets up mocha to run `ui`-style tests.\n * @param {string} key The method called that triggered this.\n * @param {string} alternate The matching method in the opposite interface.\n */\nfunction _setupMocha(ui, key, alternate) {\n    var mochaOptions = config.get('mochaOptions');\n    if (mochaOptions.ui && mochaOptions.ui !== ui) {\n        var message = 'Mixing ' + mochaOptions.ui + ' and ' + ui +\n            ' Mocha styles is not supported. ' +\n            'You called \"' + key + '\". Did you mean ' + alternate + '?';\n        throw new Error(message);\n    }\n    if (_mochaIsSetup) {\n        return;\n    }\n    applyExtensions();\n    mochaOptions.ui = ui;\n    mocha.setup(mochaOptions); // Note that the reporter is configured in run.js.\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**\n * This file is the entry point into `web-component-tester`'s browser client.\n */\n// Registers a bunch of globals:\nimport './environment/helpers.js';\nimport ChildRunner from './childrunner.js';\nimport CLISocket from './clisocket.js';\nimport * as config from './config.js';\nimport * as environment from './environment.js';\nimport * as errors from './environment/errors.js';\nimport * as mocha from './mocha.js';\nimport * as reporters from './reporters.js';\nimport MultiReporter from './reporters/multi.js';\nimport * as suites from './suites.js';\nimport * as util from './util.js';\n// You can configure WCT before it has loaded by assigning your custom\n// configuration to the global `WCT`.\nconfig.setup(window.WCT);\n// Maybe some day we'll expose WCT as a module to whatever module registry you\n// are using (aka the UMD approach), or as an es6 module.\nvar WCT = window.WCT = {\n    // A generic place to hang data about the current suite. This object is\n    // reported\n    // back via the `sub-suite-start` and `sub-suite-end` events.\n    share: {},\n    // Until then, we get to rely on it to expose parent runners to their\n    // children.\n    _ChildRunner: ChildRunner,\n    _reporter: undefined,\n    _config: config._config,\n    // Public API\n    /**\n     * Loads suites of tests, supporting both `.js` and `.html` files.\n     *\n     * @param {!Array.<string>} files The files to load.\n     */\n    loadSuites: suites.loadSuites,\n};\n// Load Process\nerrors.listenForErrors();\nmocha.stubInterfaces();\nenvironment.loadSync();\n// Give any scripts on the page a chance to declare tests and muck with things.\ndocument.addEventListener('DOMContentLoaded', function () {\n    util.debug('DOMContentLoaded');\n    environment.ensureDependenciesPresent();\n    // We need the socket built prior to building its reporter.\n    CLISocket.init(function (error, socket) {\n        if (error)\n            throw error;\n        // Are we a child of another run?\n        var current = ChildRunner.current();\n        var parent = current && current.parentScope.WCT._reporter;\n        util.debug('parentReporter:', parent);\n        var childSuites = suites.activeChildSuites();\n        var reportersToUse = reporters.determineReporters(socket, parent);\n        // +1 for any local tests.\n        var reporter = new MultiReporter(childSuites.length + 1, reportersToUse, parent);\n        WCT._reporter = reporter; // For environment/compatibility.js\n        // We need the reporter so that we can report errors during load.\n        suites.loadJsSuites(reporter, function (error) {\n            // Let our parent know that we're about to start the tests.\n            if (current)\n                current.ready(error);\n            if (error)\n                throw error;\n            // Emit any errors we've encountered up til now\n            errors.globalErrors.forEach(function onError(error) {\n                reporter.emitOutOfBandTest('Test Suite Initialization', error);\n            });\n            suites.runSuites(reporter, childSuites, function (error) {\n                // Make sure to let our parent know that we're done.\n                if (current)\n                    current.done();\n                if (error)\n                    throw error;\n            });\n        });\n    });\n});\n"],"names":["util.basePath","util.scriptPrefix","config.get","util.debug","util.paramsToQuery","util.getParams","util.mergeParams","util.parseUrl","util.loadScript","util.getParam","console","util.pluralizedStat","util.cleanLocation","util.relativeLocation","htmlSuites","jsSuites","util.parallel","util.whenFrameworksReady","HTMLReporter","suites.jsSuites","suites.htmlSuites","ConsoleReporter","TitleReporter","util.expandUrl","util.loadStyle","reporters.injectMocha","config.setup","suites.loadSuites","config._config","errors.listenForErrors","mocha.stubInterfaces","environment.loadSync","suites.runSuites","errors.globalErrors","suites.loadJsSuites","reporters.determineReporters","suites.activeChildSuites","environment.ensureDependenciesPresent"],"mappings":"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"}