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