neoneo-go/pkg/compiler/panic_test.go

47 lines
850 B
Go
Raw Permalink Normal View History

package compiler_test
import (
"fmt"
"math/big"
"testing"
"github.com/stretchr/testify/require"
)
func TestPanic(t *testing.T) {
t.Run("no panic", func(t *testing.T) {
src := getPanicSource(false, `"execution fault"`)
eval(t, src, big.NewInt(7))
})
t.Run("panic with message", func(t *testing.T) {
src := getPanicSource(true, `"execution fault"`)
v := vmAndCompile(t, src)
require.Error(t, v.Run())
require.True(t, v.HasFailed())
})
t.Run("panic with nil", func(t *testing.T) {
src := getPanicSource(true, `nil`)
v := vmAndCompile(t, src)
require.Error(t, v.Run())
require.True(t, v.HasFailed())
})
}
func getPanicSource(need bool, message string) string {
return fmt.Sprintf(`
package main
func Main() int {
needPanic := %#v
if needPanic {
panic(%s)
return 5
}
return 7
}
`, need, message)
}