// Note: this code tries to make sure that we don't fail to execute a tags we have have had at least // 1 assertion. This helps ensure that if a script tag fails to execute, // we'll report an error, even if no assertions failed. const scripts = document.getElementsByTagName('script'); for (script of scripts) { const id = script.id; if (!id) { continue; } if (!testing._executed_scripts.has(id)) { console.warn(`Failed to execute any expectations for `), testing._status = 'fail'; } } return testing._status; } // Set expectations to happen at some point in the future. Necessary for // testing callbacks which will only be executed after page.wait is called. function eventually(fn) { // capture the current state (script id, stack) so that, when we do run this // we can display more meaningful details on failure. testing._eventually.push([fn, { script_id: document.currentScript.id, stack: new Error().stack, }]); _registerErrorCallback(); } async function async(promise, cb) { const script_id = document.currentScript ? document.currentScript.id : '.\n There should be a eval error printed above this.`, ); } } function _equal(a, b) { if (a === b) { return true; } if (a === null || b === null) { return false; } if (typeof a !== 'object' || typeof b !== 'object') { return false; } if (Object.keys(a).length != Object.keys(b).length) { return false; } for (property in a) { if (b.hasOwnProperty(property) === false) { return false; } if (_equal(a[property], b[property]) === false) { return false; } } return true; } window.testing = { _status: 'empty', _eventually: [], _executed_scripts: new Set(), _captured: null, skip: skip, async: async, getStatus: getStatus, eventually: eventually, expectEqual: expectEqual, expectError: expectError, withError: withError, }; // Helper, so you can do $(sel) in a test window.$ = function(sel) { return document.querySelector(sel); } // Helper, so you can do $$(sel) in a test window.$$ = function(sel) { return document.querySelectorAll(sel); } if (!console.lp) { // make this work in the browser console.lp = console.log; } })();