@@ -3,7 +3,16 @@ import test from 'ava';
3
3
4
4
import { Far } from '@endo/far' ;
5
5
import { makeHeapZone } from '@agoric/base-zone/heap.js' ;
6
- import * as cb from '../src/callback.js' ;
6
+ import {
7
+ makeSyncFunctionCallback ,
8
+ makeSyncMethodCallback ,
9
+ callSync ,
10
+ makeMethodCallback ,
11
+ callE ,
12
+ makeFunctionCallback ,
13
+ isCallback ,
14
+ prepareAttenuator ,
15
+ } from '../src/callback.js' ;
7
16
import {
8
17
passableSymbolForName ,
9
18
unpassableSymbolForName ,
@@ -21,36 +30,36 @@ test('near function callbacks', t => {
21
30
const f = ( a , b , c ) => `${ a + b } ${ c } ` ;
22
31
23
32
/** @type {SyncCallback<typeof f> } */
24
- const cb0 = cb . makeSyncFunctionCallback ( f ) ;
33
+ const cb0 = makeSyncFunctionCallback ( f ) ;
25
34
t . deepEqual ( cb0 , { target : f , bound : [ ] , isSync : true } ) ;
26
35
27
36
/** @type {SyncCallback<(b: number, c: string) => string> } */
28
- const cb1 = cb . makeSyncFunctionCallback ( f , 9 ) ;
37
+ const cb1 = makeSyncFunctionCallback ( f , 9 ) ;
29
38
t . deepEqual ( cb1 , { target : f , bound : [ 9 ] , isSync : true } ) ;
30
39
31
40
/** @type {SyncCallback<(c: string) => string> } */
32
- const cb2 = cb . makeSyncFunctionCallback ( f , 9 , 10 ) ;
41
+ const cb2 = makeSyncFunctionCallback ( f , 9 , 10 ) ;
33
42
t . deepEqual ( cb2 , { target : f , bound : [ 9 , 10 ] , isSync : true } ) ;
34
43
35
44
// @ts -expect-error deliberate: boolean is not assignable to string
36
- const cb3 = cb . makeSyncFunctionCallback ( f , 9 , 10 , true ) ;
45
+ const cb3 = makeSyncFunctionCallback ( f , 9 , 10 , true ) ;
37
46
t . deepEqual ( cb3 , { target : f , bound : [ 9 , 10 , true ] , isSync : true } ) ;
38
47
39
48
// @ts -expect-error deliberate: Expected 4 arguments but got 5
40
- t . is ( cb . callSync ( cb0 , 2 , 3 , 'go' , 'bad' ) , '5go' ) ;
49
+ t . is ( callSync ( cb0 , 2 , 3 , 'go' , 'bad' ) , '5go' ) ;
41
50
42
51
// @ts -expect-error deliberate: number is not assignable to string
43
- t . is ( cb . callSync ( cb0 , 2 , 3 , 2 ) , '52' ) ;
52
+ t . is ( callSync ( cb0 , 2 , 3 , 2 ) , '52' ) ;
44
53
45
- t . is ( cb . callSync ( cb1 , 10 , 'go' ) , '19go' ) ;
46
- t . is ( cb . callSync ( cb2 , 'go' ) , '19go' ) ;
54
+ t . is ( callSync ( cb1 , 10 , 'go' ) , '19go' ) ;
55
+ t . is ( callSync ( cb2 , 'go' ) , '19go' ) ;
47
56
48
57
const cbp2 = /** @type {SyncCallback<(...args: unknown[]) => any> } */ ( {
49
58
target : Promise . resolve ( f ) ,
50
59
methodName : undefined ,
51
60
bound : [ 9 , 10 ] ,
52
61
} ) ;
53
- t . throws ( ( ) => cb . callSync ( cbp2 , 'go' ) , { message : / n o t a f u n c t i o n / } ) ;
62
+ t . throws ( ( ) => callSync ( cbp2 , 'go' ) , { message : / n o t a f u n c t i o n / } ) ;
54
63
} ) ;
55
64
56
65
test ( 'near method callbacks' , t => {
@@ -78,15 +87,15 @@ test('near method callbacks', t => {
78
87
} ;
79
88
80
89
/** @type {SyncCallback<typeof o.m1> } */
81
- const cb0 = cb . makeSyncMethodCallback ( o , 'm1' ) ;
90
+ const cb0 = makeSyncMethodCallback ( o , 'm1' ) ;
82
91
t . deepEqual ( cb0 , { target : o , methodName : 'm1' , bound : [ ] , isSync : true } ) ;
83
92
84
93
/** @type {SyncCallback<(b: number, c: string) => string> } */
85
- const cb1 = cb . makeSyncMethodCallback ( o , 'm1' , 9 ) ;
94
+ const cb1 = makeSyncMethodCallback ( o , 'm1' , 9 ) ;
86
95
t . deepEqual ( cb1 , { target : o , methodName : 'm1' , bound : [ 9 ] , isSync : true } ) ;
87
96
88
97
/** @type {SyncCallback<(c: string) => string> } */
89
- const cb2 = cb . makeSyncMethodCallback ( o , 'm1' , 9 , 10 ) ;
98
+ const cb2 = makeSyncMethodCallback ( o , 'm1' , 9 , 10 ) ;
90
99
t . deepEqual ( cb2 , {
91
100
target : o ,
92
101
methodName : 'm1' ,
@@ -95,7 +104,7 @@ test('near method callbacks', t => {
95
104
} ) ;
96
105
97
106
// @ts -expect-error deliberate: boolean is not assignable to string
98
- const cb3 = cb . makeSyncMethodCallback ( o , 'm1' , 9 , 10 , true ) ;
107
+ const cb3 = makeSyncMethodCallback ( o , 'm1' , 9 , 10 , true ) ;
99
108
t . deepEqual ( cb3 , {
100
109
target : o ,
101
110
methodName : 'm1' ,
@@ -104,24 +113,24 @@ test('near method callbacks', t => {
104
113
} ) ;
105
114
106
115
/** @type {SyncCallback<(c: string) => string> } */
107
- const cb4 = cb . makeSyncMethodCallback ( o , m2 , 9 , 10 ) ;
116
+ const cb4 = makeSyncMethodCallback ( o , m2 , 9 , 10 ) ;
108
117
t . deepEqual ( cb4 , { target : o , methodName : m2 , bound : [ 9 , 10 ] , isSync : true } ) ;
109
118
110
119
// @ts -expect-error deliberate: Expected 4 arguments but got 5
111
- t . is ( cb . callSync ( cb0 , 2 , 3 , 'go' , 'bad' ) , '5go' ) ;
120
+ t . is ( callSync ( cb0 , 2 , 3 , 'go' , 'bad' ) , '5go' ) ;
112
121
113
122
// @ts -expect-error deliberate: number is not assignable to string
114
- t . is ( cb . callSync ( cb0 , 2 , 3 , 2 ) , '52' ) ;
123
+ t . is ( callSync ( cb0 , 2 , 3 , 2 ) , '52' ) ;
115
124
116
- t . is ( cb . callSync ( cb1 , 10 , 'go' ) , '19go' ) ;
117
- t . is ( cb . callSync ( cb2 , 'go' ) , '19go' ) ;
118
- t . is ( cb . callSync ( cb4 , 'go' ) , '19go' ) ;
125
+ t . is ( callSync ( cb1 , 10 , 'go' ) , '19go' ) ;
126
+ t . is ( callSync ( cb2 , 'go' ) , '19go' ) ;
127
+ t . is ( callSync ( cb4 , 'go' ) , '19go' ) ;
119
128
120
129
// @ts -expect-error deliberate: Promise provides no match for the signature
121
- const cbp2 = cb . makeSyncMethodCallback ( Promise . resolve ( o ) , 'm1' , 9 , 10 ) ;
130
+ const cbp2 = makeSyncMethodCallback ( Promise . resolve ( o ) , 'm1' , 9 , 10 ) ;
122
131
t . like ( cbp2 , { methodName : 'm1' , bound : [ 9 , 10 ] , isSync : true } ) ;
123
132
t . assert ( cbp2 . target instanceof Promise ) ;
124
- t . throws ( ( ) => cb . callSync ( cbp2 , 'go' ) , { message : / n o t a f u n c t i o n / } ) ;
133
+ t . throws ( ( ) => callSync ( cbp2 , 'go' ) , { message : / n o t a f u n c t i o n / } ) ;
125
134
} ) ;
126
135
127
136
test ( 'far method callbacks' , async t => {
@@ -148,23 +157,23 @@ test('far method callbacks', async t => {
148
157
} ) ;
149
158
150
159
/** @type {Callback<(c: string) => Promise<string>> } */
151
- const cbp2 = cb . makeMethodCallback ( Promise . resolve ( o ) , 'm1' , 9 , 10 ) ;
160
+ const cbp2 = makeMethodCallback ( Promise . resolve ( o ) , 'm1' , 9 , 10 ) ;
152
161
t . like ( cbp2 , { methodName : 'm1' , bound : [ 9 , 10 ] } ) ;
153
162
t . assert ( cbp2 . target instanceof Promise ) ;
154
- const p2r = cb . callE ( cbp2 , 'go' ) ;
163
+ const p2r = callE ( cbp2 , 'go' ) ;
155
164
t . assert ( p2r instanceof Promise ) ;
156
165
t . is ( await p2r , '19go' ) ;
157
166
158
167
/** @type {Callback<(c: string) => Promise<string>> } */
159
- const cbp3 = cb . makeMethodCallback ( Promise . resolve ( o ) , 'm2' , 9 , 10 ) ;
168
+ const cbp3 = makeMethodCallback ( Promise . resolve ( o ) , 'm2' , 9 , 10 ) ;
160
169
t . like ( cbp3 , { methodName : 'm2' , bound : [ 9 , 10 ] } ) ;
161
170
t . assert ( cbp3 . target instanceof Promise ) ;
162
- const p3r = cb . callE ( cbp3 , 'go' ) ;
171
+ const p3r = callE ( cbp3 , 'go' ) ;
163
172
t . assert ( p3r instanceof Promise ) ;
164
173
t . is ( await p3r , '19go' ) ;
165
174
166
175
// @ts -expect-error deliberate: is not assignable to SyncCallback
167
- const thunk = ( ) => cb . callSync ( cbp2 , 'go' ) ;
176
+ const thunk = ( ) => callSync ( cbp2 , 'go' ) ;
168
177
t . throws ( thunk , { message : / n o t a f u n c t i o n / } ) ;
169
178
} ) ;
170
179
@@ -178,105 +187,96 @@ test('far function callbacks', async t => {
178
187
const f = async ( a , b , c ) => `${ a + b } ${ c } ` ;
179
188
180
189
/** @type {Callback<(c: string) => Promise<string>> } */
181
- const cbp2 = cb . makeFunctionCallback ( Promise . resolve ( f ) , 9 , 10 ) ;
190
+ const cbp2 = makeFunctionCallback ( Promise . resolve ( f ) , 9 , 10 ) ;
182
191
t . like ( cbp2 , { bound : [ 9 , 10 ] } ) ;
183
192
t . assert ( cbp2 . target instanceof Promise ) ;
184
193
// @ts -expect-error deliberate: is not assignable to SyncCallback
185
- const thunk = ( ) => cb . callSync ( cbp2 , 'go' ) ;
194
+ const thunk = ( ) => callSync ( cbp2 , 'go' ) ;
186
195
t . throws ( thunk , { message : / n o t a f u n c t i o n / } ) ;
187
- const p2r = cb . callE ( cbp2 , 'go' ) ;
196
+ const p2r = callE ( cbp2 , 'go' ) ;
188
197
t . assert ( p2r instanceof Promise ) ;
189
198
t . is ( await p2r , '19go' ) ;
190
199
} ) ;
191
200
192
201
test ( 'bad callbacks' , t => {
193
202
t . throws (
194
203
// @ts -expect-error deliberate: number is not assignable to function
195
- ( ) => cb . makeFunctionCallback ( 42 ) ,
204
+ ( ) => makeFunctionCallback ( 42 ) ,
196
205
undefined ,
197
206
'number as function presence' ,
198
207
) ;
199
208
t . throws (
200
- ( ) => cb . makeMethodCallback ( 'string' , 'slice' ) ,
209
+ ( ) => makeMethodCallback ( 'string' , 'slice' ) ,
201
210
undefined ,
202
211
'string as presence' ,
203
212
) ;
204
213
t . throws (
205
214
// @ts -expect-error deliberate: object is not assignable to function
206
- ( ) => cb . makeSyncFunctionCallback ( { } ) ,
215
+ ( ) => makeSyncFunctionCallback ( { } ) ,
207
216
undefined ,
208
217
'plain object as function' ,
209
218
) ;
210
219
t . throws (
211
- ( ) => cb . makeSyncMethodCallback ( false , 'valueOf' ) ,
220
+ ( ) => makeSyncMethodCallback ( false , 'valueOf' ) ,
212
221
undefined ,
213
222
'boolean as object' ,
214
223
) ;
215
224
} ) ;
216
225
217
226
test ( 'isCallback' , t => {
218
227
t . true (
219
- cb . isCallback ( cb . makeFunctionCallback ( async ( ) => { } ) ) ,
228
+ isCallback ( makeFunctionCallback ( async ( ) => { } ) ) ,
220
229
'makeFunctionCallback' ,
221
230
) ;
222
231
const sym = Symbol . asyncIterator ;
223
232
t . true (
224
- cb . isCallback ( cb . makeMethodCallback ( { [ sym ] : async ( ) => { } } , sym ) ) ,
233
+ isCallback ( makeMethodCallback ( { [ sym ] : async ( ) => { } } , sym ) ) ,
225
234
'makeMethodCallback' ,
226
235
) ;
227
236
t . true (
228
- cb . isCallback ( cb . makeSyncFunctionCallback ( ( ) => { } ) ) ,
237
+ isCallback ( makeSyncFunctionCallback ( ( ) => { } ) ) ,
229
238
'makeSyncFunctionCallback' ,
230
239
) ;
231
240
t . true (
232
- cb . isCallback ( cb . makeSyncMethodCallback ( { m : ( ) => { } } , 'm' ) ) ,
241
+ isCallback ( makeSyncMethodCallback ( { m : ( ) => { } } , 'm' ) ) ,
233
242
'makeSyncMethodCallback' ,
234
243
) ;
235
244
// manually-implemented original-format callback objects must always work
236
- t . true ( cb . isCallback ( { target : ( ) => { } , bound : [ ] } ) , 'manual function' ) ;
245
+ t . true ( isCallback ( { target : ( ) => { } , bound : [ ] } ) , 'manual function' ) ;
237
246
t . true (
238
- cb . isCallback ( { target : { } , methodName : 'foo' , bound : [ ] } ) ,
247
+ isCallback ( { target : { } , methodName : 'foo' , bound : [ ] } ) ,
239
248
'manual method' ,
240
249
) ;
241
250
t . true (
242
- cb . isCallback ( {
251
+ isCallback ( {
243
252
target : { } ,
244
253
methodName : passableSymbolForName ( 'foo' ) ,
245
254
bound : [ ] ,
246
255
} ) ,
247
256
'manual symbol-keyed method' ,
248
257
) ;
249
258
250
- t . false ( cb . isCallback ( undefined ) , 'undefined' ) ;
251
- t . false ( cb . isCallback ( null ) , 'null' ) ;
252
- t . false ( cb . isCallback ( 'string' ) , 'string' ) ;
253
- t . false ( cb . isCallback ( { } ) , 'empty object' ) ;
254
- t . false (
255
- cb . isCallback ( { target : 'non-object' , bound : [ ] } ) ,
256
- 'non-object target' ,
257
- ) ;
259
+ t . false ( isCallback ( undefined ) , 'undefined' ) ;
260
+ t . false ( isCallback ( null ) , 'null' ) ;
261
+ t . false ( isCallback ( 'string' ) , 'string' ) ;
262
+ t . false ( isCallback ( { } ) , 'empty object' ) ;
263
+ t . false ( isCallback ( { target : 'non-object' , bound : [ ] } ) , 'non-object target' ) ;
258
264
t . false (
259
- cb . isCallback ( {
265
+ isCallback ( {
260
266
target : { } ,
261
267
methodName : unpassableSymbolForName ( 'foo' ) ,
262
268
bound : [ ] ,
263
269
} ) ,
264
270
'unique symbol method name' ,
265
271
) ;
266
- t . false ( cb . isCallback ( { target : { } , bound : { } } ) , 'non-array bound args' ) ;
267
- t . false (
268
- cb . isCallback ( { target : { } , bound : undefined } ) ,
269
- 'undefined bound args' ,
270
- ) ;
271
- t . false (
272
- cb . isCallback ( { target : { } , methodName : 'foo' } ) ,
273
- 'missing bound args' ,
274
- ) ;
272
+ t . false ( isCallback ( { target : { } , bound : { } } ) , 'non-array bound args' ) ;
273
+ t . false ( isCallback ( { target : { } , bound : undefined } ) , 'undefined bound args' ) ;
274
+ t . false ( isCallback ( { target : { } , methodName : 'foo' } ) , 'missing bound args' ) ;
275
275
} ) ;
276
276
277
277
test ( 'makeAttenuator' , async t => {
278
278
const zone = makeHeapZone ( ) ;
279
- const makeAttenuator = cb . prepareAttenuator ( zone , [ 'm0' , 'm1' , 'm2' , 'm4' ] ) ;
279
+ const makeAttenuator = prepareAttenuator ( zone , [ 'm0' , 'm1' , 'm2' , 'm4' ] ) ;
280
280
const target = Far ( 'original' , {
281
281
m0 ( ) {
282
282
return 'return original.m0' ;
@@ -314,7 +314,7 @@ test('makeAttenuator', async t => {
314
314
isSync : true ,
315
315
overrides : {
316
316
m1 : null ,
317
- m2 : cb . makeMethodCallback (
317
+ m2 : makeMethodCallback (
318
318
Far ( 'Abc' , {
319
319
abc ( ) {
320
320
return 'return abc' ;
0 commit comments