Skip to content

Commit 5b4d2d8

Browse files
authored
Merge pull request #28 from WJSoftware:JP/Tests
tests: Add unit testing for the Enqueue and EnqueueFn types
2 parents eeda51e + 5a32e9a commit 5b4d2d8

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

tests/typetests/index.test.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { describe, expect, test } from "tstyche";
2-
import type { Token, WorkerTasks, AsyncMessage } from "../../src/workers.js";
2+
import type { Token, WorkerTasks, AsyncMessage, QueueingOptions } from "../../src/workers.js";
33
import { CancellationSource } from "../../src/cancellation/CancellationSource.js";
44
import { TaskCancelledError } from "../../src/cancellation/TaskCancelledError.js";
55
import { Queue } from "../../src/misc/Queue.js";
6-
import { AsyncWorker, type Enqueue, type EnqueueFn } from "../../src/workers/AsyncWorker.js";
6+
import type { Enqueue, EnqueueFn } from "../../src/workers/AsyncWorker.js";
7+
import { WorkItem } from "../../src/workers/WorkItem.js";
78

89
describe("Type Tests", () => {
910
test("Token should be Int32Array", () => {
@@ -86,3 +87,26 @@ describe("Type Tests", () => {
8687
expect(stringQueue.enqueue).type.not.toBeCallableWith({});
8788
});
8889
});
90+
91+
describe('Enqueue, EnqueueFn', () => {
92+
type TestTasks = {
93+
add: (args: { a: number; b: number }) => number;
94+
greet: (args: { name: string }) => string;
95+
noArgs: () => void;
96+
};
97+
test("EnqueueFn should generate correct task functions.", () => {
98+
expect<EnqueueFn<TestTasks['add']>>().type.toBeCallableWith({ a: 1, b: 2 });
99+
expect<EnqueueFn<TestTasks['add']>>().type.toBeCallableWith({ a: 1, b: 2 }, { cancellable: true });
100+
expect<EnqueueFn<TestTasks['greet']>>().type.toBeCallableWith({ name: "Alice" });
101+
expect<EnqueueFn<TestTasks['greet']>>().type.toBeCallableWith({ name: "Alice" }, { cancellable: true });
102+
expect<EnqueueFn<TestTasks['noArgs']>>().type.toBeCallableWith();
103+
expect<EnqueueFn<TestTasks['noArgs']>>().type.toBeCallableWith(undefined, { cancellable: true });
104+
});
105+
test("Enqueue should map task names to EnqueueFn correctly.", () => {
106+
expect<Enqueue<TestTasks>>().type.toBe<{
107+
add: (payload: { a: number; b: number }, options?: QueueingOptions) => WorkItem<number>;
108+
greet: (payload: { name: string }, options?: QueueingOptions) => WorkItem<string>;
109+
noArgs: (payload: void, options?: QueueingOptions) => WorkItem<void>;
110+
}>();
111+
});
112+
});

0 commit comments

Comments
 (0)