11import { 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" ;
33import { CancellationSource } from "../../src/cancellation/CancellationSource.js" ;
44import { TaskCancelledError } from "../../src/cancellation/TaskCancelledError.js" ;
55import { 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
89describe ( "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