| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/protocol-test.js"></script> |
| <script> |
| function test() |
| { |
| ProtocolTest.suppressStackTraces = true; |
| |
| ProtocolTest.expectException(() => { |
| new AsyncTestSuite(this); |
| }); |
| |
| ProtocolTest.expectException(() => { |
| new AsyncTestSuite(this, {}); |
| }); |
| |
| ProtocolTest.expectException(() => { |
| new AsyncTestSuite(this, " "); |
| }); |
| |
| ProtocolTest.expectException(() => { |
| new AsyncTestSuite("something", {}); |
| }); |
| |
| let badArgsSuite = ProtocolTest.createAsyncSuite("dummy"); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase(); |
| }); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase("string"); |
| }); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase({ |
| name: {}, |
| test() { |
| }, |
| }); |
| }); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase({ |
| name: " ", |
| test() { |
| }, |
| }); |
| }); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test: null, |
| }); |
| }); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() { |
| }, |
| setup: "astd", |
| }); |
| }); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() { |
| }, |
| setup: 123, |
| }); |
| }); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() { |
| }, |
| setup: {}, |
| }); |
| }); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() { |
| }, |
| teardown: "astd", |
| }); |
| }); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() { |
| }, |
| teardown: 123, |
| }); |
| }); |
| ProtocolTest.expectException(() => { |
| badArgsSuite.addTestCase({ |
| name: "foo", |
| test() { |
| }, |
| teardown: {}, |
| }); |
| }); |
| |
| let runEmptySuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.RunEmptySuite"); |
| try { |
| runEmptySuite.runTestCases(); |
| ProtocolTest.fail("should not be able to run empty test suite."); |
| } catch (e) { |
| ProtocolTest.pass("should not be able to run empty test suite."); |
| } |
| |
| let runTwiceSuiteRunCount = 0; |
| let runTwiceSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.RunTwiceSuite"); |
| runTwiceSuite.addTestCase({ |
| name: "DummyTest0", |
| test(resolve, reject) { |
| ProtocolTest.expectEqual(++runTwiceSuiteRunCount, 1, "DummyTest0 should only run once."); |
| resolve(); |
| }, |
| }); |
| |
| let result = runTwiceSuite.runTestCases(); |
| ProtocolTest.expectException(() => { |
| // Test cases won't run in this event loop; this call should still throw. |
| // Later tests are chained to this suite to avoid nondeterminism. |
| runTwiceSuite.runTestCases(); |
| }); |
| |
| function checkResult(suite, expectedCounts) { |
| result = result.then(() => suite.runTestCases()); |
| |
| let message = `Promise from ${suite.name}.runTestCases() should resolve even if a test case fails.`; |
| |
| result = result.then(function resolved() { |
| ProtocolTest.log(""); |
| ProtocolTest.pass(message); |
| |
| ProtocolTest.expectEqual(expectedCounts.runCount, suite.runCount, `${suite.name} should have executed ${expectedCounts.runCount} tests.`); |
| ProtocolTest.expectEqual(expectedCounts.passCount, suite.passCount, `${suite.name} should have passed ${expectedCounts.passCount} tests.`); |
| ProtocolTest.expectEqual(expectedCounts.failCount, suite.failCount, `${suite.name} should have failed ${expectedCounts.failCount} tests.`); |
| ProtocolTest.expectEqual(expectedCounts.skipCount, suite.skipCount, `${suite.name} should have skipped ${expectedCounts.skipCount} tests.`); |
| }, function rejected(e) { |
| ProtocolTest.log(""); |
| ProtocolTest.fail(message); |
| |
| ProtocolTest.log(e.message); |
| }); |
| } |
| |
| // Promise test functions. |
| |
| let promiseFunctionSuccessSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.PromiseFunctionSuccess"); |
| promiseFunctionSuccessSuite.addTestCase({ |
| name: "PromiseFunctionSuccess", |
| test(resolve, reject) { |
| resolve(); |
| }, |
| }); |
| checkResult(promiseFunctionSuccessSuite, { |
| runCount: 1, |
| passCount: 1, |
| failCount: 0, |
| skipCount: 0, |
| }); |
| |
| let promiseFunctionExceptionSuite = ProtocolTest.createAsyncSuite("PromiseTestSuite.PromiseFunctionException"); |
| promiseFunctionExceptionSuite.addTestCase({ |
| name: "PromiseFunctionException", |
| test(resolve, reject) { |
| ProtocolTest.log("Throwing..."); |
| throw "PromiseFunctionException throw"; |
| }, |
| }); |
| checkResult(promiseFunctionExceptionSuite, { |
| runCount: 1, |
| passCount: 0, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| let promiseFunctionFailureSuite = ProtocolTest.createAsyncSuite("PromiseTestSuite.PromiseFunctionFailure"); |
| promiseFunctionFailureSuite.addTestCase({ |
| name: "PromiseFunctionFailure", |
| test(resolve, reject) { |
| ProtocolTest.log("Rejecting..."); |
| reject("PromiseFunctionFailure reject"); |
| }, |
| }); |
| checkResult(promiseFunctionFailureSuite, { |
| runCount: 1, |
| passCount: 0, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| let promiseSequentialExecutionPhase = 0; |
| let promiseSequentialExecutionSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.PromiseSequentialExecution"); |
| promiseSequentialExecutionSuite.addTestCase({ |
| name: "1 (Pass)", |
| test(resolve, reject) { |
| ProtocolTest.assert(promiseSequentialExecutionPhase === 0); |
| promiseSequentialExecutionPhase = 1; |
| resolve(); |
| }, |
| }); |
| promiseSequentialExecutionSuite.addTestCase({ |
| name: "2 (Pass)", |
| test(resolve, reject) { |
| ProtocolTest.assert(promiseSequentialExecutionPhase === 1); |
| promiseSequentialExecutionPhase = 2; |
| resolve(); |
| }, |
| }); |
| promiseSequentialExecutionSuite.addTestCase({ |
| name: "3 (Pass)", |
| test(resolve, reject) { |
| ProtocolTest.assert(promiseSequentialExecutionPhase === 2); |
| promiseSequentialExecutionPhase = 3; |
| resolve(); |
| }, |
| }); |
| promiseSequentialExecutionSuite.addTestCase({ |
| name: "4 (Pass)", |
| test(resolve, reject) { |
| ProtocolTest.assert(promiseSequentialExecutionPhase === 3); |
| promiseSequentialExecutionPhase = 4; |
| resolve(); |
| }, |
| }); |
| checkResult(promiseSequentialExecutionSuite, { |
| runCount: 4, |
| passCount: 4, |
| failCount: 0, |
| skipCount: 0, |
| }); |
| result = result.then(() => { |
| ProtocolTest.assert(promiseSequentialExecutionPhase === 4); |
| }); |
| |
| let promiseContinueOnFailureSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.PromiseContinueOnFailure"); |
| promiseContinueOnFailureSuite.addTestCase({ |
| name: "1 (Pass)", |
| test(resolve, reject) { |
| resolve(); |
| }, |
| }); |
| promiseContinueOnFailureSuite.addTestCase({ |
| name: "2 (Fail)", |
| test(resolve, reject) { |
| ProtocolTest.log("Throwing..."); |
| throw {x: "PromiseContinueOnFailure throw"}; |
| }, |
| }); |
| promiseContinueOnFailureSuite.addTestCase({ |
| name: "3 (Pass)", |
| test(resolve, reject) { |
| resolve(); |
| }, |
| }); |
| promiseContinueOnFailureSuite.addTestCase({ |
| name: "4 (Fail)", |
| test(resolve, reject) { |
| ProtocolTest.log("Rejecting..."); |
| reject({x: "PromiseContinueOnFailure reject"}); |
| }, |
| }); |
| checkResult(promiseContinueOnFailureSuite, { |
| runCount: 4, |
| passCount: 2, |
| failCount: 2, |
| skipCount: 0, |
| }); |
| |
| let promiseSetupAndTeardownPhase = 0; |
| let promiseSetupAndTeardownSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.PromiseSetupAndTeardown"); |
| promiseSetupAndTeardownSuite.addTestCase({ |
| name: "TestWithSetupAndTeardown", |
| setup(resolve, reject) { |
| ProtocolTest.assert(promiseSetupAndTeardownPhase === 0); |
| promiseSetupAndTeardownPhase = 1; |
| resolve(); |
| }, |
| test(resolve, reject) { |
| ProtocolTest.assert(promiseSetupAndTeardownPhase === 1); |
| promiseSetupAndTeardownPhase = 2; |
| resolve(); |
| }, |
| teardown(resolve, reject) { |
| ProtocolTest.assert(promiseSetupAndTeardownPhase === 2); |
| promiseSetupAndTeardownPhase = 3; |
| resolve(); |
| }, |
| }); |
| promiseSetupAndTeardownSuite.addTestCase({ |
| name: "TestRunningAfterTeardown", |
| test(resolve, reject) { |
| ProtocolTest.assert(promiseSetupAndTeardownPhase === 3); |
| resolve(); |
| }, |
| }); |
| checkResult(promiseSetupAndTeardownSuite, { |
| runCount: 2, |
| passCount: 2, |
| failCount: 0, |
| skipCount: 0, |
| }); |
| |
| let promiseSetupExceptionSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.PromiseSetupException"); |
| promiseSetupExceptionSuite.addTestCase({ |
| name: "TestWithExceptionDuringSetup", |
| setup(resolve, reject) { |
| ProtocolTest.log("Throwing..."); |
| throw "PromiseSetupException throw"; |
| }, |
| test(resolve, reject) { |
| ProtocolTest.fail("Test should not execute if its setup action threw an exception."); |
| reject(); |
| }, |
| teardown(resolve, reject) { |
| ProtocolTest.fail("Teardown action should not execute if its setup action threw an exception."); |
| reject(); |
| }, |
| }); |
| promiseSetupExceptionSuite.addTestCase({ |
| name: "TestAfterSetupException", |
| setup(resolve, reject) { |
| ProtocolTest.pass("Setup action should still execute if previous test's setup action threw an exception."); |
| resolve(); |
| }, |
| test(resolve, reject) { |
| ProtocolTest.pass("Test should still execute if previous test's setup action threw an exception."); |
| resolve(); |
| }, |
| teardown(resolve, reject) { |
| ProtocolTest.pass("Teardown action should still execute if previous test's setup action threw an exception."); |
| resolve(); |
| }, |
| }); |
| checkResult(promiseSetupExceptionSuite, { |
| runCount: 1, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 1, |
| }); |
| |
| let promiseSetupFailureSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.PromiseSetupFailure"); |
| promiseSetupFailureSuite.addTestCase({ |
| name: "TestWithFailureDuringSetup", |
| setup(resolve, reject) { |
| ProtocolTest.log("Rejecting..."); |
| reject("PromiseSetupFailure reject"); |
| }, |
| test(resolve, reject) { |
| ProtocolTest.fail("Test should not execute if its setup action failed."); |
| reject(); |
| }, |
| teardown(resolve, reject) { |
| ProtocolTest.fail("Teardown action should not execute if its setup action failed."); |
| reject(); |
| }, |
| }); |
| promiseSetupFailureSuite.addTestCase({ |
| name: "TestAfterSetupException", |
| setup(resolve, reject) { |
| ProtocolTest.pass("Setup action should still execute if previous test's setup action failed."); |
| resolve(); |
| }, |
| test(resolve, reject) { |
| ProtocolTest.pass("Test should still execute if previous test's setup action failed."); |
| resolve(); |
| }, |
| teardown(resolve, reject) { |
| ProtocolTest.pass("Teardown action should still execute if previous test's setup action failed."); |
| resolve(); |
| }, |
| }); |
| checkResult(promiseSetupFailureSuite, { |
| runCount: 1, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 1, |
| }); |
| |
| let promiseTeardownExceptionSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.PromiseTeardownException"); |
| promiseTeardownExceptionSuite.addTestCase({ |
| name: "TestWithExceptionDuringTeardown", |
| test(resolve, reject) { |
| resolve(); |
| }, |
| teardown(resolve, reject) { |
| ProtocolTest.log("Throwing..."); |
| throw "PromiseTeardownException throw"; |
| }, |
| }); |
| promiseTeardownExceptionSuite.addTestCase({ |
| name: "TestAfterTeardownException", |
| setup(resolve, reject) { |
| ProtocolTest.pass("Setup action should still execute if previous test's teardown action threw an exception."); |
| resolve(); |
| }, |
| test(resolve, reject) { |
| ProtocolTest.pass("Test should still execute if previous test's teardown action threw an exception."); |
| resolve(); |
| }, |
| teardown(resolve, reject) { |
| ProtocolTest.pass("Teardown action should still execute if previous test's teardown action threw an exception."); |
| resolve(); |
| }, |
| }); |
| checkResult(promiseTeardownExceptionSuite, { |
| runCount: 2, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| let promiseTeardownFailureSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.PromiseTeardownFailure"); |
| promiseTeardownFailureSuite.addTestCase({ |
| name: "TestWithExceptionDuringTeardown", |
| test(resolve, reject) { |
| resolve(); |
| }, |
| teardown(resolve, reject) { |
| ProtocolTest.log("Rejecting..."); |
| reject("PromiseTeardownFailure reject"); |
| }, |
| }); |
| promiseTeardownFailureSuite.addTestCase({ |
| name: "TestAfterTeardownException", |
| setup(resolve, reject) { |
| ProtocolTest.pass("Setup action should still execute if previous test's teardown action failed."); |
| resolve(); |
| }, |
| test(resolve, reject) { |
| ProtocolTest.pass("Test should still execute if previous test's teardown action failed."); |
| resolve(); |
| }, |
| teardown(resolve, reject) { |
| ProtocolTest.pass("Teardown action should still execute if previous test's teardown action failed."); |
| resolve(); |
| }, |
| }); |
| checkResult(promiseTeardownFailureSuite, { |
| runCount: 2, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| let promiseTimeoutSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.PromiseTimeout"); |
| promiseTimeoutSuite.addTestCase({ |
| name: "PromiseTestWithTimeout", |
| test(resolve, reject) { |
| ProtocolTest.log("Timeout..."); |
| setTimeout(() => { |
| resolve(); |
| }, 50); |
| }, |
| timeout: 5, |
| }); |
| promiseTimeoutSuite.addTestCase({ |
| name: "PromiseTestAfterTimeout", |
| setup(resolve, reject) { |
| ProtocolTest.pass("Setup action should still execute if previous test timed out."); |
| resolve(); |
| }, |
| test(resolve, reject) { |
| ProtocolTest.pass("Test should still execute if previous test timed out."); |
| resolve(); |
| }, |
| teardown(resolve, reject) { |
| ProtocolTest.pass("Teardown action should still execute if previous test timed out."); |
| resolve(); |
| }, |
| }); |
| checkResult(promiseTimeoutSuite, { |
| runCount: 2, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| // Async test functions. |
| |
| let asyncFunctionSuccessSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncFunctionSuccess"); |
| asyncFunctionSuccessSuite.addTestCase({ |
| name: "AsyncFunctionSuccess", |
| async test() { |
| }, |
| }); |
| checkResult(asyncFunctionSuccessSuite, { |
| runCount: 1, |
| passCount: 1, |
| failCount: 0, |
| skipCount: 0, |
| }); |
| |
| let asyncFunctionExplicitExceptionSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncFunctionExplicitException"); |
| asyncFunctionExplicitExceptionSuite.addTestCase({ |
| name: "AsyncFunctionExplicitException", |
| async test() { |
| ProtocolTest.log("Throwing..."); |
| throw "AsyncFunctionExplicitException throw"; |
| }, |
| }); |
| checkResult(asyncFunctionExplicitExceptionSuite, { |
| runCount: 1, |
| passCount: 0, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| let asyncFunctionRuntimeExceptionSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncFunctionRuntimeException"); |
| asyncFunctionRuntimeExceptionSuite.addTestCase({ |
| name: "AsyncFunctionRuntimeException", |
| async test() { |
| ProtocolTest.log("Throwing..."); |
| ({}).x.x.x; |
| }, |
| }); |
| checkResult(asyncFunctionRuntimeExceptionSuite, { |
| runCount: 1, |
| passCount: 0, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| let asyncFunctionFailureSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncFunctionFailure"); |
| asyncFunctionFailureSuite.addTestCase({ |
| name: "AsyncFunctionException", |
| async test() { |
| ProtocolTest.log("Rejecting..."); |
| return Promise.reject("AsyncFunctionFailure reject"); |
| }, |
| }); |
| checkResult(asyncFunctionFailureSuite, { |
| runCount: 1, |
| passCount: 0, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| let asyncSequentialExecutionPhase = 0; |
| let asyncSequentialExecutionSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncSequentialExecution"); |
| asyncSequentialExecutionSuite.addTestCase({ |
| name: "1 (Pass)", |
| async test() { |
| ProtocolTest.assert(asyncSequentialExecutionPhase === 0); |
| asyncSequentialExecutionPhase = 1; |
| }, |
| }); |
| asyncSequentialExecutionSuite.addTestCase({ |
| name: "2 (Pass)", |
| async test() { |
| ProtocolTest.assert(asyncSequentialExecutionPhase === 1); |
| asyncSequentialExecutionPhase = 2; |
| }, |
| }); |
| asyncSequentialExecutionSuite.addTestCase({ |
| name: "3 (Pass)", |
| async test() { |
| ProtocolTest.assert(asyncSequentialExecutionPhase === 2); |
| asyncSequentialExecutionPhase = 3; |
| }, |
| }); |
| asyncSequentialExecutionSuite.addTestCase({ |
| name: "4 (Pass)", |
| async test() { |
| ProtocolTest.assert(asyncSequentialExecutionPhase === 3); |
| asyncSequentialExecutionPhase = 4; |
| }, |
| }); |
| checkResult(asyncSequentialExecutionSuite, { |
| runCount: 4, |
| passCount: 4, |
| failCount: 0, |
| skipCount: 0, |
| }); |
| result = result.then(() => { |
| ProtocolTest.assert(asyncSequentialExecutionPhase === 4); |
| }); |
| |
| let asyncContinueOnFailureSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncContinueOnFailure"); |
| asyncContinueOnFailureSuite.addTestCase({ |
| name: "1 (Pass)", |
| async test() { |
| }, |
| }); |
| asyncContinueOnFailureSuite.addTestCase({ |
| name: "2 (Fail)", |
| async test() { |
| ProtocolTest.log("Throwing..."); |
| throw {x: "AsyncContinueOnFailure throw"}; |
| }, |
| }); |
| asyncContinueOnFailureSuite.addTestCase({ |
| name: "3 (Pass)", |
| async test() { |
| }, |
| }); |
| asyncContinueOnFailureSuite.addTestCase({ |
| name: "4 (Fail)", |
| async test() { |
| ProtocolTest.log("Throwing..."); |
| ({}).x.x.x; |
| }, |
| }); |
| asyncContinueOnFailureSuite.addTestCase({ |
| name: "5 (Pass)", |
| async test() { |
| }, |
| }); |
| asyncContinueOnFailureSuite.addTestCase({ |
| name: "6 (Fail)", |
| async test() { |
| ProtocolTest.log("Rejecting..."); |
| return Promise.reject("AsyncContinueOnFailure reject"); |
| }, |
| }); |
| checkResult(asyncContinueOnFailureSuite, { |
| runCount: 6, |
| passCount: 3, |
| failCount: 3, |
| skipCount: 0, |
| }); |
| |
| let asyncSetupAndTeardownPhase = 0; |
| let asyncSetupAndTeardownSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncSetupAndTeardown"); |
| asyncSetupAndTeardownSuite.addTestCase({ |
| name: "AsyncTestWithSetupAndTeardown", |
| async setup() { |
| ProtocolTest.assert(asyncSetupAndTeardownPhase === 0); |
| asyncSetupAndTeardownPhase = 1; |
| }, |
| async test() { |
| ProtocolTest.assert(asyncSetupAndTeardownPhase === 1); |
| asyncSetupAndTeardownPhase = 2; |
| }, |
| async teardown() { |
| ProtocolTest.assert(asyncSetupAndTeardownPhase === 2); |
| asyncSetupAndTeardownPhase = 3; |
| }, |
| }); |
| asyncSetupAndTeardownSuite.addTestCase({ |
| name: "AsyncTestRunningAfterTeardown", |
| async test() { |
| ProtocolTest.assert(asyncSetupAndTeardownPhase === 3); |
| }, |
| }); |
| checkResult(asyncSetupAndTeardownSuite, { |
| runCount: 2, |
| passCount: 2, |
| failCount: 0, |
| skipCount: 0, |
| }); |
| |
| let asyncSetupExplicitExceptionSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncSetupExplicitException"); |
| asyncSetupExplicitExceptionSuite.addTestCase({ |
| name: "AsyncTestWithExplicitExceptionDuringSetup", |
| async setup() { |
| ProtocolTest.log("Throwing..."); |
| throw "AsyncSetupExplicitException throw"; |
| }, |
| async test() { |
| ProtocolTest.fail("Test should not execute if its setup action threw an exception."); |
| }, |
| async teardown() { |
| ProtocolTest.fail("Teardown action should not execute if its setup action threw an exception."); |
| }, |
| }); |
| asyncSetupExplicitExceptionSuite.addTestCase({ |
| name: "AsyncTestAfterSetupExplicitException", |
| async setup() { |
| ProtocolTest.pass("Setup action should still execute if previous test's setup action threw an exception."); |
| }, |
| async test() { |
| ProtocolTest.pass("Test should still execute if previous test's setup action threw an exception."); |
| }, |
| async teardown() { |
| ProtocolTest.pass("Teardown action should still execute if previous test's setup action threw an exception."); |
| }, |
| }); |
| checkResult(asyncSetupExplicitExceptionSuite, { |
| runCount: 1, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 1, |
| }); |
| |
| let asyncSetupRuntimeExceptionSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncSetupRuntimeException"); |
| asyncSetupRuntimeExceptionSuite.addTestCase({ |
| name: "AsyncTestWithRuntimeExceptionDuringSetup", |
| async setup() { |
| ProtocolTest.log("Throwing..."); |
| ({}).x.x.x; |
| }, |
| async test() { |
| ProtocolTest.fail("Test should not execute if its setup action threw an exception."); |
| }, |
| async teardown() { |
| ProtocolTest.fail("Teardown action should not execute if its setup action threw an exception."); |
| }, |
| }); |
| asyncSetupRuntimeExceptionSuite.addTestCase({ |
| name: "AsyncTestAfterSetupRuntimeException", |
| async setup() { |
| ProtocolTest.pass("Setup action should still execute if previous test's setup action threw an exception."); |
| }, |
| async test() { |
| ProtocolTest.pass("Test should still execute if previous test's setup action threw an exception."); |
| }, |
| async teardown() { |
| ProtocolTest.pass("Teardown action should still execute if previous test's setup action threw an exception."); |
| }, |
| }); |
| checkResult(asyncSetupRuntimeExceptionSuite, { |
| runCount: 1, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 1, |
| }); |
| |
| let asyncSetupFailureSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncSetupFailure"); |
| asyncSetupFailureSuite.addTestCase({ |
| name: "AsyncTestWithFailureDuringSetup", |
| async setup() { |
| ProtocolTest.log("Rejecting..."); |
| return Promise.reject("AsyncSetupFailure reject"); |
| }, |
| async test() { |
| }, |
| }); |
| asyncSetupFailureSuite.addTestCase({ |
| name: "AsyncTestAfterSetupFailure", |
| async setup() { |
| ProtocolTest.pass("Setup action should still execute if previous test's setup action failed."); |
| }, |
| async test() { |
| ProtocolTest.pass("Test should still execute if previous test's setup action failed."); |
| }, |
| async teardown() { |
| ProtocolTest.pass("Setup action should still execute if previous test's setup action failed."); |
| }, |
| }); |
| checkResult(asyncSetupFailureSuite, { |
| runCount: 1, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 1, |
| }); |
| |
| let asyncTeardownExplicitExceptionSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncTeardownExplicitException"); |
| asyncTeardownExplicitExceptionSuite.addTestCase({ |
| name: "AsyncTestWithExplicitExceptionDuringTeardown", |
| async test() { |
| }, |
| async teardown() { |
| ProtocolTest.log("Throwing..."); |
| throw "AsyncTeardownExplicitException throw"; |
| }, |
| }); |
| asyncTeardownExplicitExceptionSuite.addTestCase({ |
| name: "AsyncTestAfterTeardownExplicitException", |
| async setup() { |
| ProtocolTest.pass("Setup action should still execute if previous test's teardown action threw an exception."); |
| }, |
| async test() { |
| ProtocolTest.pass("Test should still execute if previous test's teardown action threw an exception."); |
| }, |
| async teardown() { |
| ProtocolTest.pass("Teardown action should still execute if previous test's teardown action threw an exception."); |
| }, |
| }); |
| checkResult(asyncTeardownExplicitExceptionSuite, { |
| runCount: 2, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| let asyncTeardownRuntimeExceptionSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncTeardownRuntimeException"); |
| asyncTeardownRuntimeExceptionSuite.addTestCase({ |
| name: "AsyncTestWithRuntimeExceptionDuringTeardown", |
| async test() { |
| }, |
| async teardown() { |
| ProtocolTest.log("Throwing..."); |
| ({}).x.x.x; |
| }, |
| }); |
| asyncTeardownRuntimeExceptionSuite.addTestCase({ |
| name: "AsyncTestAfterTeardownRuntimeException", |
| async setup() { |
| ProtocolTest.pass("Setup action should still execute if previous test's teardown action threw an exception."); |
| }, |
| async test() { |
| ProtocolTest.pass("Test should still execute if previous test's teardown action threw an exception."); |
| }, |
| async teardown() { |
| ProtocolTest.pass("Teardown action should still execute if previous test's teardown action threw an exception."); |
| }, |
| }); |
| checkResult(asyncTeardownRuntimeExceptionSuite, { |
| runCount: 2, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| let asyncTeardownFailureSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncTeardownFailure"); |
| asyncTeardownFailureSuite.addTestCase({ |
| name: "AsyncTestWithFailureDuringTeardown", |
| async test() { |
| }, |
| async teardown() { |
| ProtocolTest.log("Rejecting..."); |
| return Promise.reject("AsyncTeardownFailure reject"); |
| }, |
| }); |
| asyncTeardownFailureSuite.addTestCase({ |
| name: "AsyncTestAfterTeardownFailure", |
| async setup() { |
| ProtocolTest.pass("Setup action should still execute if previous test's teardown action failed."); |
| }, |
| async test() { |
| ProtocolTest.pass("Test should still execute if previous test's teardown action failed."); |
| }, |
| async teardown() { |
| ProtocolTest.pass("Teardown action should still execute if previous test's teardown action failed."); |
| }, |
| }); |
| checkResult(asyncTeardownFailureSuite, { |
| runCount: 2, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| let asyncTimeoutSuite = ProtocolTest.createAsyncSuite("AsyncTestSuite.AsyncTimeout"); |
| asyncTimeoutSuite.addTestCase({ |
| name: "AsyncTestWithTimeout", |
| async test() { |
| ProtocolTest.log("Timeout..."); |
| await Promise.delay(50); |
| }, |
| timeout: 5, |
| }); |
| asyncTimeoutSuite.addTestCase({ |
| name: "AsyncTestAfterTimeout", |
| async setup() { |
| ProtocolTest.pass("Setup action should still execute if previous test timed out."); |
| }, |
| async test() { |
| ProtocolTest.pass("Test should still execute if previous test timed out."); |
| }, |
| async teardown() { |
| ProtocolTest.pass("Teardown action should still execute if previous test timed out."); |
| }, |
| }); |
| checkResult(asyncTimeoutSuite, { |
| runCount: 2, |
| passCount: 1, |
| failCount: 1, |
| skipCount: 0, |
| }); |
| |
| // This will finish the test whether the chain was resolved or rejected. |
| result = result.then(() => { |
| ProtocolTest.completeTest(); |
| }); |
| } |
| </script> |
| </head> |
| <body onLoad="runTest()"> |
| </body> |
| </html> |