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

Function TestValueObjectControlAPIs

value_test.go:107–185  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

105}
106
107func TestValueObjectControlAPIs(t *testing.T) {
108 useStableOwnerHooksForLegacySubtests(t)
109
110 rt := NewRuntime()
111 defer rt.Close()
112 ctx := rt.NewContext()
113 defer ctx.Close()
114
115 obj := ctx.NewObject()
116 defer obj.Free()
117 proto := ctx.NewObject()
118 defer proto.Free()
119 proto.Set("kind", ctx.NewString("proto"))
120
121 require.True(t, obj.SetPrototype(proto))
122 actualProto := obj.Prototype()
123 require.NotNil(t, actualProto)
124 defer actualProto.Free()
125 kind := actualProto.Get("kind")
126 defer kind.Free()
127 require.Equal(t, "proto", kind.ToString())
128
129 require.True(t, obj.IsExtensible())
130 require.True(t, obj.PreventExtensions())
131 require.False(t, obj.IsExtensible())
132
133 sealed := ctx.Eval("({ a: 1 })")
134 defer sealed.Free()
135 require.True(t, sealed.Seal())
136 require.False(t, sealed.IsExtensible())
137
138 frozen := ctx.Eval("({ a: 1 })")
139 defer frozen.Free()
140 require.True(t, frozen.Freeze())
141 require.False(t, frozen.IsExtensible())
142
143 ctx2 := rt.NewContext()
144 defer ctx2.Close()
145 otherProto := ctx2.NewObject()
146 defer otherProto.Free()
147 require.False(t, obj.SetPrototype(otherProto))
148
149 // Hit explicit tri-state exception branches via Proxy traps that throw.
150 extensibleThrowProxy := ctx.Eval(`
151 new Proxy({}, {
152 isExtensible() { throw new Error('isExtensible trap error') }
153 })
154 `)
155 defer extensibleThrowProxy.Free()
156 require.False(t, extensibleThrowProxy.IsException())
157 require.False(t, extensibleThrowProxy.IsExtensible())
158
159 preventThrowProxy := ctx.Eval(`
160 new Proxy({}, {
161 preventExtensions() { throw new Error('preventExtensions trap error') }
162 })
163 `)
164 defer preventThrowProxy.Free()

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
NewContextMethod · 0.95
CloseMethod · 0.95
NewObjectMethod · 0.95
NewStringMethod · 0.95
EvalMethod · 0.95
NewRuntimeFunction · 0.85
SetMethod · 0.80
SetPrototypeMethod · 0.80
PrototypeMethod · 0.80
GetMethod · 0.80

Tested by

no test coverage detected