123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- package jmespath
- import (
- "fmt"
- "testing"
- "github.com/stretchr/testify/assert"
- )
- var parsingErrorTests = []struct {
- expression string
- msg string
- }{
- {"foo.", "Incopmlete expression"},
- {"[foo", "Incopmlete expression"},
- {"]", "Invalid"},
- {")", "Invalid"},
- {"}", "Invalid"},
- {"foo..bar", "Invalid"},
- {`foo."bar`, "Forwards lexer errors"},
- {`{foo: bar`, "Incomplete expression"},
- {`{foo bar}`, "Invalid"},
- {`[foo bar]`, "Invalid"},
- {`foo@`, "Invalid"},
- {`&&&&&&&&&&&&t(`, "Invalid"},
- {`[*][`, "Invalid"},
- }
- func TestParsingErrors(t *testing.T) {
- assert := assert.New(t)
- parser := NewParser()
- for _, tt := range parsingErrorTests {
- _, err := parser.Parse(tt.expression)
- assert.NotNil(err, fmt.Sprintf("Expected parsing error: %s, for expression: %s", tt.msg, tt.expression))
- }
- }
- var prettyPrinted = `ASTProjection {
- children: {
- ASTField {
- value: "foo"
- }
- ASTSubexpression {
- children: {
- ASTSubexpression {
- children: {
- ASTField {
- value: "bar"
- }
- ASTField {
- value: "baz"
- }
- }
- ASTField {
- value: "qux"
- }
- }
- }
- `
- var prettyPrintedCompNode = `ASTFilterProjection {
- children: {
- ASTField {
- value: "a"
- }
- ASTIdentity {
- }
- ASTComparator {
- value: tLTE
- children: {
- ASTField {
- value: "b"
- }
- ASTField {
- value: "c"
- }
- }
- }
- `
- func TestPrettyPrintedAST(t *testing.T) {
- assert := assert.New(t)
- parser := NewParser()
- parsed, _ := parser.Parse("foo[*].bar.baz.qux")
- assert.Equal(parsed.PrettyPrint(0), prettyPrinted)
- }
- func TestPrettyPrintedCompNode(t *testing.T) {
- assert := assert.New(t)
- parser := NewParser()
- parsed, _ := parser.Parse("a[?b<=c]")
- assert.Equal(parsed.PrettyPrint(0), prettyPrintedCompNode)
- }
- func BenchmarkParseIdentifier(b *testing.B) {
- runParseBenchmark(b, exprIdentifier)
- }
- func BenchmarkParseSubexpression(b *testing.B) {
- runParseBenchmark(b, exprSubexpr)
- }
- func BenchmarkParseDeeplyNested50(b *testing.B) {
- runParseBenchmark(b, deeplyNested50)
- }
- func BenchmarkParseDeepNested50Pipe(b *testing.B) {
- runParseBenchmark(b, deeplyNested50Pipe)
- }
- func BenchmarkParseDeepNested50Index(b *testing.B) {
- runParseBenchmark(b, deeplyNested50Index)
- }
- func BenchmarkParseQuotedIdentifier(b *testing.B) {
- runParseBenchmark(b, exprQuotedIdentifier)
- }
- func BenchmarkParseQuotedIdentifierEscapes(b *testing.B) {
- runParseBenchmark(b, quotedIdentifierEscapes)
- }
- func BenchmarkParseRawStringLiteral(b *testing.B) {
- runParseBenchmark(b, rawStringLiteral)
- }
- func BenchmarkParseDeepProjection104(b *testing.B) {
- runParseBenchmark(b, deepProjection104)
- }
- func runParseBenchmark(b *testing.B, expression string) {
- parser := NewParser()
- for i := 0; i < b.N; i++ {
- parser.Parse(expression)
- }
- }
|