You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

command_trie_test.go 3.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package cmdtrie
  2. import (
  3. "testing"
  4. . "github.com/smartystreets/goconvey/convey"
  5. )
  6. func Test_CommandTrie(t *testing.T) {
  7. Convey("无参数命令", t, func() {
  8. trie := NewVoidCommandTrie[int]()
  9. var ret string
  10. err := trie.Add(func(int) {
  11. ret = "ok"
  12. }, "a")
  13. So(err, ShouldBeNil)
  14. err = trie.Execute(0, "a")
  15. So(err, ShouldBeNil)
  16. So(ret, ShouldEqual, "ok")
  17. })
  18. Convey("各种参数", t, func() {
  19. trie := NewVoidCommandTrie[int]()
  20. var argI int
  21. var argStr string
  22. var argBl bool
  23. var argFP float32
  24. err := trie.Add(func(int, i int, str string, bl bool, fp float32) {
  25. argI = i
  26. argStr = str
  27. argBl = bl
  28. argFP = fp
  29. }, "a", "b")
  30. So(err, ShouldBeNil)
  31. err = trie.Execute(0, "a", "b", "1", "2", "true", "3")
  32. So(err, ShouldBeNil)
  33. So(argI, ShouldEqual, 1)
  34. So(argStr, ShouldEqual, "2")
  35. So(argBl, ShouldBeTrue)
  36. So(argFP, ShouldEqual, 3)
  37. })
  38. Convey("有数组参数", t, func() {
  39. trie := NewVoidCommandTrie[int]()
  40. var argI int
  41. var argArr []int64
  42. err := trie.Add(func(int, i int, arr []int64) {
  43. argI = i
  44. argArr = arr
  45. }, "a", "b")
  46. So(err, ShouldBeNil)
  47. err = trie.Execute(0, "a", "b", "1", "2", "3", "4")
  48. So(err, ShouldBeNil)
  49. So(argI, ShouldEqual, 1)
  50. So(argArr, ShouldResemble, []int64{2, 3, 4})
  51. })
  52. Convey("有数组参数,但为空", t, func() {
  53. trie := NewVoidCommandTrie[int]()
  54. var argI int
  55. var argArr []int64
  56. err := trie.Add(func(int, i int, arr []int64) {
  57. argI = i
  58. argArr = arr
  59. }, "a", "b")
  60. So(err, ShouldBeNil)
  61. err = trie.Execute(0, "a", "b", "1")
  62. So(err, ShouldBeNil)
  63. So(argI, ShouldEqual, 1)
  64. So(argArr, ShouldResemble, []int64{})
  65. })
  66. Convey("带返回值", t, func() {
  67. trie := NewCommandTrie[int, int]()
  68. var argI int
  69. var argArr []int64
  70. err := trie.Add(func(int, i int, arr []int64) int {
  71. argI = i
  72. argArr = arr
  73. return 123
  74. }, "a", "b")
  75. So(err, ShouldBeNil)
  76. ret, err := trie.Execute(0, "a", "b", "1")
  77. So(err, ShouldBeNil)
  78. So(argI, ShouldEqual, 1)
  79. So(argArr, ShouldResemble, []int64{})
  80. So(ret, ShouldEqual, 123)
  81. })
  82. Convey("返回值是接口类型", t, func() {
  83. trie := NewCommandTrie[int, any]()
  84. var argI int
  85. var argArr []int64
  86. err := trie.Add(func(int, i int, arr []int64) int {
  87. argI = i
  88. argArr = arr
  89. return 123
  90. }, "a", "b")
  91. So(err, ShouldBeNil)
  92. err = trie.Add(func(int, i int, arr []int64) string {
  93. return "123"
  94. }, "a", "c")
  95. So(err, ShouldBeNil)
  96. ret, err := trie.Execute(0, "a", "b", "1")
  97. So(err, ShouldBeNil)
  98. So(argI, ShouldEqual, 1)
  99. So(argArr, ShouldResemble, []int64{})
  100. So(ret, ShouldEqual, 123)
  101. ret2, err := trie.Execute(0, "a", "c", "1")
  102. So(err, ShouldBeNil)
  103. So(ret2, ShouldEqual, "123")
  104. })
  105. Convey("无Ctx参数", t, func() {
  106. trie := NewStaticCommandTrie[int]()
  107. var argI int
  108. var argArr []int64
  109. err := trie.Add(func(i int, arr []int64) int {
  110. argI = i
  111. argArr = arr
  112. return 123
  113. }, "a", "b")
  114. So(err, ShouldBeNil)
  115. ret, err := trie.Execute("a", "b", "1")
  116. So(err, ShouldBeNil)
  117. So(argI, ShouldEqual, 1)
  118. So(argArr, ShouldResemble, []int64{})
  119. So(ret, ShouldEqual, 123)
  120. })
  121. Convey("完全无参数", t, func() {
  122. trie := NewStaticCommandTrie[int]()
  123. var argI int
  124. var argArr []int64
  125. err := trie.Add(func() int {
  126. argI = 1
  127. argArr = []int64{}
  128. return 123
  129. }, "a", "b")
  130. So(err, ShouldBeNil)
  131. ret, err := trie.Execute("a", "b")
  132. So(err, ShouldBeNil)
  133. So(argI, ShouldEqual, 1)
  134. So(argArr, ShouldResemble, []int64{})
  135. So(ret, ShouldEqual, 123)
  136. })
  137. }

公共库

Contributors (1)