@@ -8,7 +8,7 @@ import * as assert from 'assert';
88import { CancellationTokenSource , RequestMessage , RequestType0 , ResponseMessage } from '../../common/api' ;
99import { SharedArrayReceiverStrategy , SharedArraySenderStrategy } from '../../common/sharedArrayCancellation' ;
1010import { BrowserMessageReader , BrowserMessageWriter , createMessageConnection } from '../main' ;
11- import RIL from '../ril' ;
11+ import RIL , { QueueMicrotaskImpl , PromiseImpl } from '../ril' ;
1212
1313function assertDefined < T > ( value : T | undefined | null ) : asserts value is T {
1414 assert . ok ( value !== undefined && value !== null ) ;
@@ -106,4 +106,61 @@ suite('Browser IPC Reader / Writer', () => {
106106 const result = await promise ;
107107 assert . ok ( result , 'Cancellation failed' ) ;
108108 } ) ;
109+
110+ test ( 'QueueMicrotaskImpl' , async ( ) => {
111+ let called = false ;
112+ new QueueMicrotaskImpl ( ( ) => {
113+ called = true ;
114+ } ) ;
115+ await new Promise ( ( resolve ) => setTimeout ( resolve , 10 ) ) ;
116+ assert . strictEqual ( called , true , 'QueueMicrotaskImpl callback not called' ) ;
117+ } ) ;
118+
119+ test ( 'QueueMicrotaskImpl dispose' , async ( ) => {
120+ let called = false ;
121+ const queueMicrotask = new QueueMicrotaskImpl ( ( ) => {
122+ called = true ;
123+ } ) ;
124+ queueMicrotask . dispose ( ) ;
125+ await new Promise ( ( resolve ) => setTimeout ( resolve , 10 ) ) ;
126+ assert . strictEqual ( called , false , 'QueueMicrotaskImpl callback called after dispose' ) ;
127+ } ) ;
128+
129+ test ( 'PromiseImpl' , async ( ) => {
130+ let called = false ;
131+ new PromiseImpl ( ( ) => {
132+ called = true ;
133+ } ) ;
134+ await new Promise ( ( resolve ) => setTimeout ( resolve , 10 ) ) ;
135+ assert . strictEqual ( called , true , 'PromiseImpl callback not called' ) ;
136+ } ) ;
137+
138+ test ( 'PromiseImpl dispose' , async ( ) => {
139+ let called = false ;
140+ const promiseImpl = new PromiseImpl ( ( ) => {
141+ called = true ;
142+ } ) ;
143+ promiseImpl . dispose ( ) ;
144+ await new Promise ( ( resolve ) => setTimeout ( resolve , 10 ) ) ;
145+ assert . strictEqual ( called , false , 'PromiseImpl callback called after dispose' ) ;
146+ } ) ;
147+
148+ test ( 'setImmediate' , async ( ) => {
149+ let called = false ;
150+ RIL ( ) . timer . setImmediate ( ( ) => {
151+ called = true ;
152+ } ) ;
153+ await new Promise ( ( resolve ) => setTimeout ( resolve , 10 ) ) ;
154+ assert . strictEqual ( called , true , 'setImmediate callback not called' ) ;
155+ } ) ;
156+
157+ test ( 'setImmediate dispose' , async ( ) => {
158+ let called = false ;
159+ const disposable = RIL ( ) . timer . setImmediate ( ( ) => {
160+ called = true ;
161+ } ) ;
162+ disposable . dispose ( ) ;
163+ await new Promise ( ( resolve ) => setTimeout ( resolve , 10 ) ) ;
164+ assert . strictEqual ( called , false , 'setImmediate callback called after dispose' ) ;
165+ } ) ;
109166} ) ;
0 commit comments