MCPcopy Create free account
hub / github.com/buke/quickjs-go / TestBridgeClassFinalizerOwnershipInSameRuntime

Function TestBridgeClassFinalizerOwnershipInSameRuntime

bridge_test.go:619–664  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

617}
618
619func TestBridgeClassFinalizerOwnershipInSameRuntime(t *testing.T) {
620 rt := NewRuntime()
621 defer rt.Close()
622 ctxA := rt.NewContext()
623 defer ctxA.Close()
624 ctxB := rt.NewContext()
625 defer ctxB.Close()
626
627 var finalizedA atomic.Bool
628 var finalizedB atomic.Bool
629
630 constructorA, _ := NewClassBuilder("SameRuntimeClassA").
631 Constructor(func(ctx *Context, instance *Value, args []*Value) (interface{}, error) {
632 return &bridgeFinalizerProbe{mark: &finalizedA}, nil
633 }).
634 Build(ctxA)
635 require.False(t, constructorA.IsException())
636 ctxA.Globals().Set("SameRuntimeClassA", constructorA)
637
638 constructorB, _ := NewClassBuilder("SameRuntimeClassB").
639 Constructor(func(ctx *Context, instance *Value, args []*Value) (interface{}, error) {
640 return &bridgeFinalizerProbe{mark: &finalizedB}, nil
641 }).
642 Build(ctxB)
643 require.False(t, constructorB.IsException())
644 ctxB.Globals().Set("SameRuntimeClassB", constructorB)
645
646 instanceA := ctxA.Eval(`new SameRuntimeClassA()`)
647 defer instanceA.Free()
648 require.False(t, instanceA.IsException())
649
650 instanceB := ctxB.Eval(`new SameRuntimeClassB()`)
651 defer instanceB.Free()
652 require.False(t, instanceB.IsException())
653
654 goClassFinalizerProxy(rt.ref, instanceA.ref)
655 require.True(t, finalizedA.Load())
656 require.False(t, finalizedB.Load())
657
658 goClassFinalizerProxy(rt.ref, instanceB.ref)
659 require.True(t, finalizedB.Load())
660
661 require.NotPanics(t, func() {
662 goClassFinalizerProxy(rt.ref, instanceA.ref)
663 })
664}
665
666func TestBridgeContextNotFound(t *testing.T) {
667 // Test getContextAndFunction - Context not found error

Callers

nothing calls this directly

Calls 14

CloseMethod · 0.95
NewContextMethod · 0.95
CloseMethod · 0.95
GlobalsMethod · 0.95
EvalMethod · 0.95
NewRuntimeFunction · 0.85
NewClassBuilderFunction · 0.85
goClassFinalizerProxyFunction · 0.85
ConstructorMethod · 0.80
IsExceptionMethod · 0.80
SetMethod · 0.80
LoadMethod · 0.80

Tested by

no test coverage detected