Skip to content

Commit

Permalink
feat: stabilize test steps API (#13400)
Browse files Browse the repository at this point in the history
  • Loading branch information
dsherret authored Jan 18, 2022
1 parent ce52bfc commit 0f3a53e
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 81 deletions.
34 changes: 33 additions & 1 deletion cli/dts/lib.deno.ns.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,40 @@ declare namespace Deno {
* See: https://no-color.org/ */
export const noColor: boolean;

/** **UNSTABLE**: New option, yet to be vetted. */
export interface TestContext {
/** Run a sub step of the parent test or step. Returns a promise
* that resolves to a boolean signifying if the step completed successfully.
* The returned promise never rejects unless the arguments are invalid.
* If the test was ignored the promise returns `false`.
*/
step(t: TestStepDefinition): Promise<boolean>;

/** Run a sub step of the parent test or step. Returns a promise
* that resolves to a boolean signifying if the step completed successfully.
* The returned promise never rejects unless the arguments are invalid.
* If the test was ignored the promise returns `false`.
*/
step(
name: string,
fn: (t: TestContext) => void | Promise<void>,
): Promise<boolean>;
}

export interface TestStepDefinition {
fn: (t: TestContext) => void | Promise<void>;
name: string;
ignore?: boolean;
/** Check that the number of async completed ops after the test step is the same
* as number of dispatched ops. Defaults to the parent test or step's value. */
sanitizeOps?: boolean;
/** Ensure the test step does not "leak" resources - ie. the resource table
* after the test has exactly the same contents as before the test. Defaults
* to the parent test or step's value. */
sanitizeResources?: boolean;
/** Ensure the test step does not prematurely cause the process to exit,
* for example via a call to `Deno.exit`. Defaults to the parent test or
* step's value. */
sanitizeExit?: boolean;
}

export interface TestDefinition {
Expand Down
37 changes: 0 additions & 37 deletions cli/dts/lib.deno.unstable.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -934,43 +934,6 @@ declare namespace Deno {
*/
export function sleepSync(millis: number): void;

/** **UNSTABLE**: New option, yet to be vetted. */
export interface TestContext {
/** Run a sub step of the parent test with a given name. Returns a promise
* that resolves to a boolean signifying if the step completed successfully.
* The returned promise never rejects unless the arguments are invalid.
* If the test was ignored, the promise returns `false`.
*/
step(t: TestStepDefinition): Promise<boolean>;

/** Run a sub step of the parent test with a given name. Returns a promise
* that resolves to a boolean signifying if the step completed successfully.
* The returned promise never rejects unless the arguments are invalid.
* If the test was ignored, the promise returns `false`.
*/
step(
name: string,
fn: (t: TestContext) => void | Promise<void>,
): Promise<boolean>;
}

/** **UNSTABLE**: New option, yet to be vetted. */
export interface TestStepDefinition {
fn: (t: TestContext) => void | Promise<void>;
name: string;
ignore?: boolean;
/** Check that the number of async completed ops after the test is the same
* as number of dispatched ops. Defaults to true. */
sanitizeOps?: boolean;
/** Ensure the test case does not "leak" resources - ie. the resource table
* after the test has exactly the same contents as before the test. Defaults
* to true. */
sanitizeResources?: boolean;
/** Ensure the test case does not prematurely cause the process to exit,
* for example via a call to `Deno.exit`. Defaults to true. */
sanitizeExit?: boolean;
}

/** **UNSTABLE**: new API, yet to be vetted.
*
* A generic transport listener for message-oriented protocols. */
Expand Down
16 changes: 5 additions & 11 deletions cli/tests/integration/test_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,37 +222,31 @@ itest!(aggregate_error {
});

itest!(steps_passing_steps {
args: "test --unstable test/steps/passing_steps.ts",
args: "test test/steps/passing_steps.ts",
exit_code: 0,
output: "test/steps/passing_steps.out",
});

itest!(steps_passing_steps_concurrent {
args: "test --unstable --jobs=2 test/steps/passing_steps.ts",
args: "test --jobs=2 test/steps/passing_steps.ts",
exit_code: 0,
output: "test/steps/passing_steps.out",
});

itest!(steps_failing_steps {
args: "test --unstable test/steps/failing_steps.ts",
args: "test test/steps/failing_steps.ts",
exit_code: 1,
output: "test/steps/failing_steps.out",
});

itest!(steps_ignored_steps {
args: "test --unstable test/steps/ignored_steps.ts",
args: "test test/steps/ignored_steps.ts",
exit_code: 0,
output: "test/steps/ignored_steps.out",
});

itest!(steps_invalid_usage {
args: "test --unstable test/steps/invalid_usage.ts",
args: "test test/steps/invalid_usage.ts",
exit_code: 1,
output: "test/steps/invalid_usage.out",
});

itest!(steps_no_unstable_flag {
args: "test test/steps/no_unstable_flag.ts",
exit_code: 1,
output: "test/steps/no_unstable_flag.out",
});
13 changes: 0 additions & 13 deletions cli/tests/testdata/test/steps/no_unstable_flag.out

This file was deleted.

4 changes: 0 additions & 4 deletions cli/tests/testdata/test/steps/no_unstable_flag.ts

This file was deleted.

12 changes: 0 additions & 12 deletions runtime/js/40_testing.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
RegExpPrototypeTest,
SymbolToStringTag,
} = window.__bootstrap.primordials;
let testStepsEnabled = false;

const opSanitizerDelayResolveQueue = [];

Expand Down Expand Up @@ -746,12 +745,6 @@ finishing test case.`;
* @param fn {(t: TestContext) => void | Promise<void>}
*/
async step(nameOrTestDefinition, fn) {
if (!testStepsEnabled) {
throw new Error(
"Test steps are unstable. The --unstable flag must be provided.",
);
}

if (parentStep.finalized) {
throw new Error(
"Cannot run test step after parent scope has finished execution. " +
Expand Down Expand Up @@ -890,14 +883,9 @@ finishing test case.`;
return value == null ? defaultValue : value;
}

function enableTestSteps() {
testStepsEnabled = true;
}

window.__bootstrap.internals = {
...window.__bootstrap.internals ?? {},
runTests,
enableTestSteps,
};

window.__bootstrap.testing = {
Expand Down
3 changes: 0 additions & 3 deletions runtime/js/99_main.js
Original file line number Diff line number Diff line change
Expand Up @@ -214,9 +214,6 @@ delete Object.prototype.__proto__;
runtimeOptions.v8Version,
runtimeOptions.tsVersion,
);
if (runtimeOptions.unstableFlag) {
internals.enableTestSteps();
}
build.setBuildInfo(runtimeOptions.target);
util.setLogDebug(runtimeOptions.debugFlag, source);
const prepareStackTrace = core.createPrepareStackTrace(
Expand Down

0 comments on commit 0f3a53e

Please sign in to comment.