Skip to content

Commit f962988

Browse files
BridgeJS: Add tests for computed properties and lazy-var
1 parent 31f8400 commit f962988

File tree

5 files changed

+207
-0
lines changed

5 files changed

+207
-0
lines changed

Plugins/BridgeJS/Tests/BridgeJSToolTests/Inputs/PropertyTypes.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,39 @@
1919
// SwiftHeapObject property (will be set later)
2020
@JS var sibling: PropertyHolder
2121

22+
// Lazy stored property - should this be supported or generate an error?
23+
@JS lazy var lazyValue: String = "computed lazily"
24+
25+
// Computed property with getter only (readonly)
26+
@JS var computedReadonly: Int {
27+
return intValue * 2
28+
}
29+
30+
// Computed property with getter and setter
31+
@JS var computedReadWrite: String {
32+
get {
33+
return "Value: \(intValue)"
34+
}
35+
set {
36+
// Parse the number from "Value: X" format
37+
if let range = newValue.range(of: "Value: "),
38+
let number = Int(String(newValue[range.upperBound...]))
39+
{
40+
intValue = number
41+
}
42+
}
43+
}
44+
45+
// Property with property observers
46+
@JS var observedProperty: Int {
47+
willSet {
48+
print("Will set to \(newValue)")
49+
}
50+
didSet {
51+
print("Did set from \(oldValue)")
52+
}
53+
}
54+
2255
@JS init(
2356
intValue: Int,
2457
floatValue: Float,

Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/PropertyTypes.Export.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ export interface PropertyHolder extends SwiftHeapObject {
2525
readonly readonlyString: string;
2626
jsObject: any;
2727
sibling: PropertyHolder;
28+
lazyValue: string;
29+
computedReadonly: number;
30+
computedReadWrite: string;
31+
observedProperty: number;
2832
}
2933
export type Exports = {
3034
PropertyHolder: {

Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/PropertyTypes.Export.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,44 @@ export async function createInstantiator(options, swift) {
185185
set sibling(value) {
186186
instance.exports.bjs_PropertyHolder_sibling_set(this.pointer, value.pointer);
187187
}
188+
get lazyValue() {
189+
instance.exports.bjs_PropertyHolder_lazyValue_get(this.pointer);
190+
const ret = tmpRetString;
191+
tmpRetString = undefined;
192+
return ret;
193+
}
194+
set lazyValue(value) {
195+
const valueBytes = textEncoder.encode(value);
196+
const valueId = swift.memory.retain(valueBytes);
197+
instance.exports.bjs_PropertyHolder_lazyValue_set(this.pointer, valueId, valueBytes.length);
198+
swift.memory.release(valueId);
199+
}
200+
get computedReadonly() {
201+
const ret = instance.exports.bjs_PropertyHolder_computedReadonly_get(this.pointer);
202+
return ret;
203+
}
204+
set computedReadonly(value) {
205+
instance.exports.bjs_PropertyHolder_computedReadonly_set(this.pointer, value);
206+
}
207+
get computedReadWrite() {
208+
instance.exports.bjs_PropertyHolder_computedReadWrite_get(this.pointer);
209+
const ret = tmpRetString;
210+
tmpRetString = undefined;
211+
return ret;
212+
}
213+
set computedReadWrite(value) {
214+
const valueBytes = textEncoder.encode(value);
215+
const valueId = swift.memory.retain(valueBytes);
216+
instance.exports.bjs_PropertyHolder_computedReadWrite_set(this.pointer, valueId, valueBytes.length);
217+
swift.memory.release(valueId);
218+
}
219+
get observedProperty() {
220+
const ret = instance.exports.bjs_PropertyHolder_observedProperty_get(this.pointer);
221+
return ret;
222+
}
223+
set observedProperty(value) {
224+
instance.exports.bjs_PropertyHolder_observedProperty_set(this.pointer, value);
225+
}
188226
}
189227
return {
190228
PropertyHolder,

Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/ExportSwiftTests/PropertyTypes.json

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,42 @@
191191
"_0" : "PropertyHolder"
192192
}
193193
}
194+
},
195+
{
196+
"isReadonly" : false,
197+
"name" : "lazyValue",
198+
"type" : {
199+
"string" : {
200+
201+
}
202+
}
203+
},
204+
{
205+
"isReadonly" : false,
206+
"name" : "computedReadonly",
207+
"type" : {
208+
"int" : {
209+
210+
}
211+
}
212+
},
213+
{
214+
"isReadonly" : false,
215+
"name" : "computedReadWrite",
216+
"type" : {
217+
"string" : {
218+
219+
}
220+
}
221+
},
222+
{
223+
"isReadonly" : false,
224+
"name" : "observedProperty",
225+
"type" : {
226+
"int" : {
227+
228+
}
229+
}
194230
}
195231
]
196232
}

Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/ExportSwiftTests/PropertyTypes.swift

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,102 @@ public func _bjs_PropertyHolder_sibling_set(_self: UnsafeMutableRawPointer, valu
272272
#endif
273273
}
274274

275+
@_expose(wasm, "bjs_PropertyHolder_lazyValue_get")
276+
@_cdecl("bjs_PropertyHolder_lazyValue_get")
277+
public func _bjs_PropertyHolder_lazyValue_get(_self: UnsafeMutableRawPointer) -> Void {
278+
#if arch(wasm32)
279+
var ret = Unmanaged<PropertyHolder>.fromOpaque(_self).takeUnretainedValue().lazyValue
280+
return ret.withUTF8 { ptr in
281+
_swift_js_return_string(ptr.baseAddress, Int32(ptr.count))
282+
}
283+
#else
284+
fatalError("Only available on WebAssembly")
285+
#endif
286+
}
287+
288+
@_expose(wasm, "bjs_PropertyHolder_lazyValue_set")
289+
@_cdecl("bjs_PropertyHolder_lazyValue_set")
290+
public func _bjs_PropertyHolder_lazyValue_set(_self: UnsafeMutableRawPointer, valueBytes: Int32, valueLen: Int32) -> Void {
291+
#if arch(wasm32)
292+
let value = String(unsafeUninitializedCapacity: Int(valueLen)) { b in
293+
_swift_js_init_memory(valueBytes, b.baseAddress.unsafelyUnwrapped)
294+
return Int(valueLen)
295+
}
296+
Unmanaged<PropertyHolder>.fromOpaque(_self).takeUnretainedValue().lazyValue = value
297+
#else
298+
fatalError("Only available on WebAssembly")
299+
#endif
300+
}
301+
302+
@_expose(wasm, "bjs_PropertyHolder_computedReadonly_get")
303+
@_cdecl("bjs_PropertyHolder_computedReadonly_get")
304+
public func _bjs_PropertyHolder_computedReadonly_get(_self: UnsafeMutableRawPointer) -> Int32 {
305+
#if arch(wasm32)
306+
let ret = Unmanaged<PropertyHolder>.fromOpaque(_self).takeUnretainedValue().computedReadonly
307+
return Int32(ret)
308+
#else
309+
fatalError("Only available on WebAssembly")
310+
#endif
311+
}
312+
313+
@_expose(wasm, "bjs_PropertyHolder_computedReadonly_set")
314+
@_cdecl("bjs_PropertyHolder_computedReadonly_set")
315+
public func _bjs_PropertyHolder_computedReadonly_set(_self: UnsafeMutableRawPointer, value: Int32) -> Void {
316+
#if arch(wasm32)
317+
Unmanaged<PropertyHolder>.fromOpaque(_self).takeUnretainedValue().computedReadonly = Int(value)
318+
#else
319+
fatalError("Only available on WebAssembly")
320+
#endif
321+
}
322+
323+
@_expose(wasm, "bjs_PropertyHolder_computedReadWrite_get")
324+
@_cdecl("bjs_PropertyHolder_computedReadWrite_get")
325+
public func _bjs_PropertyHolder_computedReadWrite_get(_self: UnsafeMutableRawPointer) -> Void {
326+
#if arch(wasm32)
327+
var ret = Unmanaged<PropertyHolder>.fromOpaque(_self).takeUnretainedValue().computedReadWrite
328+
return ret.withUTF8 { ptr in
329+
_swift_js_return_string(ptr.baseAddress, Int32(ptr.count))
330+
}
331+
#else
332+
fatalError("Only available on WebAssembly")
333+
#endif
334+
}
335+
336+
@_expose(wasm, "bjs_PropertyHolder_computedReadWrite_set")
337+
@_cdecl("bjs_PropertyHolder_computedReadWrite_set")
338+
public func _bjs_PropertyHolder_computedReadWrite_set(_self: UnsafeMutableRawPointer, valueBytes: Int32, valueLen: Int32) -> Void {
339+
#if arch(wasm32)
340+
let value = String(unsafeUninitializedCapacity: Int(valueLen)) { b in
341+
_swift_js_init_memory(valueBytes, b.baseAddress.unsafelyUnwrapped)
342+
return Int(valueLen)
343+
}
344+
Unmanaged<PropertyHolder>.fromOpaque(_self).takeUnretainedValue().computedReadWrite = value
345+
#else
346+
fatalError("Only available on WebAssembly")
347+
#endif
348+
}
349+
350+
@_expose(wasm, "bjs_PropertyHolder_observedProperty_get")
351+
@_cdecl("bjs_PropertyHolder_observedProperty_get")
352+
public func _bjs_PropertyHolder_observedProperty_get(_self: UnsafeMutableRawPointer) -> Int32 {
353+
#if arch(wasm32)
354+
let ret = Unmanaged<PropertyHolder>.fromOpaque(_self).takeUnretainedValue().observedProperty
355+
return Int32(ret)
356+
#else
357+
fatalError("Only available on WebAssembly")
358+
#endif
359+
}
360+
361+
@_expose(wasm, "bjs_PropertyHolder_observedProperty_set")
362+
@_cdecl("bjs_PropertyHolder_observedProperty_set")
363+
public func _bjs_PropertyHolder_observedProperty_set(_self: UnsafeMutableRawPointer, value: Int32) -> Void {
364+
#if arch(wasm32)
365+
Unmanaged<PropertyHolder>.fromOpaque(_self).takeUnretainedValue().observedProperty = Int(value)
366+
#else
367+
fatalError("Only available on WebAssembly")
368+
#endif
369+
}
370+
275371
@_expose(wasm, "bjs_PropertyHolder_deinit")
276372
@_cdecl("bjs_PropertyHolder_deinit")
277373
public func _bjs_PropertyHolder_deinit(pointer: UnsafeMutableRawPointer) {

0 commit comments

Comments
 (0)