github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/cli/flags/address_test.go (about) 1 package flags 2 3 import ( 4 "flag" 5 "io" 6 "testing" 7 8 "github.com/nspcc-dev/neo-go/internal/random" 9 "github.com/nspcc-dev/neo-go/pkg/encoding/address" 10 "github.com/nspcc-dev/neo-go/pkg/util" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestParseAddress(t *testing.T) { 15 expected := random.Uint160() 16 t.Run("simple LE", func(t *testing.T) { 17 u, err := ParseAddress(expected.StringLE()) 18 require.NoError(t, err) 19 require.Equal(t, expected, u) 20 }) 21 t.Run("with prefix", func(t *testing.T) { 22 u, err := ParseAddress("0x" + expected.StringLE()) 23 require.NoError(t, err) 24 require.Equal(t, expected, u) 25 26 t.Run("bad", func(t *testing.T) { 27 _, err := ParseAddress("0s" + expected.StringLE()) 28 require.Error(t, err) 29 }) 30 }) 31 t.Run("address", func(t *testing.T) { 32 addr := address.Uint160ToString(expected) 33 u, err := ParseAddress(addr) 34 require.NoError(t, err) 35 require.Equal(t, expected, u) 36 37 t.Run("bad", func(t *testing.T) { 38 _, err := ParseAddress(addr[1:]) 39 require.Error(t, err) 40 }) 41 }) 42 } 43 44 func TestAddress_String(t *testing.T) { 45 value := util.Uint160{1, 2, 3} 46 addr := Address{ 47 IsSet: true, 48 Value: value, 49 } 50 51 require.Equal(t, address.Uint160ToString(value), addr.String()) 52 } 53 54 func TestAddress_Set(t *testing.T) { 55 value := util.Uint160{1, 2, 3} 56 addr := Address{} 57 58 t.Run("bad address", func(t *testing.T) { 59 require.Error(t, addr.Set("not an address")) 60 }) 61 62 t.Run("positive", func(t *testing.T) { 63 require.NoError(t, addr.Set(address.Uint160ToString(value))) 64 require.Equal(t, true, addr.IsSet) 65 require.Equal(t, value, addr.Value) 66 }) 67 } 68 69 func TestAddress_Uint160(t *testing.T) { 70 value := util.Uint160{4, 5, 6} 71 addr := Address{} 72 73 t.Run("not set", func(t *testing.T) { 74 require.Panics(t, func() { addr.Uint160() }) 75 }) 76 77 t.Run("success", func(t *testing.T) { 78 addr.IsSet = true 79 addr.Value = value 80 require.Equal(t, value, addr.Uint160()) 81 }) 82 } 83 84 func TestAddressFlag_IsSet(t *testing.T) { 85 flag := AddressFlag{} 86 87 t.Run("not set", func(t *testing.T) { 88 require.False(t, flag.IsSet()) 89 }) 90 91 t.Run("set", func(t *testing.T) { 92 flag.Value.IsSet = true 93 require.True(t, flag.IsSet()) 94 }) 95 } 96 97 func TestAddressFlag_String(t *testing.T) { 98 flag := AddressFlag{ 99 Name: "myFlag", 100 Usage: "Address to pass", 101 Value: Address{}, 102 } 103 104 require.Equal(t, "--myFlag value\tAddress to pass", flag.String()) 105 } 106 107 func TestAddress_getNameHelp(t *testing.T) { 108 require.Equal(t, "-f value", getNameHelp("f")) 109 require.Equal(t, "--flag value", getNameHelp("flag")) 110 } 111 112 func TestAddressFlag_GetName(t *testing.T) { 113 flag := AddressFlag{ 114 Name: "my flag", 115 } 116 117 require.Equal(t, "my flag", flag.GetName()) 118 } 119 120 func TestAddress(t *testing.T) { 121 f := flag.NewFlagSet("", flag.ContinueOnError) 122 f.SetOutput(io.Discard) // don't pollute test output 123 addr := AddressFlag{Name: "addr, a"} 124 addr.Apply(f) 125 require.NoError(t, f.Parse([]string{"--addr", "NRHkiY2hLy5ypD32CKZtL6pNwhbFMqDEhR"})) 126 require.Equal(t, "NRHkiY2hLy5ypD32CKZtL6pNwhbFMqDEhR", f.Lookup("a").Value.String()) 127 require.NoError(t, f.Parse([]string{"-a", "NRHkiY2hLy5ypD32CKZtL6pNwhbFMqDEhR"})) 128 require.Equal(t, "NRHkiY2hLy5ypD32CKZtL6pNwhbFMqDEhR", f.Lookup("a").Value.String()) 129 require.Error(t, f.Parse([]string{"--addr", "kek"})) 130 }