123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package test
- import (
- "testing"
- "github.com/stretchr/testify/assert"
- "github.com/tal-tech/go-zero/tools/goctl/api/parser/g4/ast"
- "github.com/tal-tech/go-zero/tools/goctl/api/parser/g4/gen/api"
- )
- var syntaxAccept = func(p *api.ApiParserParser, visitor *ast.ApiVisitor) interface{} {
- return p.SyntaxLit().Accept(visitor)
- }
- func TestSyntax(t *testing.T) {
- t.Run("matched", func(t *testing.T) {
- v, err := parser.Accept(syntaxAccept, `syntax = "v1"`)
- assert.Nil(t, err)
- syntax := v.(*ast.SyntaxExpr)
- assert.True(t, syntax.Equal(&ast.SyntaxExpr{
- Syntax: ast.NewTextExpr("syntax"),
- Assign: ast.NewTextExpr("="),
- Version: ast.NewTextExpr(`"v1"`),
- }))
- })
- t.Run("expecting syntax", func(t *testing.T) {
- _, err := parser.Accept(syntaxAccept, `= "v1"`)
- assert.Error(t, err)
- _, err = parser.Accept(syntaxAccept, `syn = "v1"`)
- assert.Error(t, err)
- })
- t.Run("missing assign", func(t *testing.T) {
- _, err := parser.Accept(syntaxAccept, `syntax "v1"`)
- assert.Error(t, err)
- _, err = parser.Accept(syntaxAccept, `syntax + "v1"`)
- assert.Error(t, err)
- })
- t.Run("mismatched version", func(t *testing.T) {
- _, err := parser.Accept(syntaxAccept, `syntax="v0"`)
- assert.Error(t, err)
- _, err = parser.Accept(syntaxAccept, `syntax = "v1a"`)
- assert.Error(t, err)
- _, err = parser.Accept(syntaxAccept, `syntax = "vv1"`)
- assert.Error(t, err)
- _, err = parser.Accept(syntaxAccept, `syntax = "1"`)
- assert.Error(t, err)
- })
- t.Run("with comment", func(t *testing.T) {
- v, err := parser.Accept(syntaxAccept, `
- // doc
- syntax="v1" // line comment`)
- assert.Nil(t, err)
- syntax := v.(*ast.SyntaxExpr)
- assert.True(t, syntax.Equal(&ast.SyntaxExpr{
- Syntax: ast.NewTextExpr("syntax"),
- Assign: ast.NewTextExpr("="),
- Version: ast.NewTextExpr(`"v1"`),
- DocExpr: []ast.Expr{
- ast.NewTextExpr("// doc"),
- },
- CommentExpr: ast.NewTextExpr("// line comment"),
- }))
- })
- }
|