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 }