1- import { test } from 'vitest'
2-
3- import { Bench , type Task } from '../src'
4-
5- /**
6- * This helper function is used to assert that a value is assignable to a specific type.
7- * It does not produce any runtime code and is only used for type checking during development.
8- * @param value - The value to be checked for type assignability.
9- * @returns The same value that was passed in.
10- */
11- function expectAssignable < T > ( value : T ) {
12- return value
13- }
1+ import { expectTypeOf , test } from 'vitest'
2+
3+ import {
4+ Bench ,
5+ type BenchEvent ,
6+ type BenchLike ,
7+ type Task ,
8+ } from '../src'
9+
10+ type NativeAddEventListenerParameters = Parameters <
11+ EventTarget [ 'addEventListener' ]
12+ >
13+ type NativeRemoveEventListenerParameters = Parameters <
14+ EventTarget [ 'removeEventListener' ]
15+ >
1416
1517test ( 'events properties' , ( ) => {
16- const bench = new Bench ( )
18+ const bench = new Bench ( ) . add ( 'foo' , ( ) => undefined )
19+ const benchLike : BenchLike = bench
20+
21+ // The native fallback must remain the final overload on every public surface.
22+ expectTypeOf < Parameters < Bench [ 'addEventListener' ] > > ( )
23+ . toEqualTypeOf < NativeAddEventListenerParameters > ( )
24+ expectTypeOf < Parameters < Bench [ 'removeEventListener' ] > > ( )
25+ . toEqualTypeOf < NativeRemoveEventListenerParameters > ( )
26+ expectTypeOf < Parameters < Task [ 'addEventListener' ] > > ( )
27+ . toEqualTypeOf < NativeAddEventListenerParameters > ( )
28+ expectTypeOf < Parameters < Task [ 'removeEventListener' ] > > ( )
29+ . toEqualTypeOf < NativeRemoveEventListenerParameters > ( )
30+ expectTypeOf < Parameters < BenchLike [ 'addEventListener' ] > > ( )
31+ . toEqualTypeOf < NativeAddEventListenerParameters > ( )
32+ expectTypeOf < Parameters < BenchLike [ 'removeEventListener' ] > > ( )
33+ . toEqualTypeOf < NativeRemoveEventListenerParameters > ( )
1734
1835 const fooTask = bench . getTask ( 'foo' )
1936
@@ -22,84 +39,124 @@ test('events properties', () => {
2239 // Task events
2340
2441 fooTask . addEventListener ( 'abort' , evt => {
25- expectAssignable ( evt . task )
26- expectAssignable ( evt . error )
42+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'abort' , 'task' > > ( )
2743 } )
2844
2945 fooTask . addEventListener ( 'complete' , evt => {
30- expectAssignable ( evt . task )
31- expectAssignable ( evt . error )
46+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'complete' , 'task' > > ( )
3247 } )
3348
3449 fooTask . addEventListener ( 'cycle' , evt => {
35- expectAssignable ( evt . task )
36- expectAssignable ( evt . error )
50+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'cycle' , 'task' > > ( )
3751 } )
3852
3953 fooTask . addEventListener ( 'error' , evt => {
40- expectAssignable ( evt . task )
41- expectAssignable ( evt . error )
54+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'error' , 'task' > > ( )
4255 } )
4356
4457 fooTask . addEventListener ( 'reset' , evt => {
45- expectAssignable ( evt . task )
46- expectAssignable ( evt . error )
58+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'reset' , 'task' > > ( )
4759 } )
4860
4961 fooTask . addEventListener ( 'start' , evt => {
50- expectAssignable ( evt . task )
51- expectAssignable ( evt . error )
62+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'start' , 'task' > > ( )
5263 } )
5364
5465 fooTask . addEventListener ( 'warmup' , evt => {
55- expectAssignable ( evt . task )
56- expectAssignable ( evt . error )
66+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'warmup' , 'task' > > ( )
67+ } )
68+
69+ fooTask . addEventListener ( 'warning' , evt => {
70+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'warning' , 'task' > > ( )
71+ } )
72+
73+ fooTask . addEventListener ( 'custom' , evt => {
74+ expectTypeOf ( evt ) . not . toBeAny ( )
75+ expectTypeOf ( evt ) . toEqualTypeOf < Event > ( )
76+ } )
77+
78+ fooTask . removeEventListener ( 'custom' , evt => {
79+ expectTypeOf ( evt ) . not . toBeAny ( )
80+ expectTypeOf ( evt ) . toEqualTypeOf < Event > ( )
81+ } )
82+
83+ fooTask . removeEventListener ( 'abort' , evt => {
84+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'abort' , 'task' > > ( )
5785 } )
5886
5987 // Bench events
6088
6189 bench . addEventListener ( 'abort' , evt => {
62- expectAssignable < Task | undefined > ( evt . task )
63- expectAssignable ( evt . error )
90+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'abort' > > ( )
6491 } )
6592
6693 bench . addEventListener ( 'add' , evt => {
67- expectAssignable ( evt . task )
68- expectAssignable ( evt . error )
94+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'add' > > ( )
6995 } )
7096
7197 bench . addEventListener ( 'complete' , evt => {
72- expectAssignable ( evt . task )
73- expectAssignable ( evt . error )
98+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'complete' > > ( )
7499 } )
75100
76101 bench . addEventListener ( 'cycle' , evt => {
77- expectAssignable ( evt . task )
78- expectAssignable ( evt . error )
102+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'cycle' > > ( )
79103 } )
80104
81105 bench . addEventListener ( 'error' , evt => {
82- expectAssignable ( evt . task )
83- expectAssignable ( evt . error )
106+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'error' > > ( )
84107 } )
85108
86109 bench . addEventListener ( 'remove' , evt => {
87- expectAssignable ( evt . task )
88- expectAssignable ( evt . error )
110+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'remove' > > ( )
89111 } )
90112
91113 bench . addEventListener ( 'reset' , evt => {
92- expectAssignable ( evt . task )
93- expectAssignable ( evt . error )
114+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'reset' > > ( )
94115 } )
95116
96117 bench . addEventListener ( 'start' , evt => {
97- expectAssignable ( evt . task )
98- expectAssignable ( evt . error )
118+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'start' > > ( )
119+ } )
120+
121+ bench . addEventListener ( 'warning' , evt => {
122+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'warning' > > ( )
99123 } )
100124
101125 bench . addEventListener ( 'warmup' , evt => {
102- expectAssignable ( evt . task )
103- expectAssignable ( evt . error )
126+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'warmup' > > ( )
127+ } )
128+
129+ bench . addEventListener ( 'custom' , evt => {
130+ expectTypeOf ( evt ) . not . toBeAny ( )
131+ expectTypeOf ( evt ) . toEqualTypeOf < Event > ( )
132+ } )
133+
134+ bench . removeEventListener ( 'custom' , evt => {
135+ expectTypeOf ( evt ) . not . toBeAny ( )
136+ expectTypeOf ( evt ) . toEqualTypeOf < Event > ( )
137+ } )
138+
139+ bench . removeEventListener ( 'abort' , evt => {
140+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'abort' > > ( )
141+ } )
142+
143+ // BenchLike events
144+
145+ benchLike . addEventListener ( 'abort' , evt => {
146+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'abort' > > ( )
147+ } )
148+
149+ benchLike . removeEventListener ( 'abort' , evt => {
150+ expectTypeOf ( evt ) . toEqualTypeOf < BenchEvent < 'abort' > > ( )
151+ } )
152+
153+ benchLike . addEventListener ( 'custom' , evt => {
154+ expectTypeOf ( evt ) . not . toBeAny ( )
155+ expectTypeOf ( evt ) . toEqualTypeOf < Event > ( )
156+ } )
157+
158+ benchLike . removeEventListener ( 'custom' , evt => {
159+ expectTypeOf ( evt ) . not . toBeAny ( )
160+ expectTypeOf ( evt ) . toEqualTypeOf < Event > ( )
104161 } )
105162} )
0 commit comments