github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/core/transaction/witness_scope_test.go (about)

     1  package transaction
     2  
     3  import (
     4  	"strconv"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestScopesFromString(t *testing.T) {
    11  	_, err := ScopesFromString("")
    12  	require.Error(t, err)
    13  
    14  	_, err = ScopesFromString("123")
    15  	require.Error(t, err)
    16  
    17  	s, err := ScopesFromString("Global")
    18  	require.NoError(t, err)
    19  	require.Equal(t, Global, s)
    20  
    21  	s, err = ScopesFromString("CalledByEntry")
    22  	require.NoError(t, err)
    23  	require.Equal(t, CalledByEntry, s)
    24  
    25  	s, err = ScopesFromString("CustomContracts")
    26  	require.NoError(t, err)
    27  	require.Equal(t, CustomContracts, s)
    28  
    29  	s, err = ScopesFromString("CustomGroups")
    30  	require.NoError(t, err)
    31  	require.Equal(t, CustomGroups, s)
    32  
    33  	s, err = ScopesFromString("CalledByEntry,CustomGroups")
    34  	require.NoError(t, err)
    35  	require.Equal(t, CalledByEntry|CustomGroups, s)
    36  
    37  	_, err = ScopesFromString("Global,CustomGroups")
    38  	require.Error(t, err)
    39  
    40  	_, err = ScopesFromString("CalledByEntry,Global,CustomGroups")
    41  	require.Error(t, err)
    42  
    43  	s, err = ScopesFromString("CalledByEntry,CustomGroups,CustomGroups")
    44  	require.NoError(t, err)
    45  	require.Equal(t, CalledByEntry|CustomGroups, s)
    46  
    47  	s, err = ScopesFromString("CalledByEntry, CustomGroups")
    48  	require.NoError(t, err)
    49  	require.Equal(t, CalledByEntry|CustomGroups, s)
    50  
    51  	s, err = ScopesFromString("CalledByEntry, CustomGroups, CustomContracts")
    52  	require.NoError(t, err)
    53  	require.Equal(t, CalledByEntry|CustomGroups|CustomContracts, s)
    54  }
    55  
    56  func TestScopesFromByte(t *testing.T) {
    57  	testCases := []struct {
    58  		in         byte
    59  		expected   WitnessScope
    60  		shouldFail bool
    61  	}{
    62  		{
    63  			in:       0,
    64  			expected: None,
    65  		},
    66  		{
    67  			in:       1,
    68  			expected: CalledByEntry,
    69  		},
    70  		{
    71  			in:       16,
    72  			expected: CustomContracts,
    73  		},
    74  		{
    75  			in:       32,
    76  			expected: CustomGroups,
    77  		},
    78  		{
    79  			in:       64,
    80  			expected: Rules,
    81  		},
    82  		{
    83  			in:       128,
    84  			expected: Global,
    85  		},
    86  		{
    87  			in:       17,
    88  			expected: CalledByEntry | CustomContracts,
    89  		},
    90  		{
    91  			in:       48,
    92  			expected: CustomContracts | CustomGroups,
    93  		},
    94  		{
    95  			in:         128 + 1, // Global can't be combined with others.
    96  			shouldFail: true,
    97  		},
    98  		{
    99  			in:         2, // No such scope.
   100  			shouldFail: true,
   101  		},
   102  	}
   103  
   104  	for _, tc := range testCases {
   105  		t.Run(strconv.Itoa(int(tc.in)), func(t *testing.T) {
   106  			actual, err := ScopesFromByte(tc.in)
   107  			if tc.shouldFail {
   108  				require.Error(t, err, tc.in)
   109  			} else {
   110  				require.NoError(t, err, tc.in)
   111  				require.Equal(t, tc.expected, actual, tc.in)
   112  			}
   113  		})
   114  	}
   115  }