@everyonesoftware/common 5.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/outputs/characterWriteStream-DUlG_bx_.d.cts +795 -0
- package/outputs/characterWriteStream-DUlG_bx_.d.ts +795 -0
- package/outputs/{chunk-AY3YWKOM.js → chunk-5Z677JON.js} +947 -3386
- package/outputs/chunk-5Z677JON.js.map +1 -0
- package/outputs/chunk-6V7JRJ7P.js +2469 -0
- package/outputs/chunk-6V7JRJ7P.js.map +1 -0
- package/outputs/chunk-CHBOMCYM.js +845 -0
- package/outputs/chunk-CHBOMCYM.js.map +1 -0
- package/outputs/{sources.cjs → sourceIndex.cjs} +1 -1
- package/outputs/{sources.d.cts → sourceIndex.d.cts} +351 -1143
- package/outputs/{sources.d.ts → sourceIndex.d.ts} +351 -1143
- package/outputs/{sources.js → sourceIndex.js} +32 -30
- package/outputs/{sources.js.map → sourceIndex.js.map} +1 -1
- package/outputs/testIndex.cjs +5832 -0
- package/outputs/testIndex.cjs.map +1 -0
- package/outputs/testIndex.d.cts +428 -0
- package/outputs/testIndex.d.ts +428 -0
- package/outputs/testIndex.js +26 -0
- package/outputs/testIndex.js.map +1 -0
- package/outputs/tests.js +2171 -2985
- package/outputs/tests.js.map +1 -1
- package/package.json +7 -7
- package/outputs/chunk-AY3YWKOM.js.map +0 -1
- /package/outputs/{sources.cjs.map → sourceIndex.cjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../tests/test.ts","../tests/assertTest.ts","../tests/assertTestTests.ts","../tests/basicTestSkip.ts","../tests/failedTest.ts","../tests/skippedTest.ts","../tests/testAction.ts","../tests/testSkip.ts","../tests/testRunner.ts","../tests/consoleTestRunner.ts"],"sourcesContent":["import { PromiseAsyncResult } from \"../sources/promiseAsyncResult\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { SyncResult } from \"../sources/syncResult\";\r\nimport { isUndefinedOrNull, Type } from \"../sources/types\";\r\n\r\n/**\r\n * A type that can be used to make assertions during a test.\r\n */\r\nexport abstract class Test\r\n{\r\n /**\r\n * Fail the current test with the provided message.\r\n * @param message The message that explains why this test failed.\r\n */\r\n public abstract fail(message: string): never;\r\n\r\n /**\r\n * Assert that the provided value is undefined;\r\n * @param value The value to check.\r\n */\r\n public assertUndefined(value: unknown): asserts value is undefined\r\n {\r\n Test.assertUndefined(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is undefined.\r\n * @param test The current {@link Test}.\r\n * @param value The value to check.\r\n */\r\n public static assertUndefined(test: Test, value: unknown): asserts value is undefined\r\n {\r\n test.assertSame(value, undefined);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not undefined;\r\n * @param value The value to check.\r\n */\r\n public assertNotUndefined<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNotUndefined(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not undefined.\r\n * @param test The current {@link Test}.\r\n * @param value The value to check.\r\n */\r\n public static assertNotUndefined<T>(test: Test, value: unknown): asserts value is NonNullable<T>\r\n {\r\n test.assertNotSame(value, undefined);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is null.\r\n * @param value The value to check.\r\n */\r\n public assertNull(value: unknown): asserts value is null\r\n {\r\n Test.assertNull(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is null.\r\n * @param value The value to check.\r\n */\r\n public static assertNull(test: Test, value: unknown): asserts value is null\r\n {\r\n test.assertSame(value, null);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not null.\r\n * @param value The value to check.\r\n */\r\n public assertNotNull<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNull(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not null.\r\n * @param value The value to check.\r\n */\r\n public static assertNotNull<T>(test: Test, value: T): asserts value is NonNullable<T>\r\n {\r\n test.assertNotSame(value, null);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not undefined and not null.\r\n * @param value The value to check.\r\n */\r\n public assertNotUndefinedAndNotNull<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNotUndefinedAndNotNull(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not undefined and not null.\r\n * @param value The value to check.\r\n */\r\n public static assertNotUndefinedAndNotNull<T>(test: Test, value: T): asserts value is NonNullable<T>\r\n {\r\n test.assertNotSame(value, null);\r\n test.assertNotSame(value, undefined);\r\n }\r\n\r\n /**\r\n * Assert that the provided values point to the same object.\r\n * @param left The first value.\r\n * @param right The second value.\r\n */\r\n public abstract assertSame<T>(left: T, right: T): void;\r\n\r\n /**\r\n * Assert that the provided values don't point to the same object.\r\n * @param left The first value.\r\n * @param right The second value.\r\n */\r\n public abstract assertNotSame<T>(left: T, right: T): void;\r\n\r\n /**\r\n * Assert that the provided values are equal.\r\n * @param left The first value.\r\n * @param right The second value.\r\n * @param message A message that will be shown when the values are not equal.\r\n */\r\n public abstract assertEqual<T>(left: T, right: T, message?: string): void;\r\n\r\n /**\r\n * Assert that the provided values are not equal.\r\n * @param left The first value.\r\n * @param right The second value.\r\n */\r\n public abstract assertNotEqual<T>(left: T, right: T): void;\r\n\r\n /**\r\n * Assert that the provided value is false.\r\n * @param value The value to check.\r\n */\r\n public assertFalse(value: boolean): asserts value is false\r\n {\r\n Test.assertFalse(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is false.\r\n * @param value The value to check.\r\n */\r\n public static assertFalse(test: Test, value: boolean): asserts value is false\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(test, \"test\");\r\n\r\n test.assertSame(value, false);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is true.\r\n * @param value The value to check.\r\n */\r\n public assertTrue(value: boolean): asserts value is true\r\n {\r\n Test.assertTrue(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is true.\r\n * @param value The value to check.\r\n */\r\n public static assertTrue(test: Test, value: boolean): asserts value is true\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(test, \"test\");\r\n\r\n test.assertSame(value, true);\r\n }\r\n\r\n /**\r\n * Assert that the provided action throws the provided {@link Error} when it is run.\r\n * @param action The action to run.\r\n * @param expectedError The optional expected {@link Error} to compare against the thrown\r\n * {@link Error}. If the expected {@link Error} is not provided, then any {@link Error} will\r\n * satisfy this assertion.\r\n */\r\n public abstract assertThrows(action: SyncResult<unknown> | (() => void), expectedError?: Error): void;\r\n\r\n /**\r\n * Assert that the provided action throws the provided {@link Error} when it is run.\r\n * @param action The action to run.\r\n * @param expectedError The expected {@link Error}.\r\n */\r\n public abstract assertThrowsAsync(action: PromiseLike<unknown> | (() => PromiseLike<unknown>), expectedError: Error): PromiseAsyncResult<void>;\r\n\r\n /**\r\n * Assert that the provided value is an instance of the provided {@link Type}.\r\n * @param value The value to check.\r\n * @param type The {@link Type} to check.\r\n * @param expression The expression that produced the value.\r\n * @param message An optional error message.\r\n */\r\n public assertInstanceOf<T>(value: unknown, type: Type<T>, typeCheck?: (value: unknown) => value is T): asserts value is T\r\n {\r\n return Test.assertInstanceOf(this, value, type, typeCheck);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is an instance of the provided {@link Type}.\r\n * @param value The value to check.\r\n * @param type The {@link Type} to check.\r\n * @param expression The expression that produced the value.\r\n * @param message An optional error message.\r\n */\r\n public static assertInstanceOf<T>(test: Test, value: unknown, type: Type<T>, typeCheck?: (value: unknown) => value is T): asserts value is T\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(type, \"type\");\r\n\r\n if (isUndefinedOrNull(typeCheck))\r\n {\r\n typeCheck = ((value: unknown) => value instanceof type) as (value: unknown) => value is T;\r\n }\r\n\r\n if (!typeCheck(value))\r\n {\r\n test.fail(`Expected value to be of type ${type.name} but found ${value} instead.`);\r\n }\r\n }\r\n}","import * as assert from \"assert\";\r\n\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { isFunction, Type } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { SyncResult } from \"../sources/syncResult\";\r\nimport { PromiseAsyncResult } from \"../sources/promiseAsyncResult\";\r\n\r\n/**\r\n * A {@link Test} type that uses the standard \"assert\" module to make assertions.\r\n */\r\nexport class AssertTest implements Test\r\n{\r\n private readonly name: string;\r\n\r\n protected constructor(name: string)\r\n {\r\n this.name = name;\r\n }\r\n\r\n /**\r\n * Create a new {@link AssertTest} object.\r\n */\r\n public static create(name: string): AssertTest\r\n {\r\n return new AssertTest(name);\r\n }\r\n\r\n public fail(message: string): never\r\n {\r\n PreCondition.assertNotEmpty(message, \"message\");\r\n\r\n assert.fail(message);\r\n }\r\n\r\n public assertUndefined(value: unknown): asserts value is undefined\r\n {\r\n Test.assertUndefined(this, value);\r\n }\r\n\r\n public assertNotUndefined<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNotUndefined(this, value);\r\n }\r\n\r\n public assertNull(value: unknown): asserts value is null\r\n {\r\n Test.assertNull(this, value);\r\n }\r\n\r\n public assertNotNull<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNotNull(this, value);\r\n }\r\n\r\n public assertNotUndefinedAndNotNull<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNotUndefinedAndNotNull(this, value);\r\n }\r\n\r\n public assertSame<T>(left: T, right: T): void\r\n {\r\n assert.strictEqual(left, right);\r\n }\r\n\r\n public assertNotSame<T>(left: T, right: T): void\r\n {\r\n assert.notStrictEqual(left, right);\r\n }\r\n\r\n public assertEqual<T>(left: T, right: T, message?: string): void\r\n {\r\n assert.deepStrictEqual(left, right, message);\r\n }\r\n\r\n public assertNotEqual<T>(left: T, right: T): void\r\n {\r\n assert.notDeepStrictEqual(left, right);\r\n }\r\n\r\n public assertFalse(value: boolean): void\r\n {\r\n Test.assertFalse(this, value);\r\n }\r\n\r\n public assertTrue(value: boolean): void\r\n {\r\n Test.assertTrue(this, value);\r\n }\r\n\r\n public assertThrows(action: SyncResult<unknown> | (() => void), expectedError?: Error): void\r\n {\r\n if (!isFunction(action))\r\n {\r\n const syncResult: SyncResult<unknown> = action;\r\n action = () => { syncResult.await(); };\r\n }\r\n assert.throws(action, expectedError);\r\n }\r\n\r\n public assertThrowsAsync(action: Promise<unknown> | (() => Promise<unknown>), expectedError: Error): PromiseAsyncResult<void>\r\n {\r\n const promiseOrAsyncAction = isFunction(action)\r\n ? async () => await action()\r\n : action;\r\n return PromiseAsyncResult.create(assert.rejects(promiseOrAsyncAction, expectedError));\r\n }\r\n\r\n public assertInstanceOf<T>(value: unknown, type: Type<T>, typeCheck?: (value: unknown) => value is T): asserts value is T\r\n {\r\n Test.assertInstanceOf(this, value, type, typeCheck);\r\n }\r\n}","import { AssertionError } from \"assert\";\nimport { AssertTest } from \"./assertTest\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"assertTest.ts\", () =>\n {\n runner.testType(\"AssertTest\", () =>\n {\n runner.testFunction(\"assertThrows()\", () =>\n {\n runner.test(\"with throwing action\", (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n at.assertThrows(() => { throw new Error(\"abc\"); }, new Error(\"abc\"));\n });\n\n runner.test(\"with non-throwing action\", (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n test.assertThrows(\n () => at.assertThrows(() => {}, new Error(\"oops\")),\n new AssertionError({\n message: \"Missing expected exception (Error).\",\n operator: \"throws\",\n expected: new Error(\"oops\"),\n }),\n );\n });\n });\n\n runner.testFunction(\"assertThrowsAsync()\", () =>\n {\n runner.test(\"with throwing sync action\", async (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n await at.assertThrowsAsync(() => { throw new Error(\"abc\"); }, new Error(\"abc\"));\n });\n\n runner.test(\"with throwing async action\", async (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n await at.assertThrowsAsync(async () => { throw new Error(\"abc\"); }, new Error(\"abc\"));\n });\n\n runner.test(\"with rejected Promise\", async (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n await at.assertThrowsAsync(Promise.reject(new Error(\"abc\")), new Error(\"abc\"));\n });\n\n runner.test(\"with throwing action that returns a rejected Promise\", async (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n await at.assertThrowsAsync(() => Promise.reject(new Error(\"abc\")), new Error(\"abc\"));\n });\n\n runner.test(\"with non-throwing async action\", async (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n await test.assertThrowsAsync(\n async () => await at.assertThrowsAsync(async () => {}, new Error(\"oops\")),\n new AssertionError({\n message: \"Missing expected rejection (Error).\",\n operator: \"rejects\",\n expected: new Error(\"oops\"),\n }),\n );\n });\n });\n });\n });\n}","import { PreCondition } from \"../sources/preCondition\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\n/**\r\n * A type that is used to mark that a test group or a test should be skipped.\r\n */\r\nexport class BasicTestSkip implements TestSkip\r\n{\r\n private readonly shouldSkip: boolean;\r\n private readonly message: string;\r\n\r\n private constructor(shouldSkip: boolean, message: string)\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(message, \"message\");\r\n\r\n this.shouldSkip = shouldSkip;\r\n this.message = message;\r\n }\r\n\r\n /**\r\n * Create a new {@link TestSkip} with the provided properties.\r\n * @param shouldSkip Whether the tests associated with the new {@link TestSkip}\r\n * should be skipped.\r\n * @param message The message that explains why the tests associated with this {@link TestSkip}\r\n * should be skipped.\r\n */\r\n public static create(shouldSkip?: boolean, message?: string): BasicTestSkip\r\n {\r\n if (shouldSkip === undefined || shouldSkip === null)\r\n {\r\n shouldSkip = true;\r\n }\r\n\r\n if (message === undefined || message === null)\r\n {\r\n message = \"\";\r\n }\r\n\r\n return new BasicTestSkip(shouldSkip, message);\r\n }\r\n\r\n public getShouldSkip(): boolean\r\n {\r\n return this.shouldSkip;\r\n }\r\n\r\n public getMessage(): string\r\n {\r\n return this.message;\r\n }\r\n}","import { JavascriptIterable } from \"../sources/javascript\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { join } from \"../sources/strings\";\r\n\r\nexport class FailedTest\r\n{\r\n private readonly fullTestNameParts: JavascriptIterable<string>;\r\n private readonly error: unknown;\r\n\r\n private constructor(fullTestNameParts: JavascriptIterable<string>, error: unknown)\r\n {\r\n PreCondition.assertNotEmpty(fullTestNameParts, \"fullTestName\");\r\n PreCondition.assertNotUndefinedAndNotNull(error, \"error\");\r\n\r\n this.fullTestNameParts = fullTestNameParts;\r\n this.error = error;\r\n }\r\n\r\n public static create(fullTestNameParts: JavascriptIterable<string>, error: unknown): FailedTest\r\n {\r\n return new FailedTest(fullTestNameParts, error);\r\n }\r\n\r\n public getFullTestNameParts(): JavascriptIterable<string>\r\n {\r\n return this.fullTestNameParts;\r\n }\r\n\r\n public getFullTestName(): string\r\n {\r\n return join(\" \", this.fullTestNameParts);\r\n }\r\n\r\n public getError(): unknown\r\n {\r\n return this.error;\r\n }\r\n\r\n public getErrorMessage(): string\r\n {\r\n return this.error instanceof Error && this.error.stack ? this.error.stack : `${this.error}`;\r\n }\r\n}","import { JavascriptIterable } from \"../sources/javascript\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { join } from \"../sources/strings\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\nexport class SkippedTest\r\n{\r\n private readonly skip: TestSkip;\r\n private readonly fullTestNameParts: JavascriptIterable<string>;\r\n\r\n private constructor(skip: TestSkip, fullTestNameParts: JavascriptIterable<string>)\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(skip, \"skip\");\r\n PreCondition.assertNotEmpty(fullTestNameParts, \"fullTestNameParts\");\r\n\r\n this.skip = skip;\r\n this.fullTestNameParts = fullTestNameParts;\r\n }\r\n\r\n public static create(skip: TestSkip, fullTestNameParts: JavascriptIterable<string>): SkippedTest\r\n {\r\n return new SkippedTest(skip, fullTestNameParts);\r\n }\r\n\r\n public getSkipMessage(): string\r\n {\r\n return this.skip.getMessage();\r\n }\r\n\r\n public getFullTestNameParts(): JavascriptIterable<string>\r\n {\r\n return this.fullTestNameParts;\r\n }\r\n\r\n public getFullTestName(): string\r\n {\r\n return join(\" \", this.fullTestNameParts);\r\n }\r\n}","import { JavascriptIterable } from \"../sources/javascript\";\r\nimport { List } from \"../sources/list\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { join } from \"../sources/strings\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\nexport class TestAction\r\n{\r\n private readonly parent: TestAction | undefined;\r\n private readonly name: string;\r\n private readonly skip: TestSkip | undefined;\r\n private readonly action: () => (void | Promise<void>);\r\n\r\n private constructor(parent: TestAction | undefined, name: string, skip: TestSkip | undefined, action: () => (void | Promise<void>))\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(name, \"name\");\r\n PreCondition.assertNotUndefinedAndNotNull(action, \"action\");\r\n\r\n this.parent = parent;\r\n this.name = name;\r\n this.skip = skip;\r\n this.action = action;\r\n }\r\n\r\n public static create(parent: TestAction | undefined, name: string, skip: TestSkip | undefined, action: () => (void | Promise<void>)): TestAction\r\n {\r\n return new TestAction(parent, name, skip, action);\r\n }\r\n\r\n public getParent(): TestAction | undefined\r\n {\r\n return this.parent;\r\n }\r\n\r\n public getName(): string\r\n {\r\n return this.name;\r\n }\r\n\r\n public getFullNameParts(): JavascriptIterable<string>\r\n {\r\n const result: List<string> = List.create();\r\n if (this.parent)\r\n {\r\n result.addAll(this.parent.getFullNameParts());\r\n }\r\n result.add(this.getName());\r\n return result;\r\n }\r\n\r\n public getFullName(): string\r\n {\r\n return join(\" \", this.getFullNameParts());\r\n }\r\n\r\n public getSkip(): TestSkip | undefined\r\n {\r\n return this.skip || this.parent?.getSkip();\r\n }\r\n\r\n public shouldSkip(): boolean\r\n {\r\n return !!this.getSkip()?.getShouldSkip();\r\n }\r\n\r\n public getAction(): () => (void | Promise<void>)\r\n {\r\n return this.action;\r\n }\r\n \r\n public runAsync(): void | Promise<void>\r\n {\r\n return this.action();\r\n }\r\n}","import { BasicTestSkip } from \"./basicTestSkip\";\r\n\r\n/**\r\n * A type that is used to mark that a test group or a test should be skipped.\r\n */\r\nexport abstract class TestSkip\r\n{\r\n protected constructor()\r\n {\r\n }\r\n\r\n /**\r\n * Create a new {@link TestSkip} with the provided properties.\r\n * @param shouldSkip Whether the tests associated with the new {@link TestSkip}\r\n * should be skipped.\r\n * @param message The message that explains why the tests associated with this {@link TestSkip}\r\n * should be skipped.\r\n */\r\n public static create(shouldSkip?: boolean, message?: string): TestSkip\r\n {\r\n return BasicTestSkip.create(shouldSkip, message);\r\n }\r\n\r\n /**\r\n * Get whether the tests associated with this {@link TestSkip} should be skipped.\r\n */\r\n public abstract getShouldSkip(): boolean;\r\n\r\n /**\r\n * Get the message that explains why the tests associated with this {@link TestSkip}\r\n * should be skipped.\r\n */\r\n public abstract getMessage(): string;\r\n}","import { andList } from \"../sources/english\";\r\nimport { Iterable } from \"../sources/iterable\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { ToStringFunctions } from \"../sources/toStringFunctions\";\r\nimport {\r\n getName, getParameterCount, isBoolean, isFunction, isString, Type\r\n} from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\n/**\r\n * A type that can be used to run tests.\r\n */\r\nexport abstract class TestRunner\r\n{\r\n /**\r\n * Get a {@link string} that concatenates the {@link string} representation of each\r\n * of the provided values into an \"and-list\".\r\n * @param values The values to concatenate.\r\n */\r\n public andList(values: unknown[] | Iterable<unknown>): string\r\n {\r\n return TestRunner.andList(this, values);\r\n }\r\n\r\n /**\r\n * Get a {@link string} that concatenates the {@link string} representation of each\r\n * of the provided values into an \"and-list\".\r\n * @param values The values to concatenate.\r\n */\r\n public static andList(runner: TestRunner, values: unknown[] | Iterable<unknown>): string\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(runner, \"runner\");\r\n PreCondition.assertNotUndefinedAndNotNull(values, \"values\");\r\n\r\n return andList(values.map((value: unknown) => runner.toString(value)));\r\n }\r\n\r\n /**\r\n * Get the {@link string} representation of the provided value.\r\n * @param value The value to get the {@link string} representation of.\r\n */\r\n public toString(value: unknown): string\r\n {\r\n return TestRunner.toString(this, value);\r\n }\r\n\r\n /**\r\n * Get the {@link string} representation of the provided value.\r\n * @param value The value to get the {@link string} representation of.\r\n */\r\n public static toString(_runner: TestRunner, value: unknown): string\r\n {\r\n const toStringFunctions: ToStringFunctions = ToStringFunctions.create();\r\n return toStringFunctions.toString(value);\r\n }\r\n\r\n public skip(message?: string): TestSkip;\r\n /**\r\n * Create a {@link TestSkip} object that will prevent tests from being run.\r\n * @param shouldSkip Whether these tests should be skipped.\r\n * @param message The message that explains why the tests are being skipped.\r\n */\r\n public skip(shouldSkip: boolean, message?: string): TestSkip;\r\n skip(messageOrShouldSkip?: string | boolean | undefined, message?: string): TestSkip\r\n {\r\n let shouldSkip: boolean;\r\n if (!isBoolean(messageOrShouldSkip))\r\n {\r\n shouldSkip = true;\r\n message = messageOrShouldSkip;\r\n }\r\n else\r\n {\r\n shouldSkip = messageOrShouldSkip;\r\n }\r\n return TestRunner.skip(this, shouldSkip, message);\r\n }\r\n\r\n /**\r\n * Create a {@link TestSkip} object that will prevent tests from being run.\r\n * @param shouldSkip Whether these tests should be skipped.\r\n * @param message The message that explains why the tests are being skipped.\r\n */\r\n public static skip(_runner: TestRunner, shouldSkip?: boolean, message?: string): TestSkip\r\n {\r\n return TestSkip.create(shouldSkip, message);\r\n }\r\n\r\n public static runTestAction(runner: TestRunner, name: string, skip: TestSkip | undefined, testAction: (() => void) | ((test: Test) => void)): void\r\n {\r\n if (getParameterCount(testAction) === 0)\r\n {\r\n runner.testGroup(name, skip, <() => void>testAction);\r\n }\r\n else\r\n {\r\n runner.test(name, skip, <(test: Test) => void>testAction);\r\n }\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided file.\r\n * @param fileName The name of the file that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public testFile(fileName: string, testAction: (() => void) | ((test: Test) => void)): void;\r\n /**\r\n * Create a test group that will test the provided file.\r\n * @param fileName The name of the file that is being tested.\r\n * @param skip A value that indicates whether these tests should be skipped.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public testFile(fileName: string, skip: TestSkip | undefined, testAction: (() => void) | ((test: Test) => void)): void;\r\n testFile(fileName: string, skipOrTestAction: TestSkip | ((() => void) | ((test: Test) => void)) | undefined, testAction?: (() => void) | ((test: Test) => void)): void\r\n {\r\n TestRunner.testFile(this, fileName, skipOrTestAction, testAction);\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided file.\r\n * @param runner The {@link TestRunner} that will run the tests.\r\n * @param fileName The name of the file that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public static testFile(runner: TestRunner, fileName: string, skipOrTestAction: TestSkip | ((() => void) | ((test: Test) => void)) | undefined, testAction?: (() => void) | ((test: Test) => void)): void\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(runner, \"runner\");\r\n PreCondition.assertNotUndefinedAndNotNull(fileName, \"fileName\");\r\n PreCondition.assertNotEmpty(fileName, \"fileName\");\r\n let skip: TestSkip | undefined;\r\n if (isFunction(skipOrTestAction))\r\n {\r\n PreCondition.assertUndefined(testAction, \"testAction\");\r\n\r\n skip = undefined;\r\n testAction = skipOrTestAction;\r\n }\r\n else\r\n {\r\n skip = skipOrTestAction;\r\n }\r\n PreCondition.assertNotUndefinedAndNotNull(testAction, \"testAction\");\r\n\r\n TestRunner.runTestAction(runner, fileName, skip, testAction);\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided type.\r\n * @param type The {@link Type} or name of the type that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public testType(typeNameOrType: string | Type<unknown>, testAction: (() => void) | ((test: Test) => void)): void;\r\n /**\r\n * Create a test group that will test the provided type.\r\n * @param type The {@link Type} or name of the type that is being tested.\r\n * @param skip A value that indicates whether these tests should be skipped.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public testType(typeNameOrType: string | Type<unknown>, skip: TestSkip | undefined, testAction: (() => void) | ((test: Test) => void)): void;\r\n testType(typeNameOrType: string | Type<unknown>, skipOrTestAction: TestSkip | undefined | ((() => void) | ((test: Test) => void)), testAction?: (() => void) | ((test: Test) => void)): void\r\n {\r\n TestRunner.testType(this, typeNameOrType, skipOrTestAction, testAction);\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided type.\r\n * @param runner The {@link TestRunner} that will run the tests.\r\n * @param type The {@link Type} or name of the type that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public static testType(runner: TestRunner, typeNameOrType: string | Type<unknown>, skipOrTestAction: TestSkip | undefined | ((() => void) | ((test: Test) => void)), testAction: ((() => void) | ((test: Test) => void)) | undefined): void\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(runner, \"runner\");\r\n PreCondition.assertNotUndefinedAndNotNull(typeNameOrType, \"typeNameOrType\");\r\n let typeName: string;\r\n if (isString(typeNameOrType))\r\n {\r\n typeName = typeNameOrType;\r\n }\r\n else\r\n {\r\n typeName = getName(typeNameOrType);\r\n }\r\n PreCondition.assertNotEmpty(typeName, \"typeName\");\r\n let skip: TestSkip | undefined;\r\n if (isFunction(skipOrTestAction))\r\n {\r\n PreCondition.assertUndefined(testAction, \"testAction\");\r\n\r\n skip = undefined;\r\n testAction = skipOrTestAction;\r\n }\r\n else\r\n {\r\n skip = skipOrTestAction;\r\n }\r\n PreCondition.assertNotUndefinedAndNotNull(testAction, \"testAction\");\r\n\r\n TestRunner.runTestAction(runner, typeName, skip, testAction);\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided function.\r\n * @param functionSignature The signature of the function that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public testFunction(functionSignature: string, testAction: (() => void) | ((test: Test) => void)): void;\r\n public testFunction(functionSignature: string, skip: TestSkip | undefined, testAction: (() => void) | ((test: Test) => void)): void;\r\n testFunction(functionSignature: string, skipOrTestAction: TestSkip | undefined | ((() => void) | ((test: Test) => void)), testAction?: (() => void) | ((test: Test) => void)): void\r\n {\r\n TestRunner.testFunction(this, functionSignature, skipOrTestAction, testAction);\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided function.\r\n * @param runner The {@link TestRunner} that will run the tests.\r\n * @param functionSignature The signature of the function that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public static testFunction(runner: TestRunner, functionSignature: string, skipOrTestAction: TestSkip | undefined | ((() => void) | ((test: Test) => void)), testAction: ((() => void) | ((test: Test) => void)) | undefined): void\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(runner, \"runner\");\r\n PreCondition.assertNotEmpty(functionSignature, \"functionSignature\");\r\n let skip: TestSkip | undefined;\r\n if (isFunction(skipOrTestAction))\r\n {\r\n PreCondition.assertUndefined(testAction, \"testAction\");\r\n\r\n skip = undefined;\r\n testAction = skipOrTestAction;\r\n }\r\n else\r\n {\r\n skip = skipOrTestAction;\r\n }\r\n PreCondition.assertNotUndefinedAndNotNull(testAction, \"testAction\");\r\n\r\n TestRunner.runTestAction(runner, functionSignature, skip, testAction);\r\n }\r\n\r\n /**\r\n * Create and run a test group with the provided name.\r\n * @param testGroupName The name of the test group to run.\r\n * @param testAction The action that runs the test group.\r\n */\r\n public abstract testGroup(testGroupName: string, testAction: () => void): void;\r\n /**\r\n * Create and run a test group with the provided name.\r\n * @param testGroupName The name of the test group to run.\r\n * @param testAction The action that runs the test group.\r\n */\r\n public abstract testGroup(testGroupName: string, skip: TestSkip | undefined, testAction: () => void): void;\r\n\r\n /**\r\n * Create and run a test with the provided name.\r\n * @param testName The name of the test to run.\r\n * @param testAction The action that runs the test.\r\n */\r\n public abstract test(testName: string, testAction: (test: Test) => void): void;\r\n /**\r\n * Create and run a test with the provided name.\r\n * @param testName The name of the test to run.\r\n * @param testAction The action that runs the test.\r\n */\r\n public abstract test(testName: string, skip: TestSkip | undefined, testAction: (test: Test) => void): void;\r\n}","import { PromiseAsyncResult } from \"../sources/promiseAsyncResult\";\r\nimport { CharacterWriteStream } from \"../sources/characterWriteStream\";\r\nimport { CurrentProcess } from \"../sources/currentProcess\";\r\nimport { Iterable } from \"../sources/iterable\";\r\nimport { JavascriptIterable } from \"../sources/javascript\";\r\nimport { List } from \"../sources/list\";\r\nimport { NodeJSCharacterWriteStream } from \"../sources/nodeJSCharacterWriteStream\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { join } from \"../sources/strings\";\r\nimport { isFunction, isJavascriptIterable, isPromise } from \"../sources/types\";\r\nimport { AssertTest } from \"./assertTest\";\r\nimport { FailedTest } from \"./failedTest\";\r\nimport { SkippedTest } from \"./skippedTest\";\r\nimport { Test } from \"./test\";\r\nimport { TestAction } from \"./testAction\";\r\nimport { TestRunner } from \"./testRunner\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\nexport type ConsoleTestFunction = (runner: ConsoleTestRunner) => (void | Promise<void>);\r\nexport type ConsoleTestFunctionContainer = { test: ConsoleTestFunction };\r\n\r\nexport class ConsoleTestRunner extends TestRunner\r\n{\r\n private writeStream: CharacterWriteStream;\r\n\r\n private readonly pendingActions: List<TestAction>;\r\n private pendingActionsInsertIndex: number;\r\n private currentTestAction: TestAction | undefined;\r\n private currentTest: Test | undefined;\r\n\r\n private passedTestCount: number;\r\n private readonly skippedTests: List<SkippedTest>;\r\n private readonly testFailures: List<FailedTest>;\r\n\r\n public constructor()\r\n {\r\n super();\r\n\r\n this.writeStream = NodeJSCharacterWriteStream.create(process.stdout);\r\n\r\n this.pendingActions = List.create();\r\n this.pendingActionsInsertIndex = 0;\r\n\r\n this.passedTestCount = 0;\r\n this.skippedTests = List.create();\r\n this.testFailures = List.create();\r\n }\r\n\r\n public static create(): ConsoleTestRunner\r\n {\r\n return new ConsoleTestRunner();\r\n }\r\n\r\n public static run(testFunction: ConsoleTestFunction | ConsoleTestFunctionContainer): Promise<void>;\r\n public static run(testFunctions: JavascriptIterable<ConsoleTestFunction | ConsoleTestFunctionContainer>): Promise<void>;\r\n static run(testFunctionOrTestFunctions: ConsoleTestFunction | ConsoleTestFunctionContainer | JavascriptIterable<ConsoleTestFunction | ConsoleTestFunctionContainer>): Promise<void>\r\n {\r\n let testFunction: ConsoleTestFunction;\r\n if (isFunction(testFunctionOrTestFunctions))\r\n {\r\n testFunction = testFunctionOrTestFunctions;\r\n }\r\n else if (!isJavascriptIterable(testFunctionOrTestFunctions))\r\n {\r\n testFunction = testFunctionOrTestFunctions.test;\r\n }\r\n else\r\n {\r\n const testFunctions: JavascriptIterable<ConsoleTestFunction | ConsoleTestFunctionContainer> = testFunctionOrTestFunctions;\r\n testFunction = async (runner: ConsoleTestRunner) =>\r\n {\r\n for (const testFunction of testFunctions)\r\n {\r\n if (isFunction(testFunction))\r\n {\r\n await testFunction(runner);\r\n }\r\n else\r\n {\r\n await testFunction.test(runner);\r\n }\r\n }\r\n };\r\n }\r\n\r\n return CurrentProcess.run(async (currentProcess: CurrentProcess) =>\r\n {\r\n const runner: ConsoleTestRunner = ConsoleTestRunner.create()\r\n .setWriteStream(currentProcess.getOutputWriteStream());\r\n\r\n await testFunction(runner);\r\n\r\n await runner.runAsync();\r\n\r\n await runner.printSummary();\r\n });\r\n }\r\n\r\n public setWriteStream(writeStream: CharacterWriteStream): this\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(writeStream, \"writeStream\");\r\n\r\n this.writeStream = writeStream;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get the number of {@link TestAction}s that have yet to be executed.\r\n */\r\n public getPendingTestActionsCount(): number\r\n {\r\n return this.pendingActions.getCount().await();\r\n }\r\n\r\n /**\r\n * Get the index in the pending-{@link TestAction} stack that new {@link TestAction}s will be\r\n * inserted at.\r\n */\r\n public getPendingTestActionsInsertIndex(): number\r\n {\r\n return this.pendingActionsInsertIndex;\r\n }\r\n\r\n /**\r\n * Get the number of tests that have been skipped.\r\n */\r\n public getSkippedTestCount(): number\r\n {\r\n return this.skippedTests.getCount().await();\r\n }\r\n\r\n public getSkippedTests(): Iterable<SkippedTest>\r\n {\r\n return this.skippedTests;\r\n }\r\n\r\n /**\r\n * Get the number of tests that have passed.\r\n */\r\n public getPassedTestCount(): number\r\n {\r\n return this.passedTestCount;\r\n }\r\n\r\n public getFailedTestCount(): number\r\n {\r\n return this.testFailures.getCount().await();\r\n }\r\n\r\n public getFailedTests(): Iterable<FailedTest>\r\n {\r\n return this.testFailures;\r\n }\r\n\r\n /**\r\n * Get the {@link TestAction} that is currently executing or undefined if no {@link TestAction}\r\n * is executing.\r\n */\r\n public getCurrentTestAction(): TestAction | undefined\r\n {\r\n return this.currentTestAction;\r\n }\r\n\r\n public getCurrentTest(): Test | undefined\r\n {\r\n return this.currentTest;\r\n }\r\n\r\n private assertNoCurrentTest(): void\r\n {\r\n if (this.currentTest !== undefined)\r\n {\r\n this.currentTest.fail(\"Can't start a new test group or a new test while running a test.\");\r\n }\r\n }\r\n\r\n public beforeTest(fullTestNameParts: JavascriptIterable<string>): PromiseAsyncResult<void>\r\n {\r\n return PromiseAsyncResult.create(async () =>\r\n {\r\n await this.writeStream.writeString(join(\" \", fullTestNameParts));\r\n });\r\n }\r\n\r\n public afterPassedTest(): PromiseAsyncResult<void>\r\n {\r\n return PromiseAsyncResult.create(async () =>\r\n {\r\n await this.writeStream.writeLine(\" - Passed\");\r\n this.passedTestCount++;\r\n });\r\n }\r\n\r\n public afterSkippedTest(fullTestNameParts: JavascriptIterable<string>, skip: TestSkip | undefined): PromiseAsyncResult<void>\r\n {\r\n PreCondition.assertNotEmpty(fullTestNameParts, \"fullTestNameParts\");\r\n PreCondition.assertNotUndefinedAndNotNull(skip, \"skip\");\r\n\r\n return PromiseAsyncResult.create(async () =>\r\n {\r\n this.skippedTests.add(SkippedTest.create(skip, fullTestNameParts));\r\n await this.writeStream.writeLine(\" - Skipped\");\r\n });\r\n }\r\n\r\n public afterFailedTest(fullTestNameParts: JavascriptIterable<string>, error: unknown): PromiseAsyncResult<void>\r\n {\r\n PreCondition.assertNotEmpty(fullTestNameParts, \"fullTestNameParts\");\r\n PreCondition.assertNotUndefinedAndNotNull(error, \"error\");\r\n\r\n return PromiseAsyncResult.create(async () =>\r\n {\r\n this.testFailures.add(FailedTest.create(fullTestNameParts, error));\r\n await this.writeStream.writeLine(\" - Failed\");\r\n });\r\n }\r\n\r\n public testGroup(testGroupName: string, testAction: () => (void | Promise<void>)): void;\r\n public testGroup(testGroupName: string, skip: TestSkip | undefined, testAction: () => (void | Promise<void>)): void;\r\n testGroup(testGroupName: string, skipOrTestAction: TestSkip | undefined | (() => (void | Promise<void>)), testAction?: () => (void | Promise<void>)): void\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(testGroupName, \"testGroupName\");\r\n PreCondition.assertNotEmpty(testGroupName, \"testGroupName\");\r\n let skip: TestSkip | undefined;\r\n if (isFunction(skipOrTestAction))\r\n {\r\n PreCondition.assertUndefined(testAction, \"testAction\");\r\n\r\n skip = undefined;\r\n testAction = skipOrTestAction;\r\n }\r\n else\r\n {\r\n skip = skipOrTestAction;\r\n }\r\n PreCondition.assertNotUndefinedAndNotNull(testAction, \"testAction\");\r\n\r\n this.assertNoCurrentTest();\r\n\r\n this.pendingActions.insert(\r\n this.pendingActionsInsertIndex,\r\n TestAction.create(\r\n this.getCurrentTestAction(),\r\n testGroupName,\r\n skip,\r\n async () =>\r\n {\r\n const previousTestActionInsertIndex: number = this.pendingActionsInsertIndex;\r\n this.pendingActionsInsertIndex = this.pendingActions.getCount().await();\r\n const currentTestAction: TestAction = this.getCurrentTestAction()!;\r\n try\r\n {\r\n await testAction();\r\n }\r\n catch (error)\r\n {\r\n await this.afterFailedTest(currentTestAction.getFullNameParts(), error);\r\n }\r\n finally\r\n {\r\n this.pendingActionsInsertIndex = previousTestActionInsertIndex;\r\n }\r\n },\r\n ),\r\n );\r\n }\r\n\r\n public test(testName: string, testAction: (test: Test) => (void | Promise<void>)): void;\r\n public test(testName: string, skip: TestSkip | undefined, testAction: (test: Test) => (void | Promise<void>)): void;\r\n test(testName: string, skipOrTestAction: TestSkip | undefined | ((test: Test) => (void | Promise<void>)), testAction?: (test: Test) => (void | Promise<void>)): void\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(testName, \"testName\");\r\n PreCondition.assertNotEmpty(testName, \"testName\");\r\n let skip: TestSkip | undefined;\r\n if (isFunction(skipOrTestAction))\r\n {\r\n PreCondition.assertUndefined(testAction, \"testAction\");\r\n\r\n skip = undefined;\r\n testAction = skipOrTestAction;\r\n }\r\n else\r\n {\r\n skip = skipOrTestAction;\r\n }\r\n PreCondition.assertNotUndefinedAndNotNull(testAction, \"testAction\");\r\n\r\n this.assertNoCurrentTest();\r\n\r\n this.pendingActions.insert(\r\n this.pendingActionsInsertIndex,\r\n TestAction.create(\r\n this.getCurrentTestAction(),\r\n testName,\r\n skip,\r\n async () =>\r\n {\r\n const currentTestAction: TestAction = this.getCurrentTestAction()!;\r\n try\r\n {\r\n await this.beforeTest(currentTestAction.getFullNameParts());\r\n if (currentTestAction.shouldSkip())\r\n {\r\n await this.afterSkippedTest(currentTestAction.getFullNameParts(), currentTestAction.getSkip());\r\n }\r\n else\r\n {\r\n this.currentTest = AssertTest.create(testName);\r\n try\r\n {\r\n await testAction(this.currentTest);\r\n await this.afterPassedTest();\r\n }\r\n finally\r\n {\r\n this.currentTest = undefined;\r\n }\r\n }\r\n }\r\n catch (error)\r\n {\r\n await this.afterFailedTest(currentTestAction.getFullNameParts(), error);\r\n }\r\n },\r\n ),\r\n );\r\n }\r\n\r\n public async runAsync(): Promise<void>\r\n {\r\n while (this.pendingActions.any().await())\r\n {\r\n this.currentTestAction = this.pendingActions.removeLast().await();\r\n try\r\n {\r\n const result: void | Promise<void> = this.currentTestAction.runAsync();\r\n if (isPromise(result))\r\n {\r\n await result;\r\n }\r\n }\r\n finally\r\n {\r\n this.currentTestAction = undefined;\r\n }\r\n }\r\n }\r\n\r\n public printSummary(): PromiseAsyncResult<void>\r\n {\r\n return PromiseAsyncResult.create(async () =>\r\n {\r\n await this.writeStream.writeLine();\r\n\r\n const skippedTests: Iterable<SkippedTest> = this.getSkippedTests();\r\n if (await skippedTests.any())\r\n {\r\n await this.writeStream.writeLine(`Skipped Tests:`);\r\n let counter: number = 0;\r\n for (const skippedTest of skippedTests)\r\n {\r\n await this.writeStream.writeLine(`${++counter}) ${skippedTest.getFullTestName()}`);\r\n const skipMessage: string = skippedTest.getSkipMessage();\r\n if (skipMessage)\r\n {\r\n await this.writeStream.writeLine(` ${skipMessage}`);\r\n }\r\n }\r\n await this.writeStream.writeLine();\r\n }\r\n\r\n const failedTests: Iterable<FailedTest> = this.getFailedTests();\r\n if (await failedTests.any())\r\n {\r\n await this.writeStream.writeLine(\"Failed Tests:\");\r\n\r\n let counter: number = 0;\r\n for (const failedTest of failedTests)\r\n {\r\n await this.writeStream.writeLine(`${++counter}) ${failedTest.getFullTestName()}`);\r\n await this.writeStream.writeLine(` ${failedTest.getErrorMessage()}`);\r\n await this.writeStream.writeLine();\r\n }\r\n }\r\n\r\n const passedTestCount: number = this.getPassedTestCount();\r\n if (passedTestCount > 0)\r\n {\r\n await this.writeStream.writeLine(`Passed: ${passedTestCount}`);\r\n }\r\n\r\n if (await skippedTests.any())\r\n {\r\n await this.writeStream.writeLine(`Skipped: ${skippedTests.getCount().await()}`);\r\n }\r\n\r\n if (await failedTests.any())\r\n {\r\n await this.writeStream.writeLine(`Failed: ${failedTests.getCount().await()}`);\r\n }\r\n });\r\n }\r\n}"],"mappings":"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","names":["test","value","test","testFunction"]}
|