github.com/diamondburned/arikawa/v2@v2.1.0/bot/arguments_test.go (about) 1 package bot 2 3 import ( 4 "reflect" 5 "strings" 6 "testing" 7 ) 8 9 type mockParser string 10 11 func (m *mockParser) Parse(s string) error { 12 *m = mockParser(s) 13 return nil 14 } 15 16 func mockParse(str string) *mockParser { 17 return (*mockParser)(&str) 18 } 19 20 func TestArguments(t *testing.T) { 21 testArgs(t, "string", "string") 22 testArgs(t, true, "true") 23 testArgs(t, false, "n") 24 testArgs(t, int64(69420), "69420") 25 testArgs(t, uint64(1337), "1337") 26 testArgs(t, 69.420, "69.420") 27 testArgs(t, mockParse("testString"), "testString") 28 testArgs(t, *mockParse("testString"), "testString") 29 30 _, err := newArgument(reflect.TypeOf(struct{}{}), false) 31 if !strings.HasPrefix(err.Error(), "invalid type: ") { 32 t.Fatal("Unexpected error:", err) 33 } 34 } 35 36 func testArgs(t *testing.T, expect interface{}, input string) { 37 f, err := newArgument(reflect.TypeOf(expect), false) 38 if err != nil { 39 t.Fatal("Failed to get argument value function:", err) 40 } 41 42 v, err := f.fn(input) 43 if err != nil { 44 t.Fatal("avfs returned with error:", err) 45 } 46 47 if v := v.Interface(); !reflect.DeepEqual(v, expect) { 48 t.Fatal("Value :", v, "\nExpects:", expect) 49 } 50 } 51 52 // used for ctx_test.go 53 54 type customParsed struct { 55 parsed bool 56 } 57 58 func (c *customParsed) Parse(string) error { 59 c.parsed = true 60 return nil 61 }