@everyonesoftware/common 6.0.0 → 7.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../tests/byteListStreamTests.ts","../tests/byteListTests.ts","../tests/bytesTests.ts","../tests/characterListStreamTests.ts","../tests/characterListTests.ts","../tests/comparerTests.ts","../tests/conditionTests.ts","../tests/consoleTestRunnerTests.ts","../tests/testRunnerTests.ts","../tests/dateTimeTests.ts","../tests/depthFirstSearchTests.ts","../tests/disposableTests.ts","../tests/englishTests.ts","../tests/equalFunctionsTests.ts","../tests/fetchHttpClientTests.ts","../tests/generatorTests.ts","../tests/iteratorTests.ts","../tests/httpClientTests.ts","../tests/inMemoryCharacterWriteStreamTests.ts","../tests/characterWriteStreamTests.ts","../tests/iterableTests.ts","../tests/javascriptMapMapTests.ts","../tests/mapTests.ts","../tests/listTests.ts","../tests/mapIteratorTests.ts","../tests/mutableConditionTests.ts","../tests/mutableMapTests.ts","../tests/notFoundErrorTests.ts","../tests/postConditionErrorTests.ts","../tests/preConditionErrorTests.ts","../tests/promiseAsyncResultTests.ts","../tests/propertyTests.ts","../tests/queueTests.ts","../tests/nodeJSHttpServerTests.ts","../tests/recreationDotGovClientTests.ts","../tests/setTests.ts","../tests/stackTests.ts","../tests/stringComparerTests.ts","../tests/stringIteratorTests.ts","../tests/stringsTests.ts","../tests/syncResultTests.ts","../tests/testActionTests.ts","../tests/toStringFunctionsTests.ts","../tests/typesTests.ts","../tests/whereIteratorTests.ts","../tests/wonderlandTrailClientTests.ts","../tests/tests.ts"],"sourcesContent":["import { ByteListStream } from \"../sources/byteListStream\";\nimport { EmptyError } from \"../sources/emptyError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"byteListStream.ts\", () =>\n {\n runner.testType(\"ByteListStream\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with no arguments\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with empty array\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([]);\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with non-empty array\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n });\n\n runner.testFunction(\"writeBytes()\", () =>\n {\n runner.test(\"with undefined bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes(undefined!), new PreConditionError(\n \"Expression: bytes\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with null bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes(null!), new PreConditionError(\n \"Expression: bytes\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with empty bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertEqual(0, stream.writeBytes([]).await());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with non-empty bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n\n test.assertEqual(4, stream.writeBytes([1, 2, 3, 4]).await());\n test.assertEqual(4, stream.getAvailableByteCount());\n\n const bytes: Uint8Array = stream.readBytes(10).await();\n test.assertNotUndefinedAndNotNull(bytes);\n test.assertEqual(4, bytes.length);\n test.assertEqual(new Uint8Array([1, 2, 3, 4]), bytes);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], 3), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with valid non-zero startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n const writeBytesResult: number = stream.writeBytes([1, 2], 1).await();\n test.assertEqual(1, writeBytesResult);\n test.assertEqual(1, stream.getAvailableByteCount());\n\n test.assertEqual(new Uint8Array([2]), stream.readBytes(5).await());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex equal to bytes length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n const writeBytesResult: number = stream.writeBytes([1, 2], 2).await();\n test.assertEqual(0, writeBytesResult);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], 0, -1), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with too large length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], 0, 3), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with valid startIndex and length values\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n const writeBytesResult: number = stream.writeBytes([1, 2, 3, 4, 5], 2, 2).await();\n test.assertEqual(2, writeBytesResult);\n test.assertEqual(2, stream.getAvailableByteCount());\n\n test.assertEqual(new Uint8Array([3, 4]), stream.readBytes(50).await());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n });\n\n runner.testFunction(\"readBytes()\", () =>\n {\n runner.testGroup(\"with empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.readBytes(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.readBytes(0).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.readBytes(1).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n });\n\n runner.testGroup(\"with non-empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertThrows(() => stream.readBytes(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(0).await();\n test.assertEqual(new Uint8Array(), readBytesResult);\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count less than bytes available\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(2).await();\n test.assertEqual(new Uint8Array([1, 2]), readBytesResult);\n test.assertEqual(1, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count equal to bytes available\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(3).await();\n test.assertEqual(new Uint8Array([1, 2, 3]), readBytesResult);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count greater than bytes available\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(4).await();\n test.assertEqual(new Uint8Array([1, 2, 3]), readBytesResult);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with undefined output\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertThrows(() => stream.readBytes(undefined!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with null output\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertThrows(() => stream.readBytes(null!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with empty output\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array();\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(0, readBytesResult);\n test.assertEqual(output, new Uint8Array());\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with output smaller than the available bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(1);\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(1, readBytesResult);\n test.assertEqual(output, new Uint8Array([1]));\n test.assertEqual(2, stream.getAvailableByteCount());\n });\n\n runner.test(\"with output equal to the available bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(3);\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(3, readBytesResult);\n test.assertEqual(output, new Uint8Array([1, 2, 3]));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with output larger than available bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(3, readBytesResult);\n test.assertEqual(output, new Uint8Array([1, 2, 3, 0, 0]));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, 6), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: 6\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(3, stream.readBytes(output, 2).await());\n test.assertEqual(new Uint8Array([0, 0, 1, 2, 3]), output);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(2, stream.readBytes(output, 3).await());\n test.assertEqual(new Uint8Array([0, 0, 0, 1, 2]), output);\n test.assertEqual(1, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex equal to output length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(0, stream.readBytes(output, 5).await());\n test.assertEqual(new Uint8Array(5), output);\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, 1, -1), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with count larger than output.length - startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, 1, 5), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: 5\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(3, stream.readBytes(output, 2, 3).await());\n test.assertEqual(new Uint8Array([0, 0, 1, 2, 3]), output);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(1, stream.readBytes(output, 3, 1).await());\n test.assertEqual(new Uint8Array([0, 0, 0, 1, 0]), output);\n test.assertEqual(2, stream.getAvailableByteCount());\n });\n });\n });\n });\n });\n}","import { ByteList } from \"../sources/byteList\";\nimport { EqualFunctions } from \"../sources/equalFunctions\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { isNumber } from \"../sources/types\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"byteList.ts\", () =>\n {\n \n \n\n\n\n\n\n\n\n\n\n\n \n });\n}","import { Bytes } from \"../sources/bytes\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"bytes.ts\", () =>\r\n {\r\n runner.testType(\"Bytes\", () =>\r\n {\r\n runner.test(\"minimumValue\", (test: Test) =>\r\n {\r\n test.assertSame(Bytes.minimumValue, 0);\r\n });\r\n\r\n runner.test(\"maximumValue\", (test: Test) =>\r\n {\r\n test.assertSame(Bytes.maximumValue, 255);\r\n });\r\n\r\n runner.testFunction(\"isByte(number)\", () =>\r\n {\r\n function isByteTest(value: number, expected: boolean): void\r\n {\r\n runner.test(`with ${value}`, (test: Test) =>\r\n {\r\n test.assertSame(Bytes.isByte(value), expected);\r\n });\r\n }\r\n\r\n isByteTest(-2, false);\r\n isByteTest(-1, false);\r\n isByteTest(0, true);\r\n isByteTest(1, true);\r\n isByteTest(128, true);\r\n isByteTest(254, true);\r\n isByteTest(255, true);\r\n isByteTest(256, false);\r\n isByteTest(257, false);\r\n });\r\n });\r\n });\r\n}","import { CharacterList } from \"../sources/characterList\";\nimport { CharacterListStream } from \"../sources/characterListStream\";\nimport { EmptyError } from \"../sources/emptyError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"characterListStream.ts\", () =>\n {\n runner.testType(\"CharacterListStream\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with no arguments\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with empty array\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([]);\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with non-empty array\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create(\"abc\");\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n });\n\n runner.testFunction(\"writeCharacters()\", () =>\n {\n runner.test(\"with undefined characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(undefined!), new PreConditionError(\n \"Expression: characters\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with null characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(null!), new PreConditionError(\n \"Expression: characters\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with empty characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertEqual(0, stream.writeCharacters([]).await());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with non-empty characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n\n test.assertEqual(4, stream.writeCharacters(\"abcd\").await());\n test.assertEqual(4, stream.getAvailableCharacterCount());\n\n const characters: string = stream.readCharacters(10).await();\n test.assertNotUndefinedAndNotNull(characters);\n test.assertEqual(4, characters.length);\n test.assertEqual(\"abcd\", characters);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", 3), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with valid non-zero startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n const writeCharactersResult: number = stream.writeCharacters(\"ab\", 1).await();\n test.assertEqual(1, writeCharactersResult);\n test.assertEqual(1, stream.getAvailableCharacterCount());\n\n test.assertEqual(\"b\", stream.readCharacters(5).await());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex equal to characters length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n const writeCharactersResult: number = stream.writeCharacters(\"ab\", 2).await();\n test.assertEqual(0, writeCharactersResult);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", 0, -1), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with too large length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", 0, 3), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with valid startIndex and length values\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n const writeCharactersResult: number = stream.writeCharacters([\"a\", \"b\", \"c\", \"d\", \"e\"], 2, 2).await();\n test.assertEqual(2, writeCharactersResult);\n test.assertEqual(2, stream.getAvailableCharacterCount());\n\n test.assertEqual(\"cd\", stream.readCharacters(50).await());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n });\n\n runner.testFunction(\"readCharacters()\", () =>\n {\n runner.testGroup(\"with empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.readCharacters(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.readCharacters(0).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.readCharacters(1).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n });\n\n runner.testGroup(\"with non-empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n test.assertThrows(() => stream.readCharacters(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(0).await();\n test.assertEqual(\"\", readCharactersResult);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count less than characters available\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(2).await();\n test.assertEqual(\"ab\", readCharactersResult);\n test.assertEqual(1, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count equal to characters available\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(3).await();\n test.assertEqual(\"abc\", readCharactersResult);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count greater than characters available\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(4).await();\n test.assertEqual(\"abc\", readCharactersResult);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with undefined output\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n test.assertThrows(() => stream.readCharacters(undefined!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with null output\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n test.assertThrows(() => stream.readCharacters(null!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with empty output\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = [];\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(0, readCharactersResult);\n test.assertEqual(output, []);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with output smaller than the available characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(1);\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(1, readCharactersResult);\n test.assertEqual(output, [\"a\"]);\n test.assertEqual(2, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with output equal to the available characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(3, readCharactersResult);\n test.assertEqual(output, [\"a\", \"b\", \"c\", \"\", \"\"]);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with output larger than available characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(3, readCharactersResult);\n test.assertEqual(output, [\"a\", \"b\", \"c\", \"\", \"\"]);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, 6), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: 6\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(3, stream.readCharacters(output, 2).await());\n test.assertEqual([\"\", \"\", \"a\", \"b\", \"c\"], output);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(2, stream.readCharacters(output, 3).await());\n test.assertEqual([\"\", \"\", \"\", \"a\", \"b\"], output);\n test.assertEqual(1, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex equal to output length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(0, stream.readCharacters(output, 5).await());\n test.assertEqual([\"\", \"\", \"\", \"\", \"\"], output);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, 1, -1), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with count larger than output.length - startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, 1, 5), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: 5\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(3, stream.readCharacters(output, 2, 3).await());\n test.assertEqual([\"\", \"\", \"a\", \"b\", \"c\"], output);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(1, stream.readCharacters(output, 3, 1).await());\n test.assertEqual([\"\", \"\", \"\", \"a\", \"\"], output);\n test.assertEqual(2, stream.getAvailableCharacterCount());\n });\n });\n });\n });\n });\n}","import { CharacterList } from \"../sources/characterList\";\nimport { EqualFunctions } from \"../sources/equalFunctions\";\nimport { JavascriptIterable } from \"../sources/javascript\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { isNumber, isString } from \"../sources/types\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"characterList.ts\", () =>\n {\n runner.testType(\"CharacterList\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with no arguments\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with undefined\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(undefined);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with null\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(null!);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with empty initialValues\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([]);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with one value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"m\"]);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(1, list.getCount().await());\n test.assertTrue(list.any().await());\n test.assertEqual([\"m\"], list.toArray().await());\n });\n\n runner.test(\"with two values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"n\", \"l\"]);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(2, list.getCount().await());\n test.assertTrue(list.any().await());\n test.assertEqual([\"n\", \"l\"], list.toArray().await());\n });\n });\n\n runner.testFunction(\"add()\", () =>\n {\n function addErrorTest(value: string, expected: Error): void\n {\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n test.assertThrows(() => list.add(value), expected);\n test.assertEqual([], list.toArray().await());\n });\n }\n\n addErrorTest(\"\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"\\\"\",\n ));\n addErrorTest(\"ab\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"ab\\\"\",\n ));\n\n runner.test(\"with valid value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n const addResult1: CharacterList = list.add(\"a\");\n test.assertSame(list, addResult1);\n test.assertEqual([\"a\"], addResult1.toArray().await());\n\n const addResult2: CharacterList = list.add(\"b\");\n test.assertSame(list, addResult2);\n test.assertEqual([\"a\", \"b\"], addResult2.toArray().await());\n\n const addResult3: CharacterList = list.add(\"c\");\n test.assertSame(list, addResult3);\n test.assertEqual([\"a\", \"b\", \"c\"], addResult3.toArray().await());\n\n const addResult4: CharacterList = list.add(\"d\");\n test.assertSame(list, addResult4);\n test.assertEqual([\"a\", \"b\", \"c\", \"d\"], addResult4.toArray().await());\n });\n });\n\n runner.testFunction(\"addAll()\", () =>\n {\n runner.test(\"with empty values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n const addAllResult: CharacterList = list.addAll([]);\n test.assertSame(list, addAllResult);\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with non-empty values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n const addAllResult: CharacterList = list.addAll(\"abcde\");\n test.assertSame(list, addAllResult);\n test.assertEqual([\"a\", \"b\", \"c\", \"d\", \"e\"], list.toArray().await());\n });\n });\n\n runner.testFunction(\"insert()\", () =>\n {\n function insertErrorTest(initialValues: string[], index: number, value: string, expected: Error): void\n {\n runner.test(`with ${runner.andList([initialValues, index, value])}`, (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(initialValues);\n test.assertThrows(() => list.insert(index, value), expected);\n test.assertEqual(initialValues, list.toArray().await());\n });\n }\n\n insertErrorTest([], -1, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: 0\",\n \"Actual: -1\",\n ));\n insertErrorTest([], 1, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: 0\",\n \"Actual: 1\",\n ));\n insertErrorTest([\"z\"], -1, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: between 0 and 1\",\n \"Actual: -1\",\n ));\n insertErrorTest([\"z\"], 2, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: between 0 and 1\",\n \"Actual: 2\",\n ));\n insertErrorTest([], 0, \"\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"\\\"\",\n ));\n insertErrorTest([], 0, \"ab\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"ab\\\"\",\n ));\n\n function insertTest(initialValues: JavascriptIterable<string>, index: number, value: string, expected: string[]): void\n {\n runner.test(`with ${runner.andList([initialValues, index, value])}`, (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(initialValues);\n\n const insertResult: CharacterList = list.insert(index, value);\n test.assertSame(list, insertResult);\n test.assertEqual(expected, list.toArray().await());\n });\n }\n\n insertTest([], 0, \"z\", [\"z\"]);\n insertTest([\"a\"], 0, \"y\", [\"y\", \"a\"]);\n insertTest([\"a\"], 1, \"y\", [\"a\", \"y\"]);\n insertTest([\"a\", \"b\", \"c\"], 0, \"z\", [\"z\", \"a\", \"b\", \"c\"]);\n insertTest([\"a\", \"b\", \"c\"], 1, \"z\", [\"a\", \"z\", \"b\", \"c\"]);\n insertTest([\"a\", \"b\", \"c\"], 2, \"z\", [\"a\", \"b\", \"z\", \"c\"]);\n insertTest([\"a\", \"b\", \"c\"], 3, \"z\", [\"a\", \"b\", \"c\", \"z\"]);\n insertTest([\"a\", \"b\", \"c\", \"d\", \"e\"], 2, \"z\", [\"a\", \"b\", \"z\", \"c\", \"d\", \"e\"]);\n });\n\n runner.testFunction(\"remove()\", () =>\n {\n runner.test(\"with not-found value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n test.assertThrows(() => list.remove(\"a\").await(), new NotFoundError(\"Could not find the value to remove: \\\"a\\\"\"));\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with found value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"a\"]);\n\n const removeResult: string = list.remove(\"a\").await();\n test.assertEqual(\"a\", removeResult);\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with multiple found values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"a\", \"a\", \"a\"]);\n\n const removeResult: string = list.remove(\"a\").await();\n test.assertEqual(\"a\", removeResult);\n test.assertEqual([\"a\", \"a\"], list.toArray().await());\n });\n\n runner.test(\"with multiple found values and equalFunctions\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"a\", \"b\", \"c\", \"d\", \"e\"]);\n const isVowel = (character: string) => [\"a\", \"e\", \"i\", \"o\", \"u\"].includes(character);\n const equalFunctions: EqualFunctions = EqualFunctions.create()\n .add((left: unknown, right: unknown) =>\n {\n return isString(left) && isString(right)\n ? isVowel(left) === isVowel(right)\n : undefined;\n });\n const removeResult: string = list.remove(\"i\", equalFunctions).await();\n test.assertEqual(\"a\", removeResult);\n test.assertEqual([\"b\", \"c\", \"d\", \"e\"], list.toArray().await());\n });\n });\n });\n });\n}","import { Comparer } from \"../sources/comparer\";\r\nimport { Comparison } from \"../sources/comparison\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"comparer.ts\", () =>\r\n {\r\n runner.testType(\"Comparer<TLeft,TRight>\", () =>\r\n {\r\n runner.testFunction(\"compareSameUndefinedNull()\", () =>\r\n {\r\n function compareSameUndefinedNullTest(left: unknown, right: unknown, expected: Comparison | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n test.assertEqual(Comparer.compareSameUndefinedNull(left, right), expected);\r\n });\r\n }\r\n\r\n compareSameUndefinedNullTest(undefined, undefined, Comparison.Equal);\r\n compareSameUndefinedNullTest(undefined, null, Comparison.LessThan);\r\n compareSameUndefinedNullTest(undefined, \"hello\", Comparison.LessThan);\r\n compareSameUndefinedNullTest(undefined, 50, Comparison.LessThan);\r\n\r\n compareSameUndefinedNullTest(null, undefined, Comparison.GreaterThan);\r\n compareSameUndefinedNullTest(null, null, Comparison.Equal);\r\n compareSameUndefinedNullTest(null, \"hello\", Comparison.LessThan);\r\n compareSameUndefinedNullTest(null, 50, Comparison.LessThan);\r\n\r\n compareSameUndefinedNullTest(\"hello\", undefined, Comparison.GreaterThan);\r\n compareSameUndefinedNullTest(\"hello\", null, Comparison.GreaterThan);\r\n compareSameUndefinedNullTest(\"hello\", \"hello\", Comparison.Equal);\r\n compareSameUndefinedNullTest(\"hello\", \"abc\", undefined);\r\n compareSameUndefinedNullTest(\"hello\", 50, undefined);\r\n });\r\n\r\n runner.testFunction(\"equalSameUndefinedNull()\", () =>\r\n {\r\n function equalSameUndefinedNullTest(left: unknown, right: unknown, expected: boolean | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n test.assertEqual(Comparer.equalSameUndefinedNull(left, right), expected);\r\n });\r\n }\r\n\r\n equalSameUndefinedNullTest(undefined, undefined, true);\r\n equalSameUndefinedNullTest(undefined, null, false);\r\n equalSameUndefinedNullTest(undefined, \"hello\", false);\r\n equalSameUndefinedNullTest(undefined, 50, false);\r\n\r\n equalSameUndefinedNullTest(null, undefined, false);\r\n equalSameUndefinedNullTest(null, null, true);\r\n equalSameUndefinedNullTest(null, \"hello\", false);\r\n equalSameUndefinedNullTest(null, 50, false);\r\n\r\n equalSameUndefinedNullTest(\"hello\", undefined, false);\r\n equalSameUndefinedNullTest(\"hello\", null, false);\r\n equalSameUndefinedNullTest(\"hello\", \"hello\", true);\r\n equalSameUndefinedNullTest(\"hello\", \"abc\", undefined);\r\n equalSameUndefinedNullTest(\"hello\", 50, undefined);\r\n });\r\n\r\n runner.testFunction(\"compareNumbers()\", () =>\r\n {\r\n function compareNumbersTest(left: number | null | undefined, right: number | null | undefined, expected: Comparison | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n test.assertEqual(Comparer.compareNumbers(left, right), expected);\r\n });\r\n }\r\n\r\n compareNumbersTest(undefined, undefined, Comparison.Equal);\r\n compareNumbersTest(undefined, null, Comparison.LessThan);\r\n compareNumbersTest(undefined, 50, Comparison.LessThan);\r\n\r\n compareNumbersTest(null, undefined, Comparison.GreaterThan);\r\n compareNumbersTest(null, null, Comparison.Equal);\r\n compareNumbersTest(null, 50, Comparison.LessThan);\r\n\r\n compareNumbersTest(50, undefined, Comparison.GreaterThan);\r\n compareNumbersTest(50, null, Comparison.GreaterThan);\r\n compareNumbersTest(50, 30, Comparison.GreaterThan);\r\n compareNumbersTest(50, 50, Comparison.Equal);\r\n compareNumbersTest(50, 60, Comparison.LessThan);\r\n });\r\n });\r\n });\r\n}","import { Condition } from \"../sources/condition\";\r\nimport { JavascriptIterable } from \"../sources/javascript\";\r\nimport { MutableCondition } from \"../sources/mutableCondition\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"condition.ts\", () =>\r\n {\r\n runner.testType(\"Condition\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertNotUndefinedAndNotNull(condition);\r\n test.assertThrows(() => condition.assertFalse(true),\r\n new Error([\r\n \"Expected: false\",\r\n \"Actual: true\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.testFunction(\"assertUndefined(unknown,string?,string?)\", () =>\r\n {\r\n runner.test(\"with undefined\", () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertUndefined(undefined, \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n function assertUndefinedErrorTest(value: unknown, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertUndefined(value), expected);\r\n });\r\n }\r\n\r\n assertUndefinedErrorTest(\r\n null,\r\n new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: null\",\r\n ])));\r\n assertUndefinedErrorTest(\r\n \"\",\r\n new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: \\\"\\\"\",\r\n ])));\r\n assertUndefinedErrorTest(\r\n 50,\r\n new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: 50\",\r\n ])));\r\n });\r\n\r\n runner.testFunction(\"assertNotUndefinedAndNotNull<T>(undefined|null|T,string?,string?)\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(undefined),\r\n new Error([\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with null\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(null),\r\n new Error([\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with not undefined and not null\", (test: Test) =>\r\n {\r\n function valueCreator(): string | undefined\r\n {\r\n return \"hello\";\r\n }\r\n\r\n const condition: MutableCondition = Condition.create();\r\n const value: string | undefined = valueCreator();\r\n condition.assertNotUndefinedAndNotNull(value);\r\n test.assertEqual(value.substring(1, 3), \"el\");\r\n });\r\n\r\n runner.test(\"with undefined and expression\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(undefined, \"fake-expression\"),\r\n new Error([\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with null, expression, and message\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(null, \"fake-expression\", \"fake-message\"),\r\n new Error([\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"\r\n ].join(\"\\n\")));\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertTrue(boolean)\", () =>\r\n {\r\n runner.test(\"with false\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertTrue(false),\r\n new Error([\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with true\", (test: Test) =>\r\n {\r\n function valueCreator(): boolean { return true; }\r\n const condition: MutableCondition = Condition.create();\r\n const value: boolean = valueCreator();\r\n condition.assertTrue(value);\r\n test.assertTrue(value);\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertFalse(boolean)\", () =>\r\n {\r\n runner.test(\"with true\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertFalse(true),\r\n new Error([\r\n \"Expected: false\",\r\n \"Actual: true\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with false\", (test: Test) =>\r\n {\r\n function valueCreator(): boolean { return false; }\r\n const condition: MutableCondition = Condition.create();\r\n const value: boolean = valueCreator();\r\n condition.assertFalse(value);\r\n test.assertFalse(value);\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertSame<T>(T,T,string?,string?)\", () =>\r\n {\r\n function assertSameErrorTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertSame(expected, actual, expression, message), expectedError);\r\n });\r\n }\r\n \r\n assertSameErrorTest(\r\n undefined,\r\n null,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: undefined\",\r\n \"Actual: null\",\r\n ])));\r\n assertSameErrorTest(\r\n 3,\r\n 4,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: 3\",\r\n \"Actual: 4\",\r\n ])));\r\n assertSameErrorTest(\r\n {},\r\n {},\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: {}\",\r\n \"Actual: {}\",\r\n ])));\r\n assertSameErrorTest(\r\n { \"a\": \"b\" },\r\n { \"a\": \"b\" },\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: {\\\"a\\\":\\\"b\\\"}\",\r\n \"Actual: {\\\"a\\\":\\\"b\\\"}\",\r\n ])));\r\n assertSameErrorTest(\r\n [],\r\n [],\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: []\",\r\n \"Actual: []\",\r\n ])));\r\n\r\n function assertSameTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertSame(expected, actual, expression, message);\r\n });\r\n }\r\n\r\n assertSameTest(undefined, undefined, \"fake-expression\", \"fake-message\");\r\n assertSameTest(null, null, \"fake-expression\", \"fake-message\");\r\n assertSameTest(0, 0, \"fake-expression\", \"fake-message\");\r\n assertSameTest(10, 10, \"fake-expression\", \"fake-message\");\r\n assertSameTest(true, true, \"fake-expression\", \"fake-message\");\r\n assertSameTest(\"abc\", \"abc\", \"fake-expression\", \"fake-message\");\r\n \r\n const o = {};\r\n assertSameTest(o, o, \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n runner.testFunction(\"assertNotSame<T>(T,T,string?,string?)\", () =>\r\n {\r\n function assertNotSameErrorTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotSame(expected, actual, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertNotSameErrorTest(\r\n undefined,\r\n undefined,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined\",\r\n \"Actual: undefined\",\r\n ])));\r\n assertNotSameErrorTest(\r\n null,\r\n null,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not null\",\r\n \"Actual: null\",\r\n ])));\r\n assertNotSameErrorTest(\r\n 0,\r\n 0,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not 0\",\r\n \"Actual: 0\",\r\n ])));\r\n assertNotSameErrorTest(\r\n 10,\r\n 10,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not 10\",\r\n \"Actual: 10\",\r\n ])));\r\n assertNotSameErrorTest(\r\n true,\r\n true,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not true\",\r\n \"Actual: true\",\r\n ])));\r\n assertNotSameErrorTest(\r\n \"abc\",\r\n \"abc\",\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not \\\"abc\\\"\",\r\n \"Actual: \\\"abc\\\"\",\r\n ])));\r\n \r\n const o = {};\r\n assertNotSameErrorTest(\r\n o,\r\n o,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not {}\",\r\n \"Actual: {}\",\r\n ])));\r\n\r\n function assertNotSameTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertNotSame(expected, actual, expression, message);\r\n });\r\n }\r\n\r\n assertNotSameTest(undefined, null, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest(false, true, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest(1, 2, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest({}, {}, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest({ \"a\": \"b\" }, { \"a\": \"b\" }, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest([], [], \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n runner.testFunction(\"assertNotEmpty(string,string?,string?)\", () =>\r\n {\r\n function assertNotEmptyErrorTest(value: string, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotEmpty(value, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertNotEmptyErrorTest(undefined!, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n assertNotEmptyErrorTest(null!, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n assertNotEmptyErrorTest(\"\", \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ])));\r\n\r\n function assertNotEmptyTest(value: string, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([value, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertNotEmpty(value, expression, message);\r\n });\r\n }\r\n\r\n assertNotEmptyTest(\" \", \"fake-expression\", \"fake-message\");\r\n assertNotEmptyTest(\"a\", \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n runner.testFunction(\"assertLessThan(number,number,string?,string?)\", () =>\r\n {\r\n function assertLessThanErrorTest(value: number, upperBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertLessThan(value, upperBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertLessThanErrorTest(-1, -1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than -1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertLessThanErrorTest(0, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than 0\",\r\n \"Actual: 0\",\r\n ])));\r\n assertLessThanErrorTest(2, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertLessThanErrorTest(2, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: less than 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function assertLessThanTest(value: number, upperBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertLessThan(value, upperBound, expression, message);\r\n });\r\n }\r\n\r\n assertLessThanTest(-10, -9);\r\n assertLessThanTest(-1, 0);\r\n assertLessThanTest(0, 1);\r\n assertLessThanTest(4, 5);\r\n });\r\n\r\n runner.testFunction(\"assertLessThanOrEqualTo(number,number,string?,string?)\", () =>\r\n {\r\n function assertLessThanOrEqualToErrorTest(value: number, upperBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertLessThanOrEqualTo(value, upperBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertLessThanOrEqualToErrorTest(2, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than or equal to 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertLessThanOrEqualToErrorTest(2, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: less than or equal to 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function assertLessThanOrEqualToTest(value: number, upperBound: number, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertLessThanOrEqualTo(value, upperBound, expression, message);\r\n });\r\n }\r\n\r\n assertLessThanOrEqualToTest(-10, -9, undefined, undefined);\r\n assertLessThanOrEqualToTest(-1, 0, undefined, undefined);\r\n assertLessThanOrEqualToTest(0, 1, undefined, undefined);\r\n assertLessThanOrEqualToTest(4, 5, undefined, undefined);\r\n assertLessThanOrEqualToTest(-1, -1, undefined, undefined);\r\n assertLessThanOrEqualToTest(0, 0, undefined, undefined);\r\n assertLessThanOrEqualToTest(1, 1, undefined, undefined);\r\n });\r\n\r\n runner.testFunction(\"assertGreaterThanOrEqualTo(number,number,string?,string?)\", () =>\r\n {\r\n function assertGreaterThanOrEqualToErrorTest(value: number, lowerBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertGreaterThanOrEqualTo(value, lowerBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertGreaterThanOrEqualToErrorTest(1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than or equal to 2\",\r\n \"Actual: 1\",\r\n ])));\r\n assertGreaterThanOrEqualToErrorTest(1, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: greater than or equal to 2\",\r\n \"Actual: 1\",\r\n ])));\r\n\r\n function assertGreaterThanOrEqualToTest(value: number, lowerBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertGreaterThanOrEqualTo(value, lowerBound, expression, message);\r\n });\r\n }\r\n\r\n assertGreaterThanOrEqualToTest(-9, -10);\r\n assertGreaterThanOrEqualToTest(0, -1);\r\n assertGreaterThanOrEqualToTest(1, 0);\r\n assertGreaterThanOrEqualToTest(5, 4);\r\n assertGreaterThanOrEqualToTest(-1, -1);\r\n assertGreaterThanOrEqualToTest(0, 0);\r\n assertGreaterThanOrEqualToTest(1, 1);\r\n });\r\n\r\n runner.testFunction(\"assertGreaterThan(number,number,string?,string?)\", () =>\r\n {\r\n function assertGreaterThanErrorTest(value: number, lowerBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertGreaterThan(value, lowerBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertGreaterThanErrorTest(-1, -1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than -1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertGreaterThanErrorTest(0, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than 0\",\r\n \"Actual: 0\",\r\n ])));\r\n assertGreaterThanErrorTest(1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than 2\",\r\n \"Actual: 1\",\r\n ])));\r\n assertGreaterThanErrorTest(1, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: greater than 2\",\r\n \"Actual: 1\",\r\n ])));\r\n\r\n function assertGreaterThanTest(value: number, lowerBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertGreaterThan(value, lowerBound, expression, message);\r\n });\r\n }\r\n\r\n assertGreaterThanTest(-9, -10);\r\n assertGreaterThanTest(0, -1);\r\n assertGreaterThanTest(1, 0);\r\n assertGreaterThanTest(5, 4);\r\n });\r\n\r\n runner.testFunction(\"assertBetween(number,number,number,string?,string?)\", () =>\r\n {\r\n function assertBetweenErrorTest(lowerBound: number, value: number, upperBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([lowerBound, value, upperBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertBetween(lowerBound, value, upperBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertBetweenErrorTest(0, 1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertBetweenErrorTest(0, -1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: -1\",\r\n ])));\r\n assertBetweenErrorTest(0, -1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 2\",\r\n \"Actual: -1\",\r\n ])));\r\n assertBetweenErrorTest(0, 3, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 2\",\r\n \"Actual: 3\",\r\n ])));\r\n assertBetweenErrorTest(5, 3, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Expression: lowerBound\",\r\n \"Expected: less than or equal to 2\",\r\n \"Actual: 5\",\r\n ])));\r\n\r\n function assertBetweenTest(lowerBound: number, value: number, upperBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([lowerBound, value, upperBound])}`, () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertBetween(lowerBound, value, upperBound, expression, message);\r\n });\r\n }\r\n\r\n assertBetweenTest(-12, -11, -10);\r\n assertBetweenTest(-1, 0, 1);\r\n assertBetweenTest(0, 1, 2);\r\n assertBetweenTest(4, 5, 6);\r\n assertBetweenTest(0, 0, 0);\r\n assertBetweenTest(1, 1, 1);\r\n });\r\n\r\n runner.testFunction(\"assertAccessIndex(number,number,string?,string?)\", () =>\r\n {\r\n function assertAccessIndexTest(index: number, count: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertAccessIndex(index, count, expression, message);\r\n });\r\n }\r\n\r\n assertAccessIndexTest(0, 1);\r\n assertAccessIndexTest(0, 2);\r\n assertAccessIndexTest(1, 2);\r\n\r\n function assertAccessIndexErrorTest(index: number, count: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertAccessIndex(index, count, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertAccessIndexErrorTest(-1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ])));\r\n assertAccessIndexErrorTest(0, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ])));\r\n assertAccessIndexErrorTest(1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ])));\r\n assertAccessIndexErrorTest(-1, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: -1\",\r\n ])));\r\n assertAccessIndexErrorTest(1, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertAccessIndexErrorTest(-1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertAccessIndexErrorTest(1, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertAccessIndexErrorTest(3, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 3\",\r\n ])));\r\n });\r\n\r\n runner.testFunction(\"assertInsertIndex(number,number,string?,string?)\", () =>\r\n {\r\n function assertInsertIndexErrorTest(index: number, count: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertInsertIndex(index, count, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertInsertIndexErrorTest(-1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: -1\",\r\n ])));\r\n assertInsertIndexErrorTest(1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertInsertIndexErrorTest(-1, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertInsertIndexErrorTest(2, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertInsertIndexErrorTest(-1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 2\",\r\n \"Actual: -1\",\r\n ])));\r\n assertInsertIndexErrorTest(2, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertInsertIndexErrorTest(3, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: between 0 and 2\",\r\n \"Actual: 3\",\r\n ])));\r\n\r\n function assertInsertIndexTest(index: number, count: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertInsertIndex(index, count, expression, message);\r\n });\r\n }\r\n\r\n assertInsertIndexTest(0, 0);\r\n assertInsertIndexTest(0, 1);\r\n assertInsertIndexTest(1, 1);\r\n assertInsertIndexTest(0, 2);\r\n assertInsertIndexTest(1, 2);\r\n assertInsertIndexTest(2, 2);\r\n });\r\n\r\n runner.testFunction(\"assertOneOf<T>(JavascriptIterable<T>,T,string?,string?)\", () =>\r\n {\r\n function assertOneOfErrorTest<T>(possibilities: JavascriptIterable<T>, value: T, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([possibilities, value, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertOneOf(possibilities, value, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertOneOfErrorTest(\r\n undefined!,\r\n 5,\r\n undefined,\r\n undefined,\r\n new PreConditionError(\r\n \"Expression: possibilities\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n assertOneOfErrorTest(\r\n null!,\r\n 5,\r\n undefined,\r\n undefined,\r\n new PreConditionError(\r\n \"Expression: possibilities\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n assertOneOfErrorTest(\r\n [],\r\n 5,\r\n undefined,\r\n undefined,\r\n new PreConditionError(\r\n \"Expected: one of []\",\r\n \"Actual: 5\",\r\n ));\r\n assertOneOfErrorTest(\r\n [],\r\n 5,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new PreConditionError(\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: one of []\",\r\n \"Actual: 5\",\r\n ));\r\n assertOneOfErrorTest(\r\n [1, 2, 3],\r\n 5,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new PreConditionError(\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: one of [1,2,3]\",\r\n \"Actual: 5\",\r\n ));\r\n\r\n function assertOneOfTest<T>(possibilities: JavascriptIterable<T>, value: T, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([possibilities, value, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertOneOf(possibilities, value, expression, message);\r\n });\r\n }\r\n\r\n assertOneOfTest([5], 5);\r\n assertOneOfTest([1, 3, 5, 7], 5);\r\n });\r\n\r\n runner.testFunction(\"assertInteger(number,string?,string?)\", () =>\r\n {\r\n function assertIntegerErrorTest(value: number, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertInteger(value), expected);\r\n });\r\n }\r\n\r\n assertIntegerErrorTest(\r\n 1.2,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: 1.2\",\r\n ])));\r\n assertIntegerErrorTest(\r\n NaN,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: NaN\",\r\n ])));\r\n assertIntegerErrorTest(\r\n Infinity,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: Infinity\",\r\n ])));\r\n assertIntegerErrorTest(\r\n -Infinity,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: -Infinity\",\r\n ])));\r\n\r\n function assertIntegerTest(value: number): void\r\n {\r\n runner.test(`with ${value}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertInteger(value);\r\n });\r\n }\r\n\r\n assertIntegerTest(-1);\r\n assertIntegerTest(0);\r\n assertIntegerTest(1);\r\n });\r\n });\r\n });\r\n}","import { AssertionError } from \"assert\";\r\n\r\nimport { InMemoryCharacterWriteStream } from \"../sources/inMemoryCharacterWriteStream\";\r\nimport { Iterable } from \"../sources/iterable\";\r\nimport { List } from \"../sources/list\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { WhereIterable } from \"../sources/whereIterable\";\r\nimport { ConsoleTestRunner } from \"./consoleTestRunner\";\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 * as testRunnerTests from \"./testRunnerTests\";\r\n\r\ninterface RunnerStats\r\n{\r\n pendingTestActionsCount: number;\r\n pendingTestActionInsertIndex: number;\r\n passed: number;\r\n skipped: number;\r\n failed: number;\r\n}\r\n\r\nfunction assertRunnerStats(test: Test, runner: ConsoleTestRunner, stats: RunnerStats): void\r\n{\r\n test.assertEqual(stats.pendingTestActionsCount, runner.getPendingTestActionsCount(), \"Wrong pending TestActions count\");\r\n test.assertEqual(stats.pendingTestActionInsertIndex, runner.getPendingTestActionsInsertIndex(), \"Wrong pending TestActions insert index\");\r\n test.assertEqual(stats.passed, runner.getPassedTestCount(), \"Wrong passed test count\");\r\n test.assertEqual(stats.skipped, runner.getSkippedTestCount(), \"Wrong skipped test count\");\r\n test.assertEqual(stats.failed, runner.getFailedTestCount(), \"Wrong failed test count\");\r\n}\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"consoleTestRunner.ts\", () =>\r\n {\r\n runner.testType(\"ConsoleTestRunner\", () =>\r\n {\r\n testRunnerTests.test2(runner, ConsoleTestRunner.create);\r\n\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n test.assertNotUndefinedAndNotNull(runner2);\r\n test.assertEqual(0, runner2.getPendingTestActionsCount());\r\n test.assertEqual(0, runner2.getPendingTestActionsInsertIndex());\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n });\r\n\r\n runner.testFunction(\"testFile()\", () =>\r\n {\r\n runner.test(\"with no Test argument in testAction\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n runner2.testFile(\"fakeFile.ts\", () =>\r\n {\r\n counter++;\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertUndefined(currentTestAction.getParent());\r\n test.assertEqual(\"fakeFile.ts\", currentTestAction.getName());\r\n });\r\n test.assertEqual(0, counter);\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n await runner2.runAsync();\r\n\r\n test.assertEqual(1, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n }\r\n });\r\n\r\n runner.test(\"with skip, no Test argument in testFile() action, but no tests\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n runner2.testFile(\"fakeFile.ts\", runner2.skip(), () =>\r\n {\r\n counter++;\r\n });\r\n test.assertEqual(0, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n await runner2.runAsync();\r\n\r\n test.assertEqual(1, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n }\r\n });\r\n\r\n runner.test(\"with Test argument in testAction\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testFile(\"fakeFile.ts\", (test2: Test) =>\r\n {\r\n counter++;\r\n\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertUndefined(currentTestAction.getParent());\r\n test.assertEqual(\"fakeFile.ts\", currentTestAction.getName());\r\n\r\n test.assertNotUndefinedAndNotNull(test2);\r\n test.assertNotSame(test, test2);\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n test.assertEqual(0, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n await runner2.runAsync();\r\n\r\n test.assertEqual(1, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n }\r\n });\r\n });\r\n\r\n runner.testFunction(\"testType()\", () =>\r\n {\r\n runner.test(\"with Type instead of type name\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testType(WhereIterable, () =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"_WhereIterable\", currentTestAction.getName());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"testFunction()\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testFunction(\"fakeFunction()\", () =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"fakeFunction()\", currentTestAction.getName());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.testFunction(\"testGroup()\", () =>\r\n {\r\n runner.test(\"normal behavior\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testGroup(\"fake group\", () =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"fake group\", currentTestAction.getName());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with skip but no tests\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n let counter: number = 0;\r\n runner2.testGroup(\"fake group\", runner2.skip(), () =>\r\n {\r\n counter++;\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(0, counter);\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(1, counter);\r\n });\r\n\r\n runner.test(\"with skip and one test\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testGroup(\"fake-group\", runner2.skip(\"fake-group-skip-message\"), () =>\r\n {\r\n runner2.test(\"fake-test\", (test: Test) =>\r\n {\r\n test.fail(\"Shouldn't run test!\");\r\n });\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 1,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n const skippedTests: Iterable<SkippedTest> = runner2.getSkippedTests();\r\n test.assertNotUndefinedAndNotNull(skippedTests);\r\n const skippedTest: SkippedTest = await skippedTests.first();\r\n test.assertNotUndefinedAndNotNull(skippedTest);\r\n test.assertEqual(\r\n List.create([\"fake-group\", \"fake-test\"]),\r\n skippedTest.getFullTestNameParts(),\r\n );\r\n test.assertEqual(\"fake-group-skip-message\", skippedTest.getSkipMessage());\r\n });\r\n\r\n runner.test(\"with unhandled exception\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testGroup(\"fake group\", () =>\r\n {\r\n throw Error(\"oops!\");\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 1,\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"test()\", () =>\r\n {\r\n runner.test(\"with no parent\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.test(\"fake test\", (test2: Test) =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"fake test\", currentTestAction.getName());\r\n\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with TestGroup parent\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testGroup(\"fake-test-group\", () =>\r\n {\r\n counter++;\r\n test.assertEqual(1, counter);\r\n\r\n const testGroupAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testGroupAction);\r\n test.assertEqual(\"fake-test-group\", testGroupAction.getName());\r\n\r\n runner2.test(\"fake-test\", (test2: Test) =>\r\n {\r\n counter++;\r\n test.assertEqual(2, counter);\r\n\r\n const testAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testAction);\r\n test.assertEqual(\"fake-test-group fake-test\", testAction.getFullName());\r\n test.assertEqual(\"fake-test\", testAction.getName());\r\n test.assertSame(testGroupAction, testAction.getParent());\r\n\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n\r\n test.assertEqual(1, counter);\r\n });\r\n test.assertEqual(0, counter);\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n test.assertEqual(2, counter);\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with TestGroup grandparent\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testGroup(\"fake-test-group-1\", () =>\r\n {\r\n counter++;\r\n test.assertEqual(1, counter);\r\n\r\n const testGroupAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testGroupAction);\r\n test.assertEqual(\"fake-test-group-1\", testGroupAction.getFullName());\r\n test.assertEqual(\"fake-test-group-1\", testGroupAction.getName());\r\n\r\n runner2.testGroup(\"fake-test-group-2\", () =>\r\n {\r\n counter++;\r\n test.assertEqual(2, counter);\r\n\r\n const testGroupAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testGroupAction);\r\n test.assertEqual(\"fake-test-group-1 fake-test-group-2\", testGroupAction.getFullName());\r\n test.assertEqual(\"fake-test-group-2\", testGroupAction.getName());\r\n \r\n runner2.test(\"fake-test\", (test2: Test) =>\r\n {\r\n counter++;\r\n test.assertEqual(3, counter);\r\n\r\n const testAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testAction);\r\n test.assertEqual(\"fake-test-group-1 fake-test-group-2 fake-test\", testAction.getFullName());\r\n test.assertEqual(\"fake-test\", testAction.getName());\r\n test.assertSame(testGroupAction, testAction.getParent());\r\n\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n\r\n test.assertEqual(2, counter);\r\n });\r\n\r\n test.assertEqual(1, counter);\r\n });\r\n test.assertEqual(0, counter);\r\n test.assertEqual(1, runner2.getPendingTestActionsCount());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n test.assertEqual(3, counter);\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with Test parent\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.test(\"fake-test-1\", () =>\r\n {\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n test.assertThrows(\r\n () => runner2.test(\"fake-test-2\", () =>\r\n {\r\n test.fail(\"Shouldn't execute inner test since it's inside another test.\");\r\n }),\r\n new AssertionError({\r\n message: \"Can't start a new test group or a new test while running a test.\",\r\n operator: \"fail\",\r\n }),\r\n );\r\n\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with skip\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.test(\"fake-test-1\", runner2.skip(true, \"fake-skip-message\"), () =>\r\n {\r\n test.fail(\"Should not run test action\")\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 1,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n const skippedTests: Iterable<SkippedTest> = runner2.getSkippedTests();\r\n test.assertNotUndefinedAndNotNull(skippedTests);\r\n test.assertEqual(1, await skippedTests.getCount());\r\n const skippedTest: SkippedTest = await skippedTests.first();\r\n test.assertNotUndefinedAndNotNull(skippedTest);\r\n test.assertEqual(Iterable.create([\"fake-test-1\"]), skippedTest.getFullTestNameParts());\r\n test.assertEqual(\"fake-skip-message\", skippedTest.getSkipMessage());\r\n });\r\n\r\n runner.test(\"with assert failure\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.test(\"fake-test-1\", () =>\r\n {\r\n test.assertEqual(1, 2);\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 1,\r\n });\r\n\r\n const failedTests: Iterable<FailedTest> = runner2.getFailedTests();\r\n test.assertNotUndefinedAndNotNull(failedTests);\r\n test.assertEqual(1, await failedTests.getCount());\r\n const failedTest: FailedTest = await failedTests.first();\r\n test.assertNotUndefinedAndNotNull(failedTest);\r\n test.assertEqual(Iterable.create([\"fake-test-1\"]), failedTest.getFullTestNameParts());\r\n const errorMessage: string = failedTest.getErrorMessage();\r\n test.assertTrue(errorMessage.includes(\"AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:\"));\r\n test.assertTrue(errorMessage.includes(\"1 !== 2\"));\r\n });\r\n\r\n runner.test(\"with unexpected failure\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.test(\"fake-test-1\", () =>\r\n {\r\n throw new PreConditionError(\"oops!\");\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 1,\r\n });\r\n\r\n const failedTests: Iterable<FailedTest> = runner2.getFailedTests();\r\n test.assertNotUndefinedAndNotNull(failedTests);\r\n test.assertEqual(1, await failedTests.getCount());\r\n const failedTest: FailedTest = await failedTests.first();\r\n test.assertNotUndefinedAndNotNull(failedTest);\r\n test.assertEqual(Iterable.create([\"fake-test-1\"]), failedTest.getFullTestNameParts());\r\n const errorMessage: string = failedTest.getErrorMessage();\r\n test.assertTrue(errorMessage.includes(\"Error: oops!\"));\r\n test.assertEqual(failedTest.getError(), new PreConditionError(\"oops!\"));\r\n });\r\n });\r\n });\r\n });\r\n}","import { Iterable } from \"../sources/iterable\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Type } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"testRunner.ts\", () =>\r\n {\r\n runner.testType(\"TestRunner\", () =>\r\n {\r\n });\r\n });\r\n}\r\n\r\nexport function test2(runner: TestRunner, creator: () => TestRunner): void\r\n{\r\n runner.testFile(\"testRunner.ts\", () =>\r\n {\r\n runner.testType(\"TestRunner\", () =>\r\n {\r\n runner.testFunction(\"andList()\", () =>\r\n {\r\n function andListErrorTest(values: unknown[] | Iterable<unknown>, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.andList(values), expected);\r\n });\r\n }\r\n\r\n andListErrorTest(undefined!, new PreConditionError(join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n andListErrorTest(null!, new PreConditionError(join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n\r\n function andListTest(values: unknown[] | Iterable<unknown>, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertEqual(expected, runner2.andList(values));\r\n });\r\n }\r\n\r\n andListTest([], \"\");\r\n andListTest([\"a\"], `\"a\"`);\r\n andListTest([1, \"a\"], `1 and \"a\"`);\r\n andListTest([1, \"a\", {a:7}], `1, \"a\", and {\"a\":7}`);\r\n });\r\n\r\n runner.testFunction(\"toString()\", () =>\r\n {\r\n function toStringTest(value: unknown, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertEqual(expected, runner2.toString(value));\r\n });\r\n }\r\n\r\n toStringTest(undefined, \"undefined\");\r\n toStringTest(null, \"null\");\r\n toStringTest(false, \"false\");\r\n toStringTest(true, \"true\");\r\n toStringTest(5, \"5\");\r\n toStringTest(6.4, \"6.4\");\r\n toStringTest(\"\", `\"\"`);\r\n toStringTest(\"hello there\", `\"hello there\"`);\r\n toStringTest({}, \"{}\");\r\n toStringTest({a:{b:\"c\"}}, `{\"a\":{\"b\":\"c\"}}`);\r\n toStringTest([], \"[]\");\r\n toStringTest([false, 1, \"d\"], `[false,1,\"d\"]`);\r\n });\r\n\r\n runner.testFunction(\"skip()\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip();\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertTrue(testSkip.getShouldSkip());\r\n test.assertEqual(\"\", testSkip.getMessage());\r\n });\r\n\r\n runner.test(\"with false\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip(false);\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertFalse(testSkip.getShouldSkip());\r\n test.assertEqual(\"\", testSkip.getMessage());\r\n });\r\n\r\n runner.test(\"with true\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip(true);\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertTrue(testSkip.getShouldSkip());\r\n test.assertEqual(\"\", testSkip.getMessage());\r\n });\r\n\r\n runner.test(\"with message\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip(true, \"hello there!\");\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertTrue(testSkip.getShouldSkip());\r\n test.assertEqual(\"hello there!\", testSkip.getMessage());\r\n });\r\n });\r\n\r\n runner.testFunction(\"testFile()\", () =>\r\n {\r\n runner.testGroup(\"with no skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFile(fileName, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with undefined skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFile(fileName, undefined, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with null skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFile(fileName, null!, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const skip: TestSkip = runner2.skip();\r\n test.assertThrows(() => runner2.testFile(fileName, skip, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n });\r\n\r\n runner.testFunction(\"testType()\", () =>\r\n {\r\n runner.testGroup(\"with no skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with undefined skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, undefined, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with null skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, null!, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const skip: TestSkip = runner2.skip();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, skip, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n });\r\n\r\n runner.testFunction(\"testFunction()\", () =>\r\n {\r\n runner.testGroup(\"with no skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with undefined skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, undefined, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with null skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, null!, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const skip: TestSkip = runner2.skip();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, skip, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n });\r\n });\r\n });\r\n}","import { DateTime } from \"../sources/dateTime\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"dateTime.ts\", () =>\n {\n runner.testType(\"DateTime\", () =>\n {\n runner.testFunction(\"parse()\", () =>\n {\n runner.test(`with \"2025-03-14T20:18:30\"`, (test: Test) =>\n {\n const dateTime: DateTime = DateTime.parse(\"2025-03-14T20:18:30\");\n test.assertNotUndefinedAndNotNull(dateTime);\n test.assertEqual(2025, dateTime.getYear());\n test.assertEqual(3, dateTime.getMonth());\n test.assertEqual(14, dateTime.getDay());\n test.assertEqual(20, dateTime.getHour());\n test.assertEqual(18, dateTime.getMinute());\n test.assertEqual(30, dateTime.getSecond());\n test.assertEqual(\"2025-03-14\", dateTime.toDateString());\n test.assertEqual(\"2025-03-14T20:18:30.000-07:00\", dateTime.toString());\n test.assertEqual(\"2025-03-14T20:18:30.000-07:00\", dateTime.debug);\n });\n });\n });\n });\n}","import { depthFirstSearch } from \"../sources/depthFirstSearch\";\nimport { Node } from \"../sources/node\";\nimport { Iterator } from \"../sources/iterator\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { List } from \"../sources/list\";\nimport { SearchControl } from \"../sources/searchControl\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"depthFirstSearch.ts\", () =>\n {\n runner.testFunction(\"depthFirstSearch()\", () =>\n {\n runner.test(\"with undefined initialToVisit\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch(undefined!, () => {}), new PreConditionError(\n \"Expression: parameters\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null initialToVisit\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch(null!, () => {}), new PreConditionError(\n \"Expression: parameters\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with undefined searchAction\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch([], undefined!), new PreConditionError(\n \"Expression: searchAction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null searchAction\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch([], null!), new PreConditionError(\n \"Expression: searchAction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with empty initialToVisit\", (test: Test) =>\n {\n const iterator: Iterator<number> = depthFirstSearch([], (searchControl: SearchControl<Node<number>,number>, current: Node<number>) =>\n {\n searchControl.addAllToVisit(current.iterateConnectedNodes());\n\n const currentValue: number = current.getValue();\n if (currentValue >= 7)\n {\n searchControl.addResult(currentValue);\n }\n });\n test.assertEqual([], iterator.toArray().await());\n });\n\n runner.test(\"with non-empty initialToVisit with return values\", (test: Test) =>\n {\n const nodes: List<Node<number>> = List.create();\n for (let i = 0; i < 10; i++)\n {\n nodes.add(Node.create(i));\n }\n \n function connectNodes(index1: number, index2: number): void\n {\n nodes.get(index1).await().addConnectedNode(nodes.get(index2).await());\n }\n connectNodes(0, 1);\n connectNodes(0, 2);\n connectNodes(1, 5);\n connectNodes(2, 4);\n connectNodes(3, 6);\n connectNodes(4, 5);\n connectNodes(4, 6);\n connectNodes(5, 9);\n connectNodes(6, 7);\n connectNodes(7, 3);\n connectNodes(8, 9);\n\n const iterator: Iterator<number> = depthFirstSearch([nodes.get(0).await()], (searchControl: SearchControl<Node<number>,number>, current: Node<number>) =>\n {\n searchControl.addAllToVisit(current.iterateConnectedNodes());\n\n const currentValue: number = current.getValue();\n if (currentValue >= 7)\n {\n searchControl.addResult(currentValue);\n }\n });\n\n test.assertEqual([7, 9], iterator.toArray().await());\n });\n });\n });\n}","import { SyncDisposable } from \"../sources/basicDisposable\";\r\nimport { Disposable } from \"../sources/disposable\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { SyncResult } from \"../sources/syncResult\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"disposable.ts\", () =>\r\n {\r\n runner.testType(\"Disposable\", () =>\r\n {\r\n runner.testFunction(\"create()\", () =>\r\n {\r\n function createErrorTest(testName: string, disposedFunction: () => void, expectedError: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n test.assertThrows(() => Disposable.create(disposedFunction), expectedError);\r\n });\r\n }\r\n\r\n createErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: disposedFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: disposedFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with function\", (test: Test) =>\r\n {\r\n let value: number = 0;\r\n const disposable: Disposable = Disposable.create(() => value += 1);\r\n test.assertNotUndefinedAndNotNull(disposable);\r\n test.assertFalse(disposable.isDisposed());\r\n test.assertEqual(value, 0);\r\n });\r\n });\r\n\r\n runner.testFunction(\"dispose()\", () =>\r\n {\r\n runner.test(\"with function that doesn't throw\", (test: Test) =>\r\n {\r\n let value: number = 0;\r\n const disposable: SyncDisposable = Disposable.create(() =>\r\n {\r\n test.assertEqual(disposable.isDisposed(), value !== 0);\r\n value += 1;\r\n });\r\n\r\n const result1: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result1);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const resultValue: boolean = result1.await();\r\n test.assertTrue(resultValue);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n\r\n const result2: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result2);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const resultValue: boolean = result2.await();\r\n test.assertFalse(resultValue);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n });\r\n\r\n runner.test(\"with function that throws\", (test: Test) =>\r\n {\r\n let value: number = 0;\r\n const disposable: SyncDisposable = Disposable.create(() =>\r\n {\r\n test.assertEqual(disposable.isDisposed(), value !== 0);\r\n value += 1;\r\n throw new Error(\"oops!\");\r\n });\r\n\r\n const result1: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result1);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertThrows(() => result1.await(), new Error(\"oops!\"));\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n\r\n const result2: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result2);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const resultValue: boolean = result2.await();\r\n test.assertFalse(resultValue);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n}","import { andList, orList } from \"../sources/english\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"english.ts\", () =>\r\n {\r\n runner.testFunction(\"andList(string[])\", () =>\r\n {\r\n function andListErrorTest(values: string[] | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => andList(values!), expectedError);\r\n });\r\n }\r\n\r\n andListErrorTest(\r\n undefined,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n andListErrorTest(\r\n null,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n\r\n function andListTest(values: string[], expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertEqual(andList(values), expected);\r\n });\r\n }\r\n\r\n andListTest([], \"\");\r\n andListTest([\"\"], \"\");\r\n andListTest([\"\", \"\"], \" and \");\r\n andListTest([\"\", \"\", \"\"], \", , and \");\r\n \r\n andListTest([\"a\"], \"a\");\r\n andListTest([\"a\", \"b\"], \"a and b\");\r\n andListTest([\"a\", \"b\", \"c\"], \"a, b, and c\");\r\n andListTest([\"a\", \"b\", \"c\", \"d\"], \"a, b, c, and d\");\r\n });\r\n\r\n runner.testFunction(\"orList(string[])\", () =>\r\n {\r\n function orListErrorTest(values: string[] | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => orList(values!), expectedError);\r\n });\r\n }\r\n\r\n orListErrorTest(\r\n undefined,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n orListErrorTest(\r\n null,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n\r\n function orListTest(values: string[], expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertEqual(orList(values), expected);\r\n });\r\n }\r\n\r\n orListTest([], \"\");\r\n orListTest([\"\"], \"\");\r\n orListTest([\"\", \"\"], \" or \");\r\n orListTest([\"\", \"\", \"\"], \", , or \");\r\n \r\n orListTest([\"a\"], \"a\");\r\n orListTest([\"a\", \"b\"], \"a or b\");\r\n orListTest([\"a\", \"b\", \"c\"], \"a, b, or c\");\r\n orListTest([\"a\", \"b\", \"c\", \"d\"], \"a, b, c, or d\");\r\n });\r\n });\r\n}","import { andList } from \"../sources/english\";\r\nimport { EqualFunctions } from \"../sources/equalFunctions\";\r\nimport { List } from \"../sources/list\";\r\nimport { Map } from \"../sources/map\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { isNumber } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"equalFunctions.ts\", () =>\r\n {\r\n runner.testType(\"EqualFunctions\", () =>\r\n {\r\n runner.test(\"create()\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertNotUndefinedAndNotNull(functions);\r\n });\r\n\r\n runner.testFunction(\"areEqual()\", () =>\r\n {\r\n function areEqualTest(left: unknown, right: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertEqual(functions.areEqual(left, right).await(), expected);\r\n });\r\n }\r\n\r\n areEqualTest(undefined, undefined, true);\r\n areEqualTest(undefined, null, false);\r\n areEqualTest(undefined, false, false);\r\n areEqualTest(undefined, true, false);\r\n areEqualTest(undefined, \"hello\", false);\r\n areEqualTest(undefined, 20, false);\r\n areEqualTest(undefined, {}, false);\r\n areEqualTest(undefined, [], false);\r\n areEqualTest(undefined, Map.create(), false);\r\n\r\n areEqualTest(null, undefined, false);\r\n areEqualTest(null, null, true);\r\n areEqualTest(null, false, false);\r\n areEqualTest(null, true, false);\r\n areEqualTest(null, \"hello\", false);\r\n areEqualTest(null, 20, false);\r\n areEqualTest(null, {}, false);\r\n areEqualTest(null, [], false);\r\n areEqualTest(null, Map.create(), false);\r\n\r\n areEqualTest(false, undefined, false);\r\n areEqualTest(false, null, false);\r\n areEqualTest(false, false, true);\r\n areEqualTest(false, true, false);\r\n areEqualTest(false, \"hello\", false);\r\n areEqualTest(false, 20, false);\r\n areEqualTest(false, {}, false);\r\n areEqualTest(false, [], false);\r\n areEqualTest(false, Map.create(), false);\r\n\r\n areEqualTest(true, undefined, false);\r\n areEqualTest(true, null, false);\r\n areEqualTest(true, false, false);\r\n areEqualTest(true, true, true);\r\n areEqualTest(true, \"hello\", false);\r\n areEqualTest(true, 20, false);\r\n areEqualTest(true, {}, false);\r\n areEqualTest(true, [], false);\r\n areEqualTest(true, Map.create(), false);\r\n \r\n areEqualTest(\"hello\", undefined, false);\r\n areEqualTest(\"hello\", null, false);\r\n areEqualTest(\"hello\", false, false);\r\n areEqualTest(\"hello\", true, false);\r\n areEqualTest(\"hello\", \"hello\", true);\r\n areEqualTest(\"hello\", \"hello there\", false);\r\n areEqualTest(\"hello\", \"HELLO\", false);\r\n areEqualTest(\"hello\", 20, false);\r\n areEqualTest(\"hello\", {}, false);\r\n areEqualTest(\"hello\", [], false);\r\n areEqualTest(\"\", [], false);\r\n areEqualTest(\"abc\", [\"a\", \"b\", \"c\"], false);\r\n areEqualTest(\"hello\", Map.create(), false);\r\n\r\n areEqualTest(10, undefined, false);\r\n areEqualTest(10, null, false);\r\n areEqualTest(10, false, false);\r\n areEqualTest(10, true, false);\r\n areEqualTest(10, \"hello\", false);\r\n areEqualTest(10, 10, true);\r\n areEqualTest(10, 10.0, true);\r\n areEqualTest(10, -10, false);\r\n areEqualTest(10, 10.0000001, false);\r\n areEqualTest(10, 20, false);\r\n areEqualTest(10, {}, false);\r\n areEqualTest(10, [], false);\r\n areEqualTest(10, Map.create(), false);\r\n\r\n areEqualTest({}, undefined, false);\r\n areEqualTest({}, null, false);\r\n areEqualTest({}, false, false);\r\n areEqualTest({}, true, false);\r\n areEqualTest({}, \"hello\", false);\r\n areEqualTest({}, 20, false);\r\n areEqualTest({}, {}, true);\r\n areEqualTest({}, {a:5}, false);\r\n areEqualTest({a:5}, {a:5}, true);\r\n areEqualTest({a:{b:5}}, {a:{b:5}}, true);\r\n areEqualTest({a:6}, {a:5}, false);\r\n areEqualTest({A:5}, {a:5}, false);\r\n areEqualTest({}, [], false);\r\n areEqualTest({}, Map.create(), false);\r\n areEqualTest({a:5}, Map.create<string,number>().set(\"a\", 5), false);\r\n\r\n areEqualTest([], undefined, false);\r\n areEqualTest([], null, false);\r\n areEqualTest([], false, false);\r\n areEqualTest([], true, false);\r\n areEqualTest([], \"hello\", false);\r\n areEqualTest([\"a\", \"b\", \"c\"], \"abc\", false);\r\n areEqualTest([], 20, false);\r\n areEqualTest([], {}, false);\r\n areEqualTest([], List.create(), true);\r\n areEqualTest([], [], true);\r\n areEqualTest([], [1], false);\r\n areEqualTest([1], [1], true);\r\n areEqualTest([1,2,3], [1,2,3], true);\r\n areEqualTest([1,2], [1,2,3], false);\r\n areEqualTest([1,2], [1,3], false);\r\n areEqualTest([], Map.create(), false);\r\n\r\n areEqualTest(List.create(), undefined, false);\r\n areEqualTest(List.create(), null, false);\r\n areEqualTest(List.create(), false, false);\r\n areEqualTest(List.create(), true, false);\r\n areEqualTest(List.create(), \"hello\", false);\r\n areEqualTest(List.create(), 20, false);\r\n areEqualTest(List.create(), {}, false);\r\n areEqualTest(List.create(), [], true);\r\n areEqualTest(List.create(), [1], false);\r\n areEqualTest(List.create([1]), [1], true);\r\n areEqualTest(List.create([1,2,3]), [1,2,3], true);\r\n areEqualTest(List.create([1,2]), [1,2,3], false);\r\n areEqualTest(List.create([1,2]), [1,3], false);\r\n areEqualTest(List.create(), Map.create(), false);\r\n\r\n areEqualTest(Map.create(), undefined, false);\r\n areEqualTest(Map.create(), null, false);\r\n areEqualTest(Map.create(), false, false);\r\n areEqualTest(Map.create(), true, false);\r\n areEqualTest(Map.create(), \"hello\", false);\r\n areEqualTest(Map.create(), 20, false);\r\n areEqualTest(Map.create(), {}, false);\r\n areEqualTest(Map.create().set(\"d\", 4), {d:4}, false);\r\n areEqualTest(Map.create().set(\"d\", 4), {d:5}, false);\r\n areEqualTest(Map.create().set(\"d\", 4), {e:4}, false);\r\n areEqualTest(Map.create(), [], false);\r\n areEqualTest(Map.create(), Map.create(), true);\r\n areEqualTest(Map.create(), Map.create().set(\"e\", 5), false);\r\n areEqualTest(Map.create().set(\"e\", 5), Map.create().set(\"e\", 5), true);\r\n areEqualTest(Map.create().set(\"e\", 5), Map.create().set(\"f\", 5), false);\r\n areEqualTest(Map.create().set(\"e\", 5), Map.create().set(\"e\", 6), false);\r\n areEqualTest(Map.create().set(\"e\", 5).set(\"f\", 6), Map.create().set(\"f\", 6).set(\"e\", 5), true);\r\n });\r\n\r\n runner.testFunction(\"add()\", () =>\r\n {\r\n runner.test(\"with undefined equalFunction\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertThrows(\r\n () => functions.add(undefined!),\r\n new PreConditionError([\r\n \"Expression: equalFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"\r\n ].join(\"\\n\")),\r\n );\r\n });\r\n\r\n runner.test(\"with null equalFunction\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertThrows(\r\n () => functions.add(null!),\r\n new PreConditionError([\r\n \"Expression: equalFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"\r\n ].join(\"\\n\")),\r\n );\r\n });\r\n\r\n runner.test(\"with equalFunction that compares numbers based on their mod 2 result\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n const result: EqualFunctions = functions.add((left: unknown, right: unknown) =>\r\n {\r\n let result: boolean | undefined;\r\n if (isNumber(left) && isNumber(right))\r\n {\r\n const leftMod2: number = left % 2;\r\n const rightMod2: number = right % 2;\r\n result = leftMod2 === rightMod2;\r\n }\r\n return result;\r\n });\r\n test.assertSame(functions, result);\r\n test.assertTrue(functions.areEqual(0, 0).await());\r\n test.assertTrue(functions.areEqual(1, 1).await());\r\n test.assertTrue(functions.areEqual(0, 2).await());\r\n test.assertTrue(functions.areEqual(1, 3).await());\r\n test.assertFalse(functions.areEqual(-1, 5).await());\r\n test.assertFalse(functions.areEqual(0, 1).await());\r\n test.assertTrue(functions.areEqual(false, false).await());\r\n test.assertFalse(functions.areEqual(false, true).await());\r\n });\r\n });\r\n });\r\n });\r\n}","import { FetchHttpClient } from \"../sources/fetchHttpClient\";\r\nimport { FetchHttpIncomingResponse } from \"../sources/fetchHttpResponse\";\r\nimport { HttpOutgoingRequest } from \"../sources/httpOutgoingRequest\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\nimport { hasNetworkAccess } from \"./tests\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"fetchHttpClient.ts\", () =>\r\n {\r\n runner.testType(\"FetchHttpClient\", () =>\r\n {\r\n runner.test(\"create()\", (test: Test) =>\r\n {\r\n const client: FetchHttpClient = FetchHttpClient.create();\r\n test.assertNotUndefinedAndNotNull(client);\r\n });\r\n\r\n runner.testFunction(\"sendRequest()\", () =>\r\n {\r\n runner.test(\"to URL that exists\", runner.skip(!hasNetworkAccess), async (test: Test) =>\r\n {\r\n const client: FetchHttpClient = FetchHttpClient.create();\r\n\r\n const response: FetchHttpIncomingResponse = await client.sendRequest(HttpOutgoingRequest.get(\"https://www.example.com\"));\r\n test.assertNotUndefinedAndNotNull(response);\r\n test.assertEqual(200, response.getStatusCode());\r\n });\r\n });\r\n });\r\n });\r\n}","import { Generator } from \"../sources/generator\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { iteratorTests } from \"./iteratorTests\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"generator.ts\", () =>\n {\n runner.testType(\"Generator<T>\", () =>\n {\n iteratorTests(runner, () => Generator.create(() => {}));\n\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with undefined\", (test: Test) =>\n {\n test.assertThrows(() => Generator.create(undefined!), new PreConditionError(\n \"Expression: generatorAction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null\", (test: Test) =>\n {\n test.assertThrows(() => Generator.create(null!), new PreConditionError(\n \"Expression: generatorAction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with function that doesn't add any return values or return a value\", (test: Test) =>\n {\n const generator: Generator<void> = Generator.create(() => {});\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([], generator.toArray().await());\n });\n\n runner.test(\"with function that returns a constant value\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(() => 20);\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 20, 20, 20], generator.take(4).toArray().await());\n });\n\n runner.test(\"with function that returns an incrementing value\", (test: Test) =>\n {\n let value: number = 20;\n const generator: Generator<number> = Generator.create(() => value++);\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 21, 22, 23, 24], generator.take(5).toArray().await());\n });\n\n runner.test(\"with function that always adds a return value\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(control => control.addValue(20));\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 20, 20, 20], generator.take(4).toArray().await());\n });\n\n runner.test(\"with function that always adds multiple return values\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(control => { control.addValues([20, 21, 22]); });\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 21, 22, 20, 21], generator.take(5).toArray().await());\n });\n\n runner.test(\"with function that always adds a return value and returns a value\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(control =>\n {\n control.addValue(20);\n test.assertTrue(control.hasCurrent());\n test.assertEqual(20, control.getCurrent());\n return 21;\n });\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 21, 20, 21, 20], generator.take(5).toArray().await());\n });\n });\n });\n });\n}","import { EmptyError } from \"../sources/emptyError\";\r\nimport { Iterator } from \"../sources/iterator\";\r\nimport\r\n{\r\n JavascriptIterable, JavascriptIterator, JavascriptIteratorResult\r\n} from \"../sources/javascript\";\r\nimport { NotFoundError } from \"../sources/notFoundError\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"iterator.ts\", () =>\r\n {\r\n runner.testType(\"Iterator<T>\", () =>\r\n {\r\n runner.testFunction(\"create(T[])\", () =>\r\n {\r\n function createErrorTest<T>(values: T[], expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => Iterator.create(values), expected);\r\n });\r\n }\r\n\r\n createErrorTest(undefined!, new PreConditionError(\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(null!, new PreConditionError(\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n function createTest<T>(values: T[]): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(values);\r\n test.assertEqual(iterator.toArray().await(), values);\r\n });\r\n }\r\n\r\n createTest([]);\r\n createTest([1, 2, 3]);\r\n createTest([false, true]);\r\n });\r\n\r\n runner.testFunction(\"next()\", () =>\r\n {\r\n runner.testGroup(\"not empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (const value of values)\r\n {\r\n test.assertTrue(iterator.next().await());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertThrows(\r\n () => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ),\r\n );\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(1, iterator.getCurrent());\r\n\r\n for (const value of values.slice(1))\r\n {\r\n test.assertTrue(iterator.next().await());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertThrows(\r\n () => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ),\r\n );\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"start()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n for (let i: number = 0; i < 2; i++)\r\n {\r\n const startResult: Iterator<number> = iterator.start().await();\r\n test.assertSame(startResult, iterator);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(1, iterator.getCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"takeCurrent()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertThrows(() => iterator.takeCurrent(),\r\n new PreConditionError(\r\n \"Expression: iterator.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(1, iterator.getCurrent());\r\n\r\n for (let i = 0; i < values.length - 1; i++)\r\n {\r\n test.assertEqual(values[i], iterator.takeCurrent().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[i + 1], iterator.getCurrent());\r\n }\r\n\r\n test.assertEqual(values[values.length - 1], iterator.takeCurrent().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"any()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertTrue(iterator.any().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertTrue(iterator.any().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"getCount()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertEqual(values.length, iterator.getCount().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertEqual(iterator.getCount().await(), 0);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n\r\n test.assertEqual(values.length, iterator.getCount().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertEqual(iterator.getCount().await(), 0);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"toArray()\", () =>\r\n {\r\n runner.testGroup(\"not empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n\r\n test.assertEqual(values, iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertEqual([], iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n\r\n test.assertEqual(values, iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertEqual([], iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n\r\n runner.testGroup(\"concatenate()\", () =>\r\n {\r\n runner.testGroup(\"with non-started\", () =>\r\n {\r\n runner.testGroup(\"empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5], [6, 7]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5, 6, 7]);\r\n });\r\n });\r\n\r\n runner.testGroup(\"non-empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [1, 2]);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([3]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([4, 5, 6]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [3, 4, 5, 6]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([7, 8, 9]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([10, 11, 12], [13]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [7, 8, 9, 10, 11, 12, 13]);\r\n });\r\n });\r\n });\r\n\r\n runner.testGroup(\"with started\", () =>\r\n {\r\n runner.testGroup(\"empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5], [6, 7]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5, 6, 7]);\r\n });\r\n });\r\n\r\n runner.testGroup(\"non-empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [1, 2]);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([3]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([4, 5, 6]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [3, 4, 5, 6]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([7, 8, 9]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([10, 11, 12], [13]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [7, 8, 9, 10, 11, 12, 13]);\r\n });\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"where()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3, 4, 5];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n const result: Iterator<number> = iterator.where(x => x % 2 === 1);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const expectedValue of [1, 3, 5])\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(expectedValue, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(expectedValue, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3, 4, 5];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n const result: Iterator<number> = iterator.where(x => x % 2 === 1);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent())\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const expectedValue of [1, 3, 5])\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(expectedValue, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(expectedValue, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"map()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n const result: Iterator<number> = iterator.map(x => x + 10);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const value of values)\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(value + 10, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n const result: Iterator<number> = iterator.map(x => x + 10);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const value of values)\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(value + 10, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"flatMap()\", () =>\r\n {\r\n runner.test(\"with empty non-started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"with empty started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"with non-empty non-started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), [\"1\", \"2\", \"2\", \"3\", \"3\", \"3\"]);\r\n });\r\n\r\n runner.test(\"with non-empty started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]).start().await();\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), [\"1\", \"2\", \"2\", \"3\", \"3\", \"3\"]);\r\n });\r\n\r\n runner.test(\"with mapping that sometimes returns an empty iterable\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3, 4]).start().await();\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n if (value % 2 === 1)\r\n {\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), [\"1\", \"3\", \"3\", \"3\"]);\r\n });\r\n });\r\n\r\n runner.testFunction(\"first()\", () =>\r\n {\r\n runner.testGroup(\"with no condition\", () =>\r\n {\r\n function firstErrorTest(iterable: JavascriptIterable<string>, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<string> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertThrows(() => { iterator.first().await(); }, expected);\r\n }\r\n });\r\n }\r\n\r\n firstErrorTest(\r\n [],\r\n new EmptyError(),\r\n );\r\n\r\n function firstTest<T>(iterable: JavascriptIterable<T>, expected: T): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(iterator.first().await(), expected);\r\n }\r\n });\r\n }\r\n\r\n firstTest([1], 1);\r\n firstTest([2, 3], 2);\r\n firstTest([4, 5, 6, 7, 8], 4);\r\n });\r\n\r\n runner.testGroup(\"with condition argument\", () =>\r\n {\r\n function firstErrorTest<T>(iterable: JavascriptIterable<T>, condition: (value: T) => boolean, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)} and ${condition?.name} condition`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertThrows(() =>\r\n {\r\n iterator.first(condition).await();\r\n }, expected);\r\n }\r\n });\r\n }\r\n\r\n function isOdd(value: number): boolean\r\n {\r\n return value % 2 === 1;\r\n }\r\n\r\n function isEven(value: number): boolean\r\n {\r\n return value % 2 === 0;\r\n }\r\n\r\n firstErrorTest(\r\n [],\r\n undefined!,\r\n new EmptyError(),\r\n );\r\n firstErrorTest(\r\n [],\r\n null!,\r\n new EmptyError(),\r\n );\r\n firstErrorTest(\r\n [1],\r\n isEven,\r\n new NotFoundError(\"No value was found in the Iterator that matched the provided condition.\"),\r\n );\r\n firstErrorTest(\r\n [2, 4],\r\n isOdd,\r\n new NotFoundError(\"No value was found in the Iterator that matched the provided condition.\"),\r\n );\r\n\r\n function firstTest<T>(iterable: JavascriptIterable<T>, condition: (value: T) => boolean, expected: T): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)} and ${condition?.name} condition`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(iterator.first(condition).await(), expected);\r\n }\r\n });\r\n }\r\n\r\n firstTest([1], isOdd, 1);\r\n firstTest([2, 3], isEven, 2);\r\n firstTest([2, 3], isOdd, 3);\r\n firstTest([4, 6, 7, 8], isEven, 4);\r\n firstTest([4, 6, 7, 8], isOdd, 7);\r\n });\r\n });\r\n\r\n runner.testFunction(\"skip(number)\", () =>\r\n {\r\n function skipErrorTest(iterable: JavascriptIterable<string>, maximumToSkip: number, expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([iterable, maximumToSkip])}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<string> = Iterator.create(iterable);\r\n test.assertThrows(() => iterator.skip(maximumToSkip), expected);\r\n });\r\n }\r\n\r\n skipErrorTest([], undefined!, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n skipErrorTest([], null!, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n skipErrorTest([], 0.5, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: integer\",\r\n \"Actual: 0.5\",\r\n ));\r\n skipErrorTest([], -1, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: greater than or equal to 0\",\r\n \"Actual: -1\",\r\n ));\r\n\r\n function skipTest(iterable: JavascriptIterable<string>, maximumToSkip: number, expected: JavascriptIterable<string>): void\r\n {\r\n runner.test(`with ${runner.andList([iterable, maximumToSkip])}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<string> = Iterator.create(iterable);\r\n const skipIterator: Iterator<string> = iterator.skip(maximumToSkip);\r\n test.assertEqual(expected, skipIterator.toArray().await());\r\n });\r\n }\r\n\r\n skipTest([], 0, []);\r\n skipTest([], 1, []);\r\n skipTest([], 2, []);\r\n skipTest([\"a\", \"b\", \"c\"], 0, [\"a\", \"b\", \"c\"]);\r\n skipTest([\"a\", \"b\", \"c\"], 1, [\"b\", \"c\"]);\r\n skipTest([\"a\", \"b\", \"c\"], 2, [\"c\"]);\r\n skipTest([\"a\", \"b\", \"c\"], 3, []);\r\n skipTest([\"a\", \"b\", \"c\"], 4, []);\r\n });\r\n });\r\n });\r\n}\r\n\r\nexport function iteratorTests<T>(runner: TestRunner, creator: () => Iterator<T>): void\r\n{\r\n runner.testType(\"Iterator<T>\", () =>\r\n {\r\n runner.testFunction(\"creator()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertNotUndefinedAndNotNull(iterator);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrent(), new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n });\r\n\r\n runner.testFunction(\"start()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n for (let i: number = 0; i < 2; i++)\r\n {\r\n const startResult: Iterator<T> = iterator.start().await();\r\n test.assertSame(startResult, iterator);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"takeCurrent()\", () =>\r\n {\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertThrows(() => iterator.takeCurrent(),\r\n new PreConditionError(\r\n \"Expression: iterator.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertThrows(() => iterator.takeCurrent(),\r\n new PreConditionError(\r\n \"Expression: iterator.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"next()\", () =>\r\n {\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n\r\n });\r\n\r\n runner.testFunction(\"[Symbol.iterator]()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const jsIterator: JavascriptIterator<T> = iterator[Symbol.iterator]();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n const result: JavascriptIteratorResult<T> = jsIterator.next();\r\n test.assertEqual(result.done, true);\r\n test.assertUndefined(result.value);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"any()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(iterator.any().await());\r\n\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.testFunction(\"getCount()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertEqual(iterator.getCount().await(), 0);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"toArray()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n const array: T[] = iterator.toArray().await();\r\n test.assertEqual(array, []);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"where()\", () =>\r\n {\r\n runner.test(\"with undefined condition\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.where(undefined!), new PreConditionError(\r\n \"Expression: condition\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"with null condition\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.where(null!), new PreConditionError(\r\n \"Expression: condition\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n\r\n const result: Iterator<T> = iterator.where((value: T) => value !== undefined);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const result: Iterator<T> = iterator.where((value: T) => value !== undefined);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"map()\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.map(undefined!), new PreConditionError(\r\n \"Expression: mapping\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"with null\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.map(null!), new PreConditionError(\r\n \"Expression: mapping\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const mapIterator: Iterator<number> = iterator.map(_ => 5);\r\n test.assertFalse(mapIterator.hasStarted());\r\n test.assertFalse(mapIterator.hasCurrent());\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const mapIterator: Iterator<number> = iterator.map(_ => 5);\r\n test.assertFalse(mapIterator.hasStarted());\r\n test.assertFalse(mapIterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(mapIterator.next().await());\r\n test.assertTrue(mapIterator.hasStarted());\r\n test.assertFalse(mapIterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n });\r\n}","import { HttpClient } from \"../sources/httpClient\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"httpClient.ts\", () =>\r\n {\r\n runner.testType(\"HttpClient\", () =>\r\n {\r\n runner.test(\"create()\", (test: Test) =>\r\n {\r\n const client: HttpClient = HttpClient.create();\r\n test.assertNotUndefinedAndNotNull(client);\r\n });\r\n });\r\n });\r\n}","import { InMemoryCharacterWriteStream } from \"../sources/inMemoryCharacterWriteStream\";\r\nimport { SyncResult } from \"../sources/syncResult\";\r\nimport { isUndefined } from \"../sources/types\";\r\nimport * as characterWriteStreamTests from \"./characterWriteStreamTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"inMemoryCharacterWriteStream.ts\", () =>\r\n {\r\n runner.testType(\"InMemoryCharacterWriteStream\", () =>\r\n {\r\n characterWriteStreamTests.test(runner, InMemoryCharacterWriteStream.create);\r\n\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n test.assertNotUndefinedAndNotNull(writeStream);\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n test.assertEqual(\"\\n\", writeStream.getNewlineSequence());\r\n });\r\n\r\n runner.testFunction(\"clearWrittenText()\", (test: Test) =>\r\n {\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n\r\n const result1: InMemoryCharacterWriteStream = writeStream.clearWrittenText();\r\n test.assertSame(writeStream, result1);\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n\r\n writeStream.writeString(\"hello world!\").await();\r\n test.assertEqual(\"hello world!\", writeStream.getWrittenText());\r\n\r\n const result2: InMemoryCharacterWriteStream = writeStream.clearWrittenText();\r\n test.assertSame(writeStream, result2);\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n });\r\n\r\n runner.testFunction(\"setNewlineSequence()\", (test: Test) =>\r\n {\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n\r\n const result1: InMemoryCharacterWriteStream = writeStream.setNewlineSequence(\"e\");\r\n test.assertSame(writeStream, result1);\r\n test.assertEqual(\"e\", writeStream.getNewlineSequence());\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n\r\n const result2: SyncResult<number> = writeStream.writeString(\"ab\");\r\n test.assertEqual(\"ab\", writeStream.getWrittenText());\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(2, result2.await());\r\n test.assertEqual(\"ab\", writeStream.getWrittenText());\r\n }\r\n\r\n const result3: SyncResult<number> = writeStream.writeLine(\"cd\");\r\n test.assertEqual(\"abcde\", writeStream.getWrittenText());\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(3, result3.await());\r\n test.assertEqual(\"abcde\", writeStream.getWrittenText());\r\n }\r\n });\r\n\r\n runner.testFunction(\"writeString()\", () =>\r\n {\r\n function writeStringTest(text: string): void\r\n {\r\n runner.test(`with ${runner.toString(text)}`, (test: Test) =>\r\n {\r\n const expectedWrittenText: string = text || \"\";\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n const result: number = writeStream.writeString(text).await();\r\n test.assertEqual(expectedWrittenText.length, result);\r\n test.assertEqual(expectedWrittenText, writeStream.getWrittenText());\r\n });\r\n }\r\n\r\n writeStringTest(undefined!);\r\n writeStringTest(null!);\r\n writeStringTest(\"\");\r\n writeStringTest(\"a\");\r\n writeStringTest(\"abc\");\r\n });\r\n\r\n runner.testFunction(\"writeLine()\", () =>\r\n {\r\n function writeLineTest(text: string, newlineSequence?: string): void\r\n {\r\n runner.test(`with ${runner.toString(text)}${isUndefined(newlineSequence) ? \"\" : ` and ${runner.toString(newlineSequence)}`}`, (test: Test) =>\r\n {\r\n \r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n if (!isUndefined(newlineSequence))\r\n {\r\n writeStream.setNewlineSequence(newlineSequence);\r\n }\r\n const expectedWrittenText: string = (text || \"\") + writeStream.getNewlineSequence();\r\n\r\n const result: number = writeStream.writeLine(text).await();\r\n test.assertEqual(expectedWrittenText.length, result);\r\n test.assertEqual(expectedWrittenText, writeStream.getWrittenText());\r\n });\r\n }\r\n\r\n writeLineTest(undefined!);\r\n writeLineTest(null!);\r\n writeLineTest(\"\");\r\n writeLineTest(\"a\");\r\n writeLineTest(\"abc\");\r\n writeLineTest(\"abc\", \"\\r\\n\");\r\n writeLineTest(\"abc\", \"\");\r\n });\r\n });\r\n });\r\n}","import { CharacterWriteStream } from \"../sources/characterWriteStream\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner, creator: () => CharacterWriteStream): void\r\n{\r\n runner.testFile(\"characterWriteStream.ts\", () =>\r\n {\r\n runner.testType(\"CharacterWriteStream\", () =>\r\n {\r\n });\r\n });\r\n}","import { Iterable } from \"../sources/iterable\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"iterable.ts\", () =>\r\n {\r\n runner.testType(\"Iterable<T>\", () =>\r\n {\r\n runner.testFunction(\"create(JavascriptIterable<T>|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", async (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create();\r\n test.assertNotUndefinedAndNotNull(iterable);\r\n test.assertEqual(await iterable.toArray(), []);\r\n test.assertEqual(await iterable.getCount(), 0);\r\n });\r\n\r\n runner.test(\"with empty array\", async (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create<number>([]);\r\n test.assertNotUndefinedAndNotNull(iterable);\r\n test.assertEqual(await iterable.toArray(), []);\r\n test.assertEqual(await iterable.getCount(), 0);\r\n });\r\n\r\n runner.test(\"with non-empty array\", async (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2, 3]);\r\n test.assertNotUndefinedAndNotNull(iterable);\r\n test.assertEqual(await iterable.toArray(), [1, 2, 3]);\r\n test.assertEqual(await iterable.getCount(), 3);\r\n });\r\n });\r\n\r\n runner.testGroup(\"concatenate()\", () =>\r\n {\r\n runner.testGroup(\"empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([]);\r\n test.assertEqual(concatenateIterable.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([5]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [5]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([5], [6, 7]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [5, 6, 7]);\r\n });\r\n });\r\n\r\n runner.testGroup(\"non-empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [1, 2]);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([3]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([4, 5, 6]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [3, 4, 5, 6]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([7, 8, 9]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([10, 11, 12], [13]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [7, 8, 9, 10, 11, 12, 13]);\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"flatMap()\", () =>\r\n {\r\n runner.test(\"with empty iterable\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const flatMapIterable: Iterable<string> = iterable.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterable.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"with non-empty iterable\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2, 3]);\r\n const flatMapIterable: Iterable<string> = iterable.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterable.toArray().await(), [\"1\", \"2\", \"2\", \"3\", \"3\", \"3\"]);\r\n });\r\n\r\n runner.test(\"with mapping that sometimes returns an empty iterable\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2, 3, 4]);\r\n const flatMapIterable: Iterable<string> = iterable.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n if (value % 2 === 1)\r\n {\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterable.toArray().await(), [\"1\", \"3\", \"3\", \"3\"]);\r\n });\r\n });\r\n });\r\n });\r\n}","import { JavascriptMapMap } from \"../sources/javascriptMapMap\";\r\nimport { mapTests } from \"./mapTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"javascriptMapMap.ts\", () =>\r\n {\r\n runner.testType(\"JavascriptMapMap<TKey,TValue>\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const map: JavascriptMapMap<number,string> = JavascriptMapMap.create();\r\n test.assertEqual(map.getCount().await(), 0);\r\n });\r\n\r\n mapTests(runner, JavascriptMapMap.create);\r\n });\r\n });\r\n}\r\n","import { Iterator } from \"../sources/iterator\";\r\nimport { JavascriptIterable } from \"../sources/javascript\";\r\nimport { isMap, Map } from \"../sources/map\";\r\nimport { MutableMap } from \"../sources/mutableMap\";\r\nimport { NotFoundError } from \"../sources/notFoundError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"map.ts\", () =>\r\n {\r\n runner.testType(\"Map<TKey,TValue>\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const map: MutableMap<number,string> = Map.create();\r\n test.assertSame(map.getCount().await(), 0);\r\n });\r\n\r\n mapTests(runner, Map.create);\r\n });\r\n });\r\n}\r\n\r\nexport function mapTests(runner: TestRunner, creator: () => Map<number,string>): void\r\n{\r\n runner.testType(\"Map<TKey,TValue>\", () =>\r\n {\r\n runner.testFunction(\"creator()\", (test: Test) =>\r\n {\r\n test.assertNotUndefinedAndNotNull(creator);\r\n \r\n const map: Map<number,string> = creator();\r\n test.assertNotUndefinedAndNotNull(map);\r\n test.assertEqual(map.getCount().await(), 0);\r\n test.assertTrue(isMap(map));\r\n });\r\n\r\n runner.testFunction(\"containsKey(TKey)\", () =>\r\n {\r\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\r\n {\r\n const map: Map<number,string> = creator();\r\n\r\n test.assertFalse(map.containsKey(50).await());\r\n });\r\n });\r\n\r\n runner.testFunction(\"get(TKey)\", () =>\r\n {\r\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\r\n {\r\n const map: Map<number,string> = creator();\r\n\r\n test.assertThrows(() => map.get(1).await(),\r\n new NotFoundError(\r\n \"The key 1 was not found in the map.\"));\r\n test.assertEqual(map.getCount().await(), 0);\r\n });\r\n });\r\n\r\n runner.testFunction(\"toString()\", () =>\r\n {\r\n function toStringTest(map: Map<number,string>, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(map)}`, (test: Test) =>\r\n {\r\n test.assertEqual(map.toString(), expected);\r\n });\r\n }\r\n\r\n toStringTest(creator(), \"{}\");\r\n });\r\n\r\n runner.testFunction(\"iterateKeys()\", () =>\r\n {\r\n function iterateKeysTests(map: Map<number,string>, expected: JavascriptIterable<number>): void\r\n {\r\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\r\n {\r\n const keyIterator: Iterator<number> = map.iterateKeys();\r\n test.assertEqual(await keyIterator.toArray(), [...expected]);\r\n });\r\n }\r\n\r\n iterateKeysTests(creator(), []);\r\n });\r\n\r\n runner.testFunction(\"iterateValues()\", () =>\r\n {\r\n function iterateValuesTests(map: Map<number,string>, expected: JavascriptIterable<string>): void\r\n {\r\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\r\n {\r\n const valueIterator: Iterator<string> = map.iterateValues();\r\n test.assertEqual(await valueIterator.toArray(), [...expected]);\r\n });\r\n }\r\n\r\n iterateValuesTests(creator(), []);\r\n });\r\n });\r\n}","import { JavascriptIterable } from \"../sources/javascript\";\r\nimport { List } from \"../sources/list\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { isIterable } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"list.ts\", () =>\r\n {\r\n runner.testType(\"List<T>\", () =>\r\n {\r\n runner.testFunction(\"create(T[]|Iterable<T>|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create();\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertEqual(list.toString(), \"[]\");\r\n test.assertEqual(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create(undefined);\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertEqual(list.toString(), \"[]\");\r\n test.assertEqual(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with empty array\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create<number>([]);\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertSame(list.toString(), \"[]\");\r\n test.assertSame(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with non-empty array\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create([1, 2, 3]);\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), [1, 2, 3]);\r\n test.assertSame(list.toString(), \"[1,2,3]\");\r\n test.assertSame(list.getCount().await(), 3);\r\n });\r\n\r\n runner.test(\"with empty Iterable<T>\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create(List.create());\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertSame(list.toString(), \"[]\");\r\n test.assertSame(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with non-empty Iterable<T>\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create(List.create([1, 2, 3]));\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), [1, 2, 3]);\r\n test.assertTrue(isIterable(list));\r\n test.assertSame(list.toString(), \"[1,2,3]\");\r\n test.assertSame(list.getCount().await(), 3);\r\n });\r\n });\r\n\r\n runner.testFunction(\"set(number,T)\", () =>\r\n {\r\n function setErrorTest(list: List<number>, index: number, value: number, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.set(index, value), expectedError);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n setErrorTest(List.create(), -1, 5, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ));\r\n setErrorTest(List.create(), 0, 5, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ));\r\n setErrorTest(List.create(), 1, 5, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n setErrorTest(List.create([1]), -1, 5, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n setErrorTest(List.create([1]), 1, 5, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n\r\n function setTest(list: List<number>, index: number, value: number, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const setResult: List<number> = list.set(index, value);\r\n test.assertSame(list, setResult);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n setTest(List.create([1]), 0, 5, [5]);\r\n setTest(List.create([1, 2]), 0, 5, [5, 2]);\r\n setTest(List.create([1, 2]), 1, 5, [1, 5]);\r\n });\r\n\r\n runner.testFunction(\"get(number)\", () =>\r\n {\r\n function getErrorTest(list: List<number>, index: number, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.get(index), expectedError);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n getErrorTest(List.create(), -1, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n getErrorTest(List.create(), 0, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n getErrorTest(List.create(), 1, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n getErrorTest(List.create([1]), -1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n getErrorTest(List.create([1]), 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n\r\n function getTest(list: List<number>, index: number, expected: number): void\r\n {\r\n runner.test(`with ${runner.andList([list, index])}`, (test: Test) =>\r\n {\r\n test.assertSame(list.get(index).await(), expected);\r\n });\r\n }\r\n\r\n getTest(List.create([1]), 0, 1);\r\n getTest(List.create([1, 2]), 0, 1);\r\n getTest(List.create([1, 2]), 1, 2);\r\n });\r\n\r\n runner.testFunction(\"add(T)\", () =>\r\n {\r\n function addTest(list: List<number>, value: number, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, value])}`, (test: Test) =>\r\n {\r\n const addResult: List<number> = list.add(value);\r\n test.assertSame(addResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n addTest(List.create(), 1, [1]);\r\n addTest(List.create([1]), 2, [1, 2]);\r\n addTest(List.create([1, 2]), 3, [1, 2, 3]);\r\n });\r\n\r\n runner.testFunction(\"addAll(T)\", () =>\r\n {\r\n function addAllTest(list: List<number>, values: JavascriptIterable<number>, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, values])}`, (test: Test) =>\r\n {\r\n const addResult: List<number> = list.addAll(values);\r\n test.assertSame(addResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n addAllTest(List.create(), [1], [1]);\r\n addAllTest(List.create([1]), [2], [1, 2]);\r\n addAllTest(List.create([1, 2]), [3], [1, 2, 3]);\r\n addAllTest(List.create(), [1, 2], [1, 2]);\r\n addAllTest(List.create([1]), [2, 3], [1, 2, 3]);\r\n addAllTest(List.create([1, 2]), [3, 4], [1, 2, 3, 4]);\r\n\r\n addAllTest(List.create(), List.create([1]), [1]);\r\n addAllTest(List.create([1]), List.create([2]), [1, 2]);\r\n addAllTest(List.create([1, 2]), List.create([3]), [1, 2, 3]);\r\n addAllTest(List.create(), List.create([1, 2]), [1, 2]);\r\n addAllTest(List.create([1]), List.create([2, 3]), [1, 2, 3]);\r\n addAllTest(List.create([1, 2]), List.create([3, 4]), [1, 2, 3, 4]);\r\n });\r\n\r\n runner.testFunction(\"insert(number,T)\", () =>\r\n {\r\n function insertErrorTest(list: List<number>, index: number, value: number, expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.insert(index, value), expected);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n insertErrorTest(List.create(), -1, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n insertErrorTest(List.create(), 1, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n insertErrorTest(List.create([1]), -1, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\"\r\n ));\r\n insertErrorTest(List.create([1]), 2, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\"\r\n ));\r\n\r\n function insertTest(list: List<number>, index: number, value: number, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const insertResult: List<number> = list.insert(index, value);\r\n test.assertSame(insertResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n insertTest(List.create(), 0, 1, [1]);\r\n insertTest(List.create([2]), 0, 1, [1, 2]);\r\n insertTest(List.create([1]), 1, 2, [1, 2]);\r\n insertTest(List.create([2, 3]), 0, 1, [1, 2, 3]);\r\n insertTest(List.create([1, 3]), 1, 2, [1, 2, 3]);\r\n insertTest(List.create([1, 2]), 2, 3, [1, 2, 3]);\r\n });\r\n\r\n runner.testFunction(\"insertAll(number,T)\", () =>\r\n {\r\n function insertAllErrorTest(list: List<number>, index: number, values: number[] | Iterable<number>, expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, values])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.insertAll(index, values), expected);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n insertAllErrorTest(List.create(), -1, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n insertAllErrorTest(List.create(), 1, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n insertAllErrorTest(List.create([1]), -1, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\"\r\n ));\r\n insertAllErrorTest(List.create([1]), 2, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\",\r\n ));\r\n\r\n function insertAllTest(list: List<number>, index: number, values: JavascriptIterable<number>, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, values])}`, (test: Test) =>\r\n {\r\n const insertResult: List<number> = list.insertAll(index, values);\r\n test.assertSame(insertResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n insertAllTest(List.create(), 0, [], []);\r\n insertAllTest(List.create(), 0, [1], [1]);\r\n insertAllTest(List.create([2]), 0, [1], [1, 2]);\r\n insertAllTest(List.create([1]), 1, [2], [1, 2]);\r\n insertAllTest(List.create([2, 3]), 0, [1], [1, 2, 3]);\r\n insertAllTest(List.create([1, 3]), 1, [2], [1, 2, 3]);\r\n insertAllTest(List.create([1, 2]), 2, [3], [1, 2, 3]);\r\n insertAllTest(List.create([3]), 0, [1, 2], [1, 2, 3]);\r\n insertAllTest(List.create([1]), 1, [2, 3], [1, 2, 3]);\r\n insertAllTest(List.create([1, 4]), 1, [2, 3], [1, 2, 3, 4]);\r\n\r\n insertAllTest(List.create(), 0, List.create(), []);\r\n insertAllTest(List.create(), 0, List.create([1]), [1]);\r\n insertAllTest(List.create([2]), 0, List.create([1]), [1, 2]);\r\n insertAllTest(List.create([1]), 1, List.create([2]), [1, 2]);\r\n insertAllTest(List.create([2, 3]), 0, List.create([1]), [1, 2, 3]);\r\n insertAllTest(List.create([1, 3]), 1, List.create([2]), [1, 2, 3]);\r\n insertAllTest(List.create([1, 2]), 2, List.create([3]), [1, 2, 3]);\r\n insertAllTest(List.create([3]), 0, List.create([1, 2]), [1, 2, 3]);\r\n insertAllTest(List.create([1]), 1, List.create([2, 3]), [1, 2, 3]);\r\n insertAllTest(List.create([1, 4]), 1, List.create([2, 3]), [1, 2, 3, 4]);\r\n });\r\n });\r\n });\r\n}\r\n","import { Iterator } from \"../sources/iterator\";\r\nimport { MapIterator } from \"../sources/mapIterator\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"mapIterator.ts\", () =>\r\n {\r\n runner.testType(\"MapIterator<TInput,TOutput>\", () =>\r\n {\r\n runner.testFunction(\"create(Iterator<TInput>,(TInput)=>TOutput)\", () =>\r\n {\r\n function createErrorTest<TInput,TOutput>(testName: string, innerIterator: Iterator<TInput>, mapping: (value: TInput) => TOutput, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n test.assertThrows(() => MapIterator.create(innerIterator, mapping), expected);\r\n });\r\n }\r\n \r\n createErrorTest(\r\n \"with undefined inputIterator\",\r\n undefined!,\r\n (value: number) => value.toString(),\r\n new PreConditionError(\r\n \"Expression: inputIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(\r\n \"with null inputIterator\",\r\n null!,\r\n (value: number) => value.toString(),\r\n new PreConditionError(\r\n \"Expression: inputIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n \r\n runner.test(\"with valid values\", (test: Test) =>\r\n {\r\n const inputIterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n test.assertFalse(inputIterator.hasStarted());\r\n test.assertFalse(inputIterator.hasCurrent());\r\n \r\n const iterator: MapIterator<number,string> = MapIterator.create(inputIterator, (value: number) => value.toString());\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n });\r\n}","\r\n\r\nimport { EqualFunctions } from \"../sources/equalFunctions\";\r\nimport { MutableCondition } from \"../sources/mutableCondition\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { ToStringFunctions } from \"../sources/toStringFunctions\";\r\nimport { isNumber, isString } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"mutableCondition.ts\", () =>\r\n {\r\n runner.testType(\"MutableCondition\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertNotUndefinedAndNotNull(mc);\r\n });\r\n\r\n runner.testFunction(\"setToStringFunctions()\", () =>\r\n {\r\n function setToStringFunctionsErrorTest(testName: string, toStringFunctions: ToStringFunctions, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.setToStringFunctions(toStringFunctions), expected);\r\n });\r\n }\r\n\r\n setToStringFunctionsErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: toStringFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n setToStringFunctionsErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: toStringFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with valid value\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertEqual(`\"hello\"`, mc.toValueString(\"hello\"));\r\n\r\n mc.setToStringFunctions(\r\n ToStringFunctions.create()\r\n .add(isString, (value: string) => `---${value}---`),\r\n );\r\n test.assertEqual(`---hello---`, mc.toValueString(\"hello\"));\r\n });\r\n });\r\n\r\n runner.testFunction(\"setEqualFunctions()\", () =>\r\n {\r\n function setEqualFunctionsErrorTest(testName: string, equalFunctions: EqualFunctions, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.setEqualFunctions(equalFunctions), expected);\r\n });\r\n }\r\n\r\n setEqualFunctionsErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: equalFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n setEqualFunctionsErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: equalFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with valid value\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertFalse(mc.areEqual(3, 5));\r\n test.assertFalse(mc.areEqual(3, 4));\r\n test.assertTrue(mc.areEqual(4, 4));\r\n\r\n mc.setEqualFunctions(\r\n EqualFunctions.create()\r\n .add((left: unknown, right: unknown) =>\r\n {\r\n return isNumber(left) && isNumber(right)\r\n ? left % 2 === right % 2\r\n : undefined;\r\n })\r\n )\r\n\r\n test.assertTrue(mc.areEqual(3, 5));\r\n test.assertFalse(mc.areEqual(3, 4));\r\n test.assertTrue(mc.areEqual(4, 4));\r\n });\r\n });\r\n\r\n runner.testFunction(\"setCreateErrorFunction()\", () =>\r\n {\r\n function setCreateErrorFunctionErrorTest(testName: string, createErrorFunction: ((message: string) => Error), expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.setCreateErrorFunction(createErrorFunction), expected);\r\n });\r\n }\r\n\r\n setCreateErrorFunctionErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: createErrorFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n setCreateErrorFunctionErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: createErrorFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with valid function\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.assertEqual(1, 2));\r\n\r\n mc.setCreateErrorFunction((message: string) =>\r\n {\r\n return Error(`fake '${message}' fake`);\r\n });\r\n\r\n mc.setEqualFunctions(\r\n EqualFunctions.create()\r\n .add((left: unknown, right: unknown) =>\r\n {\r\n return isNumber(left) && isNumber(right)\r\n ? left % 2 === right % 2\r\n : undefined;\r\n })\r\n )\r\n\r\n test.assertTrue(mc.areEqual(3, 5));\r\n test.assertFalse(mc.areEqual(3, 4));\r\n test.assertTrue(mc.areEqual(4, 4));\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertUndefined()\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n mc.assertUndefined(undefined);\r\n });\r\n\r\n function assertUndefinedErrorTest(value: unknown, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.assertUndefined(value), expected);\r\n });\r\n }\r\n\r\n assertUndefinedErrorTest(null, new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: null\",\r\n ])));\r\n assertUndefinedErrorTest(false, new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: false\",\r\n ])));\r\n assertUndefinedErrorTest(\"abc\", new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: \\\"abc\\\"\",\r\n ])));\r\n });\r\n\r\n runner.testFunction(\"assertNotUndefined()\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(\r\n () => mc.assertNotUndefined(undefined),\r\n new Error(join(\"\\n\", [\r\n \"Expected: not undefined\",\r\n \"Actual: undefined\",\r\n ])),\r\n );\r\n });\r\n\r\n function assertNotUndefinedTest(value: unknown): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n mc.assertNotUndefined(value);\r\n });\r\n }\r\n\r\n assertNotUndefinedTest(null);\r\n assertNotUndefinedTest(\"\");\r\n assertNotUndefinedTest(false);\r\n });\r\n\r\n runner.testFunction(\"areEqual()\", () =>\r\n {\r\n function areEqualTest(left: unknown, right: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertEqual(mc.areEqual(left, right), expected);\r\n });\r\n }\r\n\r\n areEqualTest(undefined, undefined, true);\r\n areEqualTest(5, 5, true);\r\n areEqualTest(true, true, true);\r\n areEqualTest({}, {}, true);\r\n\r\n areEqualTest(undefined, \"\", false);\r\n areEqualTest(1, 2, false);\r\n areEqualTest(false, true, false);\r\n areEqualTest({a:1}, {a:2}, false);\r\n });\r\n\r\n runner.testFunction(\"toValueString()\", () =>\r\n {\r\n function toValueStringTest(value: unknown, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertEqual(expected, mc.toValueString(value));\r\n });\r\n }\r\n\r\n toValueStringTest(undefined, \"undefined\");\r\n toValueStringTest(null, \"null\");\r\n toValueStringTest(0, \"0\");\r\n toValueStringTest(\"abc\", `\"abc\"`);\r\n toValueStringTest({}, \"{}\");\r\n toValueStringTest({a:\"a\"}, `{\"a\":\"a\"}`);\r\n });\r\n\r\n runner.testFunction(\"createError()\", () =>\r\n {\r\n runner.test(\"with all properties\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n const error: Error = mc.createError({\r\n actual: \"fake-actual\",\r\n expected: \"fake-expected\",\r\n expression: \"fake-expression\",\r\n message: \"fake-message\",\r\n });\r\n test.assertEqual(error, new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: fake-expected\",\r\n \"Actual: fake-actual\",\r\n ])));\r\n });\r\n });\r\n });\r\n });\r\n}","import { Iterator } from \"../sources/iterator\";\nimport { JavascriptIterable } from \"../sources/javascript\";\nimport { isMap } from \"../sources/map\";\nimport { MutableMap } from \"../sources/mutableMap\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { mapTests } from \"./mapTests\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"mutableMap.ts\", () =>\n {\n runner.testType(\"MutableMap<TKey,TValue>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const map: MutableMap<number,string> = MutableMap.create();\n test.assertSame(map.getCount().await(), 0);\n });\n\n mutableMapTests(runner, MutableMap.create);\n });\n });\n}\n\nexport function mutableMapTests(runner: TestRunner, creator: () => MutableMap<number,string>): void\n{\n runner.testType(\"MutableMap<TKey,TValue>\", () =>\n {\n mapTests(runner, creator);\n\n runner.testFunction(\"creator()\", (test: Test) =>\n {\n test.assertNotUndefinedAndNotNull(creator);\n \n const map: MutableMap<number,string> = creator();\n test.assertNotUndefinedAndNotNull(map);\n test.assertEqual(map.getCount().await(), 0);\n test.assertTrue(isMap(map));\n });\n\n runner.testFunction(\"containsKey(TKey)\", () =>\n {\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator();\n\n test.assertFalse(map.containsKey(50).await());\n });\n\n runner.test(\"when it contains the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator().set(50, \"fifty\");\n\n test.assertTrue(map.containsKey(50).await());\n });\n });\n\n runner.testFunction(\"get(TKey)\", () =>\n {\n runner.test(\"when it contains the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator().set(1, \"one\");\n test.assertEqual(map.getCount().await(), 1);\n test.assertEqual(map.get(1).await(), \"one\");\n test.assertEqual(map.getCount().await(), 1);\n });\n\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator();\n\n test.assertThrows(() => map.get(1).await(),\n new NotFoundError(\n \"The key 1 was not found in the map.\"));\n test.assertEqual(map.getCount().await(), 0);\n });\n });\n\n runner.testFunction(\"set(TKey,TValue)\", () =>\n {\n function setTest(map: MutableMap<number,string>, key: number, value: string): void\n {\n runner.test(`with ${runner.andList([map, key, value])}`, (test: Test) =>\n {\n const setResult: MutableMap<number,string> = map.set(key, value);\n test.assertSame(setResult, map);\n test.assertSame(map.get(key).await(), value);\n });\n }\n\n setTest(creator(), 0, \"zero\");\n setTest(creator(), 1, \"1\");\n setTest(creator(), -1, \"negative one\");\n\n setTest(creator(), undefined!, \"hello\");\n setTest(creator(), null!, \"oops\");\n setTest(creator(), 10, undefined!);\n setTest(creator(), 11, null!);\n\n setTest(creator().set(1, \"1\"), 1, \"one\");\n });\n\n runner.testFunction(\"toString()\", () =>\n {\n function toStringTest(map: MutableMap<number,string>, expected: string): void\n {\n runner.test(`with ${runner.toString(map)}`, (test: Test) =>\n {\n test.assertEqual(map.toString(), expected);\n });\n }\n\n toStringTest(creator(), \"{}\");\n toStringTest(creator().set(1, \"one\"), `{1:\"one\"}`);\n toStringTest(creator().set(2, \"2\").set(1, \"one\"), `{2:\"2\",1:\"one\"}`);\n });\n\n runner.testFunction(\"iterateKeys()\", () =>\n {\n function iterateKeysTests(map: MutableMap<number,string>, expected: JavascriptIterable<number>): void\n {\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\n {\n const keyIterator: Iterator<number> = map.iterateKeys();\n test.assertEqual(await keyIterator.toArray(), [...expected]);\n });\n }\n\n iterateKeysTests(creator(), []);\n iterateKeysTests(creator().set(5, \"five\"), [5]);\n iterateKeysTests(creator().set(5, \"five\").set(6, \"six\"), [5, 6]);\n iterateKeysTests(creator().set(5, \"5\").set(6, \"6\").set(7, \"7\"), [5, 6, 7]);\n });\n\n runner.testFunction(\"iterateValues()\", () =>\n {\n function iterateValuesTests(map: MutableMap<number,string>, expected: JavascriptIterable<string>): void\n {\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\n {\n const valueIterator: Iterator<string> = map.iterateValues();\n test.assertEqual(await valueIterator.toArray(), [...expected]);\n });\n }\n\n iterateValuesTests(creator(), []);\n iterateValuesTests(creator().set(5, \"five\"), [\"five\"]);\n iterateValuesTests(creator().set(5, \"five\").set(6, \"six\"), [\"five\", \"six\"]);\n iterateValuesTests(creator().set(5, \"5\").set(6, \"6\").set(7, \"7\"), [\"5\", \"6\", \"7\"]);\n });\n });\n}","import { NotFoundError } from \"../sources/notFoundError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"notFoundError.ts\", () =>\r\n {\r\n runner.testType(\"NotFoundError\", () =>\r\n {\r\n runner.testFunction(\"constructor(...string[])\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const error: NotFoundError = new NotFoundError();\r\n test.assertNotUndefinedAndNotNull(error);\r\n test.assertEqual(error.name, \"Error\");\r\n test.assertEqual(error.message, \"\");\r\n test.assertNotUndefinedAndNotNull(error.stack);\r\n });\r\n });\r\n });\r\n });\r\n}\r\n","import { PostConditionError } from \"../sources/postConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"postConditionError.ts\", () =>\r\n {\r\n runner.testType(PostConditionError.name, () =>\r\n {\r\n runner.testFunction(\"constructor(string|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const error: PostConditionError = new PostConditionError();\r\n test.assertNotUndefinedAndNotNull(error);\r\n test.assertEqual(error.name, \"Error\");\r\n test.assertEqual(error.message, \"\");\r\n test.assertNotUndefinedAndNotNull(error.stack);\r\n });\r\n });\r\n });\r\n });\r\n}\r\n","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"preConditionError.ts\", () =>\r\n {\r\n runner.testType(\"PreConditionError\", () =>\r\n {\r\n runner.testFunction(\"constructor(string|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const error: PreConditionError = new PreConditionError();\r\n test.assertNotUndefinedAndNotNull(error);\r\n test.assertEqual(error.name, \"Error\");\r\n test.assertEqual(error.message, \"\");\r\n test.assertNotUndefinedAndNotNull(error.stack);\r\n });\r\n });\r\n });\r\n });\r\n}","import { PromiseAsyncResult } from \"../sources/promiseAsyncResult\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"promiseAsyncResult.ts\", () =>\n {\n runner.testType(\"PromiseAsyncResult<T>\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest<T>(testName: string, promise: Promise<T>, expected: Error): void\n {\n runner.test(testName, (test: Test) =>\n {\n test.assertThrows(() => PromiseAsyncResult.create(promise), expected);\n });\n }\n\n createErrorTest(\"with undefined\", undefined!, new PreConditionError(\n \"Expression: action or promise\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(\"with null\", null!, new PreConditionError(\n \"Expression: action or promise\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with Promise\", async (test: Test) =>\n {\n const result: PromiseAsyncResult<number> = PromiseAsyncResult.create(Promise.resolve(5));\n test.assertNotUndefinedAndNotNull(result);\n\n const value: number = await result;\n test.assertEqual(5, value);\n });\n });\n\n runner.testFunction(\"then()\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n const thenResult: PromiseAsyncResult<string> = parentResult.then(() => \"hello\");\n await test.assertThrowsAsync(thenResult, new Error(\"abc\"));\n });\n\n runner.test(\"with error parent and thenFunction with side-effects\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const thenResult: PromiseAsyncResult<string> = parentResult.then(() => { counter++; return \"hello\"; });\n test.assertEqual(0, counter);\n await test.assertThrowsAsync(thenResult, new Error(\"abc\"));\n test.assertEqual(0, counter, \"counter should still be 0 because the thenFunction shouldn't be invoked.\");\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n const thenResult: PromiseAsyncResult<string> = parentResult.then(() => \"hello\");\n test.assertEqual(\"hello\", await thenResult);\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n const thenResult: PromiseAsyncResult<string> = parentResult.then((argument: number) => (argument + 1).toString());\n test.assertEqual(\"2\", await thenResult);\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value with side-effects\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n let counter: number = 0;\n const thenResult: PromiseAsyncResult<string> = parentResult.then((argument: number) => { counter++; return (argument + 1).toString(); });\n test.assertEqual(0, counter);\n\n await PromiseAsyncResult.yield();\n test.assertEqual(1, counter);\n\n test.assertEqual(\"2\", await thenResult);\n test.assertEqual(1, counter);\n });\n\n runner.test(\"with successful parent and thenFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(10);\n let counter: number = 0;\n const thenResult: PromiseAsyncResult<string> = parentResult.then((argument: number) =>\n {\n counter++;\n throw new Error(`arg: ${argument}, ${counter}`);\n });\n test.assertEqual(counter, 0);\n\n await PromiseAsyncResult.yield();\n test.assertEqual(counter, 1);\n\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(thenResult, new Error(\"arg: 10, 1\"));\n test.assertEqual(counter, 1);\n }\n });\n });\n\n runner.testFunction(\"onValue()\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(onValueResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(10);\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(10, await onValueResult);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(2);\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue((argument: number) => { counter += argument; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await onValueResult, 2);\n test.assertSame(counter, 2);\n }\n });\n\n runner.test(\"with successful parent and onValueFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(2);\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue((argument: number) =>\n {\n counter += argument;\n throw new Error(`argument: ${argument}`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(onValueResult, new Error(\"argument: 2\"));\n test.assertSame(counter, 2);\n }\n });\n });\n\n runner.testFunction(\"catch()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.catch(undefined!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.catch(null!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => 20);\n test.assertSame(await catchResult, 20);\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(() => { counter++; return 21; });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.catch((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n return 21;\n });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with error parent and catchFunction with side-effects\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => { counter++; return 21; });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => 5);\n test.assertSame(await catchResult, 5);\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, (error: Error) => error.message.length);\n test.assertSame(await catchResult, 3);\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(PreConditionError, () => 20);\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(RangeError, () => 20);\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n });\n\n runner.test(\"with catchFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => { throw new TypeError(\"abc\"); });\n await test.assertThrowsAsync(catchResult, new TypeError(\"abc\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => 2);\n test.assertSame(await catchResult, 1);\n });\n });\n\n runner.testFunction(\"onError()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.onError(undefined!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.onError(null!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(() => { counter++; });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, (error: Error) => { counter += error.message.length; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 3);\n }\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(PreConditionError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(RangeError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with onErrorFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, () => { counter++; throw new Error(\"abc\"); });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 1);\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testFunction(\"convertError()\", () =>\n {\n runner.test(\"with undefined convertErrorFunction\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(undefined!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null convertErrorFunction\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(null!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n throw new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(`abc - def`));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(TypeError, (error: TypeError) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(PreConditionError, () =>\n {\n counter++;\n throw new Error(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new TypeError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testFunction(\"finally()\", () =>\n {\n runner.test(\"with successful parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const finallyResult: PromiseAsyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await finallyResult, 5);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const finallyResult: PromiseAsyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"oops!\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new RangeError(\"oops!\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const finallyResult: PromiseAsyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new RangeError(\"def\"));\n test.assertSame(counter, 1);\n }\n });\n });\n });\n });\n}","import { Property } from \"../sources/property\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"property.ts\", () =>\r\n {\r\n runner.testType(\"Property<T>\", () =>\r\n {\r\n runner.testFunction(\"create()\", () =>\r\n {\r\n runner.test(\"with initialValue\", (test: Test) =>\r\n {\r\n const property: Property<number> = Property.create(5);\r\n test.assertEqual(5, property.getValue());\r\n \r\n const setResult: Property<number> = property.setValue(20);\r\n test.assertSame(property, setResult);\r\n test.assertEqual(20, property.getValue());\r\n \r\n test.assertEqual(\"20\", property.toString());\r\n });\r\n\r\n runner.test(\"with getter and setter functions\", (test: Test) =>\r\n {\r\n let propertyValue: string = \"hello\";\r\n\r\n const property: Property<string> = Property.create(\r\n () => propertyValue,\r\n (value: string) => { propertyValue = value; },\r\n );\r\n test.assertEqual(\"hello\", property.getValue());\r\n \r\n const setResult: Property<string> = property.setValue(\"there\");\r\n test.assertSame(property, setResult);\r\n test.assertEqual(\"there\", property.getValue());\r\n test.assertEqual(\"there\", propertyValue);\r\n \r\n test.assertEqual(\"there\", property.toString());\r\n });\r\n\r\n runner.test(\"with options\", (test: Test) =>\r\n {\r\n let propertyValue: string = \"hello\";\r\n\r\n const property: Property<string> = Property.create({\r\n getter: () => propertyValue,\r\n setter: (value: string) => { propertyValue = value; },\r\n });\r\n test.assertEqual(\"hello\", property.getValue());\r\n \r\n const setResult: Property<string> = property.setValue(\"there\");\r\n test.assertSame(property, setResult);\r\n test.assertEqual(\"there\", property.getValue());\r\n test.assertEqual(\"there\", propertyValue);\r\n \r\n test.assertEqual(\"there\", property.toString());\r\n });\r\n });\r\n });\r\n });\r\n}","import { EmptyError } from \"../sources/emptyError\";\nimport { ListQueue } from \"../sources/listQueue\";\nimport { Queue } from \"../sources/queue\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"queue.ts\", () =>\n {\n runner.testType(\"Queue<T>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const queue: ListQueue<number> = Queue.create();\n test.assertNotUndefinedAndNotNull(queue);\n test.assertFalse(queue.any().await());\n test.assertThrows(() => queue.remove().await(), new EmptyError());\n });\n\n runner.testFunction(\"add()\", (test: Test) =>\n {\n const queue: ListQueue<number> = Queue.create();\n queue.add(20).await();\n test.assertEqual(20, queue.remove().await());\n });\n });\n });\n}","import { FetchHttpClient } from \"../sources/fetchHttpClient\";\r\nimport { FetchHttpIncomingResponse } from \"../sources/fetchHttpResponse\";\r\nimport { NodeJSHttpServer as NodeJSHttpServer } from \"../sources/nodeJSHttpServer\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"nodeJSHttpServer.ts\", () =>\r\n {\r\n runner.testType(\"NodeJSHttpServer\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n test.assertNotUndefinedAndNotNull(httpServer);\r\n test.assertFalse(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n });\r\n\r\n runner.testFunction(\"dispose()\", async (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n\r\n test.assertTrue(await httpServer.dispose());\r\n test.assertTrue(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertFalse(await httpServer.dispose());\r\n test.assertTrue(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n }\r\n });\r\n\r\n runner.testFunction(\"start()\", () =>\r\n {\r\n runner.test(\"when disposed\", async (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n test.assertTrue(await httpServer.dispose());\r\n\r\n test.assertThrows(() => httpServer.start(3000), new PreConditionError(\r\n \"Expression: this.isDisposed()\",\r\n \"Expected: false\",\r\n \"Actual: true\",\r\n ));\r\n test.assertTrue(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n });\r\n\r\n runner.test(\"simple scenario\", async (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n\r\n httpServer.start(3000);\r\n try\r\n {\r\n const httpClient: FetchHttpClient = FetchHttpClient.create();\r\n const response: FetchHttpIncomingResponse = await httpClient.sendGetRequest(\"http://localhost:3000\");\r\n\r\n test.assertNotUndefinedAndNotNull(response);\r\n test.assertEqual(200, response.getStatusCode());\r\n }\r\n finally\r\n {\r\n await httpServer.dispose();\r\n }\r\n });\r\n });\r\n });\r\n });\r\n}","import { HttpClient } from \"../sources/httpClient\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { RecreationDotGovClient, RecreationDotGovDivisionAvailability, RecreationDotGovDivisionAvailabilityJson, RecreationDotGovError, RecreationDotGovPermitItineraryJson } from \"../sources/recreationDotGovClient\";\nimport { WonderlandTrailClient, WonderlandTrailLocations } from \"../sources/wonderlandTrailClient\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { hasNetworkAccess } from \"./tests\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"recreationDotGovClient.ts\", () =>\n {\n runner.testType(\"RecreationDotGovClient\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest(httpClient: HttpClient, expected: Error): void\n {\n runner.test(`with ${runner.toString(httpClient)}`, (test: Test) =>\n {\n test.assertThrows(() => RecreationDotGovClient.create(httpClient), expected);\n });\n }\n\n createErrorTest(undefined!, new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(null!, new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with default HttpClient\", (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const recreationDotGovClient: RecreationDotGovClient = RecreationDotGovClient.create(httpClient);\n test.assertNotUndefinedAndNotNull(recreationDotGovClient);\n });\n });\n\n runner.testFunction(\"getPermitItinerary()\", () =>\n {\n function getPermitItineraryErrorTest(itineraryId: string, expected: Error): void\n {\n runner.test(`with ${runner.toString(itineraryId)}`, async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n await test.assertThrowsAsync(async () => await client.getPermitItinerary(itineraryId), expected);\n });\n }\n\n getPermitItineraryErrorTest(undefined!, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getPermitItineraryErrorTest(null!, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n getPermitItineraryErrorTest(\"\", new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not empty\",\n \"Actual: \\\"\\\"\",\n ));\n\n runner.test(\"with invalid permit itinerary id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n await test.assertThrowsAsync(\n async () => await client.getPermitItinerary(\"oopsie!\"),\n new RecreationDotGovError(\n `No permit itinerary found for id: \"oopsie!\"`,\n ),\n );\n });\n\n runner.test(\"with valid permit itinerary id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n const result: RecreationDotGovPermitItineraryJson = await client.getPermitItinerary(WonderlandTrailClient.permitItineraryId);\n test.assertNotUndefinedAndNotNull(result);\n test.assertEqual(result.id, WonderlandTrailClient.permitItineraryId);\n test.assertEqual(result.name, \"Mount Rainier National Park Wilderness and Climbing Permits\");\n test.assertNotUndefinedAndNotNull(result.divisions);\n test.assertTrue(Object.keys(result.divisions).length > 0);\n for (const division of Object.values(result.divisions))\n {\n test.assertNotUndefinedAndNotNull(division.id);\n test.assertNotUndefinedAndNotNull(division.district);\n test.assertNotUndefinedAndNotNull(division.name);\n test.assertNotUndefinedAndNotNull(division.type);\n }\n });\n });\n\n runner.testFunction(\"getDivisionAvailability()\", () =>\n {\n function getDivisionAvailabilityErrorTest(itineraryId: string, divisionId: string, month: number, year: number, expected: Error): void\n {\n runner.test(`with ${runner.andList([itineraryId, divisionId, month, year])}`, async (test: Test) =>\n {\n\n });\n }\n\n getDivisionAvailabilityErrorTest(undefined!, \"fake-division-id\", 5, 2026, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getDivisionAvailabilityErrorTest(null!, \"fake-division-id\", 5, 2026, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n getDivisionAvailabilityErrorTest(\"\", \"fake-division-id\", 5, 2026, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not empty\",\n \"Actual: \\\"\\\"\",\n ));\n getDivisionAvailabilityErrorTest(\"oopsie!\", \"fake-division-id\", 5, 2026, new RecreationDotGovError(\n `No permit itinerary found for id: \"oopsie!\"`,\n ));\n\n runner.test(\"with invalid division id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n const itineraryId: string = WonderlandTrailClient.permitItineraryId;\n const divisionId: string = \"fake-division-id\";\n const month: number = 5;\n const year: number = 2026;\n const earlyAccessPermitLotteryId: string = \"\";\n \n const response: RecreationDotGovDivisionAvailability = await client.getDivisionAvailability(itineraryId, divisionId, month, year, earlyAccessPermitLotteryId);\n\n test.assertNotUndefinedAndNotNull(response);\n test.assertNotUndefinedAndNotNull(response.json);\n test.assertNotUndefinedAndNotNull(response.dayAvailabilities);\n test.assertEqual(0, response.dayAvailabilities.getCount().await());\n test.assertUndefined(response.maximumGroupSize);\n test.assertUndefined(response.minimumGroupSize);\n });\n\n runner.test(\"with Sunrise Camp division id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n\n const itineraryId: string = WonderlandTrailClient.permitItineraryId;\n const divisionId: string = WonderlandTrailLocations.sunriseCamp.divisionId;\n const month: number = 8;\n const year: number = 2026;\n const earlyAccessPermitLotteryId: string = \"\";\n \n const response: RecreationDotGovDivisionAvailability = await client.getDivisionAvailability(itineraryId, divisionId, month, year, earlyAccessPermitLotteryId);\n\n test.assertNotUndefinedAndNotNull(response);\n test.assertNotUndefinedAndNotNull(response.json);\n test.assertNotUndefinedAndNotNull(response.dayAvailabilities);\n test.assertEqual(31, response.dayAvailabilities.getCount().await());\n test.assertNotUndefinedAndNotNull(response.maximumGroupSize);\n test.assertNotUndefinedAndNotNull(response.minimumGroupSize);\n });\n\n runner.test(\"with Indian Bar division id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n\n const itineraryId: string = WonderlandTrailClient.permitItineraryId;\n const divisionId: string = WonderlandTrailLocations.indianBar.divisionId;\n const month: number = 7;\n const year: number = 2026;\n const earlyAccessPermitLotteryId: string = \"\";\n \n const response: RecreationDotGovDivisionAvailability = await client.getDivisionAvailability(itineraryId, divisionId, month, year, earlyAccessPermitLotteryId);\n\n test.assertNotUndefinedAndNotNull(response);\n test.assertNotUndefinedAndNotNull(response.json);\n test.assertNotUndefinedAndNotNull(response.dayAvailabilities);\n test.assertEqual(31, response.dayAvailabilities.getCount().await());\n test.assertNotUndefinedAndNotNull(response.maximumGroupSize);\n test.assertNotUndefinedAndNotNull(response.minimumGroupSize);\n });\n });\n });\n });\n}","import { TestRunner } from \"./testRunner\";\nimport { Set } from \"../sources/set\";\nimport { Test } from \"./test\";\nimport { JavascriptSetSet } from \"../sources/javascriptSetSet\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { SyncResult } from \"../sources/syncResult\";\nimport { JavascriptIterable } from \"../sources/javascript\";\nimport { PreCondition } from \"../sources/preCondition\";\nimport { PreConditionError } from \"../sources/preConditionError\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"set.ts\", () =>\n {\n runner.testType(\"Set<T>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const set: JavascriptSetSet<number> = Set.create();\n test.assertNotUndefinedAndNotNull(set);\n test.assertEqual(0, set.getCount().await());\n test.assertEqual([], set.toArray().await());\n });\n\n runner.testFunction(\"add()\", (test: Test) =>\n {\n const set: Set<number> = Set.create();\n for (let i = 0; i < 3; i++)\n {\n const addResult: Set<number> = set.add(20);\n test.assertSame(set, addResult);\n test.assertTrue(set.contains(20).await());\n test.assertEqual(set.getCount().await(), 1);\n test.assertEqual([20], set.toArray().await());\n }\n });\n\n runner.testFunction(\"addAll()\", (test: Test) =>\n {\n const set: Set<number> = Set.create();\n for (let i = 0; i < 3; i++)\n {\n const addResult: Set<number> = set.addAll([20, 20, 25, 26]);\n test.assertSame(set, addResult);\n test.assertTrue(set.contains(20).await());\n test.assertTrue(set.contains(25).await());\n test.assertTrue(set.contains(26).await());\n test.assertEqual(set.getCount().await(), 3);\n test.assertEqual([20, 25, 26], set.toArray().await());\n }\n });\n\n runner.testFunction(\"remove()\", (test: Test) =>\n {\n const set: Set<number> = Set.create();\n\n test.assertThrows(set.remove(15), new NotFoundError(\"Could not find 15.\"));\n\n set.add(16);\n const removeResult: SyncResult<void> = set.remove(16);\n test.assertNotUndefinedAndNotNull(removeResult);\n test.assertFalse(set.contains(16).await());\n test.assertUndefined(removeResult.await());\n\n test.assertThrows(set.remove(16), new NotFoundError(\"Could not find 16.\"));\n });\n\n runner.testFunction(\"toString()\", () =>\n {\n function toStringTest<T>(set: Set<T>, expected: string): void\n {\n runner.test(`with ${runner.toString(set)}`, (test: Test) =>\n {\n test.assertEqual(set.toString(), expected);\n });\n }\n\n toStringTest(Set.create(), \"{}\");\n toStringTest(Set.create().addAll([1]), \"{1}\");\n toStringTest(Set.create().addAll([1, 2]), \"{1,2}\");\n toStringTest(Set.create().addAll([3, 1, 2]), \"{3,1,2}\");\n });\n\n runner.testFunction(\"equals()\", () =>\n {\n function equalsTest<T>(set: Set<T>, right: JavascriptIterable<T>, expected: boolean): void\n {\n runner.test(`with ${runner.andList([set, right])}`, (test: Test) =>\n {\n test.assertEqual(set.equals(right).await(), expected);\n });\n }\n\n equalsTest(Set.create(), [], true);\n equalsTest(Set.create(), [1], false);\n equalsTest(Set.create<number>().addAll([1]), [], false);\n equalsTest(Set.create<number>().addAll([1]), [1], true);\n equalsTest(Set.create<number>().addAll([1]), [1, 1], false);\n equalsTest(Set.create<number>().addAll([1, 2]), [1, 2], true);\n equalsTest(Set.create<number>().addAll([1, 2]), [2, 1], false);\n equalsTest(Set.create<number>().addAll([1, 2]), Set.create<number>().addAll([2, 1]), true);\n });\n\n runner.testFunction(\"union()\", () =>\n {\n function unionErrorTest<T>(set: Set<T>, values: JavascriptIterable<T>, expected: Error): void\n {\n runner.test(`with ${runner.andList([set, values])}`, (test: Test) =>\n {\n test.assertThrows(() => set.union(values), expected);\n });\n }\n\n unionErrorTest(Set.create<number>(), undefined!, new PreConditionError(\n \"Expression: values\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n unionErrorTest(Set.create<number>(), null!, new PreConditionError(\n \"Expression: values\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n function unionTest<T>(set: Set<T>, values: JavascriptIterable<T>, expected: JavascriptIterable<T>): void\n {\n runner.test(`with ${runner.andList([set, values])}`, (test: Test) =>\n {\n test.assertEqual(set.union(values).toArray().await(), expected);\n });\n }\n\n unionTest(Set.create(), [], []);\n unionTest(Set.create(), [1, 2], [1, 2]);\n unionTest(Set.create([1]), [2], [1, 2]);\n unionTest(Set.create([1, 2]), [1], [1, 2]);\n });\n });\n });\n}","import { EmptyError } from \"../sources/emptyError\";\nimport { ListStack } from \"../sources/listStack\";\nimport { Stack } from \"../sources/stack\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"stack.ts\", () =>\n {\n runner.testType(\"Stack<T>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n test.assertNotUndefinedAndNotNull(stack);\n test.assertFalse(stack.any().await());\n });\n\n runner.testFunction(\"add()\", (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n\n stack.add(10).await();\n test.assertTrue(stack.any().await());\n\n stack.add(20).await();\n test.assertTrue(stack.any().await());\n\n test.assertEqual(20, stack.remove().await());\n test.assertEqual(10, stack.remove().await());\n test.assertFalse(stack.any().await());\n });\n\n runner.testFunction(\"addAll()\", () =>\n {\n function addAllTest(values: number[]): void\n {\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n stack.addAll(values).await();\n\n for (const value of values.reverse())\n {\n test.assertTrue(stack.any().await());\n test.assertEqual(value, stack.remove().await());\n }\n test.assertFalse(stack.any().await());\n });\n }\n\n addAllTest([]);\n addAllTest([1]);\n addAllTest([1, 2]);\n addAllTest([1, 2, 3]);\n });\n\n runner.testFunction(\"remove()\", (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n test.assertThrows(() => stack.remove().await(), new EmptyError());\n });\n });\n });\n}","import { Comparison } from \"../sources/comparison\";\r\nimport { StringComparer } from \"../sources/stringComparer\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"stringComparer.ts\", () =>\r\n {\r\n runner.testType(\"StringComparer\", () =>\r\n {\r\n runner.testFunction(\"compare(string, string)\", () =>\r\n {\r\n function compareTest(left: string, right: string, expected: Comparison): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n const comparer: StringComparer = StringComparer.create();\r\n test.assertEqual(comparer.compare(left, right), expected);\r\n test.assertEqual(comparer.lessThan(left, right), expected === Comparison.LessThan);\r\n test.assertEqual(comparer.lessThanOrEqual(left, right), expected !== Comparison.GreaterThan);\r\n test.assertEqual(comparer.equal(left, right), expected === Comparison.Equal);\r\n test.assertEqual(comparer.greaterThanOrEqualTo(left, right), expected !== Comparison.LessThan);\r\n test.assertEqual(comparer.greaterThan(left, right), expected === Comparison.GreaterThan);\r\n });\r\n }\r\n\r\n compareTest(undefined!, undefined!, Comparison.Equal);\r\n compareTest(undefined!, null!, Comparison.LessThan);\r\n compareTest(undefined!, \"\", Comparison.LessThan);\r\n compareTest(undefined!, \"a\", Comparison.LessThan);\r\n compareTest(undefined!, \"def\", Comparison.LessThan);\r\n\r\n compareTest(null!, undefined!, Comparison.GreaterThan);\r\n compareTest(null!, null!, Comparison.Equal);\r\n compareTest(null!, \"\", Comparison.LessThan);\r\n compareTest(null!, \"a\", Comparison.LessThan);\r\n compareTest(null!, \"def\", Comparison.LessThan);\r\n\r\n compareTest(\"\", undefined!, Comparison.GreaterThan);\r\n compareTest(\"\", null!, Comparison.GreaterThan);\r\n compareTest(\"\", \"\", Comparison.Equal);\r\n compareTest(\"\", \"a\", Comparison.LessThan);\r\n compareTest(\"\", \"def\", Comparison.LessThan);\r\n\r\n compareTest(\"a\", undefined!, Comparison.GreaterThan);\r\n compareTest(\"a\", null!, Comparison.GreaterThan);\r\n compareTest(\"a\", \"\", Comparison.GreaterThan);\r\n compareTest(\"a\", \"a\", Comparison.Equal);\r\n compareTest(\"a\", \"def\", Comparison.LessThan);\r\n\r\n compareTest(\"def\", undefined!, Comparison.GreaterThan);\r\n compareTest(\"def\", null!, Comparison.GreaterThan);\r\n compareTest(\"def\", \"\", Comparison.GreaterThan);\r\n compareTest(\"def\", \"a\", Comparison.GreaterThan);\r\n compareTest(\"def\", \"def\", Comparison.Equal);\r\n });\r\n });\r\n });\r\n}","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport { StringIterator } from \"../sources/stringIterator\";\r\nimport { iteratorTests } from \"./iteratorTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"stringIterator.ts\", () =>\r\n {\r\n runner.testType(\"StringIterator\", () =>\r\n {\r\n iteratorTests(runner, () => StringIterator.create(\"\"));\r\n\r\n runner.testFunction(\"create(string)\", () =>\r\n {\r\n function createErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => StringIterator.create(value!),\r\n expectedError);\r\n });\r\n }\r\n\r\n createErrorTest(\r\n undefined,\r\n new PreConditionError(\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(\r\n null,\r\n new PreConditionError(\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n function createTest(value: string): void\r\n {\r\n runner.test(`with \"${runner.toString(value)}\"`, (test: Test) =>\r\n {\r\n const iterator: StringIterator = StringIterator.create(value);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrentIndex(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertThrows(() => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n });\r\n }\r\n\r\n createTest(\"\");\r\n createTest(\"abc\");\r\n });\r\n\r\n runner.testFunction(\"next()\", () =>\r\n {\r\n function nextTest(value: string): void\r\n {\r\n runner.test(`with \"${runner.toString(value)}\"`, async (test: Test) =>\r\n {\r\n const iterator: StringIterator = StringIterator.create(value);\r\n\r\n for (let i = 0; i < value.length; i++)\r\n {\r\n test.assertTrue(await iterator.next());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertSame(iterator.getCurrentIndex(), i);\r\n test.assertSame(iterator.getCurrent(), value[i]);\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(await iterator.next());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrentIndex(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertThrows(() => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n }\r\n });\r\n }\r\n\r\n nextTest(\"\");\r\n nextTest(\"a\");\r\n nextTest(\"abc\");\r\n });\r\n\r\n runner.testGroup(\"for...of\", () =>\r\n {\r\n function forOfTest(value: string): void\r\n {\r\n runner.test(`with \"${runner.toString(value)}\"`, async (test: Test) =>\r\n {\r\n const iterator: StringIterator = StringIterator.create(value);\r\n\r\n let expectedIndex: number = 0;\r\n for (const c of iterator)\r\n {\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertSame(iterator.getCurrentIndex(), expectedIndex);\r\n test.assertSame(iterator.getCurrent(), value[expectedIndex]);\r\n test.assertSame(c, value[expectedIndex]);\r\n expectedIndex++;\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(await iterator.next());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrentIndex(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertThrows(() => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n }\r\n });\r\n }\r\n\r\n forOfTest(\"\");\r\n forOfTest(\"a\");\r\n forOfTest(\"abc\");\r\n });\r\n });\r\n });\r\n}","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport {\r\n escape, escapeAndQuote, getLength, isDigit, isLetter, isLetterOrDigit, isLowercasedLetter,\r\n isUppercasedLetter, isWhitespace, join, quote\r\n} from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"strings.ts\", () =>\r\n {\r\n runner.testFunction(\"getLength(string | undefined | null)\", () =>\r\n {\r\n function getLengthTest(value: string | undefined | null, expected: number): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(getLength(value), expected);\r\n });\r\n }\r\n\r\n getLengthTest(undefined, 0);\r\n getLengthTest(null, 0);\r\n getLengthTest(\"\", 0);\r\n getLengthTest(\"a\", 1);\r\n getLengthTest(\"abc\", 3);\r\n });\r\n\r\n runner.testFunction(\"join(string, string[])\", () =>\r\n {\r\n function joinErrorTest(separator: string, values: string[], expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([separator, values.map(v => runner.toString(v))])}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => join(separator, values), expected);\r\n });\r\n }\r\n\r\n joinErrorTest(undefined!, [],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n joinErrorTest(undefined!, [\"a\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n joinErrorTest(undefined!, [\"a\", \"b\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n joinErrorTest(undefined!, [\"a\", \"b\", \"c\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n\r\n joinErrorTest(null!, [],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n joinErrorTest(null!, [\"a\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n joinErrorTest(null!, [\"a\", \"b\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n joinErrorTest(null!, [\"a\", \"b\", \"c\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n\r\n function joinTest(separator: string, values: string[], expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([separator, values.map(v => runner.toString(v))])}`, (test: Test) =>\r\n {\r\n test.assertSame(join(separator, values), expected);\r\n });\r\n }\r\n\r\n \r\n\r\n joinTest(\"\", [], \"\");\r\n joinTest(\"\", [\"a\"], \"a\");\r\n joinTest(\"\", [\"a\", \"b\"], \"ab\");\r\n joinTest(\"\", [\"a\", \"b\", \"c\"], \"abc\");\r\n\r\n joinTest(\" \", [], \"\");\r\n joinTest(\" \", [\"a\"], \"a\");\r\n joinTest(\" \", [\"a\", \"b\"], \"a b\");\r\n joinTest(\" \", [\"a\", \"b\", \"c\"], \"a b c\");\r\n\r\n joinTest(\" _ \", [], \"\");\r\n joinTest(\" _ \", [\"a\"], \"a\");\r\n joinTest(\" _ \", [\"a\", \"b\"], \"a _ b\");\r\n joinTest(\" _ \", [\"a\", \"b\", \"c\"], \"a _ b _ c\");\r\n });\r\n\r\n runner.testFunction(\"escape(string|undefined|null,string[]|undefined)\", () =>\r\n {\r\n function escapeTest(value: string | undefined | null, dontEscape: string[] | undefined, expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, dontEscape?.map((value: string) => runner.toString(value))])}`, (test: Test) =>\r\n {\r\n const result: string = escape(value, dontEscape);\r\n test.assertSame(result, expected);\r\n });\r\n }\r\n\r\n escapeTest(undefined, undefined, \"undefined\");\r\n escapeTest(null, undefined, \"null\");\r\n escapeTest(\"\", undefined, \"\");\r\n escapeTest(\"a\", undefined, \"a\");\r\n escapeTest(\"A\", undefined, \"A\");\r\n escapeTest(\"abc\", undefined, \"abc\");\r\n escapeTest(\"\\t\", undefined, \"\\\\t\");\r\n escapeTest(\"\\n\", undefined, \"\\\\n\");\r\n escapeTest(\"\\r\", undefined, \"\\\\r\");\r\n escapeTest(\"'\", undefined, \"\\\\'\");\r\n escapeTest(\"\\\"\", undefined, \"\\\\\\\"\");\r\n escapeTest(\"&\", undefined, \"&\");\r\n escapeTest(\" \\r\\n \\t \", undefined, \" \\\\r\\\\n \\\\t \");\r\n escapeTest(\"\\t\", [], \"\\\\t\");\r\n escapeTest(\"\\t\", [\"\\n\"], \"\\\\t\");\r\n escapeTest(\"\\t\", [\"\\t\"], \"\\t\");\r\n });\r\n\r\n runner.testFunction(\"quote(string|undefined|null)\", () =>\r\n {\r\n function quoteTest(value: string | undefined | null, quoteString: string | undefined, expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, quoteString])}`, (test: Test) =>\r\n {\r\n const result: string = quote(value, quoteString);\r\n test.assertSame(result, expected);\r\n });\r\n }\r\n\r\n quoteTest(undefined, undefined, \"undefined\");\r\n quoteTest(null, undefined, \"null\");\r\n quoteTest(\"\", undefined, `\"\"`);\r\n quoteTest(\"a\", undefined, `\"a\"`);\r\n quoteTest(\"A\", undefined, `\"A\"`);\r\n quoteTest(\"abc\", undefined, `\"abc\"`);\r\n quoteTest(\"abc\", \"'\", `'abc'`);\r\n });\r\n\r\n runner.testFunction(\"escapeAndQuote(string|undefined|null,string|undefined,string[]|undefined)\", () =>\r\n {\r\n function escapeAndQuoteTest(value: string | undefined | null, quote: string | undefined, dontEscape: string[] | undefined, expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, quote, dontEscape?.map(x => runner.toString(x))])}`, (test: Test) =>\r\n {\r\n const result: string = escapeAndQuote(value, quote, dontEscape);\r\n test.assertSame(result, expected);\r\n });\r\n }\r\n\r\n escapeAndQuoteTest(undefined, undefined, undefined, \"undefined\");\r\n escapeAndQuoteTest(null, undefined, undefined, \"null\");\r\n escapeAndQuoteTest(\"\", undefined, undefined, `\"\"`);\r\n escapeAndQuoteTest(\"a\", undefined, undefined, `\"a\"`);\r\n escapeAndQuoteTest(\"A\", undefined, undefined, `\"A\"`);\r\n escapeAndQuoteTest(\"abc\", undefined, undefined, `\"abc\"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, undefined, `\"\\\\t\"`);\r\n escapeAndQuoteTest(\"\\n\", undefined, undefined, `\"\\\\n\"`);\r\n escapeAndQuoteTest(\"\\r\", undefined, undefined, `\"\\\\r\"`);\r\n escapeAndQuoteTest(\"'\", undefined, undefined, `\"\\\\'\"`);\r\n escapeAndQuoteTest(\"\\\"\", undefined, undefined, `\"\\\\\\\"\"`);\r\n escapeAndQuoteTest(\"&\", undefined, undefined, `\"&\"`);\r\n escapeAndQuoteTest(\" \\r\\n \\t \", undefined, undefined, `\" \\\\r\\\\n \\\\t \"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, [], `\"\\\\t\"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, [\"\\n\"], `\"\\\\t\"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, [\"\\t\"], `\"\\t\"`);\r\n });\r\n\r\n runner.testFunction(\"isWhitespace(string)\", () =>\r\n {\r\n function isWhitespaceErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isWhitespace(value!), expectedError);\r\n });\r\n }\r\n\r\n isWhitespaceErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isWhitespaceErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isWhitespaceErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isWhitespaceErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isWhitespaceTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isWhitespace(value), expected);\r\n });\r\n }\r\n\r\n isWhitespaceTest(\" \", true);\r\n isWhitespaceTest(\"\\n\", true);\r\n isWhitespaceTest(\"\\r\", true);\r\n isWhitespaceTest(\"\\t\", true);\r\n\r\n isWhitespaceTest(\"a\", false);\r\n isWhitespaceTest(\"_\", false);\r\n isWhitespaceTest(\"-\", false);\r\n });\r\n\r\n runner.testFunction(\"isLetter(string)\", () =>\r\n {\r\n function isLetterErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isLetter(value!), expectedError);\r\n });\r\n }\r\n\r\n isLetterErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isLetterErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isLetterErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isLetterErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isLetterTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isLetter(value), expected);\r\n });\r\n }\r\n\r\n isLetterTest(\"a\", true);\r\n isLetterTest(\"m\", true);\r\n isLetterTest(\"z\", true);\r\n isLetterTest(\"A\", true);\r\n isLetterTest(\"N\", true);\r\n isLetterTest(\"Z\", true);\r\n \r\n isLetterTest(\" \", false);\r\n isLetterTest(\"\\n\", false);\r\n isLetterTest(\"\\r\", false);\r\n isLetterTest(\"\\t\", false);\r\n isLetterTest(\"_\", false);\r\n isLetterTest(\"-\", false);\r\n isLetterTest(\"5\", false);\r\n });\r\n\r\n runner.testFunction(\"isLowercasedLetter(string)\", () =>\r\n {\r\n function isLowercasedLetterErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isLowercasedLetter(value!), expectedError);\r\n });\r\n }\r\n\r\n isLowercasedLetterErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isLowercasedLetterErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isLowercasedLetterErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isLowercasedLetterErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isLowercasedLetterTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isLowercasedLetter(value), expected);\r\n });\r\n }\r\n\r\n isLowercasedLetterTest(\"a\", true);\r\n isLowercasedLetterTest(\"m\", true);\r\n isLowercasedLetterTest(\"z\", true);\r\n\r\n isLowercasedLetterTest(\"A\", false);\r\n isLowercasedLetterTest(\"N\", false);\r\n isLowercasedLetterTest(\"Z\", false);\r\n isLowercasedLetterTest(\" \", false);\r\n isLowercasedLetterTest(\"\\n\", false);\r\n isLowercasedLetterTest(\"\\r\", false);\r\n isLowercasedLetterTest(\"\\t\", false);\r\n isLowercasedLetterTest(\"_\", false);\r\n isLowercasedLetterTest(\"-\", false);\r\n isLowercasedLetterTest(\"5\", false);\r\n });\r\n\r\n runner.testFunction(\"isUppercasedLetter(string)\", () =>\r\n {\r\n function isUppercasedLetterErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isUppercasedLetter(value!), expectedError);\r\n });\r\n }\r\n\r\n isUppercasedLetterErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isUppercasedLetterErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isUppercasedLetterErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isUppercasedLetterErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isUppercasedLetterTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isUppercasedLetter(value), expected);\r\n });\r\n }\r\n \r\n isUppercasedLetterTest(\"A\", true);\r\n isUppercasedLetterTest(\"N\", true);\r\n isUppercasedLetterTest(\"Z\", true);\r\n\r\n isUppercasedLetterTest(\"a\", false);\r\n isUppercasedLetterTest(\"m\", false);\r\n isUppercasedLetterTest(\"z\", false);\r\n isUppercasedLetterTest(\" \", false);\r\n isUppercasedLetterTest(\"\\n\", false);\r\n isUppercasedLetterTest(\"\\r\", false);\r\n isUppercasedLetterTest(\"\\t\", false);\r\n isUppercasedLetterTest(\"_\", false);\r\n isUppercasedLetterTest(\"-\", false);\r\n isUppercasedLetterTest(\"5\", false);\r\n });\r\n\r\n runner.testFunction(\"isDigit(string)\", () =>\r\n {\r\n function isDigitErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isDigit(value!), expectedError);\r\n });\r\n }\r\n\r\n isDigitErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isDigitErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isDigitErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isDigitErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isDigitTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isDigit(value), expected);\r\n });\r\n }\r\n \r\n isDigitTest(\"0\", true);\r\n isDigitTest(\"5\", true);\r\n isDigitTest(\"9\", true);\r\n\r\n isDigitTest(\".\", false);\r\n isDigitTest(\"a\", false);\r\n isDigitTest(\"m\", false);\r\n isDigitTest(\"z\", false);\r\n isDigitTest(\"A\", false);\r\n isDigitTest(\"N\", false);\r\n isDigitTest(\"Z\", false);\r\n isDigitTest(\" \", false);\r\n isDigitTest(\"\\n\", false);\r\n isDigitTest(\"\\r\", false);\r\n isDigitTest(\"\\t\", false);\r\n isDigitTest(\"_\", false);\r\n isDigitTest(\"-\", false);\r\n });\r\n\r\n runner.testFunction(\"isLetterOrDigit(string)\", () =>\r\n {\r\n function isLetterOrDigitErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isLetterOrDigit(value!), expectedError);\r\n });\r\n }\r\n\r\n isLetterOrDigitErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isLetterOrDigitErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isLetterOrDigitErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isLetterOrDigitErrorTest(\"ab\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isLetterOrDigitTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isLetterOrDigit(value), expected);\r\n });\r\n }\r\n \r\n isLetterOrDigitTest(\"0\", true);\r\n isLetterOrDigitTest(\"5\", true);\r\n isLetterOrDigitTest(\"9\", true);\r\n isLetterOrDigitTest(\"a\", true);\r\n isLetterOrDigitTest(\"m\", true);\r\n isLetterOrDigitTest(\"z\", true);\r\n isLetterOrDigitTest(\"A\", true);\r\n isLetterOrDigitTest(\"N\", true);\r\n isLetterOrDigitTest(\"Z\", true);\r\n\r\n isLetterOrDigitTest(\".\", false);\r\n isLetterOrDigitTest(\" \", false);\r\n isLetterOrDigitTest(\"\\n\", false);\r\n isLetterOrDigitTest(\"\\r\", false);\r\n isLetterOrDigitTest(\"\\t\", false);\r\n isLetterOrDigitTest(\"_\", false);\r\n isLetterOrDigitTest(\"-\", false);\r\n });\r\n });\r\n}","import { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { SyncResult } from \"../sources/syncResult\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"syncResult.ts\", () =>\n {\n runner.testType(\"SyncResult<T>\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest<T>(testName: string, action: () => T, expected: Error): void\n {\n runner.test(testName, (test: Test) =>\n {\n test.assertThrows(() => SyncResult.create(action), expected);\n });\n }\n\n createErrorTest(\"with undefined\", undefined!, new PreConditionError(\n \"Expression: action\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(\"with null\", null!, new PreConditionError(\n \"Expression: action\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with action\", (test: Test) =>\n {\n const result: SyncResult<number> = SyncResult.create(() => 5);\n test.assertNotUndefinedAndNotNull(result);\n\n const value: number = result.await();\n test.assertEqual(5, value);\n });\n\n runner.test(\"with action with side-effects\", (test: Test) =>\n {\n let counter = 0;\n const result: SyncResult<number> = SyncResult.create(() => { return ++counter; });\n test.assertEqual(counter, 1);\n\n for (let i = 0; i < 3; i++)\n {\n test.assertEqual(1, result.await());\n test.assertEqual(1, counter);\n }\n });\n });\n\n runner.testFunction(\"value()\", () =>\n {\n function valueTest<T>(value: T): void\n {\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\n {\n const result: SyncResult<T> = SyncResult.value(value);\n test.assertNotUndefinedAndNotNull(result);\n\n const awaitResult: T = result.await();\n test.assertSame(awaitResult, value);\n });\n }\n\n valueTest(undefined);\n valueTest(null);\n valueTest(50);\n valueTest({});\n });\n\n runner.testFunction(\"error()\", () =>\n {\n function errorTest<T>(error: Error): void\n {\n runner.test(`with ${runner.toString(error)}`, (test: Test) =>\n {\n const result: SyncResult<T> = SyncResult.error(error);\n test.assertNotUndefinedAndNotNull(result);\n\n test.assertThrows(result, error);\n });\n }\n\n errorTest(new Error(\"oops\"));\n errorTest(new NotFoundError(\"not here\"));\n });\n\n runner.testGroup(\"async/await\", () =>\n {\n runner.test(\"with value\", async (test: Test) =>\n {\n const result: SyncResult<number> = SyncResult.value(5);\n test.assertEqual(await result, 5);\n });\n\n runner.test(\"with error\", async (test: Test) =>\n {\n const result: SyncResult<number> = SyncResult.error(new NotFoundError(\"abc\"));\n await test.assertThrowsAsync(result, new NotFoundError(\"abc\"));\n });\n });\n\n runner.testFunction(\"then()\", () =>\n {\n runner.testGroup(\"with non-PromiseLike return type\", () =>\n {\n runner.test(\"with error parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const thenResult: SyncResult<string> = parentResult.then(() => \"hello\");\n test.assertThrows(() => thenResult.await(), new Error(\"abc\"));\n });\n\n runner.test(\"with error parent and thenFunction with side-effects\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const thenResult: SyncResult<string> = parentResult.then(() => { counter++; return \"hello\"; });\n test.assertSame(0, counter);\n test.assertThrows(() => thenResult.await(), new Error(\"abc\"));\n test.assertSame(0, counter);\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const thenResult: SyncResult<string> = parentResult.then(() => \"hello\");\n test.assertSame(\"hello\", thenResult.await());\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const thenResult: SyncResult<string> = parentResult.then((argument: number) => (argument + 1).toString());\n test.assertSame(\"2\", thenResult.await());\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value with side-effects\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n let counter: number = 0;\n const thenResult: SyncResult<string> = parentResult.then((argument: number) => { counter++; return (argument + 1).toString(); });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(\"2\", thenResult.await());\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with successful parent and thenFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(10);\n let counter: number = 0;\n const thenResult: SyncResult<string> = parentResult.then((argument: number) =>\n {\n counter++;\n throw new Error(`arg: ${argument}`);\n });\n test.assertSame(counter, 1);\n\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(thenResult, new Error(\"arg: 10\"));\n test.assertSame(counter, 1);\n\n await test.assertThrowsAsync(thenResult, new Error(\"arg: 10\"));\n test.assertSame(counter, 1);\n }\n });\n });\n });\n\n runner.testFunction(\"onValue()\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue(() => counter++);\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(onValueResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(10);\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue(() => counter++);\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(10, onValueResult.await());\n test.assertSame(counter, 1);\n\n test.assertSame(10, await onValueResult);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(2);\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue((argument: number) => counter += argument);\n test.assertSame(counter, 2);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(onValueResult.await(), 2);\n test.assertSame(counter, 2);\n\n test.assertSame(await onValueResult, 2);\n test.assertSame(counter, 2);\n }\n });\n\n runner.test(\"with successful parent and onValueFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(2);\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue((argument: number) =>\n {\n counter += argument;\n throw new Error(`argument: ${argument}`);\n });\n test.assertSame(counter, 2);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(onValueResult, new Error(\"argument: 2\"));\n test.assertSame(counter, 2);\n\n await test.assertThrowsAsync(onValueResult, new Error(\"argument: 2\"));\n test.assertSame(counter, 2);\n }\n });\n });\n\n runner.testFunction(\"catch()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.catch(undefined!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.catch(null!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with error parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 20);\n test.assertSame(catchResult.await(), 20);\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(() => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n return 21;\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 21);\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with error parent and catchFunction with side-effects\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 5);\n test.assertSame(catchResult.await(), 5);\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, (error: Error) => error.message.length);\n test.assertSame(catchResult.await(), 3);\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(PreConditionError, () => 20);\n test.assertThrows(catchResult, new Error(\"abc\"));\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(RangeError, () => 20);\n test.assertThrows(catchResult, new PreConditionError(\"def\"));\n });\n\n runner.test(\"with catchFunction that throws\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { throw new TypeError(\"abc\"); });\n test.assertThrows(catchResult, new TypeError(\"abc\"));\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 2);\n test.assertSame(catchResult.await(), 1);\n });\n });\n\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 20);\n test.assertSame(await catchResult, 20);\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(() => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n return 21;\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with error parent and catchFunction with side-effects\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 5);\n test.assertSame(await catchResult, 5);\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, (error: Error) => error.message.length);\n test.assertSame(await catchResult, 3);\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(PreConditionError, () => 20);\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(RangeError, () => 20);\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n });\n\n runner.test(\"with catchFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { throw new TypeError(\"abc\"); });\n await test.assertThrowsAsync(catchResult, new TypeError(\"abc\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 2);\n test.assertSame(await catchResult, 1);\n });\n });\n });\n\n runner.testFunction(\"onError()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.onError(undefined!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.onError(null!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with error parent, no errorType, and no error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(() => { counter++; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, (error: Error) => { counter += error.message.length; });\n test.assertSame(counter, 3);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 3);\n }\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(PreConditionError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(RangeError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new PreConditionError(\"def\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with onErrorFunction that throws\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; throw new Error(\"abc\"); });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 1);\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(() => { counter++; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, (error: Error) => { counter += error.message.length; });\n test.assertSame(counter, 3);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 3);\n }\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(PreConditionError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(RangeError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with onErrorFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; throw new Error(\"abc\"); });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 1);\n test.assertSame(counter, 0);\n }\n });\n });\n });\n\n runner.testFunction(\"convertError()\", () =>\n {\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with undefined convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(undefined!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(null!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n throw new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(`abc - def`));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(TypeError, (error: TypeError) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(PreConditionError, () =>\n {\n counter++;\n throw new Error(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new TypeError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with undefined convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(undefined!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(null!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(convertErrorResult.await(), 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n throw new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(convertErrorResult.await(), 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(`abc - def`));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(TypeError, (error: TypeError) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(PreConditionError, () =>\n {\n counter++;\n throw new Error(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new TypeError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n });\n });\n\n runner.testFunction(\"finally()\", () =>\n {\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with successful parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await finallyResult, 5);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"oops!\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new RangeError(\"oops!\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"def\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new RangeError(\"def\"));\n test.assertSame(counter, 1);\n }\n });\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with successful parent and non-throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(finallyResult.await(), 5);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"oops!\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(finallyResult, new RangeError(\"oops!\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and non-throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(finallyResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"def\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new RangeError(\"def\"));\n test.assertSame(counter, 1);\n }\n });\n });\n });\n });\n });\n}","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestAction } from \"./testAction\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"testAction.ts\", () =>\r\n {\r\n runner.testType(\"TestAction\", () =>\r\n {\r\n runner.testFunction(\"create()\", () =>\r\n {\r\n function createErrorTest(parent: TestAction | undefined, name: string, action: () => (void | Promise<void>), expected: Error): void\r\n {\r\n runner.test(`with ${!parent ? runner.toString(parent) : \"defined parent\"}, ${runner.toString(name)}, and ${!action ? runner.toString(action) : \"defined action\"}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => TestAction.create(parent, name, undefined, action), expected);\r\n });\r\n }\r\n\r\n createErrorTest(\r\n undefined,\r\n undefined!,\r\n () => {},\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: name\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])),\r\n );\r\n createErrorTest(\r\n undefined,\r\n null!,\r\n () => {},\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: name\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])),\r\n );\r\n createErrorTest(\r\n undefined,\r\n \"a\",\r\n undefined!,\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: action\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])),\r\n );\r\n createErrorTest(\r\n undefined,\r\n \"a\",\r\n null!,\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: action\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])),\r\n );\r\n\r\n function createTest(parent: TestAction | undefined, name: string, action: () => (void | Promise<void>)): void\r\n {\r\n runner.test(`with ${!parent ? runner.toString(parent) : \"defined parent\"}, ${runner.toString(name)}, and ${!action ? runner.toString(action) : \"defined action\"}`, (test: Test) =>\r\n {\r\n const testAction: TestAction = TestAction.create(parent, name, undefined, action);\r\n test.assertNotUndefinedAndNotNull(testAction);\r\n test.assertSame(parent, testAction.getParent());\r\n test.assertSame(name, testAction.getName());\r\n test.assertSame(action, testAction.getAction());\r\n });\r\n }\r\n\r\n createTest(undefined, \"b\", () => {});\r\n });\r\n\r\n runner.testFunction(\"run()\", (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const action: TestAction = TestAction.create(undefined, \"c\", undefined, () => { counter++; });\r\n test.assertEqual(0, counter);\r\n\r\n for (let i = 1; i <= 3; i++)\r\n {\r\n action.runAsync();\r\n test.assertEqual(i, counter);\r\n }\r\n });\r\n });\r\n });\r\n}","import { Comparison } from \"../sources/comparison\";\r\nimport { Iterable } from \"../sources/iterable\";\r\nimport { List } from \"../sources/list\";\r\nimport { Map } from \"../sources/map\";\r\nimport { ToStringFunctions } from \"../sources/toStringFunctions\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"toStringFunctions.ts\", () =>\r\n {\r\n runner.testType(\"ToStringFunctions\", () =>\r\n {\r\n runner.testFunction(\"toString(unknown)\", () =>\r\n {\r\n function toStringTest(value: unknown, expected: string)\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const functions: ToStringFunctions = ToStringFunctions.create();\r\n test.assertSame(functions.toString(value), expected);\r\n });\r\n }\r\n\r\n // toStringTest(undefined, \"undefined\");\r\n // toStringTest(null, \"null\");\r\n // toStringTest(false, \"false\");\r\n // toStringTest(true, \"true\");\r\n // toStringTest(50, \"50\");\r\n // toStringTest(NaN, \"NaN\");\r\n // toStringTest(Infinity, \"Infinity\");\r\n // toStringTest(-Infinity, \"-Infinity\");\r\n // toStringTest(1.2, \"1.2\");\r\n // toStringTest(\"hello\\tthere\\nfriend\", `\"hello\\\\tthere\\\\nfriend\"`);\r\n // toStringTest({}, \"{}\");\r\n // toStringTest({1:\"one\", b: \"two\"}, `{\"1\":\"one\",\"b\":\"two\"}`);\r\n // toStringTest([], \"[]\");\r\n // toStringTest([undefined, undefined], \"[undefined,undefined]\");\r\n // toStringTest([1, 2.3, false], \"[1,2.3,false]\");\r\n // toStringTest([[[]]], \"[[[]]]\");\r\n // toStringTest(Iterable.create(), `[]`);\r\n // toStringTest(Iterable.create<string>([\"abc\"]), `[\"abc\"]`);\r\n // toStringTest(Iterable.create([1, 2, 3]), `[1,2,3]`);\r\n // toStringTest(List.create(), `[]`);\r\n // toStringTest(List.create<string>([\"abc\"]), `[\"abc\"]`);\r\n // toStringTest(List.create([1, 2, 3]), `[1,2,3]`);\r\n toStringTest(Map.create(), `{}`);\r\n // toStringTest(Map.create<string,number>().set(\"a\", 1), `{\"a\":1}`);\r\n // toStringTest(Map.create<string,number>().set(\"a\", 1).set(\"b\", 2), `{\"a\":1,\"b\":2}`);\r\n // toStringTest(Comparison.LessThan, \"0\");\r\n });\r\n });\r\n });\r\n}","import { Iterable } from \"../sources/iterable\";\r\nimport { List } from \"../sources/list\";\r\nimport {\r\n asBoolean, hasFunction, hasProperty, isArray, isBoolean, isFunction, isNumber, isObject,\r\n isObjectOrArrayOrNull, isString\r\n} from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"types.ts\", () =>\r\n {\r\n runner.testFunction(\"isBoolean(unknown)\", () =>\r\n {\r\n function isBooleanTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isBoolean(value), expected);\r\n });\r\n }\r\n\r\n isBooleanTest(undefined, false);\r\n isBooleanTest(null, false);\r\n isBooleanTest(\"\", false);\r\n isBooleanTest(\"true\", false);\r\n isBooleanTest(123, false);\r\n isBooleanTest({}, false);\r\n isBooleanTest([], false);\r\n isBooleanTest(true, true);\r\n isBooleanTest(false, true);\r\n });\r\n\r\n runner.testFunction(\"asBoolean(unknown)\", () =>\r\n {\r\n function asBooleanTest(value: unknown, expected: boolean | undefined): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertEqual(asBoolean(value), expected);\r\n });\r\n }\r\n\r\n asBooleanTest(undefined, undefined);\r\n asBooleanTest(null, undefined);\r\n asBooleanTest(\"\", undefined);\r\n asBooleanTest(\"true\", undefined);\r\n asBooleanTest(123, undefined);\r\n asBooleanTest({}, undefined);\r\n asBooleanTest([], undefined);\r\n asBooleanTest(true, true);\r\n asBooleanTest(false, false);\r\n asBooleanTest(() => false, undefined);\r\n asBooleanTest(() => true, undefined);\r\n });\r\n\r\n runner.testFunction(\"isNumber(unknown)\", () =>\r\n {\r\n function isNumberTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isNumber(value), expected);\r\n });\r\n }\r\n\r\n isNumberTest(undefined, false);\r\n isNumberTest(null, false);\r\n isNumberTest(\"\", false);\r\n isNumberTest(\"123\", false);\r\n isNumberTest({}, false);\r\n isNumberTest([], false);\r\n isNumberTest(true, false);\r\n isNumberTest(false, false);\r\n isNumberTest(123, true);\r\n isNumberTest(Infinity, true);\r\n isNumberTest(-Infinity, true);\r\n isNumberTest(NaN, true);\r\n });\r\n\r\n runner.testFunction(\"isString(unknown)\", () =>\r\n {\r\n function isStringTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isString(value), expected);\r\n });\r\n }\r\n\r\n isStringTest(undefined, false);\r\n isStringTest(null, false);\r\n isStringTest(50, false);\r\n isStringTest({}, false);\r\n isStringTest(\"\", true);\r\n isStringTest(\"hello\", true);\r\n });\r\n\r\n runner.testFunction(\"isFunction(unknown)\", () =>\r\n {\r\n function isFunctionTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isFunction(value), expected);\r\n });\r\n }\r\n\r\n isFunctionTest(undefined, false);\r\n isFunctionTest(null, false);\r\n isFunctionTest(false, false);\r\n isFunctionTest(true, false);\r\n isFunctionTest(123, false);\r\n isFunctionTest(\"abc\", false);\r\n isFunctionTest({}, false);\r\n isFunctionTest([], false);\r\n\r\n isFunctionTest(isArray, true);\r\n isFunctionTest(isFunction, true);\r\n isFunctionTest(() => 123, true);\r\n });\r\n\r\n runner.testFunction(\"isArray(unknown)\", () =>\r\n {\r\n function isArrayTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isArray(value), expected);\r\n });\r\n }\r\n\r\n isArrayTest(undefined, false);\r\n isArrayTest(null, false);\r\n isArrayTest(50, false);\r\n isArrayTest({}, false);\r\n isArrayTest(\"\", false);\r\n isArrayTest(\"hello\", false);\r\n isArrayTest(Iterable.create(), false);\r\n isArrayTest(List.create(), false);\r\n isArrayTest(new Uint8Array(), false);\r\n\r\n isArrayTest([], true);\r\n isArrayTest([\"a\", \"b\"], true);\r\n isArrayTest(new Array(), true);\r\n isArrayTest(Array.from([1, 2]), true);\r\n });\r\n\r\n runner.testFunction(\"isObjectOrArrayOrNull(unknown)\", () =>\r\n {\r\n function isObjectOrArrayOrNullTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isObjectOrArrayOrNull(value), expected);\r\n });\r\n }\r\n\r\n isObjectOrArrayOrNullTest(undefined, false);\r\n isObjectOrArrayOrNullTest(50, false);\r\n isObjectOrArrayOrNullTest(\"\", false);\r\n isObjectOrArrayOrNullTest(\"hello\", false);\r\n \r\n isObjectOrArrayOrNullTest({}, true);\r\n isObjectOrArrayOrNullTest(null, true);\r\n isObjectOrArrayOrNullTest([], true);\r\n isObjectOrArrayOrNullTest([\"a\", \"b\"], true);\r\n isObjectOrArrayOrNullTest(new Array(), true);\r\n isObjectOrArrayOrNullTest(Array.from([1, 2]), true);\r\n isObjectOrArrayOrNullTest(Iterable.create(), true);\r\n isObjectOrArrayOrNullTest(List.create(), true);\r\n });\r\n\r\n runner.testFunction(\"isObject(unknown)\", () =>\r\n {\r\n function isObjectTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isObject(value), expected);\r\n });\r\n }\r\n\r\n isObjectTest(undefined, false);\r\n isObjectTest(50, false);\r\n isObjectTest(\"\", false);\r\n isObjectTest(\"hello\", false);\r\n isObjectTest(null, false);\r\n isObjectTest([], false);\r\n isObjectTest([\"a\", \"b\"], false);\r\n isObjectTest(new Array(), false);\r\n isObjectTest(Array.from([1, 2]), false);\r\n \r\n isObjectTest({}, true);\r\n isObjectTest(Iterable.create(), true);\r\n isObjectTest(List.create(), true);\r\n });\r\n\r\n runner.testFunction(\"hasProperty(TValue,TPropertyKey extends PropertyKey)\", () =>\r\n {\r\n function hasPropertyTest<TPropertyKey extends PropertyKey>(value: unknown, propertyKey: TPropertyKey, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([value, propertyKey])}`, (test: Test) =>\r\n {\r\n const result: boolean = hasProperty(value, propertyKey);\r\n test.assertSame(result, expected);\r\n if (value !== undefined && value !== null)\r\n {\r\n if (result)\r\n {\r\n test.assertNotUndefined((value as any)[propertyKey]);\r\n }\r\n else\r\n {\r\n test.assertUndefined((value as any)[propertyKey]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n hasPropertyTest(undefined, \"spam\", false);\r\n hasPropertyTest(null, \"spam\", false);\r\n hasPropertyTest([], \"spam\", false);\r\n hasPropertyTest([], \"length\", true);\r\n hasPropertyTest({}, \"spam\", false);\r\n hasPropertyTest(\"\", \"spam\", false);\r\n hasPropertyTest(\"\", \"length\", true);\r\n hasPropertyTest(5, \"spam\", false);\r\n hasPropertyTest(5, \"toString\", true);\r\n });\r\n\r\n runner.testFunction(\"hasFunction(TValue,TPropertyKey extends PropertyKey)\", () =>\r\n {\r\n function hasFunctionTest<TPropertyKey extends PropertyKey>(value: unknown, propertyKey: TPropertyKey, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([value, propertyKey])}`, (test: Test) =>\r\n {\r\n test.assertSame(hasFunction(value, propertyKey), expected);\r\n });\r\n }\r\n\r\n hasFunctionTest(undefined, \"spam\", false);\r\n hasFunctionTest(null, \"spam\", false);\r\n hasFunctionTest([], \"spam\", false);\r\n hasFunctionTest([], \"length\", false);\r\n hasFunctionTest([], Symbol.iterator, true);\r\n hasFunctionTest({}, \"spam\", false);\r\n hasFunctionTest(\"\", \"spam\", false);\r\n hasFunctionTest(\"\", \"length\", false);\r\n hasFunctionTest(\"\", \"at\", true);\r\n hasFunctionTest(\"\", Symbol.iterator, true);\r\n hasFunctionTest(5, \"spam\", false);\r\n hasFunctionTest(5, \"toString\", true);\r\n });\r\n });\r\n}","import { Iterator } from \"../sources/iterator\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { WhereIterator } from \"../sources/whereIterator\";\r\nimport { iteratorTests } from \"./iteratorTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"whereIterator.ts\", () =>\r\n {\r\n runner.testType(\"WhereIterator<T>\", () =>\r\n {\r\n iteratorTests(runner, () => WhereIterator.create(Iterator.create<number>([]), (_: number) => true));\r\n\r\n runner.testFunction(\"create(T[])\", () =>\r\n {\r\n function createErrorTest<T>(testName: string, innerIterator: Iterator<T>, condition: (value: T) => boolean, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n test.assertThrows(() => WhereIterator.create(innerIterator, condition), expected);\r\n });\r\n }\r\n\r\n createErrorTest(\r\n `with undefined innerIterator`,\r\n undefined!,\r\n (_: number) => true,\r\n new PreConditionError(\r\n \"Expression: innerIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n );\r\n createErrorTest(\r\n `with null innerIterator`,\r\n null!,\r\n (_: number) => true,\r\n new PreConditionError(\r\n \"Expression: innerIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n );\r\n\r\n function createTest<T>(testName: string, innerIterator: Iterator<T>, condition: (value: T) => boolean, expected: T[]): void\r\n {\r\n runner.test(testName, async (test: Test) =>\r\n {\r\n const iterator: WhereIterator<T> = WhereIterator.create(innerIterator, condition);\r\n test.assertEqual(await iterator.toArray(), expected);\r\n });\r\n }\r\n\r\n createTest(\r\n `with empty innerIterator`,\r\n Iterator.create<number>([]),\r\n (_: number) => true,\r\n [],\r\n );\r\n createTest(\r\n `with none of the iterator values match the condition`,\r\n Iterator.create([1, 2, 3]),\r\n (value: number) => value > 10,\r\n [],\r\n );\r\n createTest(\r\n `with some of the iterator values match the condition`,\r\n Iterator.create([1, 2, 3]),\r\n (value: number) => value % 2 == 1,\r\n [1, 3],\r\n );\r\n });\r\n });\r\n });\r\n}","import { PreConditionError } from \"../sources/preConditionError\";\nimport { isWonderlandTrailLocation, WonderlandTrailAvailability, WonderlandTrailAvailabilityType, WonderlandTrailClient, WonderlandTrailConnection, WonderlandTrailDirection, WonderlandTrailLocation, WonderlandTrailLocations, WonderlandTrailReservationType } from \"../sources/wonderlandTrailClient\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { Iterable } from \"../sources/iterable\";\nimport { DateTime } from \"../sources/dateTime\";\nimport { Map } from \"../sources/map\";\nimport { MutableMap } from \"../sources/mutableMap\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { HttpClient } from \"../sources/httpClient\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"wonderlandTrailClient.ts\", () =>\n {\n runner.testFunction(\"isWonderlandTrailLocation()\", () =>\n {\n function isWonderlandTrailLocationTest(value: unknown, expected: boolean): void\n {\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\n {\n test.assertEqual(isWonderlandTrailLocation(value), expected);\n });\n }\n\n isWonderlandTrailLocationTest(undefined, false);\n isWonderlandTrailLocationTest(null, false);\n isWonderlandTrailLocationTest(20, false);\n isWonderlandTrailLocationTest({}, false);\n isWonderlandTrailLocationTest(WonderlandTrailLocations.boxCanyon, true);\n });\n\n runner.testType(\"WonderlandTrailLocations\", () =>\n {\n runner.testFunction(\"getLocations()\", (test: Test) =>\n {\n const locations: Iterable<WonderlandTrailLocation> = WonderlandTrailLocations.getLocations();\n test.assertNotUndefinedAndNotNull(locations);\n test.assertEqual(locations.getCount().await(), 27);\n });\n\n runner.testFunction(\"getTrailheads()\", (test: Test) =>\n {\n const trailheads: Iterable<WonderlandTrailLocation> = WonderlandTrailLocations.getTrailheads();\n test.assertEqual(6, trailheads.getCount().await());\n test.assertEqual(\n [\n WonderlandTrailLocations.sunriseVisitorCenter.name,\n WonderlandTrailLocations.whiteRiver.name,\n WonderlandTrailLocations.fryingPanCreek.name,\n WonderlandTrailLocations.boxCanyon.name,\n WonderlandTrailLocations.reflectionLakes.name,\n WonderlandTrailLocations.longmire.name,\n ],\n trailheads.map(t => t.name).toArray().await(),\n );\n });\n });\n\n runner.testType(\"WonderlandTrailAvailability\", () =>\n {\n runner.testFunction(\"addAvailability()\", () =>\n {\n runner.test(\"with undefined location\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(undefined!, DateTime.now()), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null location\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(null!, DateTime.now()), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with undefined date\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(WonderlandTrailLocations.boxCanyon, undefined!), new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null date\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(WonderlandTrailLocations.boxCanyon, null!), new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with neither individual nor group site data\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n test.assertEqual(Map.create(), availability.getAvailability(location))\n\n availability.addAvailability(location, date);\n\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), { groupSite: undefined, individualSite: undefined });\n test.assertEqual(expected, availability.getAvailability(location));\n });\n\n runner.test(\"with individual site data\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n test.assertEqual(Map.create(), availability.getAvailability(location))\n\n availability.addAvailability(location, date, WonderlandTrailReservationType.Walkup);\n\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), { groupSite: undefined, individualSite: WonderlandTrailReservationType.Walkup });\n test.assertEqual(expected, availability.getAvailability(location));\n });\n\n runner.test(\"with group site data\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n test.assertEqual(Map.create(), availability.getAvailability(location))\n\n availability.addAvailability(location, date, undefined, WonderlandTrailReservationType.Reserved);\n\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), { groupSite: WonderlandTrailReservationType.Reserved, individualSite: undefined });\n test.assertEqual(expected, availability.getAvailability(location));\n });\n });\n\n runner.testFunction(\"getAvailability()\", () =>\n {\n function getAvailabilityErrorTest(location: WonderlandTrailLocation, expected: Error): void\n {\n runner.test(`with ${runner.toString(location)}`, (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.getAvailability(location), expected);\n });\n }\n\n getAvailabilityErrorTest(undefined!, new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getAvailabilityErrorTest(null!, new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"when location isn't found\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const locationAvailability: MutableMap<string, WonderlandTrailAvailabilityType> = availability.getAvailability(location);\n test.assertNotUndefinedAndNotNull(locationAvailability);\n test.assertFalse(locationAvailability.any().await());\n test.assertSame(locationAvailability, availability.getAvailability(location));\n });\n\n runner.test(\"when location is found\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n availability.addAvailability(location, date, WonderlandTrailReservationType.Reserved, WonderlandTrailReservationType.Walkup);\n\n const locationAvailability: MutableMap<string, WonderlandTrailAvailabilityType> = availability.getAvailability(location);\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), {\n groupSite: WonderlandTrailReservationType.Walkup,\n individualSite: WonderlandTrailReservationType.Reserved,\n });\n test.assertEqual(locationAvailability, expected);\n test.assertSame(locationAvailability, availability.getAvailability(location));\n });\n });\n\n runner.testFunction(\"getDayAvailability()\", () =>\n {\n function getDayAvailabilityErrorTest(location: WonderlandTrailLocation, date: DateTime, expected: Error): void\n {\n runner.test(`with ${runner.andList([location, date])}`, (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.getDayAvailability(location, date).await(), expected);\n });\n }\n\n getDayAvailabilityErrorTest(undefined!, DateTime.parse(\"2025-07-04\"), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getDayAvailabilityErrorTest(null!, DateTime.parse(\"2025-07-04\"), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n getDayAvailabilityErrorTest(WonderlandTrailLocations.boxCanyon, undefined!, new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getDayAvailabilityErrorTest(WonderlandTrailLocations.boxCanyon, null!, new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with not found location or date\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n\n test.assertThrows(() => availability.getDayAvailability(location, date).await(), new NotFoundError(\n \"No availability was found for Box Canyon on 2025-07-04.\",\n ));\n });\n\n runner.test(\"when location and date are found\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n availability.addAvailability(location, date, WonderlandTrailReservationType.Reserved, WonderlandTrailReservationType.Walkup);\n\n const dayAvailability: WonderlandTrailAvailabilityType = availability.getDayAvailability(location, date).await();\n const expected: WonderlandTrailAvailabilityType = {\n groupSite: WonderlandTrailReservationType.Walkup,\n individualSite: WonderlandTrailReservationType.Reserved,\n };\n test.assertEqual(dayAvailability, expected);\n test.assertSame(dayAvailability, availability.getDayAvailability(location, date).await());\n });\n });\n });\n\n runner.testType(\"WonderlandTrailDirection\", () =>\n {\n runner.testFunction(\"toString()\", (test: Test) =>\n {\n test.assertEqual(\"Clockwise\", WonderlandTrailDirection.clockwise.toString());\n test.assertEqual(\"CounterClockwise\", WonderlandTrailDirection.counterClockwise.toString());\n });\n\n runner.testFunction(\"reverse()\", (test: Test) =>\n {\n test.assertSame(WonderlandTrailDirection.counterClockwise, WonderlandTrailDirection.clockwise.reverse());\n test.assertSame(WonderlandTrailDirection.clockwise, WonderlandTrailDirection.counterClockwise.reverse());\n });\n });\n\n runner.testType(\"WonderlandTrailConnection\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.carbonRiver,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n test.assertNotUndefinedAndNotNull(connection);\n test.assertEqual(connection.startLocation, WonderlandTrailLocations.boxCanyon);\n test.assertEqual(connection.endLocation, WonderlandTrailLocations.carbonRiver);\n test.assertEqual(connection.distanceMiles, 5000);\n test.assertEqual(connection.ascentFeet, 2000);\n test.assertEqual(connection.descentFeet, 10);\n test.assertEqual(connection.direction, WonderlandTrailDirection.clockwise);\n test.assertEqual(connection.intermediateLocations, Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]));\n });\n\n runner.testFunction(\"getLocations()\", () =>\n {\n runner.test(\"when connection is not a loop\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.carbonRiver,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n test.assertEqual(connection.getLocations(), Iterable.create([\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n WonderlandTrailLocations.carbonRiver,\n ]));\n });\n\n runner.test(\"when connection is a loop\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.boxCanyon,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n test.assertEqual(connection.getLocations(), Iterable.create([\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]));\n });\n });\n\n runner.testFunction(\"reverseDirection()\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.carbonRiver,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n const reversedConnection: WonderlandTrailConnection = connection.reverseDirection();\n test.assertNotSame(connection, reversedConnection);\n test.assertEqual(reversedConnection.startLocation, WonderlandTrailLocations.carbonRiver);\n test.assertEqual(reversedConnection.endLocation, WonderlandTrailLocations.boxCanyon);\n test.assertEqual(reversedConnection.distanceMiles, 5000);\n test.assertEqual(reversedConnection.ascentFeet, 10);\n test.assertEqual(reversedConnection.descentFeet, 2000);\n test.assertEqual(reversedConnection.direction, WonderlandTrailDirection.counterClockwise);\n test.assertEqual(reversedConnection.intermediateLocations, Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]));\n });\n });\n\n runner.testType(\"WonderlandTrailClient\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with undefined HttpClient\", (test: Test) =>\n {\n test.assertThrows(() => WonderlandTrailClient.create(undefined!), new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null HttpClient\", (test: Test) =>\n {\n test.assertThrows(() => WonderlandTrailClient.create(null!), new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with defined HttpClient\", (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n test.assertNotUndefinedAndNotNull(client);\n });\n });\n\n runner.testFunction(\"getAvailability()\", runner.skip(true, \"Ignore slow running tests for now\"), () =>\n {\n runner.test(\"with year in the past\", async (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n\n const availability: WonderlandTrailAvailability = await client.getAvailability(4, 2023, true, true, true);\n test.assertNotUndefinedAndNotNull(availability);\n test.assertFalse(availability.any());\n });\n\n runner.test(\"with month in the past\", async (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n\n const availability: WonderlandTrailAvailability = await client.getAvailability(3, 2026, true, true, true);\n test.assertNotUndefinedAndNotNull(availability);\n test.assertFalse(availability.any());\n });\n\n runner.test(\"with a future month in the current year\", async (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n\n const availability: WonderlandTrailAvailability = await client.getAvailability({\n month: 7,\n year: 2026,\n allowGroupSites: true,\n allowIndividualSites: true,\n allowWalkupPermits: true,\n });\n test.assertNotUndefinedAndNotNull(availability);\n test.assertTrue(availability.any());\n });\n });\n });\n });\n}","import { ConsoleTestRunner } from \"./consoleTestRunner\";\r\nimport * as assertTestTests from \"./assertTestTests\";\r\nimport * as byteListStreamTests from \"./byteListStreamTests\";\r\nimport * as byteListTests from \"./byteListTests\";\r\nimport * as byteTests from \"./bytesTests\";\r\nimport * as characterListStreamTests from \"./characterListStreamTests\";\r\nimport * as characterListTests from \"./characterListTests\";\r\nimport * as comparerTests from \"./comparerTests\";\r\nimport * as conditionTests from \"./conditionTests\";\r\nimport * as consoleTestRunner2Tests from \"./consoleTestRunnerTests\";\r\nimport * as dateTimeTests from \"./dateTimeTests\";\r\nimport * as depthFirstSearchTests from \"./depthFirstSearchTests\";\r\nimport * as disposableTests from \"./disposableTests\";\r\nimport * as englishTests from \"./englishTests\";\r\nimport * as equalFunctionsTests from \"./equalFunctionsTests\";\r\nimport * as fetchHttpClientTests from \"./fetchHttpClientTests\";\r\nimport * as generatorTests from \"./generatorTests\";\r\nimport * as httpClientTests from \"./httpClientTests\";\r\nimport * as inMemoryCharacterWriteStreamTests from \"./inMemoryCharacterWriteStreamTests\";\r\nimport * as iterableTests from \"./iterableTests\";\r\nimport * as iteratorTests from \"./iteratorTests\";\r\nimport * as javascriptMapMapTests from \"./javascriptMapMapTests\";\r\nimport * as listTests from \"./listTests\";\r\nimport * as mapIteratorTests from \"./mapIteratorTests\";\r\nimport * as mapTests from \"./mapTests\";\r\nimport * as mutableConditionTests from \"./mutableConditionTests\";\r\nimport * as mutableMapTests from \"./mutableMapTests\";\r\nimport * as notFoundErrorTests from \"./notFoundErrorTests\";\r\nimport * as postConditionErrorTests from \"./postConditionErrorTests\";\r\nimport * as preConditionErrorTests from \"./preConditionErrorTests\";\r\nimport * as promiseAsyncResultTests from \"./promiseAsyncResultTests\";\r\nimport * as propertyTests from \"./propertyTests\";\r\nimport * as queueTests from \"./queueTests\";\r\nimport * as realHttpServerTests from \"./nodeJSHttpServerTests\";\r\nimport * as recreationDotGovClientTests from \"./recreationDotGovClientTests\";\r\nimport * as setTests from \"./setTests\";\r\nimport * as stackTests from \"./stackTests\";\r\nimport * as stringComparerTests from \"./stringComparerTests\";\r\nimport * as stringIteratorTests from \"./stringIteratorTests\";\r\nimport * as stringsTests from \"./stringsTests\";\r\nimport * as syncResultTests from \"./syncResultTests\";\r\nimport * as testActionTests from \"./testActionTests\";\r\nimport * as testRunnerTests from \"./testRunnerTests\";\r\nimport * as toStringFunctionsTests from \"./toStringFunctionsTests\";\r\nimport * as typesTests from \"./typesTests\";\r\nimport * as whereIteratorTests from \"./whereIteratorTests\";\r\nimport * as wonderlandTrailClientTests from \"./wonderlandTrailClientTests\";\r\n\r\nexport const hasNetworkAccess: boolean = true;\r\n\r\nasync function tests(): Promise<void>\r\n{\r\n await ConsoleTestRunner.run([\r\n assertTestTests,\r\n promiseAsyncResultTests.test,\r\n byteTests.test,\r\n comparerTests,\r\n conditionTests,\r\n consoleTestRunner2Tests,\r\n dateTimeTests,\r\n disposableTests,\r\n englishTests,\r\n equalFunctionsTests.test,\r\n fetchHttpClientTests,\r\n generatorTests,\r\n httpClientTests,\r\n inMemoryCharacterWriteStreamTests,\r\n iterableTests,\r\n iteratorTests,\r\n javascriptMapMapTests,\r\n listTests,\r\n mapIteratorTests,\r\n mapTests,\r\n mutableConditionTests,\r\n mutableMapTests,\r\n notFoundErrorTests,\r\n postConditionErrorTests,\r\n preConditionErrorTests,\r\n propertyTests,\r\n queueTests,\r\n realHttpServerTests,\r\n recreationDotGovClientTests,\r\n stackTests,\r\n stringComparerTests,\r\n stringIteratorTests,\r\n stringsTests,\r\n syncResultTests,\r\n testActionTests,\r\n testRunnerTests,\r\n toStringFunctionsTests,\r\n typesTests,\r\n whereIteratorTests,\r\n wonderlandTrailClientTests,\r\n setTests,\r\n depthFirstSearchTests,\r\n byteListTests,\r\n byteListStreamTests,\r\n characterListTests,\r\n characterListStreamTests,\r\n ]);\r\n}\r\n\r\ntests();"],"mappings":"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","names":["test","test","test","test","test","test","test","test","test","test","test","test","test","test2","test","test2","test","test2","testGroupAction","test","test","test","test","test","test","test","test","test","result","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","value","quote","test","test","test","test","test","test","test","test","test","test","test","test","test"]}
1
+ {"version":3,"sources":["../tests/byteListStreamTests.ts","../tests/byteListTests.ts","../tests/bytesTests.ts","../tests/characterListStreamTests.ts","../tests/characterListTests.ts","../tests/CommandLineParametersTests.ts","../tests/comparerTests.ts","../tests/conditionTests.ts","../tests/consoleTestRunnerTests.ts","../tests/testRunnerTests.ts","../tests/dateTimeTests.ts","../tests/depthFirstSearchTests.ts","../tests/disposableTests.ts","../tests/englishTests.ts","../tests/equalFunctionsTests.ts","../tests/fetchHttpClientTests.ts","../tests/generatorTests.ts","../tests/iteratorTests.ts","../tests/httpClientTests.ts","../tests/IndentedCharacterWriteStreamTests.ts","../tests/inMemoryCharacterWriteStreamTests.ts","../tests/characterWriteStreamTests.ts","../tests/iterableTests.ts","../tests/javascriptMapMapTests.ts","../tests/mapTests.ts","../tests/listTests.ts","../tests/IndexableTests.ts","../tests/mapIteratorTests.ts","../tests/mutableConditionTests.ts","../tests/mutableMapTests.ts","../tests/notFoundErrorTests.ts","../tests/postConditionErrorTests.ts","../tests/preConditionErrorTests.ts","../tests/promiseAsyncResultTests.ts","../tests/propertyTests.ts","../tests/queueTests.ts","../tests/nodeJSHttpServerTests.ts","../tests/recreationDotGovClientTests.ts","../tests/setTests.ts","../tests/stackTests.ts","../tests/stringComparerTests.ts","../tests/stringIteratorTests.ts","../tests/stringsTests.ts","../tests/syncResultTests.ts","../tests/testActionTests.ts","../tests/toStringFunctionsTests.ts","../tests/typesTests.ts","../tests/whereIteratorTests.ts","../tests/wonderlandTrailClientTests.ts","../tests/CharacterTableTests.ts","../tests/tests.ts"],"sourcesContent":["import { ByteListStream } from \"../sources/byteListStream\";\nimport { EmptyError } from \"../sources/emptyError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"byteListStream.ts\", () =>\n {\n runner.testType(\"ByteListStream\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with no arguments\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with empty array\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([]);\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with non-empty array\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n });\n\n runner.testFunction(\"writeBytes()\", () =>\n {\n runner.test(\"with undefined bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes(undefined!), new PreConditionError(\n \"Expression: bytes\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with null bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes(null!), new PreConditionError(\n \"Expression: bytes\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with empty bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertEqual(0, stream.writeBytes([]).await());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with non-empty bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n\n test.assertEqual(4, stream.writeBytes([1, 2, 3, 4]).await());\n test.assertEqual(4, stream.getAvailableByteCount());\n\n const bytes: Uint8Array = stream.readBytes(10).await();\n test.assertNotUndefinedAndNotNull(bytes);\n test.assertEqual(4, bytes.length);\n test.assertEqual(new Uint8Array([1, 2, 3, 4]), bytes);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], 3), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with valid non-zero startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n const writeBytesResult: number = stream.writeBytes([1, 2], 1).await();\n test.assertEqual(1, writeBytesResult);\n test.assertEqual(1, stream.getAvailableByteCount());\n\n test.assertEqual(new Uint8Array([2]), stream.readBytes(5).await());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex equal to bytes length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n const writeBytesResult: number = stream.writeBytes([1, 2], 2).await();\n test.assertEqual(0, writeBytesResult);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], 0, -1), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with too large length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], 0, 3), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with valid startIndex and length values\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n const writeBytesResult: number = stream.writeBytes([1, 2, 3, 4, 5], 2, 2).await();\n test.assertEqual(2, writeBytesResult);\n test.assertEqual(2, stream.getAvailableByteCount());\n\n test.assertEqual(new Uint8Array([3, 4]), stream.readBytes(50).await());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n });\n\n runner.testFunction(\"readBytes()\", () =>\n {\n runner.testGroup(\"with empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.readBytes(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.readBytes(0).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.readBytes(1).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n });\n\n runner.testGroup(\"with non-empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertThrows(() => stream.readBytes(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(0).await();\n test.assertEqual(new Uint8Array(), readBytesResult);\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count less than bytes available\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(2).await();\n test.assertEqual(new Uint8Array([1, 2]), readBytesResult);\n test.assertEqual(1, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count equal to bytes available\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(3).await();\n test.assertEqual(new Uint8Array([1, 2, 3]), readBytesResult);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count greater than bytes available\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(4).await();\n test.assertEqual(new Uint8Array([1, 2, 3]), readBytesResult);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with undefined output\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertThrows(() => stream.readBytes(undefined!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with null output\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertThrows(() => stream.readBytes(null!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with empty output\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array();\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(0, readBytesResult);\n test.assertEqual(output, new Uint8Array());\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with output smaller than the available bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(1);\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(1, readBytesResult);\n test.assertEqual(output, new Uint8Array([1]));\n test.assertEqual(2, stream.getAvailableByteCount());\n });\n\n runner.test(\"with output equal to the available bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(3);\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(3, readBytesResult);\n test.assertEqual(output, new Uint8Array([1, 2, 3]));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with output larger than available bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(3, readBytesResult);\n test.assertEqual(output, new Uint8Array([1, 2, 3, 0, 0]));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, 6), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: 6\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(3, stream.readBytes(output, 2).await());\n test.assertEqual(new Uint8Array([0, 0, 1, 2, 3]), output);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(2, stream.readBytes(output, 3).await());\n test.assertEqual(new Uint8Array([0, 0, 0, 1, 2]), output);\n test.assertEqual(1, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex equal to output length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(0, stream.readBytes(output, 5).await());\n test.assertEqual(new Uint8Array(5), output);\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, 1, -1), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with count larger than output.length - startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, 1, 5), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: 5\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(3, stream.readBytes(output, 2, 3).await());\n test.assertEqual(new Uint8Array([0, 0, 1, 2, 3]), output);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(1, stream.readBytes(output, 3, 1).await());\n test.assertEqual(new Uint8Array([0, 0, 0, 1, 0]), output);\n test.assertEqual(2, stream.getAvailableByteCount());\n });\n });\n });\n });\n });\n}","import { ByteList } from \"../sources/byteList\";\nimport { EqualFunctions } from \"../sources/equalFunctions\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { isNumber } from \"../sources/types\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"byteList.ts\", () =>\n {\n \n \n\n\n\n\n\n\n\n\n\n\n \n });\n}","import { Bytes } from \"../sources/bytes\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"bytes.ts\", () =>\r\n {\r\n runner.testType(\"Bytes\", () =>\r\n {\r\n runner.test(\"minimumValue\", (test: Test) =>\r\n {\r\n test.assertSame(Bytes.minimumValue, 0);\r\n });\r\n\r\n runner.test(\"maximumValue\", (test: Test) =>\r\n {\r\n test.assertSame(Bytes.maximumValue, 255);\r\n });\r\n\r\n runner.testFunction(\"isByte(number)\", () =>\r\n {\r\n function isByteTest(value: number, expected: boolean): void\r\n {\r\n runner.test(`with ${value}`, (test: Test) =>\r\n {\r\n test.assertSame(Bytes.isByte(value), expected);\r\n });\r\n }\r\n\r\n isByteTest(-2, false);\r\n isByteTest(-1, false);\r\n isByteTest(0, true);\r\n isByteTest(1, true);\r\n isByteTest(128, true);\r\n isByteTest(254, true);\r\n isByteTest(255, true);\r\n isByteTest(256, false);\r\n isByteTest(257, false);\r\n });\r\n });\r\n });\r\n}","import { CharacterList } from \"../sources/characterList\";\nimport { CharacterListStream } from \"../sources/characterListStream\";\nimport { EmptyError } from \"../sources/emptyError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"characterListStream.ts\", () =>\n {\n runner.testType(\"CharacterListStream\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with no arguments\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with empty array\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([]);\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with non-empty array\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create(\"abc\");\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n });\n\n runner.testFunction(\"writeCharacters()\", () =>\n {\n runner.test(\"with undefined characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(undefined!), new PreConditionError(\n \"Expression: characters\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with null characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(null!), new PreConditionError(\n \"Expression: characters\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with empty characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertEqual(0, stream.writeCharacters([]).await());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with non-empty characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n\n test.assertEqual(4, stream.writeCharacters(\"abcd\").await());\n test.assertEqual(4, stream.getAvailableCharacterCount());\n\n const characters: string = stream.readCharacters(10).await();\n test.assertNotUndefinedAndNotNull(characters);\n test.assertEqual(4, characters.length);\n test.assertEqual(\"abcd\", characters);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", 3), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with valid non-zero startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n const writeCharactersResult: number = stream.writeCharacters(\"ab\", 1).await();\n test.assertEqual(1, writeCharactersResult);\n test.assertEqual(1, stream.getAvailableCharacterCount());\n\n test.assertEqual(\"b\", stream.readCharacters(5).await());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex equal to characters length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n const writeCharactersResult: number = stream.writeCharacters(\"ab\", 2).await();\n test.assertEqual(0, writeCharactersResult);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", 0, -1), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with too large length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", 0, 3), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with valid startIndex and length values\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n const writeCharactersResult: number = stream.writeCharacters([\"a\", \"b\", \"c\", \"d\", \"e\"], 2, 2).await();\n test.assertEqual(2, writeCharactersResult);\n test.assertEqual(2, stream.getAvailableCharacterCount());\n\n test.assertEqual(\"cd\", stream.readCharacters(50).await());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n });\n\n runner.testFunction(\"readCharacters()\", () =>\n {\n runner.testGroup(\"with empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.readCharacters(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.readCharacters(0).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.readCharacters(1).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n });\n\n runner.testGroup(\"with non-empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n test.assertThrows(() => stream.readCharacters(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(0).await();\n test.assertEqual(\"\", readCharactersResult);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count less than characters available\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(2).await();\n test.assertEqual(\"ab\", readCharactersResult);\n test.assertEqual(1, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count equal to characters available\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(3).await();\n test.assertEqual(\"abc\", readCharactersResult);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count greater than characters available\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(4).await();\n test.assertEqual(\"abc\", readCharactersResult);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with undefined output\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n test.assertThrows(() => stream.readCharacters(undefined!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with null output\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n test.assertThrows(() => stream.readCharacters(null!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with empty output\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = [];\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(0, readCharactersResult);\n test.assertEqual(output, []);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with output smaller than the available characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(1);\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(1, readCharactersResult);\n test.assertEqual(output, [\"a\"]);\n test.assertEqual(2, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with output equal to the available characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(3, readCharactersResult);\n test.assertEqual(output, [\"a\", \"b\", \"c\", \"\", \"\"]);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with output larger than available characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(3, readCharactersResult);\n test.assertEqual(output, [\"a\", \"b\", \"c\", \"\", \"\"]);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, 6), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: 6\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(3, stream.readCharacters(output, 2).await());\n test.assertEqual([\"\", \"\", \"a\", \"b\", \"c\"], output);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(2, stream.readCharacters(output, 3).await());\n test.assertEqual([\"\", \"\", \"\", \"a\", \"b\"], output);\n test.assertEqual(1, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex equal to output length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(0, stream.readCharacters(output, 5).await());\n test.assertEqual([\"\", \"\", \"\", \"\", \"\"], output);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, 1, -1), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with count larger than output.length - startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, 1, 5), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: 5\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(3, stream.readCharacters(output, 2, 3).await());\n test.assertEqual([\"\", \"\", \"a\", \"b\", \"c\"], output);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(1, stream.readCharacters(output, 3, 1).await());\n test.assertEqual([\"\", \"\", \"\", \"a\", \"\"], output);\n test.assertEqual(2, stream.getAvailableCharacterCount());\n });\n });\n });\n });\n });\n}","import { CharacterList } from \"../sources/characterList\";\nimport { EqualFunctions } from \"../sources/equalFunctions\";\nimport { JavascriptIterable } from \"../sources/javascript\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { isNumber, isString } from \"../sources/types\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"characterList.ts\", () =>\n {\n runner.testType(\"CharacterList\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with no arguments\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with undefined\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(undefined);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with null\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(null!);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with empty initialValues\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([]);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with one value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"m\"]);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(1, list.getCount().await());\n test.assertTrue(list.any().await());\n test.assertEqual([\"m\"], list.toArray().await());\n });\n\n runner.test(\"with two values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"n\", \"l\"]);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(2, list.getCount().await());\n test.assertTrue(list.any().await());\n test.assertEqual([\"n\", \"l\"], list.toArray().await());\n });\n });\n\n runner.testFunction(\"add()\", () =>\n {\n function addErrorTest(value: string, expected: Error): void\n {\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n test.assertThrows(() => list.add(value), expected);\n test.assertEqual([], list.toArray().await());\n });\n }\n\n addErrorTest(\"\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"\\\"\",\n ));\n addErrorTest(\"ab\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"ab\\\"\",\n ));\n\n runner.test(\"with valid value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n const addResult1: CharacterList = list.add(\"a\");\n test.assertSame(list, addResult1);\n test.assertEqual([\"a\"], addResult1.toArray().await());\n\n const addResult2: CharacterList = list.add(\"b\");\n test.assertSame(list, addResult2);\n test.assertEqual([\"a\", \"b\"], addResult2.toArray().await());\n\n const addResult3: CharacterList = list.add(\"c\");\n test.assertSame(list, addResult3);\n test.assertEqual([\"a\", \"b\", \"c\"], addResult3.toArray().await());\n\n const addResult4: CharacterList = list.add(\"d\");\n test.assertSame(list, addResult4);\n test.assertEqual([\"a\", \"b\", \"c\", \"d\"], addResult4.toArray().await());\n });\n });\n\n runner.testFunction(\"addAll()\", () =>\n {\n runner.test(\"with empty values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n const addAllResult: CharacterList = list.addAll([]);\n test.assertSame(list, addAllResult);\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with non-empty values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n const addAllResult: CharacterList = list.addAll(\"abcde\");\n test.assertSame(list, addAllResult);\n test.assertEqual([\"a\", \"b\", \"c\", \"d\", \"e\"], list.toArray().await());\n });\n });\n\n runner.testFunction(\"insert()\", () =>\n {\n function insertErrorTest(initialValues: string[], index: number, value: string, expected: Error): void\n {\n runner.test(`with ${runner.andList([initialValues, index, value])}`, (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(initialValues);\n test.assertThrows(() => list.insert(index, value), expected);\n test.assertEqual(initialValues, list.toArray().await());\n });\n }\n\n insertErrorTest([], -1, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: 0\",\n \"Actual: -1\",\n ));\n insertErrorTest([], 1, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: 0\",\n \"Actual: 1\",\n ));\n insertErrorTest([\"z\"], -1, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: between 0 and 1\",\n \"Actual: -1\",\n ));\n insertErrorTest([\"z\"], 2, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: between 0 and 1\",\n \"Actual: 2\",\n ));\n insertErrorTest([], 0, \"\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"\\\"\",\n ));\n insertErrorTest([], 0, \"ab\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"ab\\\"\",\n ));\n\n function insertTest(initialValues: JavascriptIterable<string>, index: number, value: string, expected: string[]): void\n {\n runner.test(`with ${runner.andList([initialValues, index, value])}`, (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(initialValues);\n\n const insertResult: CharacterList = list.insert(index, value);\n test.assertSame(list, insertResult);\n test.assertEqual(expected, list.toArray().await());\n });\n }\n\n insertTest([], 0, \"z\", [\"z\"]);\n insertTest([\"a\"], 0, \"y\", [\"y\", \"a\"]);\n insertTest([\"a\"], 1, \"y\", [\"a\", \"y\"]);\n insertTest([\"a\", \"b\", \"c\"], 0, \"z\", [\"z\", \"a\", \"b\", \"c\"]);\n insertTest([\"a\", \"b\", \"c\"], 1, \"z\", [\"a\", \"z\", \"b\", \"c\"]);\n insertTest([\"a\", \"b\", \"c\"], 2, \"z\", [\"a\", \"b\", \"z\", \"c\"]);\n insertTest([\"a\", \"b\", \"c\"], 3, \"z\", [\"a\", \"b\", \"c\", \"z\"]);\n insertTest([\"a\", \"b\", \"c\", \"d\", \"e\"], 2, \"z\", [\"a\", \"b\", \"z\", \"c\", \"d\", \"e\"]);\n });\n\n runner.testFunction(\"remove()\", () =>\n {\n runner.test(\"with not-found value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n test.assertThrows(() => list.remove(\"a\").await(), new NotFoundError(\"Could not find the value to remove: \\\"a\\\"\"));\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with found value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"a\"]);\n\n const removeResult: string = list.remove(\"a\").await();\n test.assertEqual(\"a\", removeResult);\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with multiple found values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"a\", \"a\", \"a\"]);\n\n const removeResult: string = list.remove(\"a\").await();\n test.assertEqual(\"a\", removeResult);\n test.assertEqual([\"a\", \"a\"], list.toArray().await());\n });\n\n runner.test(\"with multiple found values and equalFunctions\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"a\", \"b\", \"c\", \"d\", \"e\"]);\n const isVowel = (character: string) => [\"a\", \"e\", \"i\", \"o\", \"u\"].includes(character);\n const equalFunctions: EqualFunctions = EqualFunctions.create()\n .add((left: unknown, right: unknown) =>\n {\n return isString(left) && isString(right)\n ? isVowel(left) === isVowel(right)\n : undefined;\n });\n const removeResult: string = list.remove(\"i\", equalFunctions).await();\n test.assertEqual(\"a\", removeResult);\n test.assertEqual([\"b\", \"c\", \"d\", \"e\"], list.toArray().await());\n });\n });\n });\n });\n}","import { CommandLineParameters, Iterable, JavascriptIterable, PreConditionError } from \"../sources\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"commandLineParameters.ts\", () =>\n {\n runner.testType(\"CommandLineParameters\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest(argv: JavascriptIterable<string>, expected: Error): void\n {\n runner.test(`with ${runner.toString(argv)}`, (test: Test) =>\n {\n test.assertThrows(() => CommandLineParameters.create(argv), expected);\n });\n }\n\n createErrorTest(undefined!, new PreConditionError(\n \"Expression: argv\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(null!, new PreConditionError(\n \"Expression: argv\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n function createTest(argv: JavascriptIterable<string>): void\n {\n runner.test(`with ${runner.toString(argv)}`, (test: Test) =>\n {\n const parameters: CommandLineParameters = CommandLineParameters.create(argv);\n test.assertNotUndefinedAndNotNull(parameters);\n test.assertEqual(parameters.getArguments(), Iterable.create(argv));\n });\n }\n\n createTest([]);\n createTest([\"a\"]);\n });\n\n runner.testFunction(\"getArgumentName()\", () =>\n {\n function getArgumentNameTest(arg: string, expected: string | undefined): void\n {\n runner.test(`with ${runner.toString(arg)}`, (test: Test) =>\n {\n test.assertEqual(CommandLineParameters.getArgumentName(arg), expected);\n });\n }\n\n getArgumentNameTest(\"\", undefined);\n getArgumentNameTest(\" \", undefined);\n getArgumentNameTest(\"abc\", undefined);\n getArgumentNameTest(\"-\", \"\");\n getArgumentNameTest(\"--\", \"\");\n getArgumentNameTest(\"-a\", \"a\");\n getArgumentNameTest(\"--b\", \"b\");\n getArgumentNameTest(\"-apples\", \"apples\");\n getArgumentNameTest(\"--bananas\", \"bananas\");\n getArgumentNameTest(\"---cat\", \"-cat\");\n });\n\n runner.testFunction(\"getNamedArgumentStringValue()\", () =>\n {\n function getNamedArgumentStringValueErrorTest(args: string[], nameOrNames: string | JavascriptIterable<string>, expected: Error): void\n {\n runner.test(`with ${runner.andList([args, nameOrNames])}`, (test: Test) =>\n {\n const parameters: CommandLineParameters = CommandLineParameters.create(args);\n test.assertThrows(() => parameters.getNamedArgumentStringValue(nameOrNames).await(), expected);\n });\n }\n\n getNamedArgumentStringValueErrorTest([], undefined!, new PreConditionError(\n \"Expression: nameOrNames\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getNamedArgumentStringValueErrorTest([], null!, new PreConditionError(\n \"Expression: nameOrNames\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n getNamedArgumentStringValueErrorTest([], \"\", new PreConditionError(\n \"Expression: nameOrNames\",\n \"Expected: not empty\",\n \"Actual: \\\"\\\"\",\n ));\n getNamedArgumentStringValueErrorTest([], [], new PreConditionError(\n \"Expression: nameOrNames\",\n \"Expected: not empty\",\n \"Actual: []\",\n ));\n getNamedArgumentStringValueErrorTest([], \"a\", new PreConditionError(\n \"No argument found that matches \\\"a\\\".\",\n ));\n getNamedArgumentStringValueErrorTest([], [\"a\", \"b\"], new PreConditionError(\n \"No argument found that matches \\\"a\\\" or \\\"b\\\".\",\n ));\n getNamedArgumentStringValueErrorTest([], [\"a\", \"b\", \"c\"], new PreConditionError(\n \"No argument found that matches \\\"a\\\", \\\"b\\\", or \\\"c\\\".\",\n ));\n });\n });\n });\n}","import { Comparer } from \"../sources/comparer\";\r\nimport { Comparison } from \"../sources/comparison\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"comparer.ts\", () =>\r\n {\r\n runner.testType(\"Comparer<TLeft,TRight>\", () =>\r\n {\r\n runner.testFunction(\"compareSameUndefinedNull()\", () =>\r\n {\r\n function compareSameUndefinedNullTest(left: unknown, right: unknown, expected: Comparison | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n test.assertEqual(Comparer.compareSameUndefinedNull(left, right), expected);\r\n });\r\n }\r\n\r\n compareSameUndefinedNullTest(undefined, undefined, Comparison.Equal);\r\n compareSameUndefinedNullTest(undefined, null, Comparison.LessThan);\r\n compareSameUndefinedNullTest(undefined, \"hello\", Comparison.LessThan);\r\n compareSameUndefinedNullTest(undefined, 50, Comparison.LessThan);\r\n\r\n compareSameUndefinedNullTest(null, undefined, Comparison.GreaterThan);\r\n compareSameUndefinedNullTest(null, null, Comparison.Equal);\r\n compareSameUndefinedNullTest(null, \"hello\", Comparison.LessThan);\r\n compareSameUndefinedNullTest(null, 50, Comparison.LessThan);\r\n\r\n compareSameUndefinedNullTest(\"hello\", undefined, Comparison.GreaterThan);\r\n compareSameUndefinedNullTest(\"hello\", null, Comparison.GreaterThan);\r\n compareSameUndefinedNullTest(\"hello\", \"hello\", Comparison.Equal);\r\n compareSameUndefinedNullTest(\"hello\", \"abc\", undefined);\r\n compareSameUndefinedNullTest(\"hello\", 50, undefined);\r\n });\r\n\r\n runner.testFunction(\"equalSameUndefinedNull()\", () =>\r\n {\r\n function equalSameUndefinedNullTest(left: unknown, right: unknown, expected: boolean | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n test.assertEqual(Comparer.equalSameUndefinedNull(left, right), expected);\r\n });\r\n }\r\n\r\n equalSameUndefinedNullTest(undefined, undefined, true);\r\n equalSameUndefinedNullTest(undefined, null, false);\r\n equalSameUndefinedNullTest(undefined, \"hello\", false);\r\n equalSameUndefinedNullTest(undefined, 50, false);\r\n\r\n equalSameUndefinedNullTest(null, undefined, false);\r\n equalSameUndefinedNullTest(null, null, true);\r\n equalSameUndefinedNullTest(null, \"hello\", false);\r\n equalSameUndefinedNullTest(null, 50, false);\r\n\r\n equalSameUndefinedNullTest(\"hello\", undefined, false);\r\n equalSameUndefinedNullTest(\"hello\", null, false);\r\n equalSameUndefinedNullTest(\"hello\", \"hello\", true);\r\n equalSameUndefinedNullTest(\"hello\", \"abc\", undefined);\r\n equalSameUndefinedNullTest(\"hello\", 50, undefined);\r\n });\r\n\r\n runner.testFunction(\"compareNumbers()\", () =>\r\n {\r\n function compareNumbersTest(left: number | null | undefined, right: number | null | undefined, expected: Comparison | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n test.assertEqual(Comparer.compareNumbers(left, right), expected);\r\n });\r\n }\r\n\r\n compareNumbersTest(undefined, undefined, Comparison.Equal);\r\n compareNumbersTest(undefined, null, Comparison.LessThan);\r\n compareNumbersTest(undefined, 50, Comparison.LessThan);\r\n\r\n compareNumbersTest(null, undefined, Comparison.GreaterThan);\r\n compareNumbersTest(null, null, Comparison.Equal);\r\n compareNumbersTest(null, 50, Comparison.LessThan);\r\n\r\n compareNumbersTest(50, undefined, Comparison.GreaterThan);\r\n compareNumbersTest(50, null, Comparison.GreaterThan);\r\n compareNumbersTest(50, 30, Comparison.GreaterThan);\r\n compareNumbersTest(50, 50, Comparison.Equal);\r\n compareNumbersTest(50, 60, Comparison.LessThan);\r\n });\r\n });\r\n });\r\n}","import { Condition } from \"../sources/condition\";\r\nimport { JavascriptIterable } from \"../sources/javascript\";\r\nimport { MutableCondition } from \"../sources/mutableCondition\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"condition.ts\", () =>\r\n {\r\n runner.testType(\"Condition\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertNotUndefinedAndNotNull(condition);\r\n test.assertThrows(() => condition.assertFalse(true),\r\n new Error([\r\n \"Expected: false\",\r\n \"Actual: true\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.testFunction(\"assertUndefined(unknown,string?,string?)\", () =>\r\n {\r\n runner.test(\"with undefined\", () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertUndefined(undefined, \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n function assertUndefinedErrorTest(value: unknown, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertUndefined(value), expected);\r\n });\r\n }\r\n\r\n assertUndefinedErrorTest(\r\n null,\r\n new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: null\",\r\n ])));\r\n assertUndefinedErrorTest(\r\n \"\",\r\n new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: \\\"\\\"\",\r\n ])));\r\n assertUndefinedErrorTest(\r\n 50,\r\n new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: 50\",\r\n ])));\r\n });\r\n\r\n runner.testFunction(\"assertNotUndefinedAndNotNull<T>(undefined|null|T,string?,string?)\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(undefined),\r\n new Error([\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with null\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(null),\r\n new Error([\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with not undefined and not null\", (test: Test) =>\r\n {\r\n function valueCreator(): string | undefined\r\n {\r\n return \"hello\";\r\n }\r\n\r\n const condition: MutableCondition = Condition.create();\r\n const value: string | undefined = valueCreator();\r\n condition.assertNotUndefinedAndNotNull(value);\r\n test.assertEqual(value.substring(1, 3), \"el\");\r\n });\r\n\r\n runner.test(\"with undefined and expression\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(undefined, \"fake-expression\"),\r\n new Error([\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with null, expression, and message\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(null, \"fake-expression\", \"fake-message\"),\r\n new Error([\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"\r\n ].join(\"\\n\")));\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertTrue(boolean)\", () =>\r\n {\r\n runner.test(\"with false\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertTrue(false),\r\n new Error([\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with true\", (test: Test) =>\r\n {\r\n function valueCreator(): boolean { return true; }\r\n const condition: MutableCondition = Condition.create();\r\n const value: boolean = valueCreator();\r\n condition.assertTrue(value);\r\n test.assertTrue(value);\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertFalse(boolean)\", () =>\r\n {\r\n runner.test(\"with true\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertFalse(true),\r\n new Error([\r\n \"Expected: false\",\r\n \"Actual: true\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with false\", (test: Test) =>\r\n {\r\n function valueCreator(): boolean { return false; }\r\n const condition: MutableCondition = Condition.create();\r\n const value: boolean = valueCreator();\r\n condition.assertFalse(value);\r\n test.assertFalse(value);\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertSame<T>(T,T,string?,string?)\", () =>\r\n {\r\n function assertSameErrorTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertSame(expected, actual, expression, message), expectedError);\r\n });\r\n }\r\n \r\n assertSameErrorTest(\r\n undefined,\r\n null,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: undefined\",\r\n \"Actual: null\",\r\n ])));\r\n assertSameErrorTest(\r\n 3,\r\n 4,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: 3\",\r\n \"Actual: 4\",\r\n ])));\r\n assertSameErrorTest(\r\n {},\r\n {},\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: {}\",\r\n \"Actual: {}\",\r\n ])));\r\n assertSameErrorTest(\r\n { \"a\": \"b\" },\r\n { \"a\": \"b\" },\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: {\\\"a\\\":\\\"b\\\"}\",\r\n \"Actual: {\\\"a\\\":\\\"b\\\"}\",\r\n ])));\r\n assertSameErrorTest(\r\n [],\r\n [],\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: []\",\r\n \"Actual: []\",\r\n ])));\r\n\r\n function assertSameTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertSame(expected, actual, expression, message);\r\n });\r\n }\r\n\r\n assertSameTest(undefined, undefined, \"fake-expression\", \"fake-message\");\r\n assertSameTest(null, null, \"fake-expression\", \"fake-message\");\r\n assertSameTest(0, 0, \"fake-expression\", \"fake-message\");\r\n assertSameTest(10, 10, \"fake-expression\", \"fake-message\");\r\n assertSameTest(true, true, \"fake-expression\", \"fake-message\");\r\n assertSameTest(\"abc\", \"abc\", \"fake-expression\", \"fake-message\");\r\n \r\n const o = {};\r\n assertSameTest(o, o, \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n runner.testFunction(\"assertNotSame<T>(T,T,string?,string?)\", () =>\r\n {\r\n function assertNotSameErrorTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotSame(expected, actual, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertNotSameErrorTest(\r\n undefined,\r\n undefined,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined\",\r\n \"Actual: undefined\",\r\n ])));\r\n assertNotSameErrorTest(\r\n null,\r\n null,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not null\",\r\n \"Actual: null\",\r\n ])));\r\n assertNotSameErrorTest(\r\n 0,\r\n 0,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not 0\",\r\n \"Actual: 0\",\r\n ])));\r\n assertNotSameErrorTest(\r\n 10,\r\n 10,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not 10\",\r\n \"Actual: 10\",\r\n ])));\r\n assertNotSameErrorTest(\r\n true,\r\n true,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not true\",\r\n \"Actual: true\",\r\n ])));\r\n assertNotSameErrorTest(\r\n \"abc\",\r\n \"abc\",\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not \\\"abc\\\"\",\r\n \"Actual: \\\"abc\\\"\",\r\n ])));\r\n \r\n const o = {};\r\n assertNotSameErrorTest(\r\n o,\r\n o,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not {}\",\r\n \"Actual: {}\",\r\n ])));\r\n\r\n function assertNotSameTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertNotSame(expected, actual, expression, message);\r\n });\r\n }\r\n\r\n assertNotSameTest(undefined, null, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest(false, true, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest(1, 2, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest({}, {}, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest({ \"a\": \"b\" }, { \"a\": \"b\" }, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest([], [], \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n runner.testFunction(\"assertNotEmpty(string,string?,string?)\", () =>\r\n {\r\n function assertNotEmptyErrorTest(value: string, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotEmpty(value, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertNotEmptyErrorTest(undefined!, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n assertNotEmptyErrorTest(null!, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n assertNotEmptyErrorTest(\"\", \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ])));\r\n\r\n function assertNotEmptyTest(value: string, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([value, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertNotEmpty(value, expression, message);\r\n });\r\n }\r\n\r\n assertNotEmptyTest(\" \", \"fake-expression\", \"fake-message\");\r\n assertNotEmptyTest(\"a\", \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n runner.testFunction(\"assertLessThan(number,number,string?,string?)\", () =>\r\n {\r\n function assertLessThanErrorTest(value: number, upperBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertLessThan(value, upperBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertLessThanErrorTest(-1, -1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than -1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertLessThanErrorTest(0, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than 0\",\r\n \"Actual: 0\",\r\n ])));\r\n assertLessThanErrorTest(2, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertLessThanErrorTest(2, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: less than 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function assertLessThanTest(value: number, upperBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertLessThan(value, upperBound, expression, message);\r\n });\r\n }\r\n\r\n assertLessThanTest(-10, -9);\r\n assertLessThanTest(-1, 0);\r\n assertLessThanTest(0, 1);\r\n assertLessThanTest(4, 5);\r\n });\r\n\r\n runner.testFunction(\"assertLessThanOrEqualTo(number,number,string?,string?)\", () =>\r\n {\r\n function assertLessThanOrEqualToErrorTest(value: number, upperBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertLessThanOrEqualTo(value, upperBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertLessThanOrEqualToErrorTest(2, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than or equal to 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertLessThanOrEqualToErrorTest(2, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: less than or equal to 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function assertLessThanOrEqualToTest(value: number, upperBound: number, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertLessThanOrEqualTo(value, upperBound, expression, message);\r\n });\r\n }\r\n\r\n assertLessThanOrEqualToTest(-10, -9, undefined, undefined);\r\n assertLessThanOrEqualToTest(-1, 0, undefined, undefined);\r\n assertLessThanOrEqualToTest(0, 1, undefined, undefined);\r\n assertLessThanOrEqualToTest(4, 5, undefined, undefined);\r\n assertLessThanOrEqualToTest(-1, -1, undefined, undefined);\r\n assertLessThanOrEqualToTest(0, 0, undefined, undefined);\r\n assertLessThanOrEqualToTest(1, 1, undefined, undefined);\r\n });\r\n\r\n runner.testFunction(\"assertGreaterThanOrEqualTo(number,number,string?,string?)\", () =>\r\n {\r\n function assertGreaterThanOrEqualToErrorTest(value: number, lowerBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertGreaterThanOrEqualTo(value, lowerBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertGreaterThanOrEqualToErrorTest(1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than or equal to 2\",\r\n \"Actual: 1\",\r\n ])));\r\n assertGreaterThanOrEqualToErrorTest(1, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: greater than or equal to 2\",\r\n \"Actual: 1\",\r\n ])));\r\n\r\n function assertGreaterThanOrEqualToTest(value: number, lowerBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertGreaterThanOrEqualTo(value, lowerBound, expression, message);\r\n });\r\n }\r\n\r\n assertGreaterThanOrEqualToTest(-9, -10);\r\n assertGreaterThanOrEqualToTest(0, -1);\r\n assertGreaterThanOrEqualToTest(1, 0);\r\n assertGreaterThanOrEqualToTest(5, 4);\r\n assertGreaterThanOrEqualToTest(-1, -1);\r\n assertGreaterThanOrEqualToTest(0, 0);\r\n assertGreaterThanOrEqualToTest(1, 1);\r\n });\r\n\r\n runner.testFunction(\"assertGreaterThan(number,number,string?,string?)\", () =>\r\n {\r\n function assertGreaterThanErrorTest(value: number, lowerBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertGreaterThan(value, lowerBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertGreaterThanErrorTest(-1, -1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than -1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertGreaterThanErrorTest(0, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than 0\",\r\n \"Actual: 0\",\r\n ])));\r\n assertGreaterThanErrorTest(1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than 2\",\r\n \"Actual: 1\",\r\n ])));\r\n assertGreaterThanErrorTest(1, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: greater than 2\",\r\n \"Actual: 1\",\r\n ])));\r\n\r\n function assertGreaterThanTest(value: number, lowerBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertGreaterThan(value, lowerBound, expression, message);\r\n });\r\n }\r\n\r\n assertGreaterThanTest(-9, -10);\r\n assertGreaterThanTest(0, -1);\r\n assertGreaterThanTest(1, 0);\r\n assertGreaterThanTest(5, 4);\r\n });\r\n\r\n runner.testFunction(\"assertBetween(number,number,number,string?,string?)\", () =>\r\n {\r\n function assertBetweenErrorTest(lowerBound: number, value: number, upperBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([lowerBound, value, upperBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertBetween(lowerBound, value, upperBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertBetweenErrorTest(0, 1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertBetweenErrorTest(0, -1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: -1\",\r\n ])));\r\n assertBetweenErrorTest(0, -1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 2\",\r\n \"Actual: -1\",\r\n ])));\r\n assertBetweenErrorTest(0, 3, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 2\",\r\n \"Actual: 3\",\r\n ])));\r\n assertBetweenErrorTest(5, 3, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Expression: lowerBound\",\r\n \"Expected: less than or equal to 2\",\r\n \"Actual: 5\",\r\n ])));\r\n\r\n function assertBetweenTest(lowerBound: number, value: number, upperBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([lowerBound, value, upperBound])}`, () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertBetween(lowerBound, value, upperBound, expression, message);\r\n });\r\n }\r\n\r\n assertBetweenTest(-12, -11, -10);\r\n assertBetweenTest(-1, 0, 1);\r\n assertBetweenTest(0, 1, 2);\r\n assertBetweenTest(4, 5, 6);\r\n assertBetweenTest(0, 0, 0);\r\n assertBetweenTest(1, 1, 1);\r\n });\r\n\r\n runner.testFunction(\"assertAccessIndex(number,number,string?,string?)\", () =>\r\n {\r\n function assertAccessIndexTest(index: number, count: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertAccessIndex(index, count, expression, message);\r\n });\r\n }\r\n\r\n assertAccessIndexTest(0, 1);\r\n assertAccessIndexTest(0, 2);\r\n assertAccessIndexTest(1, 2);\r\n\r\n function assertAccessIndexErrorTest(index: number, count: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertAccessIndex(index, count, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertAccessIndexErrorTest(-1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ])));\r\n assertAccessIndexErrorTest(0, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ])));\r\n assertAccessIndexErrorTest(1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ])));\r\n assertAccessIndexErrorTest(-1, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: -1\",\r\n ])));\r\n assertAccessIndexErrorTest(1, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertAccessIndexErrorTest(-1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertAccessIndexErrorTest(1, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertAccessIndexErrorTest(3, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 3\",\r\n ])));\r\n });\r\n\r\n runner.testFunction(\"assertInsertIndex(number,number,string?,string?)\", () =>\r\n {\r\n function assertInsertIndexErrorTest(index: number, count: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertInsertIndex(index, count, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertInsertIndexErrorTest(-1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: -1\",\r\n ])));\r\n assertInsertIndexErrorTest(1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertInsertIndexErrorTest(-1, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertInsertIndexErrorTest(2, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertInsertIndexErrorTest(-1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 2\",\r\n \"Actual: -1\",\r\n ])));\r\n assertInsertIndexErrorTest(2, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertInsertIndexErrorTest(3, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: between 0 and 2\",\r\n \"Actual: 3\",\r\n ])));\r\n\r\n function assertInsertIndexTest(index: number, count: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertInsertIndex(index, count, expression, message);\r\n });\r\n }\r\n\r\n assertInsertIndexTest(0, 0);\r\n assertInsertIndexTest(0, 1);\r\n assertInsertIndexTest(1, 1);\r\n assertInsertIndexTest(0, 2);\r\n assertInsertIndexTest(1, 2);\r\n assertInsertIndexTest(2, 2);\r\n });\r\n\r\n runner.testFunction(\"assertOneOf<T>(JavascriptIterable<T>,T,string?,string?)\", () =>\r\n {\r\n function assertOneOfErrorTest<T>(possibilities: JavascriptIterable<T>, value: T, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([possibilities, value, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertOneOf(possibilities, value, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertOneOfErrorTest(\r\n undefined!,\r\n 5,\r\n undefined,\r\n undefined,\r\n new PreConditionError(\r\n \"Expression: possibilities\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n assertOneOfErrorTest(\r\n null!,\r\n 5,\r\n undefined,\r\n undefined,\r\n new PreConditionError(\r\n \"Expression: possibilities\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n assertOneOfErrorTest(\r\n [],\r\n 5,\r\n undefined,\r\n undefined,\r\n new PreConditionError(\r\n \"Expected: one of []\",\r\n \"Actual: 5\",\r\n ));\r\n assertOneOfErrorTest(\r\n [],\r\n 5,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new PreConditionError(\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: one of []\",\r\n \"Actual: 5\",\r\n ));\r\n assertOneOfErrorTest(\r\n [1, 2, 3],\r\n 5,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new PreConditionError(\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: one of [1,2,3]\",\r\n \"Actual: 5\",\r\n ));\r\n\r\n function assertOneOfTest<T>(possibilities: JavascriptIterable<T>, value: T, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([possibilities, value, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertOneOf(possibilities, value, expression, message);\r\n });\r\n }\r\n\r\n assertOneOfTest([5], 5);\r\n assertOneOfTest([1, 3, 5, 7], 5);\r\n });\r\n\r\n runner.testFunction(\"assertInteger(number,string?,string?)\", () =>\r\n {\r\n function assertIntegerErrorTest(value: number, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertInteger(value), expected);\r\n });\r\n }\r\n\r\n assertIntegerErrorTest(\r\n 1.2,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: 1.2\",\r\n ])));\r\n assertIntegerErrorTest(\r\n NaN,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: NaN\",\r\n ])));\r\n assertIntegerErrorTest(\r\n Infinity,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: Infinity\",\r\n ])));\r\n assertIntegerErrorTest(\r\n -Infinity,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: -Infinity\",\r\n ])));\r\n\r\n function assertIntegerTest(value: number): void\r\n {\r\n runner.test(`with ${value}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertInteger(value);\r\n });\r\n }\r\n\r\n assertIntegerTest(-1);\r\n assertIntegerTest(0);\r\n assertIntegerTest(1);\r\n });\r\n });\r\n });\r\n}","import { AssertionError } from \"assert\";\r\n\r\nimport { InMemoryCharacterWriteStream } from \"../sources/inMemoryCharacterWriteStream\";\r\nimport { Iterable } from \"../sources/iterable\";\r\nimport { List } from \"../sources/list\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { WhereIterable } from \"../sources/whereIterable\";\r\nimport { ConsoleTestRunner } from \"./consoleTestRunner\";\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 * as testRunnerTests from \"./testRunnerTests\";\r\n\r\ninterface RunnerStats\r\n{\r\n testActionCount: number;\r\n testActionInsertIndex: number;\r\n passed: number;\r\n skipped: number;\r\n failed: number;\r\n}\r\n\r\nfunction assertRunnerStats(test: Test, runner: ConsoleTestRunner, stats: RunnerStats): void\r\n{\r\n test.assertEqual(stats.testActionCount, runner.getTestActionCount(), \"Wrong pending TestActions count\");\r\n test.assertEqual(stats.testActionInsertIndex, runner.getTestActionInsertIndex(), \"Wrong pending TestActions insert index\");\r\n test.assertEqual(stats.passed, runner.getPassedTestCount(), \"Wrong passed test count\");\r\n test.assertEqual(stats.skipped, runner.getSkippedTestCount(), \"Wrong skipped test count\");\r\n test.assertEqual(stats.failed, runner.getFailedTestCount(), \"Wrong failed test count\");\r\n}\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"consoleTestRunner.ts\", () =>\r\n {\r\n runner.testType(\"ConsoleTestRunner\", () =>\r\n {\r\n testRunnerTests.test2(runner, ConsoleTestRunner.create);\r\n\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n\r\n test.assertNotUndefinedAndNotNull(runner2);\r\n test.assertEqual(0, runner2.getTestActionCount());\r\n test.assertEqual(0, runner2.getTestActionInsertIndex());\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n });\r\n\r\n runner.testFunction(\"testFile()\", () =>\r\n {\r\n runner.test(\"with no Test argument in testAction\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n runner2.testFile(\"fakeFile.ts\", () =>\r\n {\r\n counter++;\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertUndefined(currentTestAction.getParent());\r\n test.assertEqual(\"fakeFile.ts\", currentTestAction.getName());\r\n });\r\n test.assertEqual(0, counter);\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 3,\r\n testActionInsertIndex: 3,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n await runner2.runAsync();\r\n\r\n test.assertEqual(1, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n }\r\n });\r\n\r\n runner.test(\"with skip, no Test argument in testFile() action, but no tests\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n runner2.testFile(\"fakeFile.ts\", runner2.skip(), () =>\r\n {\r\n counter++;\r\n });\r\n test.assertEqual(0, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 3,\r\n testActionInsertIndex: 3,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n await runner2.runAsync();\r\n\r\n test.assertEqual(1, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n }\r\n });\r\n\r\n runner.test(\"with Test argument in testAction\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n\r\n runner2.testFile(\"fakeFile.ts\", (test2: Test) =>\r\n {\r\n counter++;\r\n\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertUndefined(currentTestAction.getParent());\r\n test.assertEqual(\"fakeFile.ts\", currentTestAction.getName());\r\n\r\n test.assertNotUndefinedAndNotNull(test2);\r\n test.assertNotSame(test, test2);\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n test.assertEqual(0, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 1,\r\n testActionInsertIndex: 1,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n await runner2.runAsync();\r\n\r\n test.assertEqual(1, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n }\r\n });\r\n });\r\n\r\n runner.testFunction(\"testType()\", () =>\r\n {\r\n runner.test(\"with Type instead of type name\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n\r\n runner2.testType(WhereIterable, () =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"_WhereIterable\", currentTestAction.getName());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 3,\r\n testActionInsertIndex: 3,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"testFunction()\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n\r\n runner2.testFunction(\"fakeFunction()\", () =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"fakeFunction()\", currentTestAction.getName());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 3,\r\n testActionInsertIndex: 3,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.testFunction(\"testGroup()\", () =>\r\n {\r\n runner.test(\"normal behavior\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n \r\n runner2.testGroup(\"fake group\", () =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"fake group\", currentTestAction.getName());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 3,\r\n testActionInsertIndex: 3,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with skip but no tests\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n \r\n let counter: number = 0;\r\n runner2.testGroup(\"fake group\", runner2.skip(), () =>\r\n {\r\n counter++;\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 3,\r\n testActionInsertIndex: 3,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(0, counter);\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(1, counter);\r\n });\r\n\r\n runner.test(\"with skip and one test\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n \r\n runner2.testGroup(\"fake-group\", runner2.skip(\"fake-group-skip-message\"), () =>\r\n {\r\n runner2.test(\"fake-test\", (test: Test) =>\r\n {\r\n test.fail(\"Shouldn't run test!\");\r\n });\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 3,\r\n testActionInsertIndex: 3,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 1,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n const skippedTests: Iterable<SkippedTest> = runner2.getSkippedTests();\r\n test.assertNotUndefinedAndNotNull(skippedTests);\r\n const skippedTest: SkippedTest = await skippedTests.first();\r\n test.assertNotUndefinedAndNotNull(skippedTest);\r\n test.assertEqual(\r\n List.create([\"fake-group\", \"fake-test\"]),\r\n skippedTest.getTestAction().getFullNameParts(),\r\n );\r\n test.assertEqual(\"fake-group-skip-message\", skippedTest.getSkipMessage());\r\n });\r\n\r\n runner.test(\"with unhandled exception\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n \r\n runner2.testGroup(\"fake group\", () =>\r\n {\r\n throw Error(\"oops!\");\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 3,\r\n testActionInsertIndex: 3,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 1,\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"test()\", () =>\r\n {\r\n runner.test(\"with no parent\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n \r\n runner2.test(\"fake test\", (test2: Test) =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"fake test\", currentTestAction.getName());\r\n\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 1,\r\n testActionInsertIndex: 1,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with TestGroup parent\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n \r\n runner2.testGroup(\"fake-test-group\", () =>\r\n {\r\n counter++;\r\n test.assertEqual(1, counter);\r\n\r\n const testGroupAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testGroupAction);\r\n test.assertEqual(\"fake-test-group\", testGroupAction.getName());\r\n\r\n runner2.test(\"fake-test\", (test2: Test) =>\r\n {\r\n counter++;\r\n test.assertEqual(2, counter);\r\n\r\n const testAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testAction);\r\n test.assertEqual(\"fake-test-group fake-test\", testAction.getFullName());\r\n test.assertEqual(\"fake-test\", testAction.getName());\r\n test.assertSame(testGroupAction, testAction.getParent());\r\n\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n\r\n test.assertEqual(1, counter);\r\n });\r\n test.assertEqual(0, counter);\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 3,\r\n testActionInsertIndex: 3,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n test.assertEqual(2, counter);\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with TestGroup grandparent\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n runner2.testGroup(\"fake-test-group-1\", () =>\r\n {\r\n counter++;\r\n test.assertEqual(1, counter);\r\n\r\n const testGroupAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testGroupAction);\r\n test.assertEqual(\"fake-test-group-1\", testGroupAction.getFullName());\r\n test.assertEqual(\"fake-test-group-1\", testGroupAction.getName());\r\n\r\n runner2.testGroup(\"fake-test-group-2\", () =>\r\n {\r\n counter++;\r\n test.assertEqual(2, counter);\r\n\r\n const testGroupAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testGroupAction);\r\n test.assertEqual(\"fake-test-group-1 fake-test-group-2\", testGroupAction.getFullName());\r\n test.assertEqual(\"fake-test-group-2\", testGroupAction.getName());\r\n\r\n runner2.test(\"fake-test\", (test2: Test) =>\r\n {\r\n counter++;\r\n test.assertEqual(3, counter);\r\n\r\n const testAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testAction);\r\n test.assertEqual(\"fake-test-group-1 fake-test-group-2 fake-test\", testAction.getFullName());\r\n test.assertEqual(\"fake-test\", testAction.getName());\r\n test.assertSame(testGroupAction, testAction.getParent());\r\n\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n\r\n test.assertEqual(2, counter);\r\n });\r\n\r\n test.assertEqual(1, counter);\r\n });\r\n test.assertEqual(0, counter);\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 3,\r\n testActionInsertIndex: 3,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n test.assertEqual(3, counter);\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with Test parent\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n runner2.test(\"fake-test-1\", () =>\r\n {\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n test.assertThrows(\r\n () => runner2.test(\"fake-test-2\", () =>\r\n {\r\n test.fail(\"Shouldn't execute inner test since it's inside another test.\");\r\n }),\r\n new AssertionError({\r\n message: \"Can't start a new test group or a new test while running a test.\",\r\n operator: \"fail\",\r\n }),\r\n );\r\n\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 1,\r\n testActionInsertIndex: 1,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with skip\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n\r\n runner2.test(\"fake-test-1\", runner2.skip(true, \"fake-skip-message\"), () =>\r\n {\r\n test.fail(\"Should not run test action\")\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 1,\r\n testActionInsertIndex: 1,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 1,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n const skippedTests: Iterable<SkippedTest> = runner2.getSkippedTests();\r\n test.assertNotUndefinedAndNotNull(skippedTests);\r\n test.assertEqual(1, await skippedTests.getCount());\r\n const skippedTest: SkippedTest = await skippedTests.first();\r\n test.assertNotUndefinedAndNotNull(skippedTest);\r\n test.assertEqual(Iterable.create([\"fake-test-1\"]), skippedTest.getTestAction().getFullNameParts());\r\n test.assertEqual(\"fake-skip-message\", skippedTest.getSkipMessage());\r\n });\r\n\r\n runner.test(\"with assert failure\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n\r\n runner2.test(\"fake-test-1\", () =>\r\n {\r\n test.assertEqual(1, 2);\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 1,\r\n testActionInsertIndex: 1,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 1,\r\n });\r\n\r\n const failedTests: Iterable<FailedTest> = runner2.getFailedTests();\r\n test.assertNotUndefinedAndNotNull(failedTests);\r\n test.assertEqual(1, await failedTests.getCount());\r\n const failedTest: FailedTest = await failedTests.first();\r\n test.assertNotUndefinedAndNotNull(failedTest);\r\n test.assertEqual(Iterable.create([\"fake-test-1\"]), failedTest.getTestAction().getFullNameParts());\r\n const errorMessage: string = failedTest.getErrorMessage();\r\n test.assertTrue(errorMessage.includes(\"AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:\"));\r\n test.assertTrue(errorMessage.includes(\"1 !== 2\"));\r\n });\r\n\r\n runner.test(\"with unexpected failure\", async (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n\r\n runner2.test(\"fake-test-1\", () =>\r\n {\r\n throw new PreConditionError(\"oops!\");\r\n });\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 1,\r\n testActionInsertIndex: 1,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n testActionCount: 0,\r\n testActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 1,\r\n });\r\n\r\n const failedTests: Iterable<FailedTest> = runner2.getFailedTests();\r\n test.assertNotUndefinedAndNotNull(failedTests);\r\n test.assertEqual(1, await failedTests.getCount());\r\n const failedTest: FailedTest = await failedTests.first();\r\n test.assertNotUndefinedAndNotNull(failedTest);\r\n test.assertEqual(Iterable.create([\"fake-test-1\"]), failedTest.getTestAction().getFullNameParts());\r\n const errorMessage: string = failedTest.getErrorMessage();\r\n test.assertTrue(errorMessage.includes(\"Error: oops!\"));\r\n test.assertEqual(failedTest.getError(), new PreConditionError(\"oops!\"));\r\n });\r\n });\r\n });\r\n });\r\n}","import { Iterable } from \"../sources/iterable\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Type } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"testRunner.ts\", () =>\r\n {\r\n runner.testType(\"TestRunner\", () =>\r\n {\r\n });\r\n });\r\n}\r\n\r\nexport function test2(runner: TestRunner, creator: () => TestRunner): void\r\n{\r\n runner.testFile(\"testRunner.ts\", () =>\r\n {\r\n runner.testType(\"TestRunner\", () =>\r\n {\r\n runner.testFunction(\"andList()\", () =>\r\n {\r\n function andListErrorTest(values: unknown[] | Iterable<unknown>, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.andList(values), expected);\r\n });\r\n }\r\n\r\n andListErrorTest(undefined!, new PreConditionError(join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n andListErrorTest(null!, new PreConditionError(join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n\r\n function andListTest(values: unknown[] | Iterable<unknown>, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertEqual(expected, runner2.andList(values));\r\n });\r\n }\r\n\r\n andListTest([], \"\");\r\n andListTest([\"a\"], `\"a\"`);\r\n andListTest([1, \"a\"], `1 and \"a\"`);\r\n andListTest([1, \"a\", {a:7}], `1, \"a\", and {\"a\":7}`);\r\n });\r\n\r\n runner.testFunction(\"toString()\", () =>\r\n {\r\n function toStringTest(value: unknown, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertEqual(expected, runner2.toString(value));\r\n });\r\n }\r\n\r\n toStringTest(undefined, \"undefined\");\r\n toStringTest(null, \"null\");\r\n toStringTest(false, \"false\");\r\n toStringTest(true, \"true\");\r\n toStringTest(5, \"5\");\r\n toStringTest(6.4, \"6.4\");\r\n toStringTest(\"\", `\"\"`);\r\n toStringTest(\"hello there\", `\"hello there\"`);\r\n toStringTest({}, \"{}\");\r\n toStringTest({a:{b:\"c\"}}, `{\"a\":{\"b\":\"c\"}}`);\r\n toStringTest([], \"[]\");\r\n toStringTest([false, 1, \"d\"], `[false,1,\"d\"]`);\r\n });\r\n\r\n runner.testFunction(\"skip()\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip();\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertTrue(testSkip.getShouldSkip());\r\n test.assertEqual(\"\", testSkip.getMessage());\r\n });\r\n\r\n runner.test(\"with false\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip(false);\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertFalse(testSkip.getShouldSkip());\r\n test.assertEqual(\"\", testSkip.getMessage());\r\n });\r\n\r\n runner.test(\"with true\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip(true);\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertTrue(testSkip.getShouldSkip());\r\n test.assertEqual(\"\", testSkip.getMessage());\r\n });\r\n\r\n runner.test(\"with message\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip(true, \"hello there!\");\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertTrue(testSkip.getShouldSkip());\r\n test.assertEqual(\"hello there!\", testSkip.getMessage());\r\n });\r\n });\r\n\r\n runner.testFunction(\"testFile()\", () =>\r\n {\r\n runner.testGroup(\"with no skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFile(fileName, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with undefined skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFile(fileName, undefined, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with null skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFile(fileName, null!, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const skip: TestSkip = runner2.skip();\r\n test.assertThrows(() => runner2.testFile(fileName, skip, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n });\r\n\r\n runner.testFunction(\"testType()\", () =>\r\n {\r\n runner.testGroup(\"with no skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with undefined skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, undefined, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with null skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, null!, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const skip: TestSkip = runner2.skip();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, skip, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n });\r\n\r\n runner.testFunction(\"testFunction()\", () =>\r\n {\r\n runner.testGroup(\"with no skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with undefined skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, undefined, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with null skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, null!, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const skip: TestSkip = runner2.skip();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, skip, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n });\r\n });\r\n });\r\n}","import { DateTime } from \"../sources/dateTime\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"dateTime.ts\", () =>\n {\n runner.testType(\"DateTime\", () =>\n {\n runner.testFunction(\"parse()\", () =>\n {\n runner.test(`with \"2025-03-14T20:18:30\"`, (test: Test) =>\n {\n const dateTime: DateTime = DateTime.parse(\"2025-03-14T20:18:30\");\n test.assertNotUndefinedAndNotNull(dateTime);\n test.assertEqual(2025, dateTime.getYear());\n test.assertEqual(3, dateTime.getMonth());\n test.assertEqual(14, dateTime.getDay());\n test.assertEqual(20, dateTime.getHour());\n test.assertEqual(18, dateTime.getMinute());\n test.assertEqual(30, dateTime.getSecond());\n test.assertEqual(\"2025-03-14\", dateTime.toDateString());\n test.assertEqual(\"2025-03-14T20:18:30.000-07:00\", dateTime.toString());\n test.assertEqual(\"2025-03-14T20:18:30.000-07:00\", dateTime.debug);\n });\n });\n });\n });\n}","import { depthFirstSearch } from \"../sources/depthFirstSearch\";\nimport { Node } from \"../sources/node\";\nimport { Iterator } from \"../sources/iterator\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { List } from \"../sources/list\";\nimport { SearchControl } from \"../sources/searchControl\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"depthFirstSearch.ts\", () =>\n {\n runner.testFunction(\"depthFirstSearch()\", () =>\n {\n runner.test(\"with undefined initialToVisit\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch(undefined!, () => {}), new PreConditionError(\n \"Expression: parameters\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null initialToVisit\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch(null!, () => {}), new PreConditionError(\n \"Expression: parameters\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with undefined searchAction\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch([], undefined!), new PreConditionError(\n \"Expression: searchAction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null searchAction\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch([], null!), new PreConditionError(\n \"Expression: searchAction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with empty initialToVisit\", (test: Test) =>\n {\n const iterator: Iterator<number> = depthFirstSearch([], (searchControl: SearchControl<Node<number>,number>, current: Node<number>) =>\n {\n searchControl.addAllToVisit(current.iterateConnectedNodes());\n\n const currentValue: number = current.getValue();\n if (currentValue >= 7)\n {\n searchControl.addResult(currentValue);\n }\n });\n test.assertEqual([], iterator.toArray().await());\n });\n\n runner.test(\"with non-empty initialToVisit with return values\", (test: Test) =>\n {\n const nodes: List<Node<number>> = List.create();\n for (let i = 0; i < 10; i++)\n {\n nodes.add(Node.create(i));\n }\n \n function connectNodes(index1: number, index2: number): void\n {\n nodes.get(index1).await().addConnectedNode(nodes.get(index2).await());\n }\n connectNodes(0, 1);\n connectNodes(0, 2);\n connectNodes(1, 5);\n connectNodes(2, 4);\n connectNodes(3, 6);\n connectNodes(4, 5);\n connectNodes(4, 6);\n connectNodes(5, 9);\n connectNodes(6, 7);\n connectNodes(7, 3);\n connectNodes(8, 9);\n\n const iterator: Iterator<number> = depthFirstSearch([nodes.get(0).await()], (searchControl: SearchControl<Node<number>,number>, current: Node<number>) =>\n {\n searchControl.addAllToVisit(current.iterateConnectedNodes());\n\n const currentValue: number = current.getValue();\n if (currentValue >= 7)\n {\n searchControl.addResult(currentValue);\n }\n });\n\n test.assertEqual([7, 9], iterator.toArray().await());\n });\n });\n });\n}","import { SyncDisposable } from \"../sources/basicDisposable\";\r\nimport { Disposable } from \"../sources/disposable\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { SyncResult } from \"../sources/syncResult\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"disposable.ts\", () =>\r\n {\r\n runner.testType(\"Disposable\", () =>\r\n {\r\n runner.testFunction(\"create()\", () =>\r\n {\r\n function createErrorTest(testName: string, disposedFunction: () => void, expectedError: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n test.assertThrows(() => Disposable.create(disposedFunction), expectedError);\r\n });\r\n }\r\n\r\n createErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: disposedFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: disposedFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with function\", (test: Test) =>\r\n {\r\n let value: number = 0;\r\n const disposable: Disposable = Disposable.create(() => value += 1);\r\n test.assertNotUndefinedAndNotNull(disposable);\r\n test.assertFalse(disposable.isDisposed());\r\n test.assertEqual(value, 0);\r\n });\r\n });\r\n\r\n runner.testFunction(\"dispose()\", () =>\r\n {\r\n runner.test(\"with function that doesn't throw\", (test: Test) =>\r\n {\r\n let value: number = 0;\r\n const disposable: SyncDisposable = Disposable.create(() =>\r\n {\r\n test.assertEqual(disposable.isDisposed(), value !== 0);\r\n value += 1;\r\n });\r\n\r\n const result1: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result1);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const resultValue: boolean = result1.await();\r\n test.assertTrue(resultValue);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n\r\n const result2: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result2);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const resultValue: boolean = result2.await();\r\n test.assertFalse(resultValue);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n });\r\n\r\n runner.test(\"with function that throws\", (test: Test) =>\r\n {\r\n let value: number = 0;\r\n const disposable: SyncDisposable = Disposable.create(() =>\r\n {\r\n test.assertEqual(disposable.isDisposed(), value !== 0);\r\n value += 1;\r\n throw new Error(\"oops!\");\r\n });\r\n\r\n const result1: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result1);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertThrows(() => result1.await(), new Error(\"oops!\"));\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n\r\n const result2: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result2);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const resultValue: boolean = result2.await();\r\n test.assertFalse(resultValue);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n}","import { andList, orList } from \"../sources/english\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"english.ts\", () =>\r\n {\r\n runner.testFunction(\"andList(string[])\", () =>\r\n {\r\n function andListErrorTest(values: string[] | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => andList(values!), expectedError);\r\n });\r\n }\r\n\r\n andListErrorTest(\r\n undefined,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n andListErrorTest(\r\n null,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n\r\n function andListTest(values: string[], expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertEqual(andList(values), expected);\r\n });\r\n }\r\n\r\n andListTest([], \"\");\r\n andListTest([\"\"], \"\");\r\n andListTest([\"\", \"\"], \" and \");\r\n andListTest([\"\", \"\", \"\"], \", , and \");\r\n \r\n andListTest([\"a\"], \"a\");\r\n andListTest([\"a\", \"b\"], \"a and b\");\r\n andListTest([\"a\", \"b\", \"c\"], \"a, b, and c\");\r\n andListTest([\"a\", \"b\", \"c\", \"d\"], \"a, b, c, and d\");\r\n });\r\n\r\n runner.testFunction(\"orList(string[])\", () =>\r\n {\r\n function orListErrorTest(values: string[] | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => orList(values!), expectedError);\r\n });\r\n }\r\n\r\n orListErrorTest(\r\n undefined,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n orListErrorTest(\r\n null,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n\r\n function orListTest(values: string[], expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertEqual(orList(values), expected);\r\n });\r\n }\r\n\r\n orListTest([], \"\");\r\n orListTest([\"\"], \"\");\r\n orListTest([\"\", \"\"], \" or \");\r\n orListTest([\"\", \"\", \"\"], \", , or \");\r\n \r\n orListTest([\"a\"], \"a\");\r\n orListTest([\"a\", \"b\"], \"a or b\");\r\n orListTest([\"a\", \"b\", \"c\"], \"a, b, or c\");\r\n orListTest([\"a\", \"b\", \"c\", \"d\"], \"a, b, c, or d\");\r\n });\r\n });\r\n}","import { andList } from \"../sources/english\";\r\nimport { EqualFunctions } from \"../sources/equalFunctions\";\r\nimport { List } from \"../sources/list\";\r\nimport { Map } from \"../sources/map\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { isNumber } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"equalFunctions.ts\", () =>\r\n {\r\n runner.testType(\"EqualFunctions\", () =>\r\n {\r\n runner.test(\"create()\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertNotUndefinedAndNotNull(functions);\r\n });\r\n\r\n runner.testFunction(\"areEqual()\", () =>\r\n {\r\n function areEqualTest(left: unknown, right: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertEqual(functions.areEqual(left, right).await(), expected);\r\n });\r\n }\r\n\r\n areEqualTest(undefined, undefined, true);\r\n areEqualTest(undefined, null, false);\r\n areEqualTest(undefined, false, false);\r\n areEqualTest(undefined, true, false);\r\n areEqualTest(undefined, \"hello\", false);\r\n areEqualTest(undefined, 20, false);\r\n areEqualTest(undefined, {}, false);\r\n areEqualTest(undefined, [], false);\r\n areEqualTest(undefined, Map.create(), false);\r\n\r\n areEqualTest(null, undefined, false);\r\n areEqualTest(null, null, true);\r\n areEqualTest(null, false, false);\r\n areEqualTest(null, true, false);\r\n areEqualTest(null, \"hello\", false);\r\n areEqualTest(null, 20, false);\r\n areEqualTest(null, {}, false);\r\n areEqualTest(null, [], false);\r\n areEqualTest(null, Map.create(), false);\r\n\r\n areEqualTest(false, undefined, false);\r\n areEqualTest(false, null, false);\r\n areEqualTest(false, false, true);\r\n areEqualTest(false, true, false);\r\n areEqualTest(false, \"hello\", false);\r\n areEqualTest(false, 20, false);\r\n areEqualTest(false, {}, false);\r\n areEqualTest(false, [], false);\r\n areEqualTest(false, Map.create(), false);\r\n\r\n areEqualTest(true, undefined, false);\r\n areEqualTest(true, null, false);\r\n areEqualTest(true, false, false);\r\n areEqualTest(true, true, true);\r\n areEqualTest(true, \"hello\", false);\r\n areEqualTest(true, 20, false);\r\n areEqualTest(true, {}, false);\r\n areEqualTest(true, [], false);\r\n areEqualTest(true, Map.create(), false);\r\n \r\n areEqualTest(\"hello\", undefined, false);\r\n areEqualTest(\"hello\", null, false);\r\n areEqualTest(\"hello\", false, false);\r\n areEqualTest(\"hello\", true, false);\r\n areEqualTest(\"hello\", \"hello\", true);\r\n areEqualTest(\"hello\", \"hello there\", false);\r\n areEqualTest(\"hello\", \"HELLO\", false);\r\n areEqualTest(\"hello\", 20, false);\r\n areEqualTest(\"hello\", {}, false);\r\n areEqualTest(\"hello\", [], false);\r\n areEqualTest(\"\", [], false);\r\n areEqualTest(\"abc\", [\"a\", \"b\", \"c\"], false);\r\n areEqualTest(\"hello\", Map.create(), false);\r\n\r\n areEqualTest(10, undefined, false);\r\n areEqualTest(10, null, false);\r\n areEqualTest(10, false, false);\r\n areEqualTest(10, true, false);\r\n areEqualTest(10, \"hello\", false);\r\n areEqualTest(10, 10, true);\r\n areEqualTest(10, 10.0, true);\r\n areEqualTest(10, -10, false);\r\n areEqualTest(10, 10.0000001, false);\r\n areEqualTest(10, 20, false);\r\n areEqualTest(10, {}, false);\r\n areEqualTest(10, [], false);\r\n areEqualTest(10, Map.create(), false);\r\n\r\n areEqualTest({}, undefined, false);\r\n areEqualTest({}, null, false);\r\n areEqualTest({}, false, false);\r\n areEqualTest({}, true, false);\r\n areEqualTest({}, \"hello\", false);\r\n areEqualTest({}, 20, false);\r\n areEqualTest({}, {}, true);\r\n areEqualTest({}, {a:5}, false);\r\n areEqualTest({a:5}, {a:5}, true);\r\n areEqualTest({a:{b:5}}, {a:{b:5}}, true);\r\n areEqualTest({a:6}, {a:5}, false);\r\n areEqualTest({A:5}, {a:5}, false);\r\n areEqualTest({}, [], false);\r\n areEqualTest({}, Map.create(), false);\r\n areEqualTest({a:5}, Map.create<string,number>().set(\"a\", 5), false);\r\n\r\n areEqualTest([], undefined, false);\r\n areEqualTest([], null, false);\r\n areEqualTest([], false, false);\r\n areEqualTest([], true, false);\r\n areEqualTest([], \"hello\", false);\r\n areEqualTest([\"a\", \"b\", \"c\"], \"abc\", false);\r\n areEqualTest([], 20, false);\r\n areEqualTest([], {}, false);\r\n areEqualTest([], List.create(), true);\r\n areEqualTest([], [], true);\r\n areEqualTest([], [1], false);\r\n areEqualTest([1], [1], true);\r\n areEqualTest([1,2,3], [1,2,3], true);\r\n areEqualTest([1,2], [1,2,3], false);\r\n areEqualTest([1,2], [1,3], false);\r\n areEqualTest([], Map.create(), false);\r\n\r\n areEqualTest(List.create(), undefined, false);\r\n areEqualTest(List.create(), null, false);\r\n areEqualTest(List.create(), false, false);\r\n areEqualTest(List.create(), true, false);\r\n areEqualTest(List.create(), \"hello\", false);\r\n areEqualTest(List.create(), 20, false);\r\n areEqualTest(List.create(), {}, false);\r\n areEqualTest(List.create(), [], true);\r\n areEqualTest(List.create(), [1], false);\r\n areEqualTest(List.create([1]), [1], true);\r\n areEqualTest(List.create([1,2,3]), [1,2,3], true);\r\n areEqualTest(List.create([1,2]), [1,2,3], false);\r\n areEqualTest(List.create([1,2]), [1,3], false);\r\n areEqualTest(List.create(), Map.create(), false);\r\n\r\n areEqualTest(Map.create(), undefined, false);\r\n areEqualTest(Map.create(), null, false);\r\n areEqualTest(Map.create(), false, false);\r\n areEqualTest(Map.create(), true, false);\r\n areEqualTest(Map.create(), \"hello\", false);\r\n areEqualTest(Map.create(), 20, false);\r\n areEqualTest(Map.create(), {}, false);\r\n areEqualTest(Map.create().set(\"d\", 4), {d:4}, false);\r\n areEqualTest(Map.create().set(\"d\", 4), {d:5}, false);\r\n areEqualTest(Map.create().set(\"d\", 4), {e:4}, false);\r\n areEqualTest(Map.create(), [], false);\r\n areEqualTest(Map.create(), Map.create(), true);\r\n areEqualTest(Map.create(), Map.create().set(\"e\", 5), false);\r\n areEqualTest(Map.create().set(\"e\", 5), Map.create().set(\"e\", 5), true);\r\n areEqualTest(Map.create().set(\"e\", 5), Map.create().set(\"f\", 5), false);\r\n areEqualTest(Map.create().set(\"e\", 5), Map.create().set(\"e\", 6), false);\r\n areEqualTest(Map.create().set(\"e\", 5).set(\"f\", 6), Map.create().set(\"f\", 6).set(\"e\", 5), true);\r\n });\r\n\r\n runner.testFunction(\"add()\", () =>\r\n {\r\n runner.test(\"with undefined equalFunction\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertThrows(\r\n () => functions.add(undefined!),\r\n new PreConditionError([\r\n \"Expression: equalFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"\r\n ].join(\"\\n\")),\r\n );\r\n });\r\n\r\n runner.test(\"with null equalFunction\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertThrows(\r\n () => functions.add(null!),\r\n new PreConditionError([\r\n \"Expression: equalFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"\r\n ].join(\"\\n\")),\r\n );\r\n });\r\n\r\n runner.test(\"with equalFunction that compares numbers based on their mod 2 result\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n const result: EqualFunctions = functions.add((left: unknown, right: unknown) =>\r\n {\r\n let result: boolean | undefined;\r\n if (isNumber(left) && isNumber(right))\r\n {\r\n const leftMod2: number = left % 2;\r\n const rightMod2: number = right % 2;\r\n result = leftMod2 === rightMod2;\r\n }\r\n return result;\r\n });\r\n test.assertSame(functions, result);\r\n test.assertTrue(functions.areEqual(0, 0).await());\r\n test.assertTrue(functions.areEqual(1, 1).await());\r\n test.assertTrue(functions.areEqual(0, 2).await());\r\n test.assertTrue(functions.areEqual(1, 3).await());\r\n test.assertFalse(functions.areEqual(-1, 5).await());\r\n test.assertFalse(functions.areEqual(0, 1).await());\r\n test.assertTrue(functions.areEqual(false, false).await());\r\n test.assertFalse(functions.areEqual(false, true).await());\r\n });\r\n });\r\n });\r\n });\r\n}","import { FetchHttpClient } from \"../sources/fetchHttpClient\";\r\nimport { FetchHttpIncomingResponse } from \"../sources/fetchHttpResponse\";\r\nimport { HttpOutgoingRequest } from \"../sources/httpOutgoingRequest\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\nimport { hasNetworkAccess } from \"./tests\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"fetchHttpClient.ts\", () =>\r\n {\r\n runner.testType(\"FetchHttpClient\", () =>\r\n {\r\n runner.test(\"create()\", (test: Test) =>\r\n {\r\n const client: FetchHttpClient = FetchHttpClient.create();\r\n test.assertNotUndefinedAndNotNull(client);\r\n });\r\n\r\n runner.testFunction(\"sendRequest()\", () =>\r\n {\r\n runner.test(\"to URL that exists\", runner.skip(!hasNetworkAccess), async (test: Test) =>\r\n {\r\n const client: FetchHttpClient = FetchHttpClient.create();\r\n\r\n const response: FetchHttpIncomingResponse = await client.sendRequest(HttpOutgoingRequest.get(\"https://www.example.com\"));\r\n test.assertNotUndefinedAndNotNull(response);\r\n test.assertEqual(200, response.getStatusCode());\r\n });\r\n });\r\n });\r\n });\r\n}","import { Generator } from \"../sources/generator\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { iteratorTests } from \"./iteratorTests\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"generator.ts\", () =>\n {\n runner.testType(\"Generator<T>\", () =>\n {\n iteratorTests(runner, () => Generator.create(() => {}));\n\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with undefined\", (test: Test) =>\n {\n test.assertThrows(() => Generator.create(undefined!), new PreConditionError(\n \"Expression: generatorAction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null\", (test: Test) =>\n {\n test.assertThrows(() => Generator.create(null!), new PreConditionError(\n \"Expression: generatorAction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with function that doesn't add any return values or return a value\", (test: Test) =>\n {\n const generator: Generator<void> = Generator.create(() => {});\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([], generator.toArray().await());\n });\n\n runner.test(\"with function that returns a constant value\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(() => 20);\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 20, 20, 20], generator.take(4).toArray().await());\n });\n\n runner.test(\"with function that returns an incrementing value\", (test: Test) =>\n {\n let value: number = 20;\n const generator: Generator<number> = Generator.create(() => value++);\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 21, 22, 23, 24], generator.take(5).toArray().await());\n });\n\n runner.test(\"with function that always adds a return value\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(control => control.addValue(20));\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 20, 20, 20], generator.take(4).toArray().await());\n });\n\n runner.test(\"with function that always adds multiple return values\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(control => { control.addValues([20, 21, 22]); });\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 21, 22, 20, 21], generator.take(5).toArray().await());\n });\n\n runner.test(\"with function that always adds a return value and returns a value\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(control =>\n {\n control.addValue(20);\n test.assertTrue(control.hasCurrent());\n test.assertEqual(20, control.getCurrent());\n return 21;\n });\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 21, 20, 21, 20], generator.take(5).toArray().await());\n });\n });\n });\n });\n}","import { EmptyError } from \"../sources/emptyError\";\r\nimport { Iterator } from \"../sources/iterator\";\r\nimport\r\n{\r\n JavascriptIterable, JavascriptIterator, JavascriptIteratorResult\r\n} from \"../sources/javascript\";\r\nimport { NotFoundError } from \"../sources/notFoundError\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"iterator.ts\", () =>\r\n {\r\n runner.testType(\"Iterator<T>\", () =>\r\n {\r\n runner.testFunction(\"create(T[])\", () =>\r\n {\r\n function createErrorTest<T>(values: T[], expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => Iterator.create(values), expected);\r\n });\r\n }\r\n\r\n createErrorTest(undefined!, new PreConditionError(\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(null!, new PreConditionError(\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n function createTest<T>(values: T[]): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(values);\r\n test.assertEqual(iterator.toArray().await(), values);\r\n });\r\n }\r\n\r\n createTest([]);\r\n createTest([1, 2, 3]);\r\n createTest([false, true]);\r\n });\r\n\r\n runner.testFunction(\"next()\", () =>\r\n {\r\n runner.testGroup(\"not empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (const value of values)\r\n {\r\n test.assertTrue(iterator.next().await());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertThrows(\r\n () => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ),\r\n );\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(1, iterator.getCurrent());\r\n\r\n for (const value of values.slice(1))\r\n {\r\n test.assertTrue(iterator.next().await());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertThrows(\r\n () => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ),\r\n );\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"start()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n for (let i: number = 0; i < 2; i++)\r\n {\r\n const startResult: Iterator<number> = iterator.start().await();\r\n test.assertSame(startResult, iterator);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(1, iterator.getCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"takeCurrent()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertThrows(() => iterator.takeCurrent(),\r\n new PreConditionError(\r\n \"Expression: iterator.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(1, iterator.getCurrent());\r\n\r\n for (let i = 0; i < values.length - 1; i++)\r\n {\r\n test.assertEqual(values[i], iterator.takeCurrent().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[i + 1], iterator.getCurrent());\r\n }\r\n\r\n test.assertEqual(values[values.length - 1], iterator.takeCurrent().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"any()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertTrue(iterator.any().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertTrue(iterator.any().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"getCount()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertEqual(values.length, iterator.getCount().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertEqual(iterator.getCount().await(), 0);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n\r\n test.assertEqual(values.length, iterator.getCount().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertEqual(iterator.getCount().await(), 0);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"toArray()\", () =>\r\n {\r\n runner.testGroup(\"not empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n\r\n test.assertEqual(values, iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertEqual([], iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n\r\n test.assertEqual(values, iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertEqual([], iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n\r\n runner.testGroup(\"concatenate()\", () =>\r\n {\r\n runner.testGroup(\"with non-started\", () =>\r\n {\r\n runner.testGroup(\"empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5], [6, 7]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5, 6, 7]);\r\n });\r\n });\r\n\r\n runner.testGroup(\"non-empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [1, 2]);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([3]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([4, 5, 6]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [3, 4, 5, 6]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([7, 8, 9]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([10, 11, 12], [13]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [7, 8, 9, 10, 11, 12, 13]);\r\n });\r\n });\r\n });\r\n\r\n runner.testGroup(\"with started\", () =>\r\n {\r\n runner.testGroup(\"empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5], [6, 7]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5, 6, 7]);\r\n });\r\n });\r\n\r\n runner.testGroup(\"non-empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [1, 2]);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([3]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([4, 5, 6]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [3, 4, 5, 6]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([7, 8, 9]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([10, 11, 12], [13]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [7, 8, 9, 10, 11, 12, 13]);\r\n });\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"where()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3, 4, 5];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n const result: Iterator<number> = iterator.where(x => x % 2 === 1);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const expectedValue of [1, 3, 5])\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(expectedValue, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(expectedValue, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3, 4, 5];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n const result: Iterator<number> = iterator.where(x => x % 2 === 1);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent())\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const expectedValue of [1, 3, 5])\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(expectedValue, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(expectedValue, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"map()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n const result: Iterator<number> = iterator.map(x => x + 10);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const value of values)\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(value + 10, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n const result: Iterator<number> = iterator.map(x => x + 10);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const value of values)\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(value + 10, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"flatMap()\", () =>\r\n {\r\n runner.test(\"with empty non-started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"with empty started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"with non-empty non-started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), [\"1\", \"2\", \"2\", \"3\", \"3\", \"3\"]);\r\n });\r\n\r\n runner.test(\"with non-empty started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]).start().await();\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), [\"1\", \"2\", \"2\", \"3\", \"3\", \"3\"]);\r\n });\r\n\r\n runner.test(\"with mapping that sometimes returns an empty iterable\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3, 4]).start().await();\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n if (value % 2 === 1)\r\n {\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), [\"1\", \"3\", \"3\", \"3\"]);\r\n });\r\n });\r\n\r\n runner.testFunction(\"first()\", () =>\r\n {\r\n runner.testGroup(\"with no condition\", () =>\r\n {\r\n function firstErrorTest(iterable: JavascriptIterable<string>, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<string> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertThrows(() => { iterator.first().await(); }, expected);\r\n }\r\n });\r\n }\r\n\r\n firstErrorTest(\r\n [],\r\n new EmptyError(),\r\n );\r\n\r\n function firstTest<T>(iterable: JavascriptIterable<T>, expected: T): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(iterator.first().await(), expected);\r\n }\r\n });\r\n }\r\n\r\n firstTest([1], 1);\r\n firstTest([2, 3], 2);\r\n firstTest([4, 5, 6, 7, 8], 4);\r\n });\r\n\r\n runner.testGroup(\"with condition argument\", () =>\r\n {\r\n function firstErrorTest<T>(iterable: JavascriptIterable<T>, condition: (value: T) => boolean, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)} and ${condition?.name} condition`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertThrows(() =>\r\n {\r\n iterator.first(condition).await();\r\n }, expected);\r\n }\r\n });\r\n }\r\n\r\n function isOdd(value: number): boolean\r\n {\r\n return value % 2 === 1;\r\n }\r\n\r\n function isEven(value: number): boolean\r\n {\r\n return value % 2 === 0;\r\n }\r\n\r\n firstErrorTest(\r\n [],\r\n undefined!,\r\n new EmptyError(),\r\n );\r\n firstErrorTest(\r\n [],\r\n null!,\r\n new EmptyError(),\r\n );\r\n firstErrorTest(\r\n [1],\r\n isEven,\r\n new NotFoundError(\"No value was found in the Iterator that matched the provided condition.\"),\r\n );\r\n firstErrorTest(\r\n [2, 4],\r\n isOdd,\r\n new NotFoundError(\"No value was found in the Iterator that matched the provided condition.\"),\r\n );\r\n\r\n function firstTest<T>(iterable: JavascriptIterable<T>, condition: (value: T) => boolean, expected: T): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)} and ${condition?.name} condition`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(iterator.first(condition).await(), expected);\r\n }\r\n });\r\n }\r\n\r\n firstTest([1], isOdd, 1);\r\n firstTest([2, 3], isEven, 2);\r\n firstTest([2, 3], isOdd, 3);\r\n firstTest([4, 6, 7, 8], isEven, 4);\r\n firstTest([4, 6, 7, 8], isOdd, 7);\r\n });\r\n });\r\n\r\n runner.testFunction(\"skip(number)\", () =>\r\n {\r\n function skipErrorTest(iterable: JavascriptIterable<string>, maximumToSkip: number, expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([iterable, maximumToSkip])}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<string> = Iterator.create(iterable);\r\n test.assertThrows(() => iterator.skip(maximumToSkip), expected);\r\n });\r\n }\r\n\r\n skipErrorTest([], undefined!, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n skipErrorTest([], null!, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n skipErrorTest([], 0.5, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: integer\",\r\n \"Actual: 0.5\",\r\n ));\r\n skipErrorTest([], -1, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: greater than or equal to 0\",\r\n \"Actual: -1\",\r\n ));\r\n\r\n function skipTest(iterable: JavascriptIterable<string>, maximumToSkip: number, expected: JavascriptIterable<string>): void\r\n {\r\n runner.test(`with ${runner.andList([iterable, maximumToSkip])}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<string> = Iterator.create(iterable);\r\n const skipIterator: Iterator<string> = iterator.skip(maximumToSkip);\r\n test.assertEqual(expected, skipIterator.toArray().await());\r\n });\r\n }\r\n\r\n skipTest([], 0, []);\r\n skipTest([], 1, []);\r\n skipTest([], 2, []);\r\n skipTest([\"a\", \"b\", \"c\"], 0, [\"a\", \"b\", \"c\"]);\r\n skipTest([\"a\", \"b\", \"c\"], 1, [\"b\", \"c\"]);\r\n skipTest([\"a\", \"b\", \"c\"], 2, [\"c\"]);\r\n skipTest([\"a\", \"b\", \"c\"], 3, []);\r\n skipTest([\"a\", \"b\", \"c\"], 4, []);\r\n });\r\n });\r\n });\r\n}\r\n\r\nexport function iteratorTests<T>(runner: TestRunner, creator: () => Iterator<T>): void\r\n{\r\n runner.testType(\"Iterator<T>\", () =>\r\n {\r\n runner.testFunction(\"creator()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertNotUndefinedAndNotNull(iterator);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrent(), new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n });\r\n\r\n runner.testFunction(\"start()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n for (let i: number = 0; i < 2; i++)\r\n {\r\n const startResult: Iterator<T> = iterator.start().await();\r\n test.assertSame(startResult, iterator);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"takeCurrent()\", () =>\r\n {\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertThrows(() => iterator.takeCurrent(),\r\n new PreConditionError(\r\n \"Expression: iterator.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertThrows(() => iterator.takeCurrent(),\r\n new PreConditionError(\r\n \"Expression: iterator.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"next()\", () =>\r\n {\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n\r\n });\r\n\r\n runner.testFunction(\"[Symbol.iterator]()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const jsIterator: JavascriptIterator<T> = iterator[Symbol.iterator]();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n const result: JavascriptIteratorResult<T> = jsIterator.next();\r\n test.assertEqual(result.done, true);\r\n test.assertUndefined(result.value);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"any()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(iterator.any().await());\r\n\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.testFunction(\"getCount()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertEqual(iterator.getCount().await(), 0);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"toArray()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n const array: T[] = iterator.toArray().await();\r\n test.assertEqual(array, []);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"where()\", () =>\r\n {\r\n runner.test(\"with undefined condition\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.where(undefined!), new PreConditionError(\r\n \"Expression: condition\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"with null condition\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.where(null!), new PreConditionError(\r\n \"Expression: condition\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n\r\n const result: Iterator<T> = iterator.where((value: T) => value !== undefined);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const result: Iterator<T> = iterator.where((value: T) => value !== undefined);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"map()\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.map(undefined!), new PreConditionError(\r\n \"Expression: mapping\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"with null\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.map(null!), new PreConditionError(\r\n \"Expression: mapping\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const mapIterator: Iterator<number> = iterator.map(_ => 5);\r\n test.assertFalse(mapIterator.hasStarted());\r\n test.assertFalse(mapIterator.hasCurrent());\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const mapIterator: Iterator<number> = iterator.map(_ => 5);\r\n test.assertFalse(mapIterator.hasStarted());\r\n test.assertFalse(mapIterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(mapIterator.next().await());\r\n test.assertTrue(mapIterator.hasStarted());\r\n test.assertFalse(mapIterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n });\r\n}","import { HttpClient } from \"../sources/httpClient\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"httpClient.ts\", () =>\r\n {\r\n runner.testType(\"HttpClient\", () =>\r\n {\r\n runner.test(\"create()\", (test: Test) =>\r\n {\r\n const client: HttpClient = HttpClient.create();\r\n test.assertNotUndefinedAndNotNull(client);\r\n });\r\n });\r\n });\r\n}","import { CharacterWriteStream, InMemoryCharacterWriteStream, PreConditionError } from \"../sources\";\nimport { IndentedCharacterWriteStream } from \"../sources/IndentedCharacterWriteStream\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"IndentedCharacterWriteStream.ts\", () =>\n {\n runner.testType(\"IndentedCharacterWriteStream\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest(innerStream: CharacterWriteStream, expected: Error): void\n {\n runner.test(`with ${runner.toString(innerStream)}`, (test: Test) =>\n {\n test.assertThrows(() => IndentedCharacterWriteStream.create(innerStream), expected);\n });\n }\n\n createErrorTest(undefined!, new PreConditionError(\n \"Expression: innerStream\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(null!, new PreConditionError(\n \"Expression: innerStream\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with valid innerStream\", (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(\"\", stream.getCurrentIndentation());\n test.assertEqual(\" \", stream.getSingleIndent());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n });\n });\n\n runner.testFunction(\"setSingleIndent()\", () =>\n {\n function setSingleIndentErrorTest(singleIndent: string, expected: Error): void\n {\n runner.test(`with ${runner.toString(singleIndent)}`, (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n const initialSingleIndent: string = stream.getSingleIndent();\n\n test.assertThrows(() => stream.setSingleIndent(singleIndent), expected);\n\n test.assertEqual(initialSingleIndent, stream.getSingleIndent());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n test.assertEqual(\"\", innerStream.getWrittenText());\n });\n }\n\n setSingleIndentErrorTest(undefined!, new PreConditionError(\n \"Expression: singleIndent\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n setSingleIndentErrorTest(null!, new PreConditionError(\n \"Expression: singleIndent\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n function setSingleIndentTest(singleIndent: string): void\n {\n runner.test(`with ${runner.toString(singleIndent)}`, (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n const result: IndentedCharacterWriteStream = stream.setSingleIndent(singleIndent);\n\n test.assertSame(stream, result);\n test.assertEqual(singleIndent, stream.getSingleIndent());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n test.assertEqual(\"\", innerStream.getWrittenText());\n });\n }\n\n setSingleIndentTest(\"\");\n setSingleIndentTest(\" \");\n setSingleIndentTest(\" \");\n setSingleIndentTest(\" \");\n setSingleIndentTest(\"\\t\");\n setSingleIndentTest(\"abc\");\n });\n\n runner.testFunction(\"addIndentation()\", () =>\n {\n function addIndentationWithNoArgumentsTest(singleIndent: string): void\n {\n runner.test(`with ${runner.toString(singleIndent)} single indent and no arguments`, (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream)\n .setSingleIndent(singleIndent);\n\n const result: IndentedCharacterWriteStream = stream.addIndentation();\n\n test.assertSame(stream, result);\n test.assertEqual(singleIndent, stream.getSingleIndent());\n test.assertEqual(1, stream.getCurrentIndentationCount());\n test.assertEqual(singleIndent, stream.getCurrentIndentation());\n test.assertEqual(\"\", innerStream.getWrittenText());\n });\n }\n\n addIndentationWithNoArgumentsTest(\"\");\n addIndentationWithNoArgumentsTest(\" \");\n addIndentationWithNoArgumentsTest(\" \");\n\n function addIndentationWithArgumentTest(singleIndent: string): void\n {\n runner.test(`with default single indent and ${runner.toString(singleIndent)} single indent argument`, (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n const initialSingleIndent: string = stream.getSingleIndent();\n\n const result: IndentedCharacterWriteStream = stream.addIndentation(singleIndent);\n\n test.assertSame(stream, result);\n test.assertEqual(initialSingleIndent, stream.getSingleIndent());\n test.assertEqual(1, stream.getCurrentIndentationCount());\n test.assertEqual(singleIndent, stream.getCurrentIndentation());\n test.assertEqual(\"\", innerStream.getWrittenText());\n });\n }\n\n addIndentationWithArgumentTest(\"\");\n addIndentationWithArgumentTest(\" \");\n addIndentationWithArgumentTest(\" \");\n });\n\n runner.testFunction(\"removeIndentation()\", () =>\n {\n runner.test(\"with no current indentation\", (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n test.assertThrows(() => stream.removeIndentation(), new PreConditionError(\n \"Expression: this.getCurrentIndentationCount()\",\n \"Expected: greater than or equal to 1\",\n \"Actual: 0\",\n ));\n\n test.assertEqual(0, stream.getCurrentIndentationCount());\n test.assertEqual(\"\", stream.getCurrentIndentation());\n test.assertEqual(\"\", innerStream.getWrittenText());\n });\n\n runner.test(\"with empty current indentation\", (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n stream.addIndentation(\"\");\n\n const result: string = stream.removeIndentation();\n\n test.assertEqual(\"\", result);\n test.assertEqual(0, stream.getCurrentIndentationCount());\n test.assertEqual(\"\", stream.getCurrentIndentation());\n });\n\n runner.test(\"with non-empty current indentation\", (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n stream.addIndentation(\" \");\n\n const result: string = stream.removeIndentation();\n\n test.assertEqual(\" \", result);\n test.assertEqual(0, stream.getCurrentIndentationCount());\n test.assertEqual(\"\", stream.getCurrentIndentation());\n });\n });\n\n runner.testFunction(\"indent()\", () =>\n {\n runner.test(\"with no singleIndent and undefined action\", (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n test.assertThrowsAsync(async () => await stream.indent(undefined!), new PreConditionError(\n \"Expression: action\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n\n test.assertEqual(\"\", innerStream.getWrittenText());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n });\n\n runner.test(\"with no singleIndent and null action\", (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n test.assertThrowsAsync(async () => await stream.indent(null!), new PreConditionError(\n \"Expression: action\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n test.assertEqual(\"\", innerStream.getWrittenText());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n });\n\n runner.test(\"with singleIndent and undefined action\", (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n test.assertThrowsAsync(async () => await stream.indent(\" \", undefined!), new PreConditionError(\n \"Expression: action\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n\n test.assertEqual(\"\", innerStream.getWrittenText());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n });\n\n runner.test(\"with singleIndent and null action\", (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n test.assertThrowsAsync(async () => await stream.indent(\" \", null!), new PreConditionError(\n \"Expression: action\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n test.assertEqual(\"\", innerStream.getWrittenText());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n });\n\n runner.test(\"with singleIndent and empty action\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n const result: number = await stream.indent(\" \", async () =>\n {\n return 0;\n });\n\n test.assertEqual(0, result);\n test.assertEqual(\"\", innerStream.getWrittenText());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n });\n\n runner.test(\"with no singleIndent and non-empty action\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n const result: number = await stream.indent(async () =>\n {\n let result: number = 0;\n\n result += await stream.writeLine(\"Hello\");\n result += await stream.writeLine(\"World!\");\n\n return result;\n });\n\n test.assertEqual(17, result);\n test.assertEqual(\" Hello\\n World!\\n\", innerStream.getWrittenText());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n });\n\n runner.test(\"with singleIndent and non-empty action\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n const result: number = await stream.indent(\" \", async () =>\n {\n let result: number = 0;\n\n result += await stream.writeLine(\"Hello\");\n result += await stream.writeLine(\"World!\");\n\n return result;\n });\n\n test.assertEqual(15, result);\n test.assertEqual(\" Hello\\n World!\\n\", innerStream.getWrittenText());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n });\n\n runner.test(\"with action that doesn't return a value\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n const result: number = await stream.indent(\" \", async () =>\n {\n await stream.writeLine(\"Hello\");\n await stream.writeLine(\"World!\");\n });\n\n test.assertEqual(0, result);\n test.assertEqual(\" Hello\\n World!\\n\", innerStream.getWrittenText());\n test.assertEqual(0, stream.getCurrentIndentationCount());\n });\n });\n\n runner.testFunction(\"writeString()\", () =>\n {\n runner.test(\"with empty\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n const result: number = await stream.writeString(\"\");\n\n test.assertEqual(0, result);\n test.assertEqual(\"\", innerStream.getWrittenText());\n });\n\n runner.test(\"with no newline characters or current indentation\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n let result: number = 0;\n result += await stream.writeString(\"Hello\");\n result += await stream.writeString(\" there!\");\n\n test.assertEqual(12, result);\n test.assertEqual(\"Hello there!\", innerStream.getWrittenText());\n });\n\n runner.test(\"with newline characters but no current indentation\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n let result: number = 0;\n result += await stream.writeString(\"Hel\");\n result += await stream.writeString(\"lo\\n\");\n result += await stream.writeString(\"there!\");\n\n test.assertEqual(12, result);\n test.assertEqual(\"Hello\\nthere!\", innerStream.getWrittenText());\n });\n\n runner.test(\"with newline characters and current indentation\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n const result: number = await stream.indent(async () =>\n {\n return await stream.writeString(\"Hel\") +\n await stream.writeString(\"lo\\n\") +\n await stream.writeString(\"there!\");\n });\n\n test.assertEqual(16, result);\n test.assertEqual(\" Hello\\n there!\", innerStream.getWrittenText());\n });\n\n runner.test(\"with Windows newline characters and current indentation\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n const result: number = await stream.indent(async () =>\n {\n return await stream.writeString(\"Hel\") +\n await stream.writeString(\"lo\\r\\n\") +\n await stream.writeString(\"there!\");\n });\n\n test.assertEqual(17, result);\n test.assertEqual(\" Hello\\r\\n there!\", innerStream.getWrittenText());\n });\n\n runner.test(\"with empty line and current indentation\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n const result: number = await stream.indent(async () =>\n {\n return await stream.writeString(\"Hel\") +\n await stream.writeString(\"lo\\n\\n\") +\n await stream.writeString(\"there!\");\n });\n\n test.assertEqual(17, result);\n test.assertEqual(\" Hello\\n\\n there!\", innerStream.getWrittenText());\n });\n\n runner.test(\"with Windows empty line and current indentation\", async (test: Test) =>\n {\n const innerStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\n const stream: IndentedCharacterWriteStream = IndentedCharacterWriteStream.create(innerStream);\n\n const result: number = await stream.indent(async () =>\n {\n return await stream.writeString(\"Hel\") +\n await stream.writeString(\"lo\\r\\n\\r\\n\") +\n await stream.writeString(\"there!\");\n });\n\n test.assertEqual(19, result);\n test.assertEqual(\" Hello\\r\\n\\r\\n there!\", innerStream.getWrittenText());\n });\n });\n });\n });\n}","import { InMemoryCharacterWriteStream } from \"../sources/inMemoryCharacterWriteStream\";\r\nimport { SyncResult } from \"../sources/syncResult\";\r\nimport { isUndefined } from \"../sources/types\";\r\nimport * as characterWriteStreamTests from \"./characterWriteStreamTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"inMemoryCharacterWriteStream.ts\", () =>\r\n {\r\n runner.testType(\"InMemoryCharacterWriteStream\", () =>\r\n {\r\n characterWriteStreamTests.test(runner, InMemoryCharacterWriteStream.create);\r\n\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n test.assertNotUndefinedAndNotNull(writeStream);\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n test.assertEqual(\"\\n\", writeStream.getNewlineSequence());\r\n });\r\n\r\n runner.testFunction(\"clearWrittenText()\", (test: Test) =>\r\n {\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n\r\n const result1: InMemoryCharacterWriteStream = writeStream.clearWrittenText();\r\n test.assertSame(writeStream, result1);\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n\r\n writeStream.writeString(\"hello world!\").await();\r\n test.assertEqual(\"hello world!\", writeStream.getWrittenText());\r\n\r\n const result2: InMemoryCharacterWriteStream = writeStream.clearWrittenText();\r\n test.assertSame(writeStream, result2);\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n });\r\n\r\n runner.testFunction(\"setNewlineSequence()\", (test: Test) =>\r\n {\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n\r\n const result1: InMemoryCharacterWriteStream = writeStream.setNewlineSequence(\"e\");\r\n test.assertSame(writeStream, result1);\r\n test.assertEqual(\"e\", writeStream.getNewlineSequence());\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n\r\n const result2: SyncResult<number> = writeStream.writeString(\"ab\");\r\n test.assertEqual(\"ab\", writeStream.getWrittenText());\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(2, result2.await());\r\n test.assertEqual(\"ab\", writeStream.getWrittenText());\r\n }\r\n\r\n const result3: SyncResult<number> = writeStream.writeLine(\"cd\");\r\n test.assertEqual(\"abcde\", writeStream.getWrittenText());\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(3, result3.await());\r\n test.assertEqual(\"abcde\", writeStream.getWrittenText());\r\n }\r\n });\r\n\r\n runner.testFunction(\"writeString()\", () =>\r\n {\r\n function writeStringTest(text: string): void\r\n {\r\n runner.test(`with ${runner.toString(text)}`, (test: Test) =>\r\n {\r\n const expectedWrittenText: string = text || \"\";\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n const result: number = writeStream.writeString(text).await();\r\n test.assertEqual(expectedWrittenText.length, result);\r\n test.assertEqual(expectedWrittenText, writeStream.getWrittenText());\r\n });\r\n }\r\n\r\n writeStringTest(undefined!);\r\n writeStringTest(null!);\r\n writeStringTest(\"\");\r\n writeStringTest(\"a\");\r\n writeStringTest(\"abc\");\r\n });\r\n\r\n runner.testFunction(\"writeLine()\", () =>\r\n {\r\n function writeLineTest(text: string, newlineSequence?: string): void\r\n {\r\n runner.test(`with ${runner.toString(text)}${isUndefined(newlineSequence) ? \"\" : ` and ${runner.toString(newlineSequence)}`}`, (test: Test) =>\r\n {\r\n \r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n if (!isUndefined(newlineSequence))\r\n {\r\n writeStream.setNewlineSequence(newlineSequence);\r\n }\r\n const expectedWrittenText: string = (text || \"\") + writeStream.getNewlineSequence();\r\n\r\n const result: number = writeStream.writeLine(text).await();\r\n test.assertEqual(expectedWrittenText.length, result);\r\n test.assertEqual(expectedWrittenText, writeStream.getWrittenText());\r\n });\r\n }\r\n\r\n writeLineTest(undefined!);\r\n writeLineTest(null!);\r\n writeLineTest(\"\");\r\n writeLineTest(\"a\");\r\n writeLineTest(\"abc\");\r\n writeLineTest(\"abc\", \"\\r\\n\");\r\n writeLineTest(\"abc\", \"\");\r\n });\r\n });\r\n });\r\n}","import { CharacterWriteStream } from \"../sources/characterWriteStream\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner, creator: () => CharacterWriteStream): void\r\n{\r\n runner.testFile(\"characterWriteStream.ts\", () =>\r\n {\r\n runner.testType(\"CharacterWriteStream\", () =>\r\n {\r\n });\r\n });\r\n}","import { Iterable } from \"../sources/iterable\";\r\nimport { Test } from \"./test\";\r\nimport { Iterator} from \"../sources/iterator\";\r\nimport { TestRunner } from \"./testRunner\";\r\nimport { EmptyError, JavascriptIterable } from \"../sources\";\r\n\r\nexport function iterableTests<T>(runner: TestRunner, creator: () => Iterable<T>): void\r\n{\r\n runner.testType(\"Iterable<T>\", () =>\r\n {\r\n runner.testFunction(\"iterate()\", (test: Test) =>\r\n {\r\n const iterable: Iterable<T> = creator();\r\n \r\n const iterator: Iterator<T> = iterable.iterate();\r\n test.assertNotUndefinedAndNotNull(iterator);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.testFunction(\"toArray()\", (test: Test) =>\r\n {\r\n const iterable: Iterable<T> = creator();\r\n\r\n const array: Array<T> = iterable.toArray().await();\r\n test.assertNotUndefinedAndNotNull(array);\r\n test.assertEqual(array.length, iterable.getCount().await());\r\n });\r\n\r\n runner.testFunction(\"any()\", (test: Test) =>\r\n {\r\n const iterable: Iterable<T> = creator();\r\n test.assertEqual(iterable.any().await(), iterable.getCount().await() > 0);\r\n });\r\n\r\n runner.testFunction(\"getCount()\", (test: Test) =>\r\n {\r\n const iterable: Iterable<T> = creator();\r\n test.assertEqual(0, iterable.getCount().await());\r\n });\r\n\r\n runner.testFunction(\"equals()\", () =>\r\n {\r\n function equalsTest(left: Iterable<T>, right: JavascriptIterable<T>, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n test.assertEqual(left.equals(right).await(), expected);\r\n });\r\n }\r\n\r\n equalsTest(creator(), undefined!, false);\r\n equalsTest(creator(), null!, false);\r\n equalsTest(creator(), [], true);\r\n equalsTest(creator(), creator(), true);\r\n });\r\n\r\n runner.testFunction(\"toString()\", (test: Test) =>\r\n {\r\n const iterable: Iterable<T> = creator();\r\n const stringValue: string = iterable.toString();\r\n test.assertNotEmpty(stringValue);\r\n });\r\n\r\n runner.testFunction(\"first()\", () =>\r\n {\r\n runner.test(\"when empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<T> = creator();\r\n test.assertThrows(() => iterable.first().await(), new EmptyError());\r\n });\r\n });\r\n\r\n runner.testFunction(\"last()\", () =>\r\n {\r\n runner.test(\"when empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<T> = creator();\r\n test.assertThrows(() => iterable.last().await(), new EmptyError());\r\n });\r\n });\r\n });\r\n}\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"iterable.ts\", () =>\r\n {\r\n runner.testType(\"Iterable<T>\", () =>\r\n {\r\n runner.testFunction(\"create(JavascriptIterable<T>|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", async (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create();\r\n test.assertNotUndefinedAndNotNull(iterable);\r\n test.assertEqual(await iterable.toArray(), []);\r\n test.assertEqual(await iterable.getCount(), 0);\r\n });\r\n\r\n runner.test(\"with empty array\", async (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create<number>([]);\r\n test.assertNotUndefinedAndNotNull(iterable);\r\n test.assertEqual(await iterable.toArray(), []);\r\n test.assertEqual(await iterable.getCount(), 0);\r\n });\r\n\r\n runner.test(\"with non-empty array\", async (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2, 3]);\r\n test.assertNotUndefinedAndNotNull(iterable);\r\n test.assertEqual(await iterable.toArray(), [1, 2, 3]);\r\n test.assertEqual(await iterable.getCount(), 3);\r\n });\r\n });\r\n\r\n runner.testGroup(\"concatenate()\", () =>\r\n {\r\n runner.testGroup(\"empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([]);\r\n test.assertEqual(concatenateIterable.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([5]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [5]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([5], [6, 7]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [5, 6, 7]);\r\n });\r\n });\r\n\r\n runner.testGroup(\"non-empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [1, 2]);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([3]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([4, 5, 6]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [3, 4, 5, 6]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([7, 8, 9]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([10, 11, 12], [13]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [7, 8, 9, 10, 11, 12, 13]);\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"flatMap()\", () =>\r\n {\r\n runner.test(\"with empty iterable\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const flatMapIterable: Iterable<string> = iterable.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterable.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"with non-empty iterable\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2, 3]);\r\n const flatMapIterable: Iterable<string> = iterable.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterable.toArray().await(), [\"1\", \"2\", \"2\", \"3\", \"3\", \"3\"]);\r\n });\r\n\r\n runner.test(\"with mapping that sometimes returns an empty iterable\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2, 3, 4]);\r\n const flatMapIterable: Iterable<string> = iterable.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n if (value % 2 === 1)\r\n {\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterable.toArray().await(), [\"1\", \"3\", \"3\", \"3\"]);\r\n });\r\n });\r\n });\r\n });\r\n}","import { JavascriptMapMap } from \"../sources/javascriptMapMap\";\r\nimport { mapTests } from \"./mapTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"javascriptMapMap.ts\", () =>\r\n {\r\n runner.testType(\"JavascriptMapMap<TKey,TValue>\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const map: JavascriptMapMap<number,string> = JavascriptMapMap.create();\r\n test.assertEqual(map.getCount().await(), 0);\r\n });\r\n\r\n mapTests(runner, JavascriptMapMap.create);\r\n });\r\n });\r\n}\r\n","import { Iterator } from \"../sources/iterator\";\r\nimport { JavascriptIterable } from \"../sources/javascript\";\r\nimport { isMap, Map } from \"../sources/map\";\r\nimport { MutableMap } from \"../sources/mutableMap\";\r\nimport { NotFoundError } from \"../sources/notFoundError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"map.ts\", () =>\r\n {\r\n runner.testType(\"Map<TKey,TValue>\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const map: MutableMap<number,string> = Map.create();\r\n test.assertSame(map.getCount().await(), 0);\r\n });\r\n\r\n mapTests(runner, Map.create);\r\n });\r\n });\r\n}\r\n\r\nexport function mapTests(runner: TestRunner, creator: () => Map<number,string>): void\r\n{\r\n runner.testType(\"Map<TKey,TValue>\", () =>\r\n {\r\n runner.testFunction(\"creator()\", (test: Test) =>\r\n {\r\n test.assertNotUndefinedAndNotNull(creator);\r\n \r\n const map: Map<number,string> = creator();\r\n test.assertNotUndefinedAndNotNull(map);\r\n test.assertEqual(map.getCount().await(), 0);\r\n test.assertTrue(isMap(map));\r\n });\r\n\r\n runner.testFunction(\"containsKey(TKey)\", () =>\r\n {\r\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\r\n {\r\n const map: Map<number,string> = creator();\r\n\r\n test.assertFalse(map.containsKey(50).await());\r\n });\r\n });\r\n\r\n runner.testFunction(\"get(TKey)\", () =>\r\n {\r\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\r\n {\r\n const map: Map<number,string> = creator();\r\n\r\n test.assertThrows(() => map.get(1).await(),\r\n new NotFoundError(\r\n \"The key 1 was not found in the map.\"));\r\n test.assertEqual(map.getCount().await(), 0);\r\n });\r\n });\r\n\r\n runner.testFunction(\"toString()\", () =>\r\n {\r\n function toStringTest(map: Map<number,string>, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(map)}`, (test: Test) =>\r\n {\r\n test.assertEqual(map.toString(), expected);\r\n });\r\n }\r\n\r\n toStringTest(creator(), \"{}\");\r\n });\r\n\r\n runner.testFunction(\"iterateKeys()\", () =>\r\n {\r\n function iterateKeysTests(map: Map<number,string>, expected: JavascriptIterable<number>): void\r\n {\r\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\r\n {\r\n const keyIterator: Iterator<number> = map.iterateKeys();\r\n test.assertEqual(await keyIterator.toArray(), [...expected]);\r\n });\r\n }\r\n\r\n iterateKeysTests(creator(), []);\r\n });\r\n\r\n runner.testFunction(\"iterateValues()\", () =>\r\n {\r\n function iterateValuesTests(map: Map<number,string>, expected: JavascriptIterable<string>): void\r\n {\r\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\r\n {\r\n const valueIterator: Iterator<string> = map.iterateValues();\r\n test.assertEqual(await valueIterator.toArray(), [...expected]);\r\n });\r\n }\r\n\r\n iterateValuesTests(creator(), []);\r\n });\r\n });\r\n}","import { JavascriptIterable } from \"../sources/javascript\";\r\nimport { List } from \"../sources/list\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { isIterable } from \"../sources/types\";\r\nimport { indexableTests } from \"./IndexableTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"list.ts\", () =>\r\n {\r\n runner.testType(\"List<T>\", () =>\r\n {\r\n indexableTests(runner, List.create);\r\n\r\n runner.testFunction(\"create(T[]|Iterable<T>|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create();\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertEqual(list.toString(), \"[]\");\r\n test.assertEqual(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create(undefined);\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertEqual(list.toString(), \"[]\");\r\n test.assertEqual(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with empty array\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create<number>([]);\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertSame(list.toString(), \"[]\");\r\n test.assertSame(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with non-empty array\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create([1, 2, 3]);\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), [1, 2, 3]);\r\n test.assertSame(list.toString(), \"[1,2,3]\");\r\n test.assertSame(list.getCount().await(), 3);\r\n });\r\n\r\n runner.test(\"with empty Iterable<T>\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create(List.create());\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertSame(list.toString(), \"[]\");\r\n test.assertSame(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with non-empty Iterable<T>\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create(List.create([1, 2, 3]));\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), [1, 2, 3]);\r\n test.assertTrue(isIterable(list));\r\n test.assertSame(list.toString(), \"[1,2,3]\");\r\n test.assertSame(list.getCount().await(), 3);\r\n });\r\n });\r\n\r\n runner.testFunction(\"set(number,T)\", () =>\r\n {\r\n function setErrorTest(list: List<number>, index: number, value: number, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.set(index, value), expectedError);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n setErrorTest(List.create(), -1, 5, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ));\r\n setErrorTest(List.create(), 0, 5, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ));\r\n setErrorTest(List.create(), 1, 5, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n setErrorTest(List.create([1]), -1, 5, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n setErrorTest(List.create([1]), 1, 5, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n\r\n function setTest(list: List<number>, index: number, value: number, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const setResult: List<number> = list.set(index, value);\r\n test.assertSame(list, setResult);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n setTest(List.create([1]), 0, 5, [5]);\r\n setTest(List.create([1, 2]), 0, 5, [5, 2]);\r\n setTest(List.create([1, 2]), 1, 5, [1, 5]);\r\n });\r\n\r\n runner.testFunction(\"get(number)\", () =>\r\n {\r\n function getErrorTest(list: List<number>, index: number, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.get(index), expectedError);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n getErrorTest(List.create(), -1, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n getErrorTest(List.create(), 0, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n getErrorTest(List.create(), 1, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n getErrorTest(List.create([1]), -1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n getErrorTest(List.create([1]), 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n\r\n function getTest(list: List<number>, index: number, expected: number): void\r\n {\r\n runner.test(`with ${runner.andList([list, index])}`, (test: Test) =>\r\n {\r\n test.assertSame(list.get(index).await(), expected);\r\n });\r\n }\r\n\r\n getTest(List.create([1]), 0, 1);\r\n getTest(List.create([1, 2]), 0, 1);\r\n getTest(List.create([1, 2]), 1, 2);\r\n });\r\n\r\n runner.testFunction(\"add(T)\", () =>\r\n {\r\n function addTest(list: List<number>, value: number, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, value])}`, (test: Test) =>\r\n {\r\n const addResult: List<number> = list.add(value);\r\n test.assertSame(addResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n addTest(List.create(), 1, [1]);\r\n addTest(List.create([1]), 2, [1, 2]);\r\n addTest(List.create([1, 2]), 3, [1, 2, 3]);\r\n });\r\n\r\n runner.testFunction(\"addAll(T)\", () =>\r\n {\r\n function addAllTest(list: List<number>, values: JavascriptIterable<number>, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, values])}`, (test: Test) =>\r\n {\r\n const addResult: List<number> = list.addAll(values);\r\n test.assertSame(addResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n addAllTest(List.create(), [1], [1]);\r\n addAllTest(List.create([1]), [2], [1, 2]);\r\n addAllTest(List.create([1, 2]), [3], [1, 2, 3]);\r\n addAllTest(List.create(), [1, 2], [1, 2]);\r\n addAllTest(List.create([1]), [2, 3], [1, 2, 3]);\r\n addAllTest(List.create([1, 2]), [3, 4], [1, 2, 3, 4]);\r\n\r\n addAllTest(List.create(), List.create([1]), [1]);\r\n addAllTest(List.create([1]), List.create([2]), [1, 2]);\r\n addAllTest(List.create([1, 2]), List.create([3]), [1, 2, 3]);\r\n addAllTest(List.create(), List.create([1, 2]), [1, 2]);\r\n addAllTest(List.create([1]), List.create([2, 3]), [1, 2, 3]);\r\n addAllTest(List.create([1, 2]), List.create([3, 4]), [1, 2, 3, 4]);\r\n });\r\n\r\n runner.testFunction(\"insert(number,T)\", () =>\r\n {\r\n function insertErrorTest(list: List<number>, index: number, value: number, expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.insert(index, value), expected);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n insertErrorTest(List.create(), -1, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n insertErrorTest(List.create(), 1, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n insertErrorTest(List.create([1]), -1, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\"\r\n ));\r\n insertErrorTest(List.create([1]), 2, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\"\r\n ));\r\n\r\n function insertTest(list: List<number>, index: number, value: number, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const insertResult: List<number> = list.insert(index, value);\r\n test.assertSame(insertResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n insertTest(List.create(), 0, 1, [1]);\r\n insertTest(List.create([2]), 0, 1, [1, 2]);\r\n insertTest(List.create([1]), 1, 2, [1, 2]);\r\n insertTest(List.create([2, 3]), 0, 1, [1, 2, 3]);\r\n insertTest(List.create([1, 3]), 1, 2, [1, 2, 3]);\r\n insertTest(List.create([1, 2]), 2, 3, [1, 2, 3]);\r\n });\r\n\r\n runner.testFunction(\"insertAll(number,T)\", () =>\r\n {\r\n function insertAllErrorTest(list: List<number>, index: number, values: number[] | Iterable<number>, expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, values])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.insertAll(index, values), expected);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n insertAllErrorTest(List.create(), -1, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n insertAllErrorTest(List.create(), 1, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n insertAllErrorTest(List.create([1]), -1, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\"\r\n ));\r\n insertAllErrorTest(List.create([1]), 2, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\",\r\n ));\r\n\r\n function insertAllTest(list: List<number>, index: number, values: JavascriptIterable<number>, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, values])}`, (test: Test) =>\r\n {\r\n const insertResult: List<number> = list.insertAll(index, values);\r\n test.assertSame(insertResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n insertAllTest(List.create(), 0, [], []);\r\n insertAllTest(List.create(), 0, [1], [1]);\r\n insertAllTest(List.create([2]), 0, [1], [1, 2]);\r\n insertAllTest(List.create([1]), 1, [2], [1, 2]);\r\n insertAllTest(List.create([2, 3]), 0, [1], [1, 2, 3]);\r\n insertAllTest(List.create([1, 3]), 1, [2], [1, 2, 3]);\r\n insertAllTest(List.create([1, 2]), 2, [3], [1, 2, 3]);\r\n insertAllTest(List.create([3]), 0, [1, 2], [1, 2, 3]);\r\n insertAllTest(List.create([1]), 1, [2, 3], [1, 2, 3]);\r\n insertAllTest(List.create([1, 4]), 1, [2, 3], [1, 2, 3, 4]);\r\n\r\n insertAllTest(List.create(), 0, List.create(), []);\r\n insertAllTest(List.create(), 0, List.create([1]), [1]);\r\n insertAllTest(List.create([2]), 0, List.create([1]), [1, 2]);\r\n insertAllTest(List.create([1]), 1, List.create([2]), [1, 2]);\r\n insertAllTest(List.create([2, 3]), 0, List.create([1]), [1, 2, 3]);\r\n insertAllTest(List.create([1, 3]), 1, List.create([2]), [1, 2, 3]);\r\n insertAllTest(List.create([1, 2]), 2, List.create([3]), [1, 2, 3]);\r\n insertAllTest(List.create([3]), 0, List.create([1, 2]), [1, 2, 3]);\r\n insertAllTest(List.create([1]), 1, List.create([2, 3]), [1, 2, 3]);\r\n insertAllTest(List.create([1, 4]), 1, List.create([2, 3]), [1, 2, 3, 4]);\r\n });\r\n });\r\n });\r\n}\r\n","import { PreConditionError } from \"../sources\";\nimport { Indexable } from \"../sources/Indexable\";\nimport { iterableTests } from \"./iterableTests\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function indexableTests<T>(runner: TestRunner, creator: () => Indexable<T>): void\n{\n runner.testType(\"Indexable<T>\", () =>\n {\n iterableTests(runner, creator);\n\n runner.testFunction(\"get()\", () =>\n {\n function getErrorTest(testName: string, index: number, expected: Error): void\n {\n runner.test(testName, (test: Test) =>\n {\n const indexable: Indexable<T> = creator();\n test.assertThrows(() => indexable.get(index).await(), expected);\n });\n }\n\n getErrorTest(\"with undefined\", undefined!, new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 1\",\n \"Actual: 0\",\n ));\n getErrorTest(\"with null\", null!, new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 1\",\n \"Actual: 0\",\n ));\n getErrorTest(\"with negative\", -1!, new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 1\",\n \"Actual: 0\",\n ));\n });\n });\n}\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"Indexable.ts\", () =>\n {\n runner.testType(\"Indexable<T>\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with no arguments\", (test: Test) =>\n {\n const indexable: Indexable<number> = Indexable.create();\n test.assertNotUndefinedAndNotNull(indexable);\n test.assertEqual(0, indexable.getCount().await());\n });\n\n runner.test(\"with empty array\", (test: Test) =>\n {\n const indexable: Indexable<number> = Indexable.create([]);\n test.assertNotUndefinedAndNotNull(indexable);\n test.assertEqual(0, indexable.getCount().await());\n });\n\n runner.test(\"with non-empty array\", (test: Test) =>\n {\n const indexable: Indexable<number> = Indexable.create([1, 2, 3]);\n test.assertNotUndefinedAndNotNull(indexable);\n test.assertEqual(3, indexable.getCount().await());\n for (let i = 0; i < 3; i++)\n {\n test.assertEqual(i + 1, indexable.get(i).await());\n }\n });\n });\n });\n });\n}","import { Iterator } from \"../sources/iterator\";\r\nimport { MapIterator } from \"../sources/mapIterator\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"mapIterator.ts\", () =>\r\n {\r\n runner.testType(\"MapIterator<TInput,TOutput>\", () =>\r\n {\r\n runner.testFunction(\"create(Iterator<TInput>,(TInput)=>TOutput)\", () =>\r\n {\r\n function createErrorTest<TInput,TOutput>(testName: string, innerIterator: Iterator<TInput>, mapping: (value: TInput) => TOutput, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n test.assertThrows(() => MapIterator.create(innerIterator, mapping), expected);\r\n });\r\n }\r\n \r\n createErrorTest(\r\n \"with undefined inputIterator\",\r\n undefined!,\r\n (value: number) => value.toString(),\r\n new PreConditionError(\r\n \"Expression: inputIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(\r\n \"with null inputIterator\",\r\n null!,\r\n (value: number) => value.toString(),\r\n new PreConditionError(\r\n \"Expression: inputIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n \r\n runner.test(\"with valid values\", (test: Test) =>\r\n {\r\n const inputIterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n test.assertFalse(inputIterator.hasStarted());\r\n test.assertFalse(inputIterator.hasCurrent());\r\n \r\n const iterator: MapIterator<number,string> = MapIterator.create(inputIterator, (value: number) => value.toString());\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n });\r\n}","\r\n\r\nimport { EqualFunctions } from \"../sources/equalFunctions\";\r\nimport { MutableCondition } from \"../sources/mutableCondition\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { ToStringFunctions } from \"../sources/toStringFunctions\";\r\nimport { isNumber, isString } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"mutableCondition.ts\", () =>\r\n {\r\n runner.testType(\"MutableCondition\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertNotUndefinedAndNotNull(mc);\r\n });\r\n\r\n runner.testFunction(\"setToStringFunctions()\", () =>\r\n {\r\n function setToStringFunctionsErrorTest(testName: string, toStringFunctions: ToStringFunctions, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.setToStringFunctions(toStringFunctions), expected);\r\n });\r\n }\r\n\r\n setToStringFunctionsErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: toStringFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n setToStringFunctionsErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: toStringFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with valid value\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertEqual(`\"hello\"`, mc.toValueString(\"hello\"));\r\n\r\n mc.setToStringFunctions(\r\n ToStringFunctions.create()\r\n .add(isString, (value: string) => `---${value}---`),\r\n );\r\n test.assertEqual(`---hello---`, mc.toValueString(\"hello\"));\r\n });\r\n });\r\n\r\n runner.testFunction(\"setEqualFunctions()\", () =>\r\n {\r\n function setEqualFunctionsErrorTest(testName: string, equalFunctions: EqualFunctions, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.setEqualFunctions(equalFunctions), expected);\r\n });\r\n }\r\n\r\n setEqualFunctionsErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: equalFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n setEqualFunctionsErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: equalFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with valid value\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertFalse(mc.areEqual(3, 5));\r\n test.assertFalse(mc.areEqual(3, 4));\r\n test.assertTrue(mc.areEqual(4, 4));\r\n\r\n mc.setEqualFunctions(\r\n EqualFunctions.create()\r\n .add((left: unknown, right: unknown) =>\r\n {\r\n return isNumber(left) && isNumber(right)\r\n ? left % 2 === right % 2\r\n : undefined;\r\n })\r\n )\r\n\r\n test.assertTrue(mc.areEqual(3, 5));\r\n test.assertFalse(mc.areEqual(3, 4));\r\n test.assertTrue(mc.areEqual(4, 4));\r\n });\r\n });\r\n\r\n runner.testFunction(\"setCreateErrorFunction()\", () =>\r\n {\r\n function setCreateErrorFunctionErrorTest(testName: string, createErrorFunction: ((message: string) => Error), expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.setCreateErrorFunction(createErrorFunction), expected);\r\n });\r\n }\r\n\r\n setCreateErrorFunctionErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: createErrorFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n setCreateErrorFunctionErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: createErrorFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with valid function\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.assertEqual(1, 2));\r\n\r\n mc.setCreateErrorFunction((message: string) =>\r\n {\r\n return Error(`fake '${message}' fake`);\r\n });\r\n\r\n mc.setEqualFunctions(\r\n EqualFunctions.create()\r\n .add((left: unknown, right: unknown) =>\r\n {\r\n return isNumber(left) && isNumber(right)\r\n ? left % 2 === right % 2\r\n : undefined;\r\n })\r\n )\r\n\r\n test.assertTrue(mc.areEqual(3, 5));\r\n test.assertFalse(mc.areEqual(3, 4));\r\n test.assertTrue(mc.areEqual(4, 4));\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertUndefined()\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n mc.assertUndefined(undefined);\r\n });\r\n\r\n function assertUndefinedErrorTest(value: unknown, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.assertUndefined(value), expected);\r\n });\r\n }\r\n\r\n assertUndefinedErrorTest(null, new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: null\",\r\n ])));\r\n assertUndefinedErrorTest(false, new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: false\",\r\n ])));\r\n assertUndefinedErrorTest(\"abc\", new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: \\\"abc\\\"\",\r\n ])));\r\n });\r\n\r\n runner.testFunction(\"assertNotUndefined()\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(\r\n () => mc.assertNotUndefined(undefined),\r\n new Error(join(\"\\n\", [\r\n \"Expected: not undefined\",\r\n \"Actual: undefined\",\r\n ])),\r\n );\r\n });\r\n\r\n function assertNotUndefinedTest(value: unknown): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n mc.assertNotUndefined(value);\r\n });\r\n }\r\n\r\n assertNotUndefinedTest(null);\r\n assertNotUndefinedTest(\"\");\r\n assertNotUndefinedTest(false);\r\n });\r\n\r\n runner.testFunction(\"areEqual()\", () =>\r\n {\r\n function areEqualTest(left: unknown, right: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertEqual(mc.areEqual(left, right), expected);\r\n });\r\n }\r\n\r\n areEqualTest(undefined, undefined, true);\r\n areEqualTest(5, 5, true);\r\n areEqualTest(true, true, true);\r\n areEqualTest({}, {}, true);\r\n\r\n areEqualTest(undefined, \"\", false);\r\n areEqualTest(1, 2, false);\r\n areEqualTest(false, true, false);\r\n areEqualTest({a:1}, {a:2}, false);\r\n });\r\n\r\n runner.testFunction(\"toValueString()\", () =>\r\n {\r\n function toValueStringTest(value: unknown, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertEqual(expected, mc.toValueString(value));\r\n });\r\n }\r\n\r\n toValueStringTest(undefined, \"undefined\");\r\n toValueStringTest(null, \"null\");\r\n toValueStringTest(0, \"0\");\r\n toValueStringTest(\"abc\", `\"abc\"`);\r\n toValueStringTest({}, \"{}\");\r\n toValueStringTest({a:\"a\"}, `{\"a\":\"a\"}`);\r\n });\r\n\r\n runner.testFunction(\"createError()\", () =>\r\n {\r\n runner.test(\"with all properties\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n const error: Error = mc.createError({\r\n actual: \"fake-actual\",\r\n expected: \"fake-expected\",\r\n expression: \"fake-expression\",\r\n message: \"fake-message\",\r\n });\r\n test.assertEqual(error, new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: fake-expected\",\r\n \"Actual: fake-actual\",\r\n ])));\r\n });\r\n });\r\n });\r\n });\r\n}","import { Iterator } from \"../sources/iterator\";\nimport { JavascriptIterable } from \"../sources/javascript\";\nimport { isMap } from \"../sources/map\";\nimport { MutableMap } from \"../sources/mutableMap\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { mapTests } from \"./mapTests\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"mutableMap.ts\", () =>\n {\n runner.testType(\"MutableMap<TKey,TValue>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const map: MutableMap<number,string> = MutableMap.create();\n test.assertSame(map.getCount().await(), 0);\n });\n\n mutableMapTests(runner, MutableMap.create);\n });\n });\n}\n\nexport function mutableMapTests(runner: TestRunner, creator: () => MutableMap<number,string>): void\n{\n runner.testType(\"MutableMap<TKey,TValue>\", () =>\n {\n mapTests(runner, creator);\n\n runner.testFunction(\"creator()\", (test: Test) =>\n {\n test.assertNotUndefinedAndNotNull(creator);\n \n const map: MutableMap<number,string> = creator();\n test.assertNotUndefinedAndNotNull(map);\n test.assertEqual(map.getCount().await(), 0);\n test.assertTrue(isMap(map));\n });\n\n runner.testFunction(\"containsKey(TKey)\", () =>\n {\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator();\n\n test.assertFalse(map.containsKey(50).await());\n });\n\n runner.test(\"when it contains the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator().set(50, \"fifty\");\n\n test.assertTrue(map.containsKey(50).await());\n });\n });\n\n runner.testFunction(\"get(TKey)\", () =>\n {\n runner.test(\"when it contains the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator().set(1, \"one\");\n test.assertEqual(map.getCount().await(), 1);\n test.assertEqual(map.get(1).await(), \"one\");\n test.assertEqual(map.getCount().await(), 1);\n });\n\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator();\n\n test.assertThrows(() => map.get(1).await(),\n new NotFoundError(\n \"The key 1 was not found in the map.\"));\n test.assertEqual(map.getCount().await(), 0);\n });\n });\n\n runner.testFunction(\"set(TKey,TValue)\", () =>\n {\n function setTest(map: MutableMap<number,string>, key: number, value: string): void\n {\n runner.test(`with ${runner.andList([map, key, value])}`, (test: Test) =>\n {\n const setResult: MutableMap<number,string> = map.set(key, value);\n test.assertSame(setResult, map);\n test.assertSame(map.get(key).await(), value);\n });\n }\n\n setTest(creator(), 0, \"zero\");\n setTest(creator(), 1, \"1\");\n setTest(creator(), -1, \"negative one\");\n\n setTest(creator(), undefined!, \"hello\");\n setTest(creator(), null!, \"oops\");\n setTest(creator(), 10, undefined!);\n setTest(creator(), 11, null!);\n\n setTest(creator().set(1, \"1\"), 1, \"one\");\n });\n\n runner.testFunction(\"toString()\", () =>\n {\n function toStringTest(map: MutableMap<number,string>, expected: string): void\n {\n runner.test(`with ${runner.toString(map)}`, (test: Test) =>\n {\n test.assertEqual(map.toString(), expected);\n });\n }\n\n toStringTest(creator(), \"{}\");\n toStringTest(creator().set(1, \"one\"), `{1:\"one\"}`);\n toStringTest(creator().set(2, \"2\").set(1, \"one\"), `{2:\"2\",1:\"one\"}`);\n });\n\n runner.testFunction(\"iterateKeys()\", () =>\n {\n function iterateKeysTests(map: MutableMap<number,string>, expected: JavascriptIterable<number>): void\n {\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\n {\n const keyIterator: Iterator<number> = map.iterateKeys();\n test.assertEqual(await keyIterator.toArray(), [...expected]);\n });\n }\n\n iterateKeysTests(creator(), []);\n iterateKeysTests(creator().set(5, \"five\"), [5]);\n iterateKeysTests(creator().set(5, \"five\").set(6, \"six\"), [5, 6]);\n iterateKeysTests(creator().set(5, \"5\").set(6, \"6\").set(7, \"7\"), [5, 6, 7]);\n });\n\n runner.testFunction(\"iterateValues()\", () =>\n {\n function iterateValuesTests(map: MutableMap<number,string>, expected: JavascriptIterable<string>): void\n {\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\n {\n const valueIterator: Iterator<string> = map.iterateValues();\n test.assertEqual(await valueIterator.toArray(), [...expected]);\n });\n }\n\n iterateValuesTests(creator(), []);\n iterateValuesTests(creator().set(5, \"five\"), [\"five\"]);\n iterateValuesTests(creator().set(5, \"five\").set(6, \"six\"), [\"five\", \"six\"]);\n iterateValuesTests(creator().set(5, \"5\").set(6, \"6\").set(7, \"7\"), [\"5\", \"6\", \"7\"]);\n });\n });\n}","import { NotFoundError } from \"../sources/notFoundError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"notFoundError.ts\", () =>\r\n {\r\n runner.testType(\"NotFoundError\", () =>\r\n {\r\n runner.testFunction(\"constructor(...string[])\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const error: NotFoundError = new NotFoundError();\r\n test.assertNotUndefinedAndNotNull(error);\r\n test.assertEqual(error.name, \"Error\");\r\n test.assertEqual(error.message, \"\");\r\n test.assertNotUndefinedAndNotNull(error.stack);\r\n });\r\n });\r\n });\r\n });\r\n}\r\n","import { PostConditionError } from \"../sources/postConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"postConditionError.ts\", () =>\r\n {\r\n runner.testType(PostConditionError.name, () =>\r\n {\r\n runner.testFunction(\"constructor(string|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const error: PostConditionError = new PostConditionError();\r\n test.assertNotUndefinedAndNotNull(error);\r\n test.assertEqual(error.name, \"Error\");\r\n test.assertEqual(error.message, \"\");\r\n test.assertNotUndefinedAndNotNull(error.stack);\r\n });\r\n });\r\n });\r\n });\r\n}\r\n","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"preConditionError.ts\", () =>\r\n {\r\n runner.testType(\"PreConditionError\", () =>\r\n {\r\n runner.testFunction(\"constructor(string|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const error: PreConditionError = new PreConditionError();\r\n test.assertNotUndefinedAndNotNull(error);\r\n test.assertEqual(error.name, \"Error\");\r\n test.assertEqual(error.message, \"\");\r\n test.assertNotUndefinedAndNotNull(error.stack);\r\n });\r\n });\r\n });\r\n });\r\n}","import { PromiseAsyncResult } from \"../sources/promiseAsyncResult\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"promiseAsyncResult.ts\", () =>\n {\n runner.testType(\"PromiseAsyncResult<T>\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest<T>(testName: string, promise: Promise<T>, expected: Error): void\n {\n runner.test(testName, (test: Test) =>\n {\n test.assertThrows(() => PromiseAsyncResult.create(promise), expected);\n });\n }\n\n createErrorTest(\"with undefined\", undefined!, new PreConditionError(\n \"Expression: action or promise\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(\"with null\", null!, new PreConditionError(\n \"Expression: action or promise\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with Promise\", async (test: Test) =>\n {\n const result: PromiseAsyncResult<number> = PromiseAsyncResult.create(Promise.resolve(5));\n test.assertNotUndefinedAndNotNull(result);\n\n const value: number = await result;\n test.assertEqual(5, value);\n });\n });\n\n runner.testFunction(\"then()\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n const thenResult: PromiseAsyncResult<string> = parentResult.then(() => \"hello\");\n await test.assertThrowsAsync(thenResult, new Error(\"abc\"));\n });\n\n runner.test(\"with error parent and thenFunction with side-effects\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const thenResult: PromiseAsyncResult<string> = parentResult.then(() => { counter++; return \"hello\"; });\n test.assertEqual(0, counter);\n await test.assertThrowsAsync(thenResult, new Error(\"abc\"));\n test.assertEqual(0, counter, \"counter should still be 0 because the thenFunction shouldn't be invoked.\");\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n const thenResult: PromiseAsyncResult<string> = parentResult.then(() => \"hello\");\n test.assertEqual(\"hello\", await thenResult);\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n const thenResult: PromiseAsyncResult<string> = parentResult.then((argument: number) => (argument + 1).toString());\n test.assertEqual(\"2\", await thenResult);\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value with side-effects\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n let counter: number = 0;\n const thenResult: PromiseAsyncResult<string> = parentResult.then((argument: number) => { counter++; return (argument + 1).toString(); });\n test.assertEqual(0, counter);\n\n await PromiseAsyncResult.yield();\n test.assertEqual(1, counter);\n\n test.assertEqual(\"2\", await thenResult);\n test.assertEqual(1, counter);\n });\n\n runner.test(\"with successful parent and thenFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(10);\n let counter: number = 0;\n const thenResult: PromiseAsyncResult<string> = parentResult.then((argument: number) =>\n {\n counter++;\n throw new Error(`arg: ${argument}, ${counter}`);\n });\n test.assertEqual(counter, 0);\n\n await PromiseAsyncResult.yield();\n test.assertEqual(counter, 1);\n\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(thenResult, new Error(\"arg: 10, 1\"));\n test.assertEqual(counter, 1);\n }\n });\n });\n\n runner.testFunction(\"onValue()\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(onValueResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(10);\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(10, await onValueResult);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(2);\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue((argument: number) => { counter += argument; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await onValueResult, 2);\n test.assertSame(counter, 2);\n }\n });\n\n runner.test(\"with successful parent and onValueFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(2);\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue((argument: number) =>\n {\n counter += argument;\n throw new Error(`argument: ${argument}`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(onValueResult, new Error(\"argument: 2\"));\n test.assertSame(counter, 2);\n }\n });\n });\n\n runner.testFunction(\"catch()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.catch(undefined!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.catch(null!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => 20);\n test.assertSame(await catchResult, 20);\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(() => { counter++; return 21; });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.catch((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n return 21;\n });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with error parent and catchFunction with side-effects\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => { counter++; return 21; });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => 5);\n test.assertSame(await catchResult, 5);\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, (error: Error) => error.message.length);\n test.assertSame(await catchResult, 3);\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(PreConditionError, () => 20);\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(RangeError, () => 20);\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n });\n\n runner.test(\"with catchFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => { throw new TypeError(\"abc\"); });\n await test.assertThrowsAsync(catchResult, new TypeError(\"abc\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => 2);\n test.assertSame(await catchResult, 1);\n });\n });\n\n runner.testFunction(\"onError()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.onError(undefined!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.onError(null!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(() => { counter++; });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, (error: Error) => { counter += error.message.length; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 3);\n }\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(PreConditionError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(RangeError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with onErrorFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, () => { counter++; throw new Error(\"abc\"); });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 1);\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testFunction(\"convertError()\", () =>\n {\n runner.test(\"with undefined convertErrorFunction\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(undefined!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null convertErrorFunction\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(null!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n throw new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(`abc - def`));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(TypeError, (error: TypeError) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(PreConditionError, () =>\n {\n counter++;\n throw new Error(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new TypeError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testFunction(\"finally()\", () =>\n {\n runner.test(\"with successful parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const finallyResult: PromiseAsyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await finallyResult, 5);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const finallyResult: PromiseAsyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"oops!\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new RangeError(\"oops!\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const finallyResult: PromiseAsyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new RangeError(\"def\"));\n test.assertSame(counter, 1);\n }\n });\n });\n });\n });\n}","import { Property } from \"../sources/property\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"property.ts\", () =>\r\n {\r\n runner.testType(\"Property<T>\", () =>\r\n {\r\n runner.testFunction(\"create()\", () =>\r\n {\r\n runner.test(\"with initialValue\", (test: Test) =>\r\n {\r\n const property: Property<number> = Property.create(5);\r\n test.assertEqual(5, property.getValue());\r\n \r\n const setResult: Property<number> = property.setValue(20);\r\n test.assertSame(property, setResult);\r\n test.assertEqual(20, property.getValue());\r\n \r\n test.assertEqual(\"20\", property.toString());\r\n });\r\n\r\n runner.test(\"with getter and setter functions\", (test: Test) =>\r\n {\r\n let propertyValue: string = \"hello\";\r\n\r\n const property: Property<string> = Property.create(\r\n () => propertyValue,\r\n (value: string) => { propertyValue = value; },\r\n );\r\n test.assertEqual(\"hello\", property.getValue());\r\n \r\n const setResult: Property<string> = property.setValue(\"there\");\r\n test.assertSame(property, setResult);\r\n test.assertEqual(\"there\", property.getValue());\r\n test.assertEqual(\"there\", propertyValue);\r\n \r\n test.assertEqual(\"there\", property.toString());\r\n });\r\n\r\n runner.test(\"with options\", (test: Test) =>\r\n {\r\n let propertyValue: string = \"hello\";\r\n\r\n const property: Property<string> = Property.create({\r\n getter: () => propertyValue,\r\n setter: (value: string) => { propertyValue = value; },\r\n });\r\n test.assertEqual(\"hello\", property.getValue());\r\n \r\n const setResult: Property<string> = property.setValue(\"there\");\r\n test.assertSame(property, setResult);\r\n test.assertEqual(\"there\", property.getValue());\r\n test.assertEqual(\"there\", propertyValue);\r\n \r\n test.assertEqual(\"there\", property.toString());\r\n });\r\n });\r\n });\r\n });\r\n}","import { EmptyError } from \"../sources/emptyError\";\nimport { ListQueue } from \"../sources/listQueue\";\nimport { Queue } from \"../sources/queue\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"queue.ts\", () =>\n {\n runner.testType(\"Queue<T>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const queue: ListQueue<number> = Queue.create();\n test.assertNotUndefinedAndNotNull(queue);\n test.assertFalse(queue.any().await());\n test.assertThrows(() => queue.remove().await(), new EmptyError());\n });\n\n runner.testFunction(\"add()\", (test: Test) =>\n {\n const queue: ListQueue<number> = Queue.create();\n queue.add(20).await();\n test.assertEqual(20, queue.remove().await());\n });\n });\n });\n}","import { FetchHttpClient } from \"../sources/fetchHttpClient\";\r\nimport { FetchHttpIncomingResponse } from \"../sources/fetchHttpResponse\";\r\nimport { NodeJSHttpServer as NodeJSHttpServer } from \"../sources/nodeJSHttpServer\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"nodeJSHttpServer.ts\", () =>\r\n {\r\n runner.testType(\"NodeJSHttpServer\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n test.assertNotUndefinedAndNotNull(httpServer);\r\n test.assertFalse(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n });\r\n\r\n runner.testFunction(\"dispose()\", async (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n\r\n test.assertTrue(await httpServer.dispose());\r\n test.assertTrue(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertFalse(await httpServer.dispose());\r\n test.assertTrue(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n }\r\n });\r\n\r\n runner.testFunction(\"start()\", () =>\r\n {\r\n runner.test(\"when disposed\", async (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n test.assertTrue(await httpServer.dispose());\r\n\r\n test.assertThrows(() => httpServer.start(3000), new PreConditionError(\r\n \"Expression: this.isDisposed()\",\r\n \"Expected: false\",\r\n \"Actual: true\",\r\n ));\r\n test.assertTrue(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n });\r\n\r\n runner.test(\"simple scenario\", async (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n\r\n httpServer.start(3000);\r\n try\r\n {\r\n const httpClient: FetchHttpClient = FetchHttpClient.create();\r\n const response: FetchHttpIncomingResponse = await httpClient.sendGetRequest(\"http://localhost:3000\");\r\n\r\n test.assertNotUndefinedAndNotNull(response);\r\n test.assertEqual(200, response.getStatusCode());\r\n }\r\n finally\r\n {\r\n await httpServer.dispose();\r\n }\r\n });\r\n });\r\n });\r\n });\r\n}","import { HttpClient } from \"../sources/httpClient\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { RecreationDotGovClient, RecreationDotGovDivisionAvailability, RecreationDotGovDivisionAvailabilityJson, RecreationDotGovError, RecreationDotGovPermitItineraryJson } from \"../sources/recreationDotGovClient\";\nimport { WonderlandTrailClient, WonderlandTrailLocations } from \"../sources/wonderlandTrailClient\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { hasNetworkAccess } from \"./tests\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"recreationDotGovClient.ts\", () =>\n {\n runner.testType(\"RecreationDotGovClient\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest(httpClient: HttpClient, expected: Error): void\n {\n runner.test(`with ${runner.toString(httpClient)}`, (test: Test) =>\n {\n test.assertThrows(() => RecreationDotGovClient.create(httpClient), expected);\n });\n }\n\n createErrorTest(undefined!, new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(null!, new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with default HttpClient\", (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const recreationDotGovClient: RecreationDotGovClient = RecreationDotGovClient.create(httpClient);\n test.assertNotUndefinedAndNotNull(recreationDotGovClient);\n });\n });\n\n runner.testFunction(\"getPermitItinerary()\", () =>\n {\n function getPermitItineraryErrorTest(itineraryId: string, expected: Error): void\n {\n runner.test(`with ${runner.toString(itineraryId)}`, async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n await test.assertThrowsAsync(async () => await client.getPermitItinerary(itineraryId), expected);\n });\n }\n\n getPermitItineraryErrorTest(undefined!, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getPermitItineraryErrorTest(null!, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n getPermitItineraryErrorTest(\"\", new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not empty\",\n \"Actual: \\\"\\\"\",\n ));\n\n runner.test(\"with invalid permit itinerary id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n await test.assertThrowsAsync(\n async () => await client.getPermitItinerary(\"oopsie!\"),\n new RecreationDotGovError(\n `No permit itinerary found for id: \"oopsie!\"`,\n ),\n );\n });\n\n runner.test(\"with valid permit itinerary id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n const result: RecreationDotGovPermitItineraryJson = await client.getPermitItinerary(WonderlandTrailClient.permitItineraryId);\n test.assertNotUndefinedAndNotNull(result);\n test.assertEqual(result.id, WonderlandTrailClient.permitItineraryId);\n test.assertEqual(result.name, \"Mount Rainier National Park Wilderness and Climbing Permits\");\n test.assertNotUndefinedAndNotNull(result.divisions);\n test.assertTrue(Object.keys(result.divisions).length > 0);\n for (const division of Object.values(result.divisions))\n {\n test.assertNotUndefinedAndNotNull(division.id);\n test.assertNotUndefinedAndNotNull(division.district);\n test.assertNotUndefinedAndNotNull(division.name);\n test.assertNotUndefinedAndNotNull(division.type);\n }\n });\n });\n\n runner.testFunction(\"getDivisionAvailability()\", () =>\n {\n function getDivisionAvailabilityErrorTest(itineraryId: string, divisionId: string, month: number, year: number, expected: Error): void\n {\n runner.test(`with ${runner.andList([itineraryId, divisionId, month, year])}`, async (test: Test) =>\n {\n\n });\n }\n\n getDivisionAvailabilityErrorTest(undefined!, \"fake-division-id\", 5, 2026, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getDivisionAvailabilityErrorTest(null!, \"fake-division-id\", 5, 2026, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n getDivisionAvailabilityErrorTest(\"\", \"fake-division-id\", 5, 2026, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not empty\",\n \"Actual: \\\"\\\"\",\n ));\n getDivisionAvailabilityErrorTest(\"oopsie!\", \"fake-division-id\", 5, 2026, new RecreationDotGovError(\n `No permit itinerary found for id: \"oopsie!\"`,\n ));\n\n runner.test(\"with invalid division id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n const itineraryId: string = WonderlandTrailClient.permitItineraryId;\n const divisionId: string = \"fake-division-id\";\n const month: number = 5;\n const year: number = 2026;\n const earlyAccessPermitLotteryId: string = \"\";\n \n const response: RecreationDotGovDivisionAvailability = await client.getDivisionAvailability(itineraryId, divisionId, month, year, earlyAccessPermitLotteryId);\n\n test.assertNotUndefinedAndNotNull(response);\n test.assertNotUndefinedAndNotNull(response.json);\n test.assertNotUndefinedAndNotNull(response.dayAvailabilities);\n test.assertEqual(0, response.dayAvailabilities.getCount().await());\n test.assertUndefined(response.maximumGroupSize);\n test.assertUndefined(response.minimumGroupSize);\n });\n\n runner.test(\"with Sunrise Camp division id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n\n const itineraryId: string = WonderlandTrailClient.permitItineraryId;\n const divisionId: string = WonderlandTrailLocations.sunriseCamp.divisionId;\n const month: number = 8;\n const year: number = 2026;\n const earlyAccessPermitLotteryId: string = \"\";\n \n const response: RecreationDotGovDivisionAvailability = await client.getDivisionAvailability(itineraryId, divisionId, month, year, earlyAccessPermitLotteryId);\n\n test.assertNotUndefinedAndNotNull(response);\n test.assertNotUndefinedAndNotNull(response.json);\n test.assertNotUndefinedAndNotNull(response.dayAvailabilities);\n test.assertEqual(31, response.dayAvailabilities.getCount().await());\n test.assertNotUndefinedAndNotNull(response.maximumGroupSize);\n test.assertNotUndefinedAndNotNull(response.minimumGroupSize);\n });\n\n runner.test(\"with Indian Bar division id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n\n const itineraryId: string = WonderlandTrailClient.permitItineraryId;\n const divisionId: string = WonderlandTrailLocations.indianBar.divisionId;\n const month: number = 7;\n const year: number = 2026;\n const earlyAccessPermitLotteryId: string = \"\";\n \n const response: RecreationDotGovDivisionAvailability = await client.getDivisionAvailability(itineraryId, divisionId, month, year, earlyAccessPermitLotteryId);\n\n test.assertNotUndefinedAndNotNull(response);\n test.assertNotUndefinedAndNotNull(response.json);\n test.assertNotUndefinedAndNotNull(response.dayAvailabilities);\n test.assertEqual(31, response.dayAvailabilities.getCount().await());\n test.assertNotUndefinedAndNotNull(response.maximumGroupSize);\n test.assertNotUndefinedAndNotNull(response.minimumGroupSize);\n });\n });\n });\n });\n}","import { TestRunner } from \"./testRunner\";\nimport { Set } from \"../sources/set\";\nimport { Test } from \"./test\";\nimport { JavascriptSetSet } from \"../sources/javascriptSetSet\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { SyncResult } from \"../sources/syncResult\";\nimport { JavascriptIterable } from \"../sources/javascript\";\nimport { PreCondition } from \"../sources/preCondition\";\nimport { PreConditionError } from \"../sources/preConditionError\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"set.ts\", () =>\n {\n runner.testType(\"Set<T>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const set: JavascriptSetSet<number> = Set.create();\n test.assertNotUndefinedAndNotNull(set);\n test.assertEqual(0, set.getCount().await());\n test.assertEqual([], set.toArray().await());\n });\n\n runner.testFunction(\"add()\", (test: Test) =>\n {\n const set: Set<number> = Set.create();\n for (let i = 0; i < 3; i++)\n {\n const addResult: Set<number> = set.add(20);\n test.assertSame(set, addResult);\n test.assertTrue(set.contains(20).await());\n test.assertEqual(set.getCount().await(), 1);\n test.assertEqual([20], set.toArray().await());\n }\n });\n\n runner.testFunction(\"addAll()\", (test: Test) =>\n {\n const set: Set<number> = Set.create();\n for (let i = 0; i < 3; i++)\n {\n const addResult: Set<number> = set.addAll([20, 20, 25, 26]);\n test.assertSame(set, addResult);\n test.assertTrue(set.contains(20).await());\n test.assertTrue(set.contains(25).await());\n test.assertTrue(set.contains(26).await());\n test.assertEqual(set.getCount().await(), 3);\n test.assertEqual([20, 25, 26], set.toArray().await());\n }\n });\n\n runner.testFunction(\"remove()\", (test: Test) =>\n {\n const set: Set<number> = Set.create();\n\n test.assertThrows(set.remove(15), new NotFoundError(\"Could not find 15.\"));\n\n set.add(16);\n const removeResult: SyncResult<void> = set.remove(16);\n test.assertNotUndefinedAndNotNull(removeResult);\n test.assertFalse(set.contains(16).await());\n test.assertUndefined(removeResult.await());\n\n test.assertThrows(set.remove(16), new NotFoundError(\"Could not find 16.\"));\n });\n\n runner.testFunction(\"toString()\", () =>\n {\n function toStringTest<T>(set: Set<T>, expected: string): void\n {\n runner.test(`with ${runner.toString(set)}`, (test: Test) =>\n {\n test.assertEqual(set.toString(), expected);\n });\n }\n\n toStringTest(Set.create(), \"{}\");\n toStringTest(Set.create().addAll([1]), \"{1}\");\n toStringTest(Set.create().addAll([1, 2]), \"{1,2}\");\n toStringTest(Set.create().addAll([3, 1, 2]), \"{3,1,2}\");\n });\n\n runner.testFunction(\"equals()\", () =>\n {\n function equalsTest<T>(set: Set<T>, right: JavascriptIterable<T>, expected: boolean): void\n {\n runner.test(`with ${runner.andList([set, right])}`, (test: Test) =>\n {\n test.assertEqual(set.equals(right).await(), expected);\n });\n }\n\n equalsTest(Set.create(), [], true);\n equalsTest(Set.create(), [1], false);\n equalsTest(Set.create<number>().addAll([1]), [], false);\n equalsTest(Set.create<number>().addAll([1]), [1], true);\n equalsTest(Set.create<number>().addAll([1]), [1, 1], false);\n equalsTest(Set.create<number>().addAll([1, 2]), [1, 2], true);\n equalsTest(Set.create<number>().addAll([1, 2]), [2, 1], false);\n equalsTest(Set.create<number>().addAll([1, 2]), Set.create<number>().addAll([2, 1]), true);\n });\n\n runner.testFunction(\"union()\", () =>\n {\n function unionErrorTest<T>(set: Set<T>, values: JavascriptIterable<T>, expected: Error): void\n {\n runner.test(`with ${runner.andList([set, values])}`, (test: Test) =>\n {\n test.assertThrows(() => set.union(values), expected);\n });\n }\n\n unionErrorTest(Set.create<number>(), undefined!, new PreConditionError(\n \"Expression: values\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n unionErrorTest(Set.create<number>(), null!, new PreConditionError(\n \"Expression: values\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n function unionTest<T>(set: Set<T>, values: JavascriptIterable<T>, expected: JavascriptIterable<T>): void\n {\n runner.test(`with ${runner.andList([set, values])}`, (test: Test) =>\n {\n test.assertEqual(set.union(values).toArray().await(), expected);\n });\n }\n\n unionTest(Set.create(), [], []);\n unionTest(Set.create(), [1, 2], [1, 2]);\n unionTest(Set.create([1]), [2], [1, 2]);\n unionTest(Set.create([1, 2]), [1], [1, 2]);\n });\n });\n });\n}","import { EmptyError } from \"../sources/emptyError\";\nimport { ListStack } from \"../sources/listStack\";\nimport { Stack } from \"../sources/stack\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"stack.ts\", () =>\n {\n runner.testType(\"Stack<T>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n test.assertNotUndefinedAndNotNull(stack);\n test.assertFalse(stack.any().await());\n });\n\n runner.testFunction(\"add()\", (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n\n stack.add(10).await();\n test.assertTrue(stack.any().await());\n\n stack.add(20).await();\n test.assertTrue(stack.any().await());\n\n test.assertEqual(20, stack.remove().await());\n test.assertEqual(10, stack.remove().await());\n test.assertFalse(stack.any().await());\n });\n\n runner.testFunction(\"addAll()\", () =>\n {\n function addAllTest(values: number[]): void\n {\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n stack.addAll(values).await();\n\n for (const value of values.reverse())\n {\n test.assertTrue(stack.any().await());\n test.assertEqual(value, stack.remove().await());\n }\n test.assertFalse(stack.any().await());\n });\n }\n\n addAllTest([]);\n addAllTest([1]);\n addAllTest([1, 2]);\n addAllTest([1, 2, 3]);\n });\n\n runner.testFunction(\"remove()\", (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n test.assertThrows(() => stack.remove().await(), new EmptyError());\n });\n });\n });\n}","import { Comparison } from \"../sources/comparison\";\r\nimport { StringComparer } from \"../sources/stringComparer\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"stringComparer.ts\", () =>\r\n {\r\n runner.testType(\"StringComparer\", () =>\r\n {\r\n runner.testFunction(\"compare(string, string)\", () =>\r\n {\r\n function compareTest(left: string, right: string, expected: Comparison): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n const comparer: StringComparer = StringComparer.create();\r\n test.assertEqual(comparer.compare(left, right), expected);\r\n test.assertEqual(comparer.lessThan(left, right), expected === Comparison.LessThan);\r\n test.assertEqual(comparer.lessThanOrEqual(left, right), expected !== Comparison.GreaterThan);\r\n test.assertEqual(comparer.equal(left, right), expected === Comparison.Equal);\r\n test.assertEqual(comparer.greaterThanOrEqualTo(left, right), expected !== Comparison.LessThan);\r\n test.assertEqual(comparer.greaterThan(left, right), expected === Comparison.GreaterThan);\r\n });\r\n }\r\n\r\n compareTest(undefined!, undefined!, Comparison.Equal);\r\n compareTest(undefined!, null!, Comparison.LessThan);\r\n compareTest(undefined!, \"\", Comparison.LessThan);\r\n compareTest(undefined!, \"a\", Comparison.LessThan);\r\n compareTest(undefined!, \"def\", Comparison.LessThan);\r\n\r\n compareTest(null!, undefined!, Comparison.GreaterThan);\r\n compareTest(null!, null!, Comparison.Equal);\r\n compareTest(null!, \"\", Comparison.LessThan);\r\n compareTest(null!, \"a\", Comparison.LessThan);\r\n compareTest(null!, \"def\", Comparison.LessThan);\r\n\r\n compareTest(\"\", undefined!, Comparison.GreaterThan);\r\n compareTest(\"\", null!, Comparison.GreaterThan);\r\n compareTest(\"\", \"\", Comparison.Equal);\r\n compareTest(\"\", \"a\", Comparison.LessThan);\r\n compareTest(\"\", \"def\", Comparison.LessThan);\r\n\r\n compareTest(\"a\", undefined!, Comparison.GreaterThan);\r\n compareTest(\"a\", null!, Comparison.GreaterThan);\r\n compareTest(\"a\", \"\", Comparison.GreaterThan);\r\n compareTest(\"a\", \"a\", Comparison.Equal);\r\n compareTest(\"a\", \"def\", Comparison.LessThan);\r\n\r\n compareTest(\"def\", undefined!, Comparison.GreaterThan);\r\n compareTest(\"def\", null!, Comparison.GreaterThan);\r\n compareTest(\"def\", \"\", Comparison.GreaterThan);\r\n compareTest(\"def\", \"a\", Comparison.GreaterThan);\r\n compareTest(\"def\", \"def\", Comparison.Equal);\r\n });\r\n });\r\n });\r\n}","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport { StringIterator } from \"../sources/stringIterator\";\r\nimport { iteratorTests } from \"./iteratorTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"stringIterator.ts\", () =>\r\n {\r\n runner.testType(\"StringIterator\", () =>\r\n {\r\n iteratorTests(runner, () => StringIterator.create(\"\"));\r\n\r\n runner.testFunction(\"create(string)\", () =>\r\n {\r\n function createErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => StringIterator.create(value!),\r\n expectedError);\r\n });\r\n }\r\n\r\n createErrorTest(\r\n undefined,\r\n new PreConditionError(\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(\r\n null,\r\n new PreConditionError(\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n function createTest(value: string): void\r\n {\r\n runner.test(`with \"${runner.toString(value)}\"`, (test: Test) =>\r\n {\r\n const iterator: StringIterator = StringIterator.create(value);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrentIndex(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertThrows(() => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n });\r\n }\r\n\r\n createTest(\"\");\r\n createTest(\"abc\");\r\n });\r\n\r\n runner.testFunction(\"next()\", () =>\r\n {\r\n function nextTest(value: string): void\r\n {\r\n runner.test(`with \"${runner.toString(value)}\"`, async (test: Test) =>\r\n {\r\n const iterator: StringIterator = StringIterator.create(value);\r\n\r\n for (let i = 0; i < value.length; i++)\r\n {\r\n test.assertTrue(await iterator.next());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertSame(iterator.getCurrentIndex(), i);\r\n test.assertSame(iterator.getCurrent(), value[i]);\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(await iterator.next());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrentIndex(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertThrows(() => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n }\r\n });\r\n }\r\n\r\n nextTest(\"\");\r\n nextTest(\"a\");\r\n nextTest(\"abc\");\r\n });\r\n\r\n runner.testGroup(\"for...of\", () =>\r\n {\r\n function forOfTest(value: string): void\r\n {\r\n runner.test(`with \"${runner.toString(value)}\"`, async (test: Test) =>\r\n {\r\n const iterator: StringIterator = StringIterator.create(value);\r\n\r\n let expectedIndex: number = 0;\r\n for (const c of iterator)\r\n {\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertSame(iterator.getCurrentIndex(), expectedIndex);\r\n test.assertSame(iterator.getCurrent(), value[expectedIndex]);\r\n test.assertSame(c, value[expectedIndex]);\r\n expectedIndex++;\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(await iterator.next());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrentIndex(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertThrows(() => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n }\r\n });\r\n }\r\n\r\n forOfTest(\"\");\r\n forOfTest(\"a\");\r\n forOfTest(\"abc\");\r\n });\r\n });\r\n });\r\n}","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport {\r\n escape, escapeAndQuote, getLength, isDigit, isLetter, isLetterOrDigit, isLowercasedLetter,\r\n isUppercasedLetter, isWhitespace, join, quote\r\n} from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"strings.ts\", () =>\r\n {\r\n runner.testFunction(\"getLength(string | undefined | null)\", () =>\r\n {\r\n function getLengthTest(value: string | undefined | null, expected: number): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(getLength(value), expected);\r\n });\r\n }\r\n\r\n getLengthTest(undefined, 0);\r\n getLengthTest(null, 0);\r\n getLengthTest(\"\", 0);\r\n getLengthTest(\"a\", 1);\r\n getLengthTest(\"abc\", 3);\r\n });\r\n\r\n runner.testFunction(\"join(string, string[])\", () =>\r\n {\r\n function joinErrorTest(separator: string, values: string[], expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([separator, values.map(v => runner.toString(v))])}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => join(separator, values), expected);\r\n });\r\n }\r\n\r\n joinErrorTest(undefined!, [],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n joinErrorTest(undefined!, [\"a\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n joinErrorTest(undefined!, [\"a\", \"b\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n joinErrorTest(undefined!, [\"a\", \"b\", \"c\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n\r\n joinErrorTest(null!, [],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n joinErrorTest(null!, [\"a\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n joinErrorTest(null!, [\"a\", \"b\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n joinErrorTest(null!, [\"a\", \"b\", \"c\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n\r\n function joinTest(separator: string, values: string[], expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([separator, values.map(v => runner.toString(v))])}`, (test: Test) =>\r\n {\r\n test.assertSame(join(separator, values), expected);\r\n });\r\n }\r\n\r\n \r\n\r\n joinTest(\"\", [], \"\");\r\n joinTest(\"\", [\"a\"], \"a\");\r\n joinTest(\"\", [\"a\", \"b\"], \"ab\");\r\n joinTest(\"\", [\"a\", \"b\", \"c\"], \"abc\");\r\n\r\n joinTest(\" \", [], \"\");\r\n joinTest(\" \", [\"a\"], \"a\");\r\n joinTest(\" \", [\"a\", \"b\"], \"a b\");\r\n joinTest(\" \", [\"a\", \"b\", \"c\"], \"a b c\");\r\n\r\n joinTest(\" _ \", [], \"\");\r\n joinTest(\" _ \", [\"a\"], \"a\");\r\n joinTest(\" _ \", [\"a\", \"b\"], \"a _ b\");\r\n joinTest(\" _ \", [\"a\", \"b\", \"c\"], \"a _ b _ c\");\r\n });\r\n\r\n runner.testFunction(\"escape(string|undefined|null,string[]|undefined)\", () =>\r\n {\r\n function escapeTest(value: string | undefined | null, dontEscape: string[] | undefined, expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, dontEscape?.map((value: string) => runner.toString(value))])}`, (test: Test) =>\r\n {\r\n const result: string = escape(value, dontEscape);\r\n test.assertSame(result, expected);\r\n });\r\n }\r\n\r\n escapeTest(undefined, undefined, \"undefined\");\r\n escapeTest(null, undefined, \"null\");\r\n escapeTest(\"\", undefined, \"\");\r\n escapeTest(\"a\", undefined, \"a\");\r\n escapeTest(\"A\", undefined, \"A\");\r\n escapeTest(\"abc\", undefined, \"abc\");\r\n escapeTest(\"\\t\", undefined, \"\\\\t\");\r\n escapeTest(\"\\n\", undefined, \"\\\\n\");\r\n escapeTest(\"\\r\", undefined, \"\\\\r\");\r\n escapeTest(\"'\", undefined, \"\\\\'\");\r\n escapeTest(\"\\\"\", undefined, \"\\\\\\\"\");\r\n escapeTest(\"&\", undefined, \"&\");\r\n escapeTest(\" \\r\\n \\t \", undefined, \" \\\\r\\\\n \\\\t \");\r\n escapeTest(\"\\t\", [], \"\\\\t\");\r\n escapeTest(\"\\t\", [\"\\n\"], \"\\\\t\");\r\n escapeTest(\"\\t\", [\"\\t\"], \"\\t\");\r\n });\r\n\r\n runner.testFunction(\"quote(string|undefined|null)\", () =>\r\n {\r\n function quoteTest(value: string | undefined | null, quoteString: string | undefined, expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, quoteString])}`, (test: Test) =>\r\n {\r\n const result: string = quote(value, quoteString);\r\n test.assertSame(result, expected);\r\n });\r\n }\r\n\r\n quoteTest(undefined, undefined, \"undefined\");\r\n quoteTest(null, undefined, \"null\");\r\n quoteTest(\"\", undefined, `\"\"`);\r\n quoteTest(\"a\", undefined, `\"a\"`);\r\n quoteTest(\"A\", undefined, `\"A\"`);\r\n quoteTest(\"abc\", undefined, `\"abc\"`);\r\n quoteTest(\"abc\", \"'\", `'abc'`);\r\n });\r\n\r\n runner.testFunction(\"escapeAndQuote(string|undefined|null,string|undefined,string[]|undefined)\", () =>\r\n {\r\n function escapeAndQuoteTest(value: string | undefined | null, quote: string | undefined, dontEscape: string[] | undefined, expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, quote, dontEscape?.map(x => runner.toString(x))])}`, (test: Test) =>\r\n {\r\n const result: string = escapeAndQuote(value, quote, dontEscape);\r\n test.assertSame(result, expected);\r\n });\r\n }\r\n\r\n escapeAndQuoteTest(undefined, undefined, undefined, \"undefined\");\r\n escapeAndQuoteTest(null, undefined, undefined, \"null\");\r\n escapeAndQuoteTest(\"\", undefined, undefined, `\"\"`);\r\n escapeAndQuoteTest(\"a\", undefined, undefined, `\"a\"`);\r\n escapeAndQuoteTest(\"A\", undefined, undefined, `\"A\"`);\r\n escapeAndQuoteTest(\"abc\", undefined, undefined, `\"abc\"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, undefined, `\"\\\\t\"`);\r\n escapeAndQuoteTest(\"\\n\", undefined, undefined, `\"\\\\n\"`);\r\n escapeAndQuoteTest(\"\\r\", undefined, undefined, `\"\\\\r\"`);\r\n escapeAndQuoteTest(\"'\", undefined, undefined, `\"\\\\'\"`);\r\n escapeAndQuoteTest(\"\\\"\", undefined, undefined, `\"\\\\\\\"\"`);\r\n escapeAndQuoteTest(\"&\", undefined, undefined, `\"&\"`);\r\n escapeAndQuoteTest(\" \\r\\n \\t \", undefined, undefined, `\" \\\\r\\\\n \\\\t \"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, [], `\"\\\\t\"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, [\"\\n\"], `\"\\\\t\"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, [\"\\t\"], `\"\\t\"`);\r\n });\r\n\r\n runner.testFunction(\"isWhitespace(string)\", () =>\r\n {\r\n function isWhitespaceErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isWhitespace(value!), expectedError);\r\n });\r\n }\r\n\r\n isWhitespaceErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isWhitespaceErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isWhitespaceErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isWhitespaceErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isWhitespaceTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isWhitespace(value), expected);\r\n });\r\n }\r\n\r\n isWhitespaceTest(\" \", true);\r\n isWhitespaceTest(\"\\n\", true);\r\n isWhitespaceTest(\"\\r\", true);\r\n isWhitespaceTest(\"\\t\", true);\r\n\r\n isWhitespaceTest(\"a\", false);\r\n isWhitespaceTest(\"_\", false);\r\n isWhitespaceTest(\"-\", false);\r\n });\r\n\r\n runner.testFunction(\"isLetter(string)\", () =>\r\n {\r\n function isLetterErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isLetter(value!), expectedError);\r\n });\r\n }\r\n\r\n isLetterErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isLetterErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isLetterErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isLetterErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isLetterTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isLetter(value), expected);\r\n });\r\n }\r\n\r\n isLetterTest(\"a\", true);\r\n isLetterTest(\"m\", true);\r\n isLetterTest(\"z\", true);\r\n isLetterTest(\"A\", true);\r\n isLetterTest(\"N\", true);\r\n isLetterTest(\"Z\", true);\r\n \r\n isLetterTest(\" \", false);\r\n isLetterTest(\"\\n\", false);\r\n isLetterTest(\"\\r\", false);\r\n isLetterTest(\"\\t\", false);\r\n isLetterTest(\"_\", false);\r\n isLetterTest(\"-\", false);\r\n isLetterTest(\"5\", false);\r\n });\r\n\r\n runner.testFunction(\"isLowercasedLetter(string)\", () =>\r\n {\r\n function isLowercasedLetterErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isLowercasedLetter(value!), expectedError);\r\n });\r\n }\r\n\r\n isLowercasedLetterErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isLowercasedLetterErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isLowercasedLetterErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isLowercasedLetterErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isLowercasedLetterTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isLowercasedLetter(value), expected);\r\n });\r\n }\r\n\r\n isLowercasedLetterTest(\"a\", true);\r\n isLowercasedLetterTest(\"m\", true);\r\n isLowercasedLetterTest(\"z\", true);\r\n\r\n isLowercasedLetterTest(\"A\", false);\r\n isLowercasedLetterTest(\"N\", false);\r\n isLowercasedLetterTest(\"Z\", false);\r\n isLowercasedLetterTest(\" \", false);\r\n isLowercasedLetterTest(\"\\n\", false);\r\n isLowercasedLetterTest(\"\\r\", false);\r\n isLowercasedLetterTest(\"\\t\", false);\r\n isLowercasedLetterTest(\"_\", false);\r\n isLowercasedLetterTest(\"-\", false);\r\n isLowercasedLetterTest(\"5\", false);\r\n });\r\n\r\n runner.testFunction(\"isUppercasedLetter(string)\", () =>\r\n {\r\n function isUppercasedLetterErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isUppercasedLetter(value!), expectedError);\r\n });\r\n }\r\n\r\n isUppercasedLetterErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isUppercasedLetterErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isUppercasedLetterErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isUppercasedLetterErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isUppercasedLetterTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isUppercasedLetter(value), expected);\r\n });\r\n }\r\n \r\n isUppercasedLetterTest(\"A\", true);\r\n isUppercasedLetterTest(\"N\", true);\r\n isUppercasedLetterTest(\"Z\", true);\r\n\r\n isUppercasedLetterTest(\"a\", false);\r\n isUppercasedLetterTest(\"m\", false);\r\n isUppercasedLetterTest(\"z\", false);\r\n isUppercasedLetterTest(\" \", false);\r\n isUppercasedLetterTest(\"\\n\", false);\r\n isUppercasedLetterTest(\"\\r\", false);\r\n isUppercasedLetterTest(\"\\t\", false);\r\n isUppercasedLetterTest(\"_\", false);\r\n isUppercasedLetterTest(\"-\", false);\r\n isUppercasedLetterTest(\"5\", false);\r\n });\r\n\r\n runner.testFunction(\"isDigit(string)\", () =>\r\n {\r\n function isDigitErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isDigit(value!), expectedError);\r\n });\r\n }\r\n\r\n isDigitErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isDigitErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isDigitErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isDigitErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isDigitTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isDigit(value), expected);\r\n });\r\n }\r\n \r\n isDigitTest(\"0\", true);\r\n isDigitTest(\"5\", true);\r\n isDigitTest(\"9\", true);\r\n\r\n isDigitTest(\".\", false);\r\n isDigitTest(\"a\", false);\r\n isDigitTest(\"m\", false);\r\n isDigitTest(\"z\", false);\r\n isDigitTest(\"A\", false);\r\n isDigitTest(\"N\", false);\r\n isDigitTest(\"Z\", false);\r\n isDigitTest(\" \", false);\r\n isDigitTest(\"\\n\", false);\r\n isDigitTest(\"\\r\", false);\r\n isDigitTest(\"\\t\", false);\r\n isDigitTest(\"_\", false);\r\n isDigitTest(\"-\", false);\r\n });\r\n\r\n runner.testFunction(\"isLetterOrDigit(string)\", () =>\r\n {\r\n function isLetterOrDigitErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isLetterOrDigit(value!), expectedError);\r\n });\r\n }\r\n\r\n isLetterOrDigitErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isLetterOrDigitErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isLetterOrDigitErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isLetterOrDigitErrorTest(\"ab\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isLetterOrDigitTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isLetterOrDigit(value), expected);\r\n });\r\n }\r\n \r\n isLetterOrDigitTest(\"0\", true);\r\n isLetterOrDigitTest(\"5\", true);\r\n isLetterOrDigitTest(\"9\", true);\r\n isLetterOrDigitTest(\"a\", true);\r\n isLetterOrDigitTest(\"m\", true);\r\n isLetterOrDigitTest(\"z\", true);\r\n isLetterOrDigitTest(\"A\", true);\r\n isLetterOrDigitTest(\"N\", true);\r\n isLetterOrDigitTest(\"Z\", true);\r\n\r\n isLetterOrDigitTest(\".\", false);\r\n isLetterOrDigitTest(\" \", false);\r\n isLetterOrDigitTest(\"\\n\", false);\r\n isLetterOrDigitTest(\"\\r\", false);\r\n isLetterOrDigitTest(\"\\t\", false);\r\n isLetterOrDigitTest(\"_\", false);\r\n isLetterOrDigitTest(\"-\", false);\r\n });\r\n });\r\n}","import { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { SyncResult } from \"../sources/syncResult\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"syncResult.ts\", () =>\n {\n runner.testType(\"SyncResult<T>\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest<T>(testName: string, action: () => T, expected: Error): void\n {\n runner.test(testName, (test: Test) =>\n {\n test.assertThrows(() => SyncResult.create(action), expected);\n });\n }\n\n createErrorTest(\"with undefined\", undefined!, new PreConditionError(\n \"Expression: action\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(\"with null\", null!, new PreConditionError(\n \"Expression: action\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with action\", (test: Test) =>\n {\n const result: SyncResult<number> = SyncResult.create(() => 5);\n test.assertNotUndefinedAndNotNull(result);\n\n const value: number = result.await();\n test.assertEqual(5, value);\n });\n\n runner.test(\"with action with side-effects\", (test: Test) =>\n {\n let counter = 0;\n const result: SyncResult<number> = SyncResult.create(() => { return ++counter; });\n test.assertEqual(counter, 1);\n\n for (let i = 0; i < 3; i++)\n {\n test.assertEqual(1, result.await());\n test.assertEqual(1, counter);\n }\n });\n });\n\n runner.testFunction(\"value()\", () =>\n {\n function valueTest<T>(value: T): void\n {\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\n {\n const result: SyncResult<T> = SyncResult.value(value);\n test.assertNotUndefinedAndNotNull(result);\n\n const awaitResult: T = result.await();\n test.assertSame(awaitResult, value);\n });\n }\n\n valueTest(undefined);\n valueTest(null);\n valueTest(50);\n valueTest({});\n });\n\n runner.testFunction(\"error()\", () =>\n {\n function errorTest<T>(error: Error): void\n {\n runner.test(`with ${runner.toString(error)}`, (test: Test) =>\n {\n const result: SyncResult<T> = SyncResult.error(error);\n test.assertNotUndefinedAndNotNull(result);\n\n test.assertThrows(result, error);\n });\n }\n\n errorTest(new Error(\"oops\"));\n errorTest(new NotFoundError(\"not here\"));\n });\n\n runner.testGroup(\"async/await\", () =>\n {\n runner.test(\"with value\", async (test: Test) =>\n {\n const result: SyncResult<number> = SyncResult.value(5);\n test.assertEqual(await result, 5);\n });\n\n runner.test(\"with error\", async (test: Test) =>\n {\n const result: SyncResult<number> = SyncResult.error(new NotFoundError(\"abc\"));\n await test.assertThrowsAsync(result, new NotFoundError(\"abc\"));\n });\n });\n\n runner.testFunction(\"then()\", () =>\n {\n runner.testGroup(\"with non-PromiseLike return type\", () =>\n {\n runner.test(\"with error parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const thenResult: SyncResult<string> = parentResult.then(() => \"hello\");\n test.assertThrows(() => thenResult.await(), new Error(\"abc\"));\n });\n\n runner.test(\"with error parent and thenFunction with side-effects\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const thenResult: SyncResult<string> = parentResult.then(() => { counter++; return \"hello\"; });\n test.assertSame(0, counter);\n test.assertThrows(() => thenResult.await(), new Error(\"abc\"));\n test.assertSame(0, counter);\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const thenResult: SyncResult<string> = parentResult.then(() => \"hello\");\n test.assertSame(\"hello\", thenResult.await());\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const thenResult: SyncResult<string> = parentResult.then((argument: number) => (argument + 1).toString());\n test.assertSame(\"2\", thenResult.await());\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value with side-effects\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n let counter: number = 0;\n const thenResult: SyncResult<string> = parentResult.then((argument: number) => { counter++; return (argument + 1).toString(); });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(\"2\", thenResult.await());\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with successful parent and thenFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(10);\n let counter: number = 0;\n const thenResult: SyncResult<string> = parentResult.then((argument: number) =>\n {\n counter++;\n throw new Error(`arg: ${argument}`);\n });\n test.assertSame(counter, 1);\n\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(thenResult, new Error(\"arg: 10\"));\n test.assertSame(counter, 1);\n\n await test.assertThrowsAsync(thenResult, new Error(\"arg: 10\"));\n test.assertSame(counter, 1);\n }\n });\n });\n });\n\n runner.testFunction(\"onValue()\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue(() => counter++);\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(onValueResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(10);\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue(() => counter++);\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(10, onValueResult.await());\n test.assertSame(counter, 1);\n\n test.assertSame(10, await onValueResult);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(2);\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue((argument: number) => counter += argument);\n test.assertSame(counter, 2);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(onValueResult.await(), 2);\n test.assertSame(counter, 2);\n\n test.assertSame(await onValueResult, 2);\n test.assertSame(counter, 2);\n }\n });\n\n runner.test(\"with successful parent and onValueFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(2);\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue((argument: number) =>\n {\n counter += argument;\n throw new Error(`argument: ${argument}`);\n });\n test.assertSame(counter, 2);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(onValueResult, new Error(\"argument: 2\"));\n test.assertSame(counter, 2);\n\n await test.assertThrowsAsync(onValueResult, new Error(\"argument: 2\"));\n test.assertSame(counter, 2);\n }\n });\n });\n\n runner.testFunction(\"catch()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.catch(undefined!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.catch(null!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with error parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 20);\n test.assertSame(catchResult.await(), 20);\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(() => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n return 21;\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 21);\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with error parent and catchFunction with side-effects\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 5);\n test.assertSame(catchResult.await(), 5);\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, (error: Error) => error.message.length);\n test.assertSame(catchResult.await(), 3);\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(PreConditionError, () => 20);\n test.assertThrows(catchResult, new Error(\"abc\"));\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(RangeError, () => 20);\n test.assertThrows(catchResult, new PreConditionError(\"def\"));\n });\n\n runner.test(\"with catchFunction that throws\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { throw new TypeError(\"abc\"); });\n test.assertThrows(catchResult, new TypeError(\"abc\"));\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 2);\n test.assertSame(catchResult.await(), 1);\n });\n });\n\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 20);\n test.assertSame(await catchResult, 20);\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(() => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n return 21;\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with error parent and catchFunction with side-effects\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 5);\n test.assertSame(await catchResult, 5);\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, (error: Error) => error.message.length);\n test.assertSame(await catchResult, 3);\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(PreConditionError, () => 20);\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(RangeError, () => 20);\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n });\n\n runner.test(\"with catchFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { throw new TypeError(\"abc\"); });\n await test.assertThrowsAsync(catchResult, new TypeError(\"abc\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 2);\n test.assertSame(await catchResult, 1);\n });\n });\n });\n\n runner.testFunction(\"onError()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.onError(undefined!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.onError(null!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with error parent, no errorType, and no error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(() => { counter++; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, (error: Error) => { counter += error.message.length; });\n test.assertSame(counter, 3);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 3);\n }\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(PreConditionError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(RangeError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new PreConditionError(\"def\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with onErrorFunction that throws\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; throw new Error(\"abc\"); });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 1);\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(() => { counter++; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, (error: Error) => { counter += error.message.length; });\n test.assertSame(counter, 3);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 3);\n }\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(PreConditionError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(RangeError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with onErrorFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; throw new Error(\"abc\"); });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 1);\n test.assertSame(counter, 0);\n }\n });\n });\n });\n\n runner.testFunction(\"convertError()\", () =>\n {\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with undefined convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(undefined!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(null!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n throw new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(`abc - def`));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(TypeError, (error: TypeError) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(PreConditionError, () =>\n {\n counter++;\n throw new Error(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new TypeError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with undefined convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(undefined!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(null!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(convertErrorResult.await(), 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n throw new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(convertErrorResult.await(), 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(`abc - def`));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(TypeError, (error: TypeError) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(PreConditionError, () =>\n {\n counter++;\n throw new Error(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new TypeError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n });\n });\n\n runner.testFunction(\"finally()\", () =>\n {\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with successful parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await finallyResult, 5);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"oops!\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new RangeError(\"oops!\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"def\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new RangeError(\"def\"));\n test.assertSame(counter, 1);\n }\n });\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with successful parent and non-throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(finallyResult.await(), 5);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"oops!\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(finallyResult, new RangeError(\"oops!\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and non-throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(finallyResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"def\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new RangeError(\"def\"));\n test.assertSame(counter, 1);\n }\n });\n });\n });\n });\n });\n}","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestAction } from \"./testAction\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"testAction.ts\", () =>\r\n {\r\n runner.testType(\"TestAction\", () =>\r\n {\r\n runner.testFunction(\"create()\", () =>\r\n {\r\n function createErrorTest(parent: TestAction | undefined, name: string, action: () => (void | Promise<void>), expected: Error): void\r\n {\r\n runner.test(`with ${!parent ? runner.toString(parent) : \"defined parent\"}, ${runner.toString(name)}, and ${!action ? runner.toString(action) : \"defined action\"}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => TestAction.create(parent, name, \"test\", undefined, action), expected);\r\n });\r\n }\r\n\r\n createErrorTest(\r\n undefined,\r\n undefined!,\r\n () => {},\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: name\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])),\r\n );\r\n createErrorTest(\r\n undefined,\r\n null!,\r\n () => {},\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: name\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])),\r\n );\r\n createErrorTest(\r\n undefined,\r\n \"a\",\r\n undefined!,\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: action\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])),\r\n );\r\n createErrorTest(\r\n undefined,\r\n \"a\",\r\n null!,\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: action\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])),\r\n );\r\n\r\n function createTest(parent: TestAction | undefined, name: string, action: () => (void | Promise<void>)): void\r\n {\r\n runner.test(`with ${!parent ? runner.toString(parent) : \"defined parent\"}, ${runner.toString(name)}, and ${!action ? runner.toString(action) : \"defined action\"}`, (test: Test) =>\r\n {\r\n const testAction: TestAction = TestAction.create(parent, name, \"file\", undefined, action);\r\n test.assertNotUndefinedAndNotNull(testAction);\r\n test.assertSame(parent, testAction.getParent());\r\n test.assertSame(name, testAction.getName());\r\n test.assertSame(action, testAction.getAction());\r\n });\r\n }\r\n\r\n createTest(undefined, \"b\", () => {});\r\n });\r\n\r\n runner.testFunction(\"run()\", (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const action: TestAction = TestAction.create(undefined, \"c\", \"test\", undefined, () => { counter++; });\r\n test.assertEqual(0, counter);\r\n\r\n for (let i = 1; i <= 3; i++)\r\n {\r\n action.runAsync();\r\n test.assertEqual(i, counter);\r\n }\r\n });\r\n });\r\n });\r\n}","import { Comparison } from \"../sources/comparison\";\r\nimport { Iterable } from \"../sources/iterable\";\r\nimport { List } from \"../sources/list\";\r\nimport { Map } from \"../sources/map\";\r\nimport { ToStringFunctions } from \"../sources/toStringFunctions\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"toStringFunctions.ts\", () =>\r\n {\r\n runner.testType(\"ToStringFunctions\", () =>\r\n {\r\n runner.testFunction(\"toString(unknown)\", () =>\r\n {\r\n function toStringTest(value: unknown, expected: string)\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const functions: ToStringFunctions = ToStringFunctions.create();\r\n test.assertSame(functions.toString(value), expected);\r\n });\r\n }\r\n\r\n // toStringTest(undefined, \"undefined\");\r\n // toStringTest(null, \"null\");\r\n // toStringTest(false, \"false\");\r\n // toStringTest(true, \"true\");\r\n // toStringTest(50, \"50\");\r\n // toStringTest(NaN, \"NaN\");\r\n // toStringTest(Infinity, \"Infinity\");\r\n // toStringTest(-Infinity, \"-Infinity\");\r\n // toStringTest(1.2, \"1.2\");\r\n // toStringTest(\"hello\\tthere\\nfriend\", `\"hello\\\\tthere\\\\nfriend\"`);\r\n // toStringTest({}, \"{}\");\r\n // toStringTest({1:\"one\", b: \"two\"}, `{\"1\":\"one\",\"b\":\"two\"}`);\r\n // toStringTest([], \"[]\");\r\n // toStringTest([undefined, undefined], \"[undefined,undefined]\");\r\n // toStringTest([1, 2.3, false], \"[1,2.3,false]\");\r\n // toStringTest([[[]]], \"[[[]]]\");\r\n // toStringTest(Iterable.create(), `[]`);\r\n // toStringTest(Iterable.create<string>([\"abc\"]), `[\"abc\"]`);\r\n // toStringTest(Iterable.create([1, 2, 3]), `[1,2,3]`);\r\n // toStringTest(List.create(), `[]`);\r\n // toStringTest(List.create<string>([\"abc\"]), `[\"abc\"]`);\r\n // toStringTest(List.create([1, 2, 3]), `[1,2,3]`);\r\n toStringTest(Map.create(), `{}`);\r\n // toStringTest(Map.create<string,number>().set(\"a\", 1), `{\"a\":1}`);\r\n // toStringTest(Map.create<string,number>().set(\"a\", 1).set(\"b\", 2), `{\"a\":1,\"b\":2}`);\r\n // toStringTest(Comparison.LessThan, \"0\");\r\n });\r\n });\r\n });\r\n}","import { Iterable } from \"../sources/iterable\";\r\nimport { List } from \"../sources/list\";\r\nimport {\r\n asBoolean, hasFunction, hasProperty, isArray, isBoolean, isFunction, isNumber, isObject,\r\n isObjectOrArrayOrNull, isString\r\n} from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"types.ts\", () =>\r\n {\r\n runner.testFunction(\"isBoolean(unknown)\", () =>\r\n {\r\n function isBooleanTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isBoolean(value), expected);\r\n });\r\n }\r\n\r\n isBooleanTest(undefined, false);\r\n isBooleanTest(null, false);\r\n isBooleanTest(\"\", false);\r\n isBooleanTest(\"true\", false);\r\n isBooleanTest(123, false);\r\n isBooleanTest({}, false);\r\n isBooleanTest([], false);\r\n isBooleanTest(true, true);\r\n isBooleanTest(false, true);\r\n });\r\n\r\n runner.testFunction(\"asBoolean(unknown)\", () =>\r\n {\r\n function asBooleanTest(value: unknown, expected: boolean | undefined): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertEqual(asBoolean(value), expected);\r\n });\r\n }\r\n\r\n asBooleanTest(undefined, undefined);\r\n asBooleanTest(null, undefined);\r\n asBooleanTest(\"\", undefined);\r\n asBooleanTest(\"true\", undefined);\r\n asBooleanTest(123, undefined);\r\n asBooleanTest({}, undefined);\r\n asBooleanTest([], undefined);\r\n asBooleanTest(true, true);\r\n asBooleanTest(false, false);\r\n asBooleanTest(() => false, undefined);\r\n asBooleanTest(() => true, undefined);\r\n });\r\n\r\n runner.testFunction(\"isNumber(unknown)\", () =>\r\n {\r\n function isNumberTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isNumber(value), expected);\r\n });\r\n }\r\n\r\n isNumberTest(undefined, false);\r\n isNumberTest(null, false);\r\n isNumberTest(\"\", false);\r\n isNumberTest(\"123\", false);\r\n isNumberTest({}, false);\r\n isNumberTest([], false);\r\n isNumberTest(true, false);\r\n isNumberTest(false, false);\r\n isNumberTest(123, true);\r\n isNumberTest(Infinity, true);\r\n isNumberTest(-Infinity, true);\r\n isNumberTest(NaN, true);\r\n });\r\n\r\n runner.testFunction(\"isString(unknown)\", () =>\r\n {\r\n function isStringTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isString(value), expected);\r\n });\r\n }\r\n\r\n isStringTest(undefined, false);\r\n isStringTest(null, false);\r\n isStringTest(50, false);\r\n isStringTest({}, false);\r\n isStringTest(\"\", true);\r\n isStringTest(\"hello\", true);\r\n });\r\n\r\n runner.testFunction(\"isFunction(unknown)\", () =>\r\n {\r\n function isFunctionTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isFunction(value), expected);\r\n });\r\n }\r\n\r\n isFunctionTest(undefined, false);\r\n isFunctionTest(null, false);\r\n isFunctionTest(false, false);\r\n isFunctionTest(true, false);\r\n isFunctionTest(123, false);\r\n isFunctionTest(\"abc\", false);\r\n isFunctionTest({}, false);\r\n isFunctionTest([], false);\r\n\r\n isFunctionTest(isArray, true);\r\n isFunctionTest(isFunction, true);\r\n isFunctionTest(() => 123, true);\r\n });\r\n\r\n runner.testFunction(\"isArray(unknown)\", () =>\r\n {\r\n function isArrayTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isArray(value), expected);\r\n });\r\n }\r\n\r\n isArrayTest(undefined, false);\r\n isArrayTest(null, false);\r\n isArrayTest(50, false);\r\n isArrayTest({}, false);\r\n isArrayTest(\"\", false);\r\n isArrayTest(\"hello\", false);\r\n isArrayTest(Iterable.create(), false);\r\n isArrayTest(List.create(), false);\r\n isArrayTest(new Uint8Array(), false);\r\n\r\n isArrayTest([], true);\r\n isArrayTest([\"a\", \"b\"], true);\r\n isArrayTest(new Array(), true);\r\n isArrayTest(Array.from([1, 2]), true);\r\n });\r\n\r\n runner.testFunction(\"isObjectOrArrayOrNull(unknown)\", () =>\r\n {\r\n function isObjectOrArrayOrNullTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isObjectOrArrayOrNull(value), expected);\r\n });\r\n }\r\n\r\n isObjectOrArrayOrNullTest(undefined, false);\r\n isObjectOrArrayOrNullTest(50, false);\r\n isObjectOrArrayOrNullTest(\"\", false);\r\n isObjectOrArrayOrNullTest(\"hello\", false);\r\n \r\n isObjectOrArrayOrNullTest({}, true);\r\n isObjectOrArrayOrNullTest(null, true);\r\n isObjectOrArrayOrNullTest([], true);\r\n isObjectOrArrayOrNullTest([\"a\", \"b\"], true);\r\n isObjectOrArrayOrNullTest(new Array(), true);\r\n isObjectOrArrayOrNullTest(Array.from([1, 2]), true);\r\n isObjectOrArrayOrNullTest(Iterable.create(), true);\r\n isObjectOrArrayOrNullTest(List.create(), true);\r\n });\r\n\r\n runner.testFunction(\"isObject(unknown)\", () =>\r\n {\r\n function isObjectTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isObject(value), expected);\r\n });\r\n }\r\n\r\n isObjectTest(undefined, false);\r\n isObjectTest(50, false);\r\n isObjectTest(\"\", false);\r\n isObjectTest(\"hello\", false);\r\n isObjectTest(null, false);\r\n isObjectTest([], false);\r\n isObjectTest([\"a\", \"b\"], false);\r\n isObjectTest(new Array(), false);\r\n isObjectTest(Array.from([1, 2]), false);\r\n \r\n isObjectTest({}, true);\r\n isObjectTest(Iterable.create(), true);\r\n isObjectTest(List.create(), true);\r\n });\r\n\r\n runner.testFunction(\"hasProperty(TValue,TPropertyKey extends PropertyKey)\", () =>\r\n {\r\n function hasPropertyTest<TPropertyKey extends PropertyKey>(value: unknown, propertyKey: TPropertyKey, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([value, propertyKey])}`, (test: Test) =>\r\n {\r\n const result: boolean = hasProperty(value, propertyKey);\r\n test.assertSame(result, expected);\r\n if (value !== undefined && value !== null)\r\n {\r\n if (result)\r\n {\r\n test.assertNotUndefined((value as any)[propertyKey]);\r\n }\r\n else\r\n {\r\n test.assertUndefined((value as any)[propertyKey]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n hasPropertyTest(undefined, \"spam\", false);\r\n hasPropertyTest(null, \"spam\", false);\r\n hasPropertyTest([], \"spam\", false);\r\n hasPropertyTest([], \"length\", true);\r\n hasPropertyTest({}, \"spam\", false);\r\n hasPropertyTest(\"\", \"spam\", false);\r\n hasPropertyTest(\"\", \"length\", true);\r\n hasPropertyTest(5, \"spam\", false);\r\n hasPropertyTest(5, \"toString\", true);\r\n });\r\n\r\n runner.testFunction(\"hasFunction(TValue,TPropertyKey extends PropertyKey)\", () =>\r\n {\r\n function hasFunctionTest<TPropertyKey extends PropertyKey>(value: unknown, propertyKey: TPropertyKey, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([value, propertyKey])}`, (test: Test) =>\r\n {\r\n test.assertSame(hasFunction(value, propertyKey), expected);\r\n });\r\n }\r\n\r\n hasFunctionTest(undefined, \"spam\", false);\r\n hasFunctionTest(null, \"spam\", false);\r\n hasFunctionTest([], \"spam\", false);\r\n hasFunctionTest([], \"length\", false);\r\n hasFunctionTest([], Symbol.iterator, true);\r\n hasFunctionTest({}, \"spam\", false);\r\n hasFunctionTest(\"\", \"spam\", false);\r\n hasFunctionTest(\"\", \"length\", false);\r\n hasFunctionTest(\"\", \"at\", true);\r\n hasFunctionTest(\"\", Symbol.iterator, true);\r\n hasFunctionTest(5, \"spam\", false);\r\n hasFunctionTest(5, \"toString\", true);\r\n });\r\n });\r\n}","import { Iterator } from \"../sources/iterator\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { WhereIterator } from \"../sources/whereIterator\";\r\nimport { iteratorTests } from \"./iteratorTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"whereIterator.ts\", () =>\r\n {\r\n runner.testType(\"WhereIterator<T>\", () =>\r\n {\r\n iteratorTests(runner, () => WhereIterator.create(Iterator.create<number>([]), (_: number) => true));\r\n\r\n runner.testFunction(\"create(T[])\", () =>\r\n {\r\n function createErrorTest<T>(testName: string, innerIterator: Iterator<T>, condition: (value: T) => boolean, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n test.assertThrows(() => WhereIterator.create(innerIterator, condition), expected);\r\n });\r\n }\r\n\r\n createErrorTest(\r\n `with undefined innerIterator`,\r\n undefined!,\r\n (_: number) => true,\r\n new PreConditionError(\r\n \"Expression: innerIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n );\r\n createErrorTest(\r\n `with null innerIterator`,\r\n null!,\r\n (_: number) => true,\r\n new PreConditionError(\r\n \"Expression: innerIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n );\r\n\r\n function createTest<T>(testName: string, innerIterator: Iterator<T>, condition: (value: T) => boolean, expected: T[]): void\r\n {\r\n runner.test(testName, async (test: Test) =>\r\n {\r\n const iterator: WhereIterator<T> = WhereIterator.create(innerIterator, condition);\r\n test.assertEqual(await iterator.toArray(), expected);\r\n });\r\n }\r\n\r\n createTest(\r\n `with empty innerIterator`,\r\n Iterator.create<number>([]),\r\n (_: number) => true,\r\n [],\r\n );\r\n createTest(\r\n `with none of the iterator values match the condition`,\r\n Iterator.create([1, 2, 3]),\r\n (value: number) => value > 10,\r\n [],\r\n );\r\n createTest(\r\n `with some of the iterator values match the condition`,\r\n Iterator.create([1, 2, 3]),\r\n (value: number) => value % 2 == 1,\r\n [1, 3],\r\n );\r\n });\r\n });\r\n });\r\n}","import { PreConditionError } from \"../sources/preConditionError\";\nimport { isWonderlandTrailLocation, WonderlandTrailAvailability, WonderlandTrailAvailabilityType, WonderlandTrailClient, WonderlandTrailConnection, WonderlandTrailDirection, WonderlandTrailLocation, WonderlandTrailLocations, WonderlandTrailReservationType } from \"../sources/wonderlandTrailClient\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { Iterable } from \"../sources/iterable\";\nimport { DateTime } from \"../sources/dateTime\";\nimport { Map } from \"../sources/map\";\nimport { MutableMap } from \"../sources/mutableMap\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { HttpClient } from \"../sources/httpClient\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"wonderlandTrailClient.ts\", () =>\n {\n runner.testFunction(\"isWonderlandTrailLocation()\", () =>\n {\n function isWonderlandTrailLocationTest(value: unknown, expected: boolean): void\n {\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\n {\n test.assertEqual(isWonderlandTrailLocation(value), expected);\n });\n }\n\n isWonderlandTrailLocationTest(undefined, false);\n isWonderlandTrailLocationTest(null, false);\n isWonderlandTrailLocationTest(20, false);\n isWonderlandTrailLocationTest({}, false);\n isWonderlandTrailLocationTest(WonderlandTrailLocations.boxCanyon, true);\n });\n\n runner.testType(\"WonderlandTrailLocations\", () =>\n {\n runner.testFunction(\"getLocations()\", (test: Test) =>\n {\n const locations: Iterable<WonderlandTrailLocation> = WonderlandTrailLocations.getLocations();\n test.assertNotUndefinedAndNotNull(locations);\n test.assertEqual(locations.getCount().await(), 27);\n });\n\n runner.testFunction(\"getTrailheads()\", (test: Test) =>\n {\n const trailheads: Iterable<WonderlandTrailLocation> = WonderlandTrailLocations.getTrailheads();\n test.assertEqual(6, trailheads.getCount().await());\n test.assertEqual(\n [\n WonderlandTrailLocations.sunriseVisitorCenter.name,\n WonderlandTrailLocations.whiteRiver.name,\n WonderlandTrailLocations.fryingPanCreek.name,\n WonderlandTrailLocations.boxCanyon.name,\n WonderlandTrailLocations.reflectionLakes.name,\n WonderlandTrailLocations.longmire.name,\n ],\n trailheads.map(t => t.name).toArray().await(),\n );\n });\n });\n\n runner.testType(\"WonderlandTrailAvailability\", () =>\n {\n runner.testFunction(\"addAvailability()\", () =>\n {\n runner.test(\"with undefined location\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(undefined!, DateTime.now()), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null location\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(null!, DateTime.now()), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with undefined date\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(WonderlandTrailLocations.boxCanyon, undefined!), new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null date\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(WonderlandTrailLocations.boxCanyon, null!), new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with neither individual nor group site data\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n test.assertEqual(Map.create(), availability.getAvailability(location))\n\n availability.addAvailability(location, date);\n\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), { groupSite: undefined, individualSite: undefined });\n test.assertEqual(expected, availability.getAvailability(location));\n });\n\n runner.test(\"with individual site data\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n test.assertEqual(Map.create(), availability.getAvailability(location))\n\n availability.addAvailability(location, date, WonderlandTrailReservationType.Walkup);\n\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), { groupSite: undefined, individualSite: WonderlandTrailReservationType.Walkup });\n test.assertEqual(expected, availability.getAvailability(location));\n });\n\n runner.test(\"with group site data\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n test.assertEqual(Map.create(), availability.getAvailability(location))\n\n availability.addAvailability(location, date, undefined, WonderlandTrailReservationType.Reserved);\n\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), { groupSite: WonderlandTrailReservationType.Reserved, individualSite: undefined });\n test.assertEqual(expected, availability.getAvailability(location));\n });\n });\n\n runner.testFunction(\"getAvailability()\", () =>\n {\n function getAvailabilityErrorTest(location: WonderlandTrailLocation, expected: Error): void\n {\n runner.test(`with ${runner.toString(location)}`, (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.getAvailability(location), expected);\n });\n }\n\n getAvailabilityErrorTest(undefined!, new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getAvailabilityErrorTest(null!, new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"when location isn't found\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const locationAvailability: MutableMap<string, WonderlandTrailAvailabilityType> = availability.getAvailability(location);\n test.assertNotUndefinedAndNotNull(locationAvailability);\n test.assertFalse(locationAvailability.any().await());\n test.assertSame(locationAvailability, availability.getAvailability(location));\n });\n\n runner.test(\"when location is found\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n availability.addAvailability(location, date, WonderlandTrailReservationType.Reserved, WonderlandTrailReservationType.Walkup);\n\n const locationAvailability: MutableMap<string, WonderlandTrailAvailabilityType> = availability.getAvailability(location);\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), {\n groupSite: WonderlandTrailReservationType.Walkup,\n individualSite: WonderlandTrailReservationType.Reserved,\n });\n test.assertEqual(locationAvailability, expected);\n test.assertSame(locationAvailability, availability.getAvailability(location));\n });\n });\n\n runner.testFunction(\"getDayAvailability()\", () =>\n {\n function getDayAvailabilityErrorTest(location: WonderlandTrailLocation, date: DateTime, expected: Error): void\n {\n runner.test(`with ${runner.andList([location, date])}`, (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.getDayAvailability(location, date).await(), expected);\n });\n }\n\n getDayAvailabilityErrorTest(undefined!, DateTime.parse(\"2025-07-04\"), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getDayAvailabilityErrorTest(null!, DateTime.parse(\"2025-07-04\"), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n getDayAvailabilityErrorTest(WonderlandTrailLocations.boxCanyon, undefined!, new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getDayAvailabilityErrorTest(WonderlandTrailLocations.boxCanyon, null!, new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with not found location or date\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n\n test.assertThrows(() => availability.getDayAvailability(location, date).await(), new NotFoundError(\n \"No availability was found for Box Canyon on 2025-07-04.\",\n ));\n });\n\n runner.test(\"when location and date are found\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n availability.addAvailability(location, date, WonderlandTrailReservationType.Reserved, WonderlandTrailReservationType.Walkup);\n\n const dayAvailability: WonderlandTrailAvailabilityType = availability.getDayAvailability(location, date).await();\n const expected: WonderlandTrailAvailabilityType = {\n groupSite: WonderlandTrailReservationType.Walkup,\n individualSite: WonderlandTrailReservationType.Reserved,\n };\n test.assertEqual(dayAvailability, expected);\n test.assertSame(dayAvailability, availability.getDayAvailability(location, date).await());\n });\n });\n });\n\n runner.testType(\"WonderlandTrailDirection\", () =>\n {\n runner.testFunction(\"toString()\", (test: Test) =>\n {\n test.assertEqual(\"Clockwise\", WonderlandTrailDirection.clockwise.toString());\n test.assertEqual(\"CounterClockwise\", WonderlandTrailDirection.counterClockwise.toString());\n });\n\n runner.testFunction(\"reverse()\", (test: Test) =>\n {\n test.assertSame(WonderlandTrailDirection.counterClockwise, WonderlandTrailDirection.clockwise.reverse());\n test.assertSame(WonderlandTrailDirection.clockwise, WonderlandTrailDirection.counterClockwise.reverse());\n });\n });\n\n runner.testType(\"WonderlandTrailConnection\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.carbonRiver,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n test.assertNotUndefinedAndNotNull(connection);\n test.assertEqual(connection.startLocation, WonderlandTrailLocations.boxCanyon);\n test.assertEqual(connection.endLocation, WonderlandTrailLocations.carbonRiver);\n test.assertEqual(connection.distanceMiles, 5000);\n test.assertEqual(connection.ascentFeet, 2000);\n test.assertEqual(connection.descentFeet, 10);\n test.assertEqual(connection.direction, WonderlandTrailDirection.clockwise);\n test.assertEqual(connection.intermediateLocations, Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]));\n });\n\n runner.testFunction(\"getLocations()\", () =>\n {\n runner.test(\"when connection is not a loop\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.carbonRiver,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n test.assertEqual(connection.getLocations(), Iterable.create([\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n WonderlandTrailLocations.carbonRiver,\n ]));\n });\n\n runner.test(\"when connection is a loop\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.boxCanyon,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n test.assertEqual(connection.getLocations(), Iterable.create([\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]));\n });\n });\n\n runner.testFunction(\"reverseDirection()\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.carbonRiver,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n const reversedConnection: WonderlandTrailConnection = connection.reverseDirection();\n test.assertNotSame(connection, reversedConnection);\n test.assertEqual(reversedConnection.startLocation, WonderlandTrailLocations.carbonRiver);\n test.assertEqual(reversedConnection.endLocation, WonderlandTrailLocations.boxCanyon);\n test.assertEqual(reversedConnection.distanceMiles, 5000);\n test.assertEqual(reversedConnection.ascentFeet, 10);\n test.assertEqual(reversedConnection.descentFeet, 2000);\n test.assertEqual(reversedConnection.direction, WonderlandTrailDirection.counterClockwise);\n test.assertEqual(reversedConnection.intermediateLocations, Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]));\n });\n });\n\n runner.testType(\"WonderlandTrailClient\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with undefined HttpClient\", (test: Test) =>\n {\n test.assertThrows(() => WonderlandTrailClient.create(undefined!), new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null HttpClient\", (test: Test) =>\n {\n test.assertThrows(() => WonderlandTrailClient.create(null!), new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with defined HttpClient\", (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n test.assertNotUndefinedAndNotNull(client);\n });\n });\n\n runner.testFunction(\"getAvailability()\", runner.skip(true, \"Ignore slow running tests for now\"), () =>\n {\n runner.test(\"with year in the past\", async (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n\n const availability: WonderlandTrailAvailability = await client.getAvailability(4, 2023, true, true, true);\n test.assertNotUndefinedAndNotNull(availability);\n test.assertFalse(availability.any());\n });\n\n runner.test(\"with month in the past\", async (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n\n const availability: WonderlandTrailAvailability = await client.getAvailability(3, 2026, true, true, true);\n test.assertNotUndefinedAndNotNull(availability);\n test.assertFalse(availability.any());\n });\n\n runner.test(\"with a future month in the current year\", async (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n\n const availability: WonderlandTrailAvailability = await client.getAvailability({\n month: 7,\n year: 2026,\n allowGroupSites: true,\n allowIndividualSites: true,\n allowWalkupPermits: true,\n });\n test.assertNotUndefinedAndNotNull(availability);\n test.assertTrue(availability.any());\n });\n });\n });\n });\n}","import { CharacterTable } from \"../sources/CharacterTable\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"CharacterTable.ts\", () =>\n {\n runner.testType(\"CharacterTable\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const table: CharacterTable = CharacterTable.create();\n test.assertNotUndefinedAndNotNull(table);\n });\n });\n });\n}","import { ConsoleTestRunner } from \"./consoleTestRunner\";\r\nimport * as assertTestTests from \"./assertTestTests\";\r\nimport * as byteListStreamTests from \"./byteListStreamTests\";\r\nimport * as byteListTests from \"./byteListTests\";\r\nimport * as byteTests from \"./bytesTests\";\r\nimport * as characterListStreamTests from \"./characterListStreamTests\";\r\nimport * as characterListTests from \"./characterListTests\";\r\nimport * as commandLineParametersTests from \"./CommandLineParametersTests\";\r\nimport * as comparerTests from \"./comparerTests\";\r\nimport * as conditionTests from \"./conditionTests\";\r\nimport * as consoleTestRunner2Tests from \"./consoleTestRunnerTests\";\r\nimport * as dateTimeTests from \"./dateTimeTests\";\r\nimport * as depthFirstSearchTests from \"./depthFirstSearchTests\";\r\nimport * as disposableTests from \"./disposableTests\";\r\nimport * as englishTests from \"./englishTests\";\r\nimport * as equalFunctionsTests from \"./equalFunctionsTests\";\r\nimport * as fetchHttpClientTests from \"./fetchHttpClientTests\";\r\nimport * as generatorTests from \"./generatorTests\";\r\nimport * as httpClientTests from \"./httpClientTests\";\r\nimport * as indentedCharacterWriteStreamTests from \"./IndentedCharacterWriteStreamTests\";\r\nimport * as inMemoryCharacterWriteStreamTests from \"./inMemoryCharacterWriteStreamTests\";\r\nimport * as iterableTests from \"./iterableTests\";\r\nimport * as iteratorTests from \"./iteratorTests\";\r\nimport * as javascriptMapMapTests from \"./javascriptMapMapTests\";\r\nimport * as listTests from \"./listTests\";\r\nimport * as mapIteratorTests from \"./mapIteratorTests\";\r\nimport * as mapTests from \"./mapTests\";\r\nimport * as mutableConditionTests from \"./mutableConditionTests\";\r\nimport * as mutableMapTests from \"./mutableMapTests\";\r\nimport * as notFoundErrorTests from \"./notFoundErrorTests\";\r\nimport * as postConditionErrorTests from \"./postConditionErrorTests\";\r\nimport * as preConditionErrorTests from \"./preConditionErrorTests\";\r\nimport * as promiseAsyncResultTests from \"./promiseAsyncResultTests\";\r\nimport * as propertyTests from \"./propertyTests\";\r\nimport * as queueTests from \"./queueTests\";\r\nimport * as realHttpServerTests from \"./nodeJSHttpServerTests\";\r\nimport * as recreationDotGovClientTests from \"./recreationDotGovClientTests\";\r\nimport * as setTests from \"./setTests\";\r\nimport * as stackTests from \"./stackTests\";\r\nimport * as stringComparerTests from \"./stringComparerTests\";\r\nimport * as stringIteratorTests from \"./stringIteratorTests\";\r\nimport * as stringsTests from \"./stringsTests\";\r\nimport * as syncResultTests from \"./syncResultTests\";\r\nimport * as testActionTests from \"./testActionTests\";\r\nimport * as testRunnerTests from \"./testRunnerTests\";\r\nimport * as toStringFunctionsTests from \"./toStringFunctionsTests\";\r\nimport * as typesTests from \"./typesTests\";\r\nimport * as whereIteratorTests from \"./whereIteratorTests\";\r\nimport * as wonderlandTrailClientTests from \"./wonderlandTrailClientTests\";\r\nimport * as characterTableTests from \"./CharacterTableTests\";\r\nimport * as indexableTests from \"./IndexableTests\";\r\n\r\nexport const hasNetworkAccess: boolean = true;\r\n\r\nasync function tests(): Promise<void>\r\n{\r\n await ConsoleTestRunner.run([\r\n assertTestTests,\r\n byteListStreamTests,\r\n byteListTests,\r\n byteTests.test,\r\n characterListStreamTests,\r\n characterListTests,\r\n commandLineParametersTests,\r\n comparerTests,\r\n conditionTests,\r\n consoleTestRunner2Tests,\r\n dateTimeTests,\r\n depthFirstSearchTests,\r\n disposableTests,\r\n englishTests,\r\n equalFunctionsTests.test,\r\n fetchHttpClientTests,\r\n generatorTests,\r\n httpClientTests,\r\n indentedCharacterWriteStreamTests,\r\n inMemoryCharacterWriteStreamTests,\r\n iterableTests,\r\n iteratorTests,\r\n javascriptMapMapTests,\r\n listTests,\r\n mapIteratorTests,\r\n mapTests,\r\n mutableConditionTests,\r\n mutableMapTests,\r\n notFoundErrorTests,\r\n postConditionErrorTests,\r\n preConditionErrorTests,\r\n promiseAsyncResultTests.test,\r\n propertyTests,\r\n queueTests,\r\n realHttpServerTests,\r\n recreationDotGovClientTests,\r\n setTests,\r\n stackTests,\r\n stringComparerTests,\r\n stringIteratorTests,\r\n stringsTests,\r\n syncResultTests,\r\n testActionTests,\r\n testRunnerTests,\r\n toStringFunctionsTests,\r\n typesTests,\r\n whereIteratorTests,\r\n wonderlandTrailClientTests,\r\n characterTableTests,\r\n indexableTests,\r\n ]);\r\n}\r\n\r\ntests();"],"mappings":"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","names":["test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test2","test","test2","test","test2","testGroupAction","test","test","test","test","test","test","test","test","test","result","test","test","test","test","test","test","test","test","test","test","result","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","value","quote","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test"]}