github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/vm/vmstate/state_test.go (about) 1 package vmstate 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestFromString(t *testing.T) { 11 var ( 12 s State 13 err error 14 ) 15 16 s, err = FromString("HALT") 17 assert.NoError(t, err) 18 assert.Equal(t, Halt, s) 19 20 s, err = FromString("BREAK") 21 assert.NoError(t, err) 22 assert.Equal(t, Break, s) 23 24 s, err = FromString("FAULT") 25 assert.NoError(t, err) 26 assert.Equal(t, Fault, s) 27 28 s, err = FromString("NONE") 29 assert.NoError(t, err) 30 assert.Equal(t, None, s) 31 32 s, err = FromString("HALT, BREAK") 33 assert.NoError(t, err) 34 assert.Equal(t, Halt|Break, s) 35 36 s, err = FromString("FAULT, BREAK") 37 assert.NoError(t, err) 38 assert.Equal(t, Fault|Break, s) 39 40 _, err = FromString("HALT, KEK") 41 assert.Error(t, err) 42 } 43 44 func TestState_HasFlag(t *testing.T) { 45 assert.True(t, Halt.HasFlag(Halt)) 46 assert.True(t, Break.HasFlag(Break)) 47 assert.True(t, Fault.HasFlag(Fault)) 48 assert.True(t, (Halt | Break).HasFlag(Halt)) 49 assert.True(t, (Halt | Break).HasFlag(Break)) 50 51 assert.False(t, Halt.HasFlag(Break)) 52 assert.False(t, None.HasFlag(Halt)) 53 assert.False(t, (Fault | Break).HasFlag(Halt)) 54 } 55 56 func TestState_MarshalJSON(t *testing.T) { 57 var ( 58 data []byte 59 err error 60 ) 61 62 data, err = json.Marshal(Halt | Break) 63 assert.NoError(t, err) 64 assert.Equal(t, data, []byte(`"HALT, BREAK"`)) 65 66 data, err = json.Marshal(Fault) 67 assert.NoError(t, err) 68 assert.Equal(t, data, []byte(`"FAULT"`)) 69 } 70 71 func TestState_UnmarshalJSON(t *testing.T) { 72 var ( 73 s State 74 err error 75 ) 76 77 err = json.Unmarshal([]byte(`"HALT, BREAK"`), &s) 78 assert.NoError(t, err) 79 assert.Equal(t, Halt|Break, s) 80 81 err = json.Unmarshal([]byte(`"FAULT, BREAK"`), &s) 82 assert.NoError(t, err) 83 assert.Equal(t, Fault|Break, s) 84 85 err = json.Unmarshal([]byte(`"NONE"`), &s) 86 assert.NoError(t, err) 87 assert.Equal(t, None, s) 88 } 89 90 // TestState_EnumCompat tests that byte value of State matches the C#'s one got from 91 // https://github.com/neo-project/neo-vm/blob/0028d862e253bda3c12eb8bb007a2d95822d3922/src/neo-vm/VMState.cs#L16. 92 func TestState_EnumCompat(t *testing.T) { 93 assert.Equal(t, byte(0), byte(None)) 94 assert.Equal(t, byte(1<<0), byte(Halt)) 95 assert.Equal(t, byte(1<<1), byte(Fault)) 96 assert.Equal(t, byte(1<<2), byte(Break)) 97 }