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  }