var jsan = new JSAN('../lib'); jsan.use('Test.More'); jsan.use('Test.Harness'); plan({tests: 159 }); // Create a harness object. var harness; ok(harness = new Test.Harness(), "Create new harness"); if (typeof navigator != "undefined" && /Safari/.test(navigator.userAgent)) { skip("http://bugs.webkit.org/show_bug.cgi?id=3537", 1); } else { isaOK(harness, 'Test.Harness'); } // Test default attributes. is(harness.bonus, 0, "Check bonus attribute"); is(harness.ran, 0, "Check ran attribute"); is(harness.ok, 0, "Check ok attribute"); is(harness.subSkipped, 0, "Check subSkipped attribute"); is(harness.todo, 0, "Check todo attribute"); is(harness.files, 0, "Check files attribute"); is(harness.good, 0, "Check good attribute"); is(harness.bad, 0, "Check bad attribute"); is(harness.tests, 0, "Check tests attribute"); is(harness.skipped, 0, "Check skipped attribute"); isDeeply(harness.failures, [], "Check failures attribute"); // Test fail list formatting. is(harness._failList([1, 2, 3, 4, 7, 9, 10, 11]), '1-4 7 9-11', "Test _failList() with continuous series"); is(harness._failList([1, 3, 7, 9, 11]), '1 3 7 9 11', "Test _failList() with distinct numbers"); // Test file list formatting. var files = ['foo.html', 'barbar.html']; isDeeply(harness.outFileNames(files), ['foo.html......', 'barbar.html...'], "File names should be formatted properly for output"); // Test runTests() class method. var runner = Test.Harness.prototype.runTests; Test.Harness.prototype.runTests = function () { isDeeply(arguments, files, "Harness.runTests() should pass arguments to the instance method"); }; Test.Harness.runTests(files[0], files[1]); Test.Harness.prototype.runTests = runner; // Test outputResults(). var pass = [], fail = []; var out = { pass: function (msg) { pass.push(msg); }, fail: function (msg) { fail.push(msg); } }; // Start with two passing tests. var mockTest = { TestResults: [ new Test.Builder.TestResult({ ok: true, actualOK: true, desc: 'Test 1', type: '', reason: '' }), new Test.Builder.TestResult({ ok: true, actualOK: true, desc: 'Test 2', type: '', reason: '' }) ], expectedTests: function () { return this.TestResults.length } }; harness.outputResults(mockTest, "foo.html", out, false); is(pass.splice(0, pass.length).join(''), "ok" + Test.Harness.LF, "We should have success"); is(harness.tests, 1, "We should have one test file"); is(harness.ran, 2, "Two tests should have been run"); is(harness.files, 1, "One file should have run"); is(harness.ok, 2, "We should have two oks"); is(harness.todo, 0, "We should have no todos"); is(harness.bonus, 0, "We should have no unexpected passes"); is(harness.good, 1, "We should have one good test file"); is(harness.skipped, 0, "We should have no skipped test files"); is(harness.bad, 0, "We should have no bad test files"); is(harness.subSkipped, 0, "We should have no skipped tests"); ok(harness._allOK(), "All tests should be OK"); is(harness._bonusmsg(), '', "There should be no bonus message"); harness.outputSummary(out.pass, 215678); is(pass.splice(0, pass.length).join(''), "All tests successful." + Test.Harness.LF + "Files=1, Tests=2, 215.678 seconds" + Test.Harness.LF, "We should have all tests successful"); // Add a ToDo test. mockTest.TestResults[2] = new Test.Builder.TestResult({ ok: true, actualOK: false, desc: 'Test 3', type: 'todo', reason: 'Gotta get to it' }); harness.outputResults(mockTest, "bar.html", out, false); is(pass.splice(0, pass.length).join(''), "ok" + Test.Harness.LF, "We should have success"); is(harness.tests, 2, "We should have two test files"); is(harness.ran, 5, "Five tests should have been run"); is(harness.files, 2, "Two files should have run"); is(harness.ok, 5, "We should have four oks"); is(harness.todo, 1, "We should have one todo"); is(harness.bonus, 0, "We should have no unexpected passes"); is(harness.good, 2, "We should have two good test files"); is(harness.skipped, 0, "We should have no skipped test files"); is(harness.bad, 0, "We should have no bad test files"); is(harness.subSkipped, 0, "We should have no skipped tests"); ok(harness._allOK(), "All tests should be OK"); is(harness._bonusmsg(), '', "There should be no bonus message"); harness.outputSummary(out.pass, 215678); is(pass.splice(0, pass.length).join(''), "All tests successful." + Test.Harness.LF + "Files=2, Tests=5, 215.678 seconds" + Test.Harness.LF, "We should have all tests successful"); // Change it to a passing ToDo test. mockTest.TestResults[2].setActualOK(true); harness.outputResults(mockTest, "bat.html", out, false); is(pass.splice(0, pass.length).join(''), "ok" + Test.Harness.LF, "We should have success"); is(harness.tests, 3, "We should have three test files"); is(harness.ran, 8, "Eight tests should have been run"); is(harness.files, 3, "Three files should have run"); is(harness.ok, 8, "We should have eight oks"); is(harness.todo, 2, "We should have two todos"); is(harness.bonus, 1, "We should have one unexpected pass"); is(harness.good, 3, "We should have three good test files"); is(harness.skipped, 0, "We should have no skipped test files"); is(harness.bad, 0, "We should have no bad test files"); is(harness.subSkipped, 0, "We should have no skipped tests"); ok(harness._allOK(), "All tests should be OK"); is(harness._bonusmsg(), ' (1 subtest UNEXPECTEDLY SUCCEEDED)', "We should have a bonus message"); harness.outputSummary(out.pass, 215678); is(pass.splice(0, pass.length).join(''), "All tests successful (1 subtest UNEXPECTEDLY SUCCEEDED)." + Test.Harness.LF + "Files=3, Tests=8, 215.678 seconds" + Test.Harness.LF, "We should have all tests successful with bonus"); // Change it to a failing ToDo test. mockTest.TestResults[2].setActualOK(false); mockTest.TestResults[2].setOK(false); harness.outputResults(mockTest, "gah.html", out, false); is(pass.splice(0, pass.length).join(''), "ok" + Test.Harness.LF, "We should have success"); is(harness.tests, 4, "We should have four test files"); is(harness.ran, 11, "11 tests should have been run"); is(harness.files, 4, "Four files should have run"); is(harness.ok, 10, "We should have 10 oks"); is(harness.todo, 3, "We should have three todos"); is(harness.bonus, 1, "We should have one unexpected pass"); is(harness.good, 4, "We should have four good test files"); is(harness.skipped, 0, "We should have no skipped test files"); is(harness.bad, 0, "We should have no bad test files"); is(harness.subSkipped, 0, "We should have no skipped tests"); ok(harness._allOK(), "All tests should be OK"); is(harness._bonusmsg(), ' (1 subtest UNEXPECTEDLY SUCCEEDED)', "We should still have a bonus message"); harness.outputSummary(out.pass, 215678); is(pass.splice(0, pass.length).join(''), "All tests successful (1 subtest UNEXPECTEDLY SUCCEEDED)." + Test.Harness.LF + "Files=4, Tests=11, 215.678 seconds" + Test.Harness.LF, "We should have all tests successful with bonus"); // Change it to a failing test. mockTest.TestResults[2].setType(''); harness.outputResults(mockTest, "gar.html", out, false); is(fail.splice(0, fail.length).join(''), "NOK # Failed test 3 in gar.html" + Test.Harness.LF, "We should have failure"); is(harness.tests, 5, "We should have five test files"); is(harness.ran, 14, "14 tests should have been run"); is(harness.files, 5, "Four files should have run"); is(harness.ok, 12, "We should have 12 oks"); is(harness.todo, 3, "We should have three todos"); is(harness.bonus, 1, "We should have one unexpected pass"); is(harness.good, 4, "We should have four good test files"); is(harness.skipped, 0, "We should have no skipped test files"); is(harness.bad, 1, "We should have one bad test files"); is(harness.subSkipped, 0, "We should have no skipped tests"); ok(!harness._allOK(), "All tests should not be OK"); is(harness._bonusmsg(), ' (1 subtest UNEXPECTEDLY SUCCEEDED)', "We should still have a bonus message"); harness.outputSummary(out.pass, 215678); is(pass.splice(0, pass.length).join(''), "(1 subtest UNEXPECTEDLY SUCCEEDED)." + Test.Harness.LF + "Failed 1/5 test scripts, 80.00% okay. 2/14 subtests failed, 85.71% okay." + Test.Harness.LF + "Files=5, Tests=14, 215.678 seconds" + Test.Harness.LF, "We should a failure with a bonus"); // Add a second failure. mockTest.TestResults.push( new Test.Builder.TestResult({ ok: false, actualOK: false, desc: 'Test 4', type: '', reason: '' }) ); harness.outputResults(mockTest, "bwah.html", out, false); is(fail.splice(0, fail.length).join(''), "NOK # Failed tests 3-4 in bwah.html" + Test.Harness.LF, "We should have two failures"); is(harness.tests, 6, "We should have six test files"); is(harness.ran, 18, "18 tests should have been run"); is(harness.files, 6, "Six files should have run"); is(harness.ok, 14, "We should have 14 oks"); is(harness.todo, 3, "We should have three todos"); is(harness.bonus, 1, "We should have one unexpected pass"); is(harness.good, 4, "We should have four good test files"); is(harness.skipped, 0, "We should have no skipped test files"); is(harness.bad, 2, "We should have two bad test files"); is(harness.subSkipped, 0, "We should have no skipped tests"); ok(!harness._allOK(), "All tests should not be OK"); is(harness._bonusmsg(), ' (1 subtest UNEXPECTEDLY SUCCEEDED)', "We should still have a bonus message"); harness.outputSummary(out.pass, 215678); is(pass.splice(0, pass.length).join(''), "(1 subtest UNEXPECTEDLY SUCCEEDED)." + Test.Harness.LF + "Failed 2/6 test scripts, 66.67% okay. 4/18 subtests failed, 77.78% okay." + Test.Harness.LF + "Files=6, Tests=18, 215.678 seconds" + Test.Harness.LF, "We should two failures with a bonus"); // Now try skipping all. mockTest.TestResults = []; mockTest.SkipAll = true; mockTest.Buffer = ["1..0 # Skip This is bogus" ]; harness.outputResults(mockTest, "feh.html", out, false); is(pass.splice(0, pass.length).join(''), "all skipped: This is bogus", "Skip one"); is(harness.tests, 7, "We should have seven test files"); is(harness.ran, 18, "18 tests should have been run"); is(harness.files, 6, "Six files should have run"); is(harness.ok, 14, "We should have 14 oks"); is(harness.todo, 3, "We should have three todos"); is(harness.bonus, 1, "We should have one unexpected pass"); is(harness.good, 5, "We should have four good test files"); is(harness.skipped, 1, "We should have one skipped test file"); is(harness.bad, 2, "We should have two bad test files"); is(harness.subSkipped, 0, "We should have no skipped tests"); ok(!harness._allOK(), "All tests should not be OK"); is(harness._bonusmsg(), ' (1 subtest UNEXPECTEDLY SUCCEEDED), 1 test skipped', "We should have a new bonus message"); harness.outputSummary(out.pass, 215678); is(pass.splice(0, pass.length).join(''), "(1 subtest UNEXPECTEDLY SUCCEEDED), 1 test skipped." + Test.Harness.LF + "Failed 2/7 test scripts, 71.43% okay. 4/18 subtests failed, 77.78% okay." + Test.Harness.LF + "Files=7, Tests=18, 215.678 seconds" + Test.Harness.LF, "We should still have two failures with a bonus"); // Now try no results and no SkipAll. mockTest.SkipAll = false; harness.outputResults(mockTest, "meh.html", out, false); is(fail.splice(0, fail.length).join(''), "FAILED before any test output arrived" + Test.Harness.LF, "No tests run!"); is(harness.tests, 8, "We should have seven test files"); is(harness.ran, 18, "18 tests should have been run"); is(harness.files, 7, "Six files should have run"); is(harness.ok, 14, "We should have 14 oks"); is(harness.todo, 3, "We should have three todos"); is(harness.bonus, 1, "We should have one unexpected pass"); is(harness.good, 5, "We should have four good test files"); is(harness.skipped, 1, "We should have one skipped test file"); is(harness.bad, 3, "We should have three bad test files"); is(harness.subSkipped, 0, "We should have no skipped tests"); ok(!harness._allOK(), "All tests should not be OK"); is(harness._bonusmsg(), ' (1 subtest UNEXPECTEDLY SUCCEEDED), 1 test skipped', "We should still have the new bonus message"); harness.outputSummary(out.pass, 215678); is(pass.splice(0, pass.length).join(''), "(1 subtest UNEXPECTEDLY SUCCEEDED), 1 test skipped." + Test.Harness.LF + "Failed 3/8 test scripts, 62.50% okay. 4/18 subtests failed, 77.78% okay." + Test.Harness.LF + "Files=8, Tests=18, 215.678 seconds" + Test.Harness.LF, "We should now have three failures with a bonus"); // Now add a skipped test. mockTest.TestResults.push( new Test.Builder.TestResult({ ok: true, actualOK: true, desc: 'Test 1', type: '', reason: '' }), new Test.Builder.TestResult({ ok: true, actualOK: true, desc: 'Test 2', type: 'skip', reason: 'Because I said so' }) ); harness.outputResults(mockTest, "skip.html", out, false); is(pass.splice(0, pass.length).join(''), "ok" + Test.Harness.LF, "We should have success"); is(harness.tests, 9, "We should have nine test files"); is(harness.ran, 20, "19 tests should have been run"); is(harness.files, 8, "Eight files should have run"); is(harness.ok, 16, "We should have 16 oks"); is(harness.todo, 3, "We should have three todos"); is(harness.bonus, 1, "We should have one unexpected pass"); is(harness.good, 6, "We should have six good test files"); is(harness.skipped, 1, "We should have one skipped test file"); is(harness.bad, 3, "We should have three bad test files"); is(harness.subSkipped, 1, "We should have one skipped test"); ok(!harness._allOK(), "All tests should not be OK"); is(harness._bonusmsg(), ' (1 subtest UNEXPECTEDLY SUCCEEDED), 1 test and 1 subtest skipped', "The bonus message should have the subtest"); harness.outputSummary(out.pass, 215678); is(pass.splice(0, pass.length).join(''), "(1 subtest UNEXPECTEDLY SUCCEEDED), 1 test and 1 subtest skipped." + Test.Harness.LF + "Failed 3/9 test scripts, 66.67% okay. 4/20 subtests failed, 80.00% okay." + Test.Harness.LF + "Files=9, Tests=20, 215.678 seconds" + Test.Harness.LF, "We should now have three failures with a double bonus"); // Now try with no files. ok(harness = new Test.Harness(), "Create new harness"); harness.outputSummary(out.pass, 2156); is(pass.splice(0, pass.length).join(''), "FAILED -- no tests were run for some reason." + Test.Harness.LF + "Files=0, Tests=0, 2.156 seconds" + Test.Harness.LF, "We should have a no files error message"); // Now try with no results. mockTest = { TestResults: [], expectedTests: function () { return 0 } }; harness.outputResults(mockTest, "cak.html", out, false); is(fail.splice(0, fail.length).join(''), "FAILED before any test output arrived" + Test.Harness.LF, "We should have failure"); is(harness.tests, 1, "We should have one test file"); is(harness.ran, 0, "No tests should have been run"); is(harness.files, 1, "One file should have run"); is(harness.ok, 0, "We should have no oks"); is(harness.todo, 0, "We should have no todos"); is(harness.bonus, 0, "We should have no unexpected passes"); is(harness.good, 0, "We should have no good test files"); is(harness.skipped, 0, "We should have no skipped test files"); is(harness.bad, 1, "We should have one bad test file"); is(harness.subSkipped, 0, "We should have no skipped tests"); ok(!harness._allOK(), "All tests should not be OK"); is(harness._bonusmsg(), '', "There should be no bonus message"); harness.outputSummary(out.pass, 215678); is(pass.splice(0, pass.length).join(''), "FAILED -- 1 test file could be run: alas, no output ever seen." + Test.Harness.LF + "Files=1, Tests=0, 215.678 seconds" + Test.Harness.LF, "We should have a no tests error message");