(t *testing.T)
| 277 | } |
| 278 | |
| 279 | func 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() |
nothing calls this directly
no test coverage detected