@@ -44,246 +44,3 @@ pub impl Emitter for CallbackEmitter with emit(
4444 ]
4545 (filename, emits)
4646}
47-
48- ///|
49- test " emit_callback simple EventListener " {
50- let idl =
51- #|callback EventListener = undefined (Event event);
52- let definitions = @parser.parse(idl)
53- let registry = @type_registry.TypeRegistry ::new(definitions)
54- let flattened = @partial_merged.merge_partials(definitions)
55- |> @flattened_idl.flatten(ignore)
56- let callback_emitter = CallbackEmitter ::{
57- idl: flattened,
58- type_registry: registry,
59- }
60- let (_filename, emits) = callback_emitter.emit("EventListener ")
61- let multi = mbt_code_gen_multi(emits)
62- inspect(
63- multi.shared,
64- content=(
65- #|// Do not edit. This file is generated.
66- #|// MoonBit type: EventListener
67- #|
68- #|
69- #|/// [EventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventListener)
70- #|#external
71- #|pub type EventListener
72- #|
73- #|pub impl TJsValue for EventListener with to_js(self: EventListener ) -> JsValue = "%identity"
74- #|
75- #|pub impl FromJsAny for EventListener with from_js_any(value : JsAny ) -> EventListener = "%identity"
76- #|
77- #|pub fn EventListener ::new(callback : (Event ) -> Unit ) -> EventListener { event_listener_ffi(callback) }
78- ),
79- )
80- inspect(
81- multi.js_ffi,
82- content=(
83- #|extern "js" fn event_listener_ffi(callback : (Event ) -> Unit ) -> EventListener = "(callback) => callback"
84- ),
85- )
86- inspect(
87- multi.wasm_ffi,
88- content=(
89- #|fn event_listener_ffi(callback : (Event ) -> Unit ) -> EventListener = "webapi_EventListener " "new"
90- ),
91- )
92- }
93-
94- ///|
95- test " emit_callback keeps interface argument as concrete callback type " {
96- let idl =
97- #|interface Event {};
98- #|callback EventListener = undefined (Event event);
99- let definitions = @parser.parse(idl)
100- let registry = @type_registry.TypeRegistry ::new(definitions)
101- let flattened = @partial_merged.merge_partials(definitions)
102- |> @flattened_idl.flatten(ignore)
103- let callback_emitter = CallbackEmitter ::{
104- idl: flattened,
105- type_registry: registry,
106- }
107- let (_filename, emits) = callback_emitter.emit("EventListener ")
108- let multi = mbt_code_gen_multi(emits)
109- inspect(
110- multi.shared,
111- content=(
112- #|// Do not edit. This file is generated.
113- #|// MoonBit type: EventListener
114- #|
115- #|
116- #|/// [EventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventListener)
117- #|#external
118- #|pub type EventListener
119- #|
120- #|pub impl TJsValue for EventListener with to_js(self: EventListener ) -> JsValue = "%identity"
121- #|
122- #|pub impl FromJsAny for EventListener with from_js_any(value : JsAny ) -> EventListener = "%identity"
123- #|
124- #|pub fn EventListener ::new(callback : (Event ) -> Unit ) -> EventListener { event_listener_ffi(callback) }
125- ),
126- )
127- inspect(
128- multi.js_ffi,
129- content=(
130- #|extern "js" fn event_listener_ffi(callback : (Event ) -> Unit ) -> EventListener = "(callback) => callback"
131- ),
132- )
133- inspect(
134- multi.wasm_ffi,
135- content=(
136- #|fn event_listener_ffi(callback : (Event ) -> Unit ) -> EventListener = "webapi_EventListener " "new"
137- ),
138- )
139- }
140-
141- ///|
142- test " emit_callback multi-arg MutationCallback " {
143- let idl =
144- #|callback MutationCallback = undefined (sequence<MutationRecord > mutations, MutationObserver observer);
145- let definitions = @parser.parse(idl)
146- let registry = @type_registry.TypeRegistry ::new(definitions)
147- let flattened = @partial_merged.merge_partials(definitions)
148- |> @flattened_idl.flatten(ignore)
149- let callback_emitter = CallbackEmitter ::{
150- idl: flattened,
151- type_registry: registry,
152- }
153- let (_filename, emits) = callback_emitter.emit("MutationCallback ")
154- let multi = mbt_code_gen_multi(emits)
155- inspect(
156- multi.shared,
157- content=(
158- #|// Do not edit. This file is generated.
159- #|// MoonBit type: MutationCallback
160- #|
161- #|
162- #|/// [MutationCallback](https://developer.mozilla.org/en-US/docs/Web/API/MutationCallback)
163- #|#external
164- #|pub type MutationCallback
165- #|
166- #|pub impl TJsValue for MutationCallback with to_js(self: MutationCallback ) -> JsValue = "%identity"
167- #|
168- #|pub impl FromJsAny for MutationCallback with from_js_any(value : JsAny ) -> MutationCallback = "%identity"
169- #|
170- #|pub fn MutationCallback ::new(callback : (Array [MutationRecord ], MutationObserver ) -> Unit ) -> MutationCallback { mutation_callback_ffi(callback) }
171- ),
172- )
173- inspect(
174- multi.js_ffi,
175- content=(
176- #|extern "js" fn mutation_callback_ffi(callback : (Array [MutationRecord ], MutationObserver ) -> Unit ) -> MutationCallback = "(callback) => callback"
177- ),
178- )
179- inspect(
180- multi.wasm_ffi,
181- content=(
182- #|fn mutation_callback_ffi_raw(callback : (JsArray , MutationObserver ) -> Unit ) -> MutationCallback = "webapi_MutationCallback " "new"
183- #|
184- #|///|
185- #|fn mutation_callback_ffi(callback : (Array [MutationRecord ], MutationObserver ) -> Unit ) -> MutationCallback {
186- #| mutation_callback_ffi_raw(
187- #| fn(mutations : JsArray , observer : MutationObserver ) -> Unit {
188- #| callback(mutations.to_array(), observer)
189- #| },
190- #| )
191- #|}
192- ),
193- )
194- }
195-
196- ///|
197- test " CallbackEmitter multi-target separates FFI " {
198- let idl =
199- #|callback EventListener = undefined (Event event);
200- let definitions = @parser.parse(idl)
201- let registry = @type_registry.TypeRegistry ::new(definitions)
202- let flattened = @partial_merged.merge_partials(definitions)
203- |> @flattened_idl.flatten(ignore)
204- let callback_emitter = CallbackEmitter ::{
205- idl: flattened,
206- type_registry: registry,
207- }
208- let (_filename, emits) = callback_emitter.emit("EventListener ")
209- let multi = mbt_code_gen_multi(emits)
210- inspect(
211- multi.shared,
212- content=(
213- #|// Do not edit. This file is generated.
214- #|// MoonBit type: EventListener
215- #|
216- #|
217- #|/// [EventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventListener)
218- #|#external
219- #|pub type EventListener
220- #|
221- #|pub impl TJsValue for EventListener with to_js(self: EventListener ) -> JsValue = "%identity"
222- #|
223- #|pub impl FromJsAny for EventListener with from_js_any(value : JsAny ) -> EventListener = "%identity"
224- #|
225- #|pub fn EventListener ::new(callback : (Event ) -> Unit ) -> EventListener { event_listener_ffi(callback) }
226- ),
227- )
228- inspect(
229- multi.js_ffi,
230- content=(
231- #|extern "js" fn event_listener_ffi(callback : (Event ) -> Unit ) -> EventListener = "(callback) => callback"
232- ),
233- )
234- inspect(
235- multi.wasm_ffi,
236- content=(
237- #|fn event_listener_ffi(callback : (Event ) -> Unit ) -> EventListener = "webapi_EventListener " "new"
238- ),
239- )
240- }
241-
242- ///|
243- test " CallbackEmitter wasm always uses direct import " {
244- let idl =
245- #|enum NotificationPermission { "default", "denied", "granted" };
246- #|callback NotificationPermissionCallback = undefined (NotificationPermission permission);
247- let definitions = @parser.parse(idl)
248- let registry = @type_registry.TypeRegistry ::new(definitions)
249- let flattened = @partial_merged.merge_partials(definitions)
250- |> @flattened_idl.flatten(ignore)
251- let callback_emitter = CallbackEmitter ::{
252- idl: flattened,
253- type_registry: registry,
254- }
255- let (_filename, emits) = callback_emitter.emit(
256- "NotificationPermissionCallback ",
257- )
258- let multi = mbt_code_gen_multi(emits)
259- inspect(
260- multi.shared,
261- content=(
262- #|// Do not edit. This file is generated.
263- #|// MoonBit type: NotificationPermissionCallback
264- #|
265- #|
266- #|/// [NotificationPermissionCallback](https://developer.mozilla.org/en-US/docs/Web/API/NotificationPermissionCallback)
267- #|#external
268- #|pub type NotificationPermissionCallback
269- #|
270- #|pub impl TJsValue for NotificationPermissionCallback with to_js(self: NotificationPermissionCallback ) -> JsValue = "%identity"
271- #|
272- #|pub impl FromJsAny for NotificationPermissionCallback with from_js_any(value : JsAny ) -> NotificationPermissionCallback = "%identity"
273- #|
274- #|pub fn NotificationPermissionCallback ::new(callback : (NotificationPermission ) -> Unit ) -> NotificationPermissionCallback { notification_permission_callback_ffi(callback) }
275- ),
276- )
277- inspect(
278- multi.js_ffi,
279- content=(
280- #|extern "js" fn notification_permission_callback_ffi(callback : (NotificationPermission ) -> Unit ) -> NotificationPermissionCallback = "(callback) => callback"
281- ),
282- )
283- inspect(
284- multi.wasm_ffi,
285- content=(
286- #|fn notification_permission_callback_ffi(callback : (NotificationPermission ) -> Unit ) -> NotificationPermissionCallback = "webapi_NotificationPermissionCallback " "new"
287- ),
288- )
289- }
0 commit comments