github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/compiler/init_test.go (about) 1 package compiler_test 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestInit(t *testing.T) { 11 t.Run("Simple", func(t *testing.T) { 12 src := `package foo 13 var a int 14 func init() { 15 a = 42 16 } 17 func Main() int { 18 return a 19 }` 20 eval(t, src, big.NewInt(42)) 21 }) 22 t.Run("Multi", func(t *testing.T) { 23 src := `package foo 24 var m = map[int]int{} 25 var a = 2 26 func init() { 27 b := 11 28 m[1] = b 29 } 30 func init() { 31 a = 1 32 var b int 33 m[3] = 30 + b 34 } 35 func Main() int { 36 return m[1] + m[3] + a 37 }` 38 eval(t, src, big.NewInt(42)) 39 }) 40 t.Run("WithCall", func(t *testing.T) { 41 src := `package foo 42 var m = map[int]int{} 43 func init() { 44 initMap(m) 45 } 46 func initMap(m map[int]int) { 47 m[11] = 42 48 } 49 func Main() int { 50 return m[11] 51 }` 52 eval(t, src, big.NewInt(42)) 53 }) 54 t.Run("InvalidSignature", func(t *testing.T) { 55 src := `package foo 56 type Foo int 57 var a int 58 func (f Foo) init() { 59 a = 2 60 } 61 func Main() int { 62 return a 63 }` 64 eval(t, src, big.NewInt(0)) 65 }) 66 } 67 68 func TestImportOrder(t *testing.T) { 69 t.Run("1,2", func(t *testing.T) { 70 src := `package foo 71 import _ "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/pkg1" 72 import _ "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/pkg2" 73 import "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/pkg3" 74 func Main() int { return pkg3.A }` 75 eval(t, src, big.NewInt(2)) 76 }) 77 t.Run("2,1", func(t *testing.T) { 78 src := `package foo 79 import _ "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/pkg2" 80 import _ "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/pkg1" 81 import "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/pkg3" 82 func Main() int { return pkg3.A }` 83 eval(t, src, big.NewInt(1)) 84 }) 85 t.Run("InitializeOnce", func(t *testing.T) { 86 src := `package foo 87 import "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/pkg3" 88 var A = pkg3.A 89 func Main() int { return A }` 90 eval(t, src, big.NewInt(3)) 91 }) 92 } 93 94 func TestInitWithNoGlobals(t *testing.T) { 95 src := `package foo 96 import "github.com/nspcc-dev/neo-go/pkg/interop/runtime" 97 func init() { 98 runtime.Notify("called in '_initialize'") 99 } 100 func Main() int { 101 return 42 102 }` 103 v, s, _ := vmAndCompileInterop(t, src) 104 require.NoError(t, v.Run()) 105 assertResult(t, v, big.NewInt(42)) 106 require.True(t, len(s.events) == 1) 107 }