| <!doctype html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/protocol-test.js"></script> |
| <script> |
| function test() |
| { |
| ProtocolTest.suppressStackTraces = true; |
| |
| try { |
| let result = new SyncTestSuite(this); |
| ProtocolTest.log("FAIL: instantiating SyncTestSuite requires name argument."); |
| } catch (e) { |
| ProtocolTest.log("PASS: instantiating SyncTestSuite requires name argument."); |
| } |
| |
| try { |
| let result = new SyncTestSuite(this, {}); |
| ProtocolTest.log("FAIL: instantiating SyncTestSuite requires string name argument."); |
| } catch (e) { |
| ProtocolTest.log("PASS: instantiating SyncTestSuite requires string name argument."); |
| } |
| |
| try { |
| let result = new SyncTestSuite(this, " "); |
| ProtocolTest.log("FAIL: instantiating SyncTestSuite requires non-whitespace name argument."); |
| } catch (e) { |
| ProtocolTest.log("PASS: instantiating SyncTestSuite requires non-whitespace name argument."); |
| } |
| |
| try { |
| let result = new SyncTestSuite("something", {}); |
| ProtocolTest.log("FAIL: instantiating SyncTestSuite requires test harness argument."); |
| } catch (e) { |
| ProtocolTest.log("PASS: instantiating SyncTestSuite requires test harness argument."); |
| } |
| |
| let badArgsSuite = ProtocolTest.createSyncSuite("dummy"); |
| try { |
| badArgsSuite.addTestCase(); |
| ProtocolTest.log("FAIL: should not be able to add empty test case."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to add empty test case."); |
| } |
| try { |
| badArgsSuite.addTestCase("string"); |
| ProtocolTest.log("FAIL: should not be able to add non-object test case."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to add non-object test case."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: {}, |
| test: () => true, |
| }); |
| ProtocolTest.log("FAIL: test case should require string name."); |
| } catch (e) { |
| ProtocolTest.log("PASS: test case should require string name."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: " ", |
| test() {}, |
| }); |
| ProtocolTest.log("FAIL: test case should require non-whitespace name."); |
| } catch (e) { |
| ProtocolTest.log("PASS: test case should require non-whitespace name."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test: null, |
| }); |
| ProtocolTest.log("FAIL: test case should require test function."); |
| } catch (e) { |
| ProtocolTest.log("PASS: test case should require test function."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() {}, |
| setup: "astd" |
| }); |
| ProtocolTest.log("FAIL: should not be able to specify non-Function `setup` parameter."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to specify non-Function `setup` parameter."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() {}, |
| setup: 123 |
| }); |
| ProtocolTest.log("FAIL: should not be able to specify non-Function `setup` parameter."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to specify non-Function `setup` parameter."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() {}, |
| setup: Promise.resolve() |
| }); |
| ProtocolTest.log("FAIL: should not be able to specify non-Function `setup` parameter."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to specify non-Function `setup` parameter."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() {}, |
| teardown: "astd" |
| }); |
| ProtocolTest.log("FAIL: should not be able to specify non-Function `teardown` parameter."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to specify non-Function `teardown` parameter."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() {}, |
| teardown: 123 |
| }); |
| ProtocolTest.log("FAIL: should not be able to specify non-Function `teardown` parameter."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to specify non-Function `teardown` parameter."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() {}, |
| teardown: Promise.resolve() |
| }); |
| ProtocolTest.log("FAIL: should not be able to specify non-Function `teardown` parameter."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to specify non-Function `teardown` parameter."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| async test() {}, |
| }); |
| ProtocolTest.log("FAIL: should not be able to specify async `test` parameter."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to specify async `test` parameter."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| async setup() {}, |
| test() {}, |
| }); |
| ProtocolTest.log("FAIL: should not be able to specify async `setup` parameter."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to specify async `setup` parameter."); |
| } |
| try { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() {}, |
| async teardown() {}, |
| }); |
| ProtocolTest.log("FAIL: should not be able to specify async `teardown` parameter."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to specify async `teardown` parameter."); |
| } |
| |
| let runEmptySuite = ProtocolTest.createSyncSuite("SyncTestSuite.RunEmptySuite"); |
| try { |
| runEmptySuite.runTestCases(); |
| ProtocolTest.log("FAIL: should not be able to run empty test suite."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to run empty test suite."); |
| } |
| |
| let runTwiceSuite = ProtocolTest.createSyncSuite("SyncTestSuite.RunTwiceSuite"); |
| runTwiceSuite.addTestCase({ |
| name: "DummyTest0", |
| description: "Check that a suite can't run more than once.", |
| test: () => true, |
| }); |
| |
| try { |
| let result = runTwiceSuite.runTestCases(); |
| ProtocolTest.expectThat(result === true, "Return value of runTwiceSuite.runTestCases() should be true when all tests pass."); |
| |
| runTwiceSuite.runTestCases(); // Try to trigger an error. |
| ProtocolTest.log("FAIL: should not be able to run a test suite twice."); |
| } catch (e) { |
| ProtocolTest.log("PASS: should not be able to run a test suite twice."); |
| } |
| |
| let thrownError = new Error({"token": 666}); |
| |
| let sequentialExecutionSuite = ProtocolTest.createSyncSuite("SyncTestSuite.SequentialExecution"); |
| sequentialExecutionSuite.addTestCase({ |
| name: "DummyTest1", |
| description: "Check test case execution order.", |
| test: () => true |
| }); |
| sequentialExecutionSuite.addTestCase({ |
| name: "DummyTest2", |
| description: "Check test case execution order.", |
| test: () => true |
| }); |
| sequentialExecutionSuite.addTestCase({ |
| name: "DummyTest3", |
| description: "Check test case execution order.", |
| test: () => true |
| }); |
| sequentialExecutionSuite.addTestCase({ |
| name: "FailingTest4", |
| description: "Check that test fails by throwing an Error instance.", |
| test() { throw thrownError; } |
| }); |
| |
| let result = sequentialExecutionSuite.runTestCases(); |
| ProtocolTest.expectThat(result === false, "Return value of sequentialExecutionSuite.runTestCases() should be false when a test case fails."); |
| ProtocolTest.expectThat(sequentialExecutionSuite.runCount === 4, "sequentialExecutionSuite should have executed four tests."); |
| ProtocolTest.expectThat(sequentialExecutionSuite.passCount === 3, "sequentialExecutionSuite should have passed three tests."); |
| ProtocolTest.expectThat(sequentialExecutionSuite.failCount === 1, "sequentialExecutionSuite should have failed 1 test."); |
| ProtocolTest.expectThat(sequentialExecutionSuite.skipCount === 0, "sequentialExecutionSuite should have skipped zero tests."); |
| |
| let abortOnFailureSuite = ProtocolTest.createSyncSuite("SyncTestSuite.AbortOnFailure"); |
| abortOnFailureSuite.addTestCase({ |
| name: "PassingTest5", |
| description: "This test is a dummy.", |
| test: () => true |
| }); |
| abortOnFailureSuite.addTestCase({ |
| name: "FailingTest6", |
| description: "This test should fail by explicitly returning `false`.", |
| test: () => false |
| }); |
| abortOnFailureSuite.addTestCase({ |
| name: "PassingTest7", |
| description: "This test should not executed when the preceding test fails.", |
| test: () => true |
| }); |
| |
| abortOnFailureSuite.runTestCases(); |
| ProtocolTest.expectThat(result === false, "Return value of abortOnFailureSuite.runTestCases() should be false when a test case fails."); |
| ProtocolTest.expectThat(abortOnFailureSuite.runCount === 2, "abortOnFailureSuite should have executed two tests."); |
| ProtocolTest.expectThat(abortOnFailureSuite.passCount === 1, "abortOnFailureSuite should have passed one test."); |
| ProtocolTest.expectThat(abortOnFailureSuite.failCount === 1, "abortOnFailureSuite should have failed one test."); |
| ProtocolTest.expectThat(abortOnFailureSuite.skipCount === 1, "abortOnFailureSuite should have skipped one test."); |
| |
| let setupAndTeardownSymbol = Symbol("sync-suite-setup-and-teardown-token"); |
| window[setupAndTeardownSymbol] = 0; |
| |
| let setupAndTeardownTestSuite = ProtocolTest.createSyncSuite("SyncTestSuite.SetupAndTeardown"); |
| setupAndTeardownTestSuite.addTestCase({ |
| name: "TestWithSetupAndTeardown", |
| description: "Check execution order for setup and teardown actions.", |
| setup: () => { |
| window[setupAndTeardownSymbol] = 1; |
| return true; |
| }, |
| test() { |
| ProtocolTest.expectThat(window[setupAndTeardownSymbol] === 1, "Test should see side effects of running setup() action."); |
| window[setupAndTeardownSymbol] = 2; |
| return true; |
| }, |
| teardown: () => { |
| ProtocolTest.expectThat(window[setupAndTeardownSymbol] === 2, "Teardown should see side effects of running setup() action."); |
| window[setupAndTeardownSymbol] = 3; |
| return true; |
| } |
| }); |
| setupAndTeardownTestSuite.addTestCase({ |
| name: "TestRunningAfterTeardown", |
| description: "Check execution order for test after a teardown action.", |
| test() { |
| ProtocolTest.expectThat(window[setupAndTeardownSymbol] === 3, "Test should see side effects of previous test's teardown() action."); |
| return true; |
| }, |
| }); |
| |
| setupAndTeardownTestSuite.runTestCases(); |
| |
| let setupExceptionTestSuite = ProtocolTest.createSyncSuite("SyncTestSuite.SetupException"); |
| setupExceptionTestSuite.addTestCase({ |
| name: "TestWithExceptionDuringSetup", |
| description: "Check execution order for setup action that throws an exception.", |
| setup: () => { throw new Error() }, |
| test() { |
| ProtocolTest.assert(false, "Test should not execute if its setup action threw an exception."); |
| return false; |
| }, |
| teardown: () => { |
| ProtocolTest.assert(false, "Teardown action should not execute if its setup action threw an exception."); |
| return false; |
| } |
| }); |
| setupExceptionTestSuite.runTestCases(); |
| |
| let setupFailureTestSuite = ProtocolTest.createSyncSuite("SyncTestSuite.SetupFailure"); |
| setupFailureTestSuite.addTestCase({ |
| name: "TestWithFailureDuringSetup", |
| description: "Check execution order for setup action that has failed.", |
| setup: () => false, |
| test() { |
| ProtocolTest.assert(false, "Test should not execute if its setup action returned false.") |
| return false; |
| }, |
| teardown: () => { |
| ProtocolTest.assert(false, "Teardown action should not execute if its setup action returned false.") |
| return false; |
| } |
| }); |
| setupFailureTestSuite.runTestCases(); |
| |
| let teardownExceptionTestSuite = ProtocolTest.createSyncSuite("SyncTestSuite.TeardownException"); |
| teardownExceptionTestSuite.addTestCase({ |
| name: "TestWithExceptionDuringTeardown", |
| description: "Check execution order for teardown action that throws an exception.", |
| test: () => true, |
| teardown: () => { throw new Error() } |
| }); |
| teardownExceptionTestSuite.addTestCase({ |
| name: "TestAfterTeardownException", |
| descrption: "Check execution order for test after previous test's teardown throws an exception", |
| setup: () => { |
| ProtocolTest.assert(false, "Setup action should not execute if previous test's teardown action threw an exception."); |
| return false; |
| }, |
| test() { |
| ProtocolTest.assert(false, "Test should not execute if previous test's teardown action threw an exception."); |
| return false; |
| } |
| }); |
| teardownExceptionTestSuite.runTestCases(); |
| |
| let teardownFailureTestSuite = ProtocolTest.createSyncSuite("SyncTestSuite.TeardownFailure"); |
| teardownFailureTestSuite.addTestCase({ |
| name: "TestWithExceptionDuringTeardown", |
| description: "Check execution order for teardown action that has failed.", |
| test: () => true, |
| teardown: () => false, |
| }); |
| teardownFailureTestSuite.addTestCase({ |
| name: "TestAfterTeardownException", |
| descrption: "Check execution order for test after previous test's teardown throws an exception", |
| setup: () => { |
| ProtocolTest.assert(false, "Setup action should not execute if previous test's teardown action failed."); |
| return false; |
| }, |
| test() { |
| ProtocolTest.assert(false, "Test should not execute if previous test's teardown action failed."); |
| return false; |
| } |
| }); |
| teardownFailureTestSuite.runTestCases(); |
| |
| ProtocolTest.completeTest(); |
| } |
| </script> |
| </head> |
| <body onLoad="runTest()"> |
| </body> |
| </html> |