| // Given an array of potentially asynchronous tests, this function will execute |
| // each in serial, ensuring that one and only one test is executing at a time. |
| // |
| // The test array should look like this: |
| // |
| // |
| // var tests = [ |
| // [ |
| // "Test description goes here.", |
| // function () { |
| // // Test code goes here. `this` is bound to the test object. |
| // } |
| // ], |
| // ... |
| // ]; |
| // |
| // The |setup| and |teardown| arguments are functions which are executed before |
| // and after each test, respectively. |
| function executeTestsSerially(testList, setup, teardown) { |
| var tests = testList.map(function (t) { |
| return { |
| test: async_test(t[0]), |
| code: t[1] |
| }; |
| }); |
| |
| var executeNextTest = function () { |
| var current = tests.shift(); |
| if (current === undefined) { |
| return; |
| } |
| |
| // Setup the test fixtures. |
| if (setup) { |
| setup(); |
| } |
| |
| // Bind a callback to tear down the test fixtures. |
| if (teardown) { |
| current.test.add_cleanup(teardown); |
| } |
| |
| // Execute the test. |
| current.test.step(current.code); |
| }; |
| |
| add_result_callback(function () { setTimeout(executeNextTest, 0) }); |
| executeNextTest(); |
| } |