yq/pkg/yqlib/path_postfix_test.go

83 lines
1.5 KiB
Go
Raw Normal View History

2020-09-20 12:40:09 +00:00
package yqlib
import (
"testing"
"github.com/mikefarah/yq/v3/test"
)
// var tokeniser = NewPathTokeniser()
var postFixer = NewPathPostFixer()
func testExpression(expression string) (string, error) {
tokens, err := tokeniser.Tokenise(expression)
if err != nil {
return "", err
}
results, errorP := postFixer.ConvertToPostfix(tokens)
if errorP != nil {
return "", errorP
}
formatted := ""
for _, path := range results {
formatted = formatted + path.toString() + "--------\n"
}
return formatted, nil
}
func TestPostFixSimple(t *testing.T) {
var infix = "a"
var expectedOutput = "Type: PathKey - a\n"
actual, err := testExpression(infix)
if err != nil {
t.Error(err)
}
test.AssertResultComplex(t, expectedOutput, actual)
}
func TestPostFixOr(t *testing.T) {
var infix = "a OR b"
var expectedOutput = `Type: PathKey - a
--------
Type: PathKey - b
--------
Type: Operation - OR
--------
`
actual, err := testExpression(infix)
if err != nil {
t.Error(err)
}
test.AssertResultComplex(t, expectedOutput, actual)
}
func TestPostFixOrWithEquals(t *testing.T) {
var infix = "a==thing OR b==thongs"
var expectedOutput = `Type: PathKey - a
--------
Type: PathKey - thing
--------
Type: Operation - EQUALS
--------
Type: PathKey - b
--------
Type: PathKey - thongs
--------
Type: Operation - EQUALS
--------
Type: Operation - OR
--------
`
actual, err := testExpression(infix)
if err != nil {
t.Error(err)
}
test.AssertResultComplex(t, expectedOutput, actual)
}