101 lines
1.9 KiB
Go
101 lines
1.9 KiB
Go
|
package parser
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/a-h/parse"
|
||
|
"github.com/google/go-cmp/cmp"
|
||
|
)
|
||
|
|
||
|
func TestCallTemplateExpressionParser(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
input string
|
||
|
expected CallTemplateExpression
|
||
|
}{
|
||
|
{
|
||
|
name: "call: simple",
|
||
|
input: `{! Other(p.Test) }`,
|
||
|
expected: CallTemplateExpression{
|
||
|
Expression: Expression{
|
||
|
Value: "Other(p.Test)",
|
||
|
Range: Range{
|
||
|
From: Position{
|
||
|
Index: 3,
|
||
|
Line: 0,
|
||
|
Col: 3,
|
||
|
},
|
||
|
To: Position{
|
||
|
Index: 16,
|
||
|
Line: 0,
|
||
|
Col: 16,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "call: simple, missing start space",
|
||
|
input: `{!Other(p.Test) }`,
|
||
|
expected: CallTemplateExpression{
|
||
|
Expression: Expression{
|
||
|
Value: "Other(p.Test)",
|
||
|
Range: Range{
|
||
|
From: Position{
|
||
|
Index: 2,
|
||
|
Line: 0,
|
||
|
Col: 2,
|
||
|
},
|
||
|
To: Position{
|
||
|
Index: 15,
|
||
|
Line: 0,
|
||
|
Col: 15,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "call: simple, missing start and end space",
|
||
|
input: `{!Other(p.Test)}`,
|
||
|
expected: CallTemplateExpression{
|
||
|
Expression: Expression{
|
||
|
Value: "Other(p.Test)",
|
||
|
Range: Range{
|
||
|
From: Position{
|
||
|
Index: 2,
|
||
|
Line: 0,
|
||
|
Col: 2,
|
||
|
},
|
||
|
To: Position{
|
||
|
Index: 15,
|
||
|
Line: 0,
|
||
|
Col: 15,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
tt := tt
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
input := parse.NewInput(tt.input)
|
||
|
result, ok, err := callTemplateExpression.Parse(input)
|
||
|
if err != nil {
|
||
|
t.Fatalf("parser error: %v", err)
|
||
|
}
|
||
|
if !ok {
|
||
|
t.Errorf("failed to parse at %d", input.Index())
|
||
|
}
|
||
|
if diff := cmp.Diff(tt.expected, result); diff != "" {
|
||
|
t.Error(diff)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestCallTemplateParserAllocsSkip(t *testing.T) {
|
||
|
RunParserAllocTest(t, callTemplateExpression, false, 0, ``)
|
||
|
}
|