|
4 | 4 | "bytes" |
5 | 5 | "errors" |
6 | 6 | "net" |
| 7 | + "net/url" |
7 | 8 | "slices" |
8 | 9 | "testing" |
9 | 10 | "time" |
@@ -914,6 +915,32 @@ func TestFlaggableTypes(t *testing.T) { |
914 | 915 | test.Equal(t, sliceFlag.Type(), "[]string") |
915 | 916 | test.Equal(t, sliceFlag.String(), `["a string", "another string"]`) |
916 | 917 | }) |
| 918 | + |
| 919 | + t.Run("url valid", func(t *testing.T) { |
| 920 | + var u *url.URL |
| 921 | + |
| 922 | + urlFlag, err := flag.New(&u, "url", 'u', "Set a URL", flag.Config[*url.URL]{}) |
| 923 | + test.Ok(t, err) |
| 924 | + |
| 925 | + err = urlFlag.Set("https://example.com/path") |
| 926 | + test.Ok(t, err) |
| 927 | + test.Equal(t, u.Scheme, "https") |
| 928 | + test.Equal(t, u.Host, "example.com") |
| 929 | + test.Equal(t, u.Path, "/path") |
| 930 | + test.Equal(t, urlFlag.Type(), "url") |
| 931 | + test.Equal(t, urlFlag.String(), "https://example.com/path") |
| 932 | + }) |
| 933 | + |
| 934 | + t.Run("url invalid", func(t *testing.T) { |
| 935 | + var u *url.URL |
| 936 | + |
| 937 | + urlFlag, err := flag.New(&u, "url", 'u', "Set a URL", flag.Config[*url.URL]{}) |
| 938 | + test.Ok(t, err) |
| 939 | + |
| 940 | + err = urlFlag.Set("not a url") |
| 941 | + test.Err(t, err) |
| 942 | + test.True(t, errors.Is(err, parse.Err)) |
| 943 | + }) |
917 | 944 | } |
918 | 945 |
|
919 | 946 | func TestFlagValidation(t *testing.T) { |
@@ -1045,8 +1072,8 @@ func TestFlagNilSafety(t *testing.T) { |
1045 | 1072 | t.Run("composite literal", func(t *testing.T) { |
1046 | 1073 | // Users doing naughty things, should still be nil safe |
1047 | 1074 | flag := flag.Flag[bool]{} |
1048 | | - test.Equal(t, flag.String(), "<nil>") |
1049 | | - test.Equal(t, flag.Type(), "<nil>") |
| 1075 | + test.Equal(t, flag.String(), format.Nil) |
| 1076 | + test.Equal(t, flag.Type(), format.Nil) |
1050 | 1077 |
|
1051 | 1078 | err := flag.Set(format.True) |
1052 | 1079 | test.Err(t, err) |
|
0 commit comments