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

Function TestContextBytecodeOperations

context_test.go:279–394  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

277}
278
279func TestContextBytecodeOperations(t *testing.T) {
280 useStableOwnerHooksForLegacySubtests(t)
281
282 rt := NewRuntime()
283 defer rt.Close()
284 ctx := rt.NewContext()
285 defer ctx.Close()
286
287 t.Run("BasicCompilation", func(t *testing.T) {
288 code := `function add(a, b) { return a + b; } add(2, 3);`
289 bytecode, err := ctx.Compile(code)
290 require.NoError(t, err)
291 require.NotEmpty(t, bytecode)
292
293 // Execute bytecode
294 result := ctx.EvalBytecode(bytecode)
295 defer result.Free()
296 require.False(t, result.IsException())
297 require.EqualValues(t, 5, result.ToInt32())
298 })
299
300 t.Run("FileOperations", func(t *testing.T) {
301 testFile := "./test_temp.js"
302 testContent := `function multiply(a, b) { return a * b; } multiply(3, 4);`
303 err := os.WriteFile(testFile, []byte(testContent), 0644)
304 require.NoError(t, err)
305 defer os.Remove(testFile)
306
307 // EvalFile with options
308 resultFromFile := ctx.EvalFile(testFile, EvalFlagStrict(true))
309 defer resultFromFile.Free()
310 require.False(t, resultFromFile.IsException())
311 require.EqualValues(t, 12, resultFromFile.ToInt32())
312
313 // CompileFile tests
314 bytecode, err := ctx.CompileFile(testFile)
315 require.NoError(t, err)
316 require.NotEmpty(t, bytecode)
317
318 bytecode2, err := ctx.CompileFile(testFile, EvalFileName("custom.js"))
319 require.NoError(t, err)
320 require.NotEmpty(t, bytecode2)
321 })
322
323 t.Run("ErrorCases", func(t *testing.T) {
324 errorTests := []struct {
325 name string
326 test func() bool // Changed to return bool indicating if exception occurred
327 }{
328 {"EmptyBytecode", func() bool {
329 result := ctx.EvalBytecode([]byte{})
330 defer result.Free()
331 return result.IsException()
332 }},
333 {"InvalidBytecode", func() bool {
334 result := ctx.EvalBytecode([]byte{0x01, 0x02, 0x03})
335 defer result.Free()
336 return result.IsException()

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
NewContextMethod · 0.95
CloseMethod · 0.95
CompileMethod · 0.95
EvalBytecodeMethod · 0.95
EvalFileMethod · 0.95
CompileFileMethod · 0.95
ExceptionMethod · 0.95
EvalMethod · 0.95
NewRuntimeFunction · 0.85
EvalFlagStrictFunction · 0.85

Tested by

no test coverage detected