(t *testing.T)
| 12 | } |
| 13 | |
| 14 | func TestTrapFrames(t *testing.T) { |
| 15 | store := NewStore(NewEngine()) |
| 16 | wasm, err := Wat2Wasm(` |
| 17 | (func call $foo) |
| 18 | (func $foo call $bar) |
| 19 | (func $bar unreachable) |
| 20 | (start 0) |
| 21 | `) |
| 22 | require.NoError(t, err) |
| 23 | module, err := NewModule(store.Engine, wasm) |
| 24 | require.NoError(t, err) |
| 25 | |
| 26 | inst, err := NewInstance(store, module, []AsExtern{}) |
| 27 | require.Nil(t, inst, "expected failure") |
| 28 | require.Error(t, err) |
| 29 | |
| 30 | trap := err.(*Trap) |
| 31 | frames := trap.Frames() |
| 32 | require.Len(t, frames, 3, "expected 3 frames") |
| 33 | |
| 34 | require.Equal(t, "bar", *frames[0].FuncName(), "bad function name") |
| 35 | require.Equal(t, "foo", *frames[1].FuncName(), "bad function name") |
| 36 | require.Nil(t, frames[2].FuncName(), "bad function name") |
| 37 | require.Equal(t, uint32(2), frames[0].FuncIndex(), "bad function index") |
| 38 | require.Equal(t, uint32(1), frames[1].FuncIndex(), "bad function index") |
| 39 | require.Equal(t, uint32(0), frames[2].FuncIndex(), "bad function index") |
| 40 | |
| 41 | expected := `error while executing at wasm backtrace: |
| 42 | 0: 0x26 - <unknown>!bar |
| 43 | 1: 0x21 - <unknown>!foo |
| 44 | 2: 0x1c - <unknown>!<wasm function 0> |
| 45 | |
| 46 | Caused by: |
| 47 | wasm trap: wasm ` + "`unreachable` instruction executed\n" |
| 48 | |
| 49 | require.Equal(t, expected, trap.Error()) |
| 50 | code := trap.Code() |
| 51 | require.NotNil(t, code) |
| 52 | require.Equal(t, *code, UnreachableCodeReached) |
| 53 | } |
| 54 | |
| 55 | func TestTrapModuleName(t *testing.T) { |
| 56 | store := NewStore(NewEngine()) |
nothing calls this directly
no test coverage detected
searching dependent graphs…