|
- package cmdtrie
-
- import (
- "testing"
-
- . "github.com/smartystreets/goconvey/convey"
- )
-
- func Test_CommandTrie(t *testing.T) {
- Convey("无参数命令", t, func() {
- trie := NewVoidCommandTrie[int]()
-
- var ret string
-
- err := trie.Add(func(int) {
- ret = "ok"
- }, "a")
- So(err, ShouldBeNil)
-
- err = trie.Execute(0, "a")
- So(err, ShouldBeNil)
-
- So(ret, ShouldEqual, "ok")
- })
-
- Convey("各种参数", t, func() {
- trie := NewVoidCommandTrie[int]()
-
- var argI int
- var argStr string
- var argBl bool
- var argFP float32
-
- err := trie.Add(func(int, i int, str string, bl bool, fp float32) {
- argI = i
- argStr = str
- argBl = bl
- argFP = fp
-
- }, "a", "b")
- So(err, ShouldBeNil)
-
- err = trie.Execute(0, "a", "b", "1", "2", "true", "3")
- So(err, ShouldBeNil)
-
- So(argI, ShouldEqual, 1)
- So(argStr, ShouldEqual, "2")
- So(argBl, ShouldBeTrue)
- So(argFP, ShouldEqual, 3)
- })
-
- Convey("有数组参数", t, func() {
- trie := NewVoidCommandTrie[int]()
-
- var argI int
- var argArr []int64
-
- err := trie.Add(func(int, i int, arr []int64) {
- argI = i
- argArr = arr
-
- }, "a", "b")
- So(err, ShouldBeNil)
-
- err = trie.Execute(0, "a", "b", "1", "2", "3", "4")
- So(err, ShouldBeNil)
-
- So(argI, ShouldEqual, 1)
- So(argArr, ShouldResemble, []int64{2, 3, 4})
- })
-
- Convey("有数组参数,但为空", t, func() {
- trie := NewVoidCommandTrie[int]()
-
- var argI int
- var argArr []int64
-
- err := trie.Add(func(int, i int, arr []int64) {
- argI = i
- argArr = arr
-
- }, "a", "b")
- So(err, ShouldBeNil)
-
- err = trie.Execute(0, "a", "b", "1")
- So(err, ShouldBeNil)
-
- So(argI, ShouldEqual, 1)
- So(argArr, ShouldResemble, []int64{})
- })
-
- Convey("带返回值", t, func() {
- trie := NewCommandTrie[int, int]()
-
- var argI int
- var argArr []int64
-
- err := trie.Add(func(int, i int, arr []int64) int {
- argI = i
- argArr = arr
- return 123
- }, "a", "b")
- So(err, ShouldBeNil)
-
- ret, err := trie.Execute(0, "a", "b", "1")
- So(err, ShouldBeNil)
-
- So(argI, ShouldEqual, 1)
- So(argArr, ShouldResemble, []int64{})
- So(ret, ShouldEqual, 123)
- })
-
- Convey("返回值是接口类型", t, func() {
- trie := NewCommandTrie[int, any]()
-
- var argI int
- var argArr []int64
-
- err := trie.Add(func(int, i int, arr []int64) int {
- argI = i
- argArr = arr
- return 123
- }, "a", "b")
- So(err, ShouldBeNil)
-
- err = trie.Add(func(int, i int, arr []int64) string {
- return "123"
- }, "a", "c")
- So(err, ShouldBeNil)
-
- ret, err := trie.Execute(0, "a", "b", "1")
- So(err, ShouldBeNil)
- So(argI, ShouldEqual, 1)
- So(argArr, ShouldResemble, []int64{})
- So(ret, ShouldEqual, 123)
-
- ret2, err := trie.Execute(0, "a", "c", "1")
- So(err, ShouldBeNil)
- So(ret2, ShouldEqual, "123")
- })
-
- Convey("无Ctx参数", t, func() {
- trie := NewStaticCommandTrie[int]()
-
- var argI int
- var argArr []int64
-
- err := trie.Add(func(i int, arr []int64) int {
- argI = i
- argArr = arr
- return 123
- }, "a", "b")
- So(err, ShouldBeNil)
-
- ret, err := trie.Execute("a", "b", "1")
- So(err, ShouldBeNil)
-
- So(argI, ShouldEqual, 1)
- So(argArr, ShouldResemble, []int64{})
- So(ret, ShouldEqual, 123)
- })
-
- Convey("完全无参数", t, func() {
- trie := NewStaticCommandTrie[int]()
-
- var argI int
- var argArr []int64
-
- err := trie.Add(func() int {
- argI = 1
- argArr = []int64{}
- return 123
- }, "a", "b")
- So(err, ShouldBeNil)
-
- ret, err := trie.Execute("a", "b")
- So(err, ShouldBeNil)
-
- So(argI, ShouldEqual, 1)
- So(argArr, ShouldResemble, []int64{})
- So(ret, ShouldEqual, 123)
- })
- }
|