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  }