// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** * Asserts the value is true. * @param {*} x The value to assert. */ function assert(x) { if (!x) throw new Error(); } /** * Asserts the values are equal. * @param {*} x The value to assert. */ function assertEquals(x, y) { if (x != y) throw new Error(x + ' != ' + y); } /** * Runs the given test. * @param {function()} test The test to run. * @param {function()} onPass The function to call if and when the * function passes. */ function runTest(test, onPass) { var shouldContinue = true; var runner = { waitForAsync: function(description) { shouldContinue = false; console.log('Waiting for ', description); }, continueTesting: function() { shouldContinue = true; window.setTimeout(function() { if (shouldContinue) onPass(); }, 0); } }; test(runner); if (shouldContinue) onPass(); } /** * Runs all tests and reports the results via the console. */ function runTests() { var tests = []; for (var i in window) { if (i.indexOf('test') == 0) tests.push(window[i]); } console.log('Running %d tests...', tests.length); var testNo = 0; function runNextTest() { if (testNo >= tests.length) { console.log('All tests passed'); return; } function onPass() { testNo++; runNextTest(); } var test = tests[testNo]; console.log('Running (%d/%d) -- %s', testNo + 1, tests.length, test.name); runTest(test, onPass); } runNextTest(); } window.addEventListener('load', function() { runTests(); });