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  }