mirror of
https://github.com/MontFerret/ferret.git
synced 2025-01-18 03:22:02 +02:00
add tests
This commit is contained in:
parent
ad2ec2e817
commit
749bed5495
102
pkg/compiler/compiler_cases_test.go
Normal file
102
pkg/compiler/compiler_cases_test.go
Normal file
@ -0,0 +1,102 @@
|
||||
package compiler_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/MontFerret/ferret/pkg/compiler"
|
||||
"github.com/MontFerret/ferret/pkg/stdlib/arrays"
|
||||
|
||||
. "github.com/smartystreets/goconvey/convey"
|
||||
)
|
||||
|
||||
func TestCases(t *testing.T) {
|
||||
|
||||
Convey("Should compile", t, func() {
|
||||
|
||||
Convey("String variable should be case-sensitive", func() {
|
||||
param := "String"
|
||||
query := fmt.Sprintf(`
|
||||
let a = "%s"
|
||||
return a
|
||||
`, param)
|
||||
|
||||
res := compiler.New().
|
||||
MustCompile(query).
|
||||
MustRun(context.Background())
|
||||
|
||||
So(string(res), ShouldEqual, `"String"`)
|
||||
})
|
||||
|
||||
Convey("Should work at any case", func() {
|
||||
|
||||
testCases := []struct {
|
||||
Query string
|
||||
Result string
|
||||
}{
|
||||
// Key-word only
|
||||
{
|
||||
Query: "return 2 * 2",
|
||||
Result: "4",
|
||||
},
|
||||
// With function
|
||||
{
|
||||
Query: "return last([7, 2, 99])",
|
||||
Result: "99",
|
||||
},
|
||||
// With namespace
|
||||
{
|
||||
Query: "return x::last([7, 2, 99])",
|
||||
Result: "99",
|
||||
},
|
||||
}
|
||||
|
||||
strCases := map[string]func(string) string{
|
||||
"Mixed": func(s string) string {
|
||||
// Capitalize string.
|
||||
// Source: https://stackoverflow.com/questions/33696034/make-first-letter-of-words-uppercase-in-a-string
|
||||
return strings.Title(strings.ToLower(s))
|
||||
},
|
||||
"Upper": strings.ToUpper,
|
||||
"Lower": strings.ToLower,
|
||||
}
|
||||
|
||||
for _, tC := range testCases {
|
||||
tC := tC
|
||||
|
||||
for strCase, toCase := range strCases {
|
||||
query := toCase(tC.Query)
|
||||
tcName := fmt.Sprintf(`%s: "%s"`, strCase, query)
|
||||
|
||||
Convey(tcName, func() {
|
||||
|
||||
compiler := compiler.New()
|
||||
compiler.Namespace("X").RegisterFunction("LAST", arrays.Last)
|
||||
|
||||
res := compiler.
|
||||
MustCompile(query).
|
||||
MustRun(context.Background())
|
||||
|
||||
So(string(res), ShouldEqual, tC.Result)
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
Convey("Should not compile", t, func() {
|
||||
|
||||
Convey("Variable should be case-sensitive", func() {
|
||||
_, err := compiler.New().
|
||||
Compile(
|
||||
`
|
||||
let a = 1
|
||||
return A
|
||||
`)
|
||||
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue
Block a user