info_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package test
  2. import (
  3. "testing"
  4. "git.i2edu.net/i2/go-zero/tools/goctl/api/parser/g4/ast"
  5. "git.i2edu.net/i2/go-zero/tools/goctl/api/parser/g4/gen/api"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. var infoAccept = func(p *api.ApiParserParser, visitor *ast.ApiVisitor) interface{} {
  9. return p.InfoSpec().Accept(visitor)
  10. }
  11. func TestInfo(t *testing.T) {
  12. t.Run("matched", func(t *testing.T) {
  13. v, err := parser.Accept(infoAccept, `
  14. info(
  15. title: foo
  16. )
  17. `)
  18. assert.Nil(t, err)
  19. info := v.(*ast.InfoExpr)
  20. assert.True(t, info.Equal(&ast.InfoExpr{
  21. Info: ast.NewTextExpr("info"),
  22. Kvs: []*ast.KvExpr{
  23. {
  24. Key: ast.NewTextExpr("title"),
  25. Value: ast.NewTextExpr("foo"),
  26. },
  27. },
  28. }))
  29. v, err = parser.Accept(infoAccept, `
  30. info(
  31. title: 中文(bar)
  32. )
  33. `)
  34. assert.Nil(t, err)
  35. info = v.(*ast.InfoExpr)
  36. assert.True(t, info.Equal(&ast.InfoExpr{
  37. Info: ast.NewTextExpr("info"),
  38. Kvs: []*ast.KvExpr{
  39. {
  40. Key: ast.NewTextExpr("title"),
  41. Value: ast.NewTextExpr("中文(bar)"),
  42. },
  43. },
  44. }))
  45. v, err = parser.Accept(infoAccept, `
  46. info(
  47. foo: "new
  48. line"
  49. )
  50. `)
  51. assert.Nil(t, err)
  52. info = v.(*ast.InfoExpr)
  53. assert.True(t, info.Equal(&ast.InfoExpr{
  54. Info: ast.NewTextExpr("info"),
  55. Kvs: []*ast.KvExpr{
  56. {
  57. Key: ast.NewTextExpr("foo"),
  58. Value: ast.NewTextExpr(`"new
  59. line"`),
  60. },
  61. },
  62. }))
  63. })
  64. t.Run("matched doc", func(t *testing.T) {
  65. v, err := parser.Accept(infoAccept, `
  66. // doc
  67. info( // comment
  68. // foo
  69. title: foo // bar
  70. )
  71. `)
  72. assert.Nil(t, err)
  73. info := v.(*ast.InfoExpr)
  74. assert.True(t, info.Equal(&ast.InfoExpr{
  75. Info: ast.NewTextExpr("info"),
  76. Kvs: []*ast.KvExpr{
  77. {
  78. Key: ast.NewTextExpr("title"),
  79. Value: ast.NewTextExpr("foo"),
  80. DocExpr: []ast.Expr{
  81. ast.NewTextExpr("// foo"),
  82. },
  83. CommentExpr: ast.NewTextExpr("// bar"),
  84. },
  85. },
  86. }))
  87. v, err = parser.Accept(infoAccept, `
  88. /**doc block*/
  89. info( /**line block*/
  90. /**foo*/
  91. title: foo /*bar**/
  92. )
  93. `)
  94. assert.Nil(t, err)
  95. info = v.(*ast.InfoExpr)
  96. assert.True(t, info.Equal(&ast.InfoExpr{
  97. Info: ast.NewTextExpr("info"),
  98. Kvs: []*ast.KvExpr{
  99. {
  100. Key: ast.NewTextExpr("title"),
  101. Value: ast.NewTextExpr("foo"),
  102. DocExpr: []ast.Expr{
  103. ast.NewTextExpr("/**foo*/"),
  104. },
  105. CommentExpr: ast.NewTextExpr("/*bar**/"),
  106. },
  107. },
  108. }))
  109. v, err = parser.Accept(infoAccept, `
  110. info(
  111. // doc
  112. title: foo
  113. // doc
  114. author: bar
  115. )
  116. `)
  117. assert.Nil(t, err)
  118. info = v.(*ast.InfoExpr)
  119. assert.True(t, info.Equal(&ast.InfoExpr{
  120. Info: ast.NewTextExpr("info"),
  121. Kvs: []*ast.KvExpr{
  122. {
  123. Key: ast.NewTextExpr("title"),
  124. Value: ast.NewTextExpr("foo"),
  125. DocExpr: []ast.Expr{
  126. ast.NewTextExpr("// doc"),
  127. },
  128. },
  129. {
  130. Key: ast.NewTextExpr("author"),
  131. Value: ast.NewTextExpr("bar"),
  132. DocExpr: []ast.Expr{
  133. ast.NewTextExpr("// doc"),
  134. },
  135. },
  136. },
  137. }))
  138. })
  139. t.Run("mismatched", func(t *testing.T) {
  140. _, err := parser.Accept(infoAccept, `
  141. info(
  142. title
  143. )
  144. `)
  145. assert.Error(t, err)
  146. _, err = parser.Accept(infoAccept, `
  147. info(
  148. :title
  149. )
  150. `)
  151. assert.Error(t, err)
  152. _, err = parser.Accept(infoAccept, `
  153. info(
  154. foo bar
  155. )
  156. `)
  157. assert.Error(t, err)
  158. _, err = parser.Accept(infoAccept, `
  159. info(
  160. foo : new
  161. line
  162. )
  163. `)
  164. assert.Error(t, err)
  165. _, err = parser.Accept(infoAccept, `
  166. info()
  167. `)
  168. assert.Error(t, err)
  169. })
  170. }