1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-12-05 22:26:09 +02:00

Added support of using keywords in namespaces (#481)

* Added support of using keywords in namespaces

* Added true and false

* Removed unnecessary string case
This commit is contained in:
Tim Voronov
2020-04-28 17:30:47 -04:00
committed by GitHub
parent 7d7253325e
commit 7b2ed4c662
11 changed files with 1076 additions and 740 deletions

View File

@@ -2,6 +2,7 @@ package compiler_test
import (
"context"
"fmt"
"github.com/MontFerret/ferret/pkg/compiler"
"github.com/MontFerret/ferret/pkg/runtime/core"
"github.com/MontFerret/ferret/pkg/runtime/values"
@@ -78,4 +79,74 @@ func TestFunctionNSCall(t *testing.T) {
So(err, ShouldNotBeNil)
})
Convey("Should use keywords", t, func() {
c := compiler.New()
keywords := []string{
"And",
"Or",
"For",
"Return",
"Distinct",
"Filter",
"Sort",
"Limit",
"Let",
"Collect",
"Desc",
"Asc",
"None",
"Null",
"True",
"False",
"Use",
"Into",
"Keep",
"With",
"Count",
"All",
"Any",
"Aggregate",
"Like",
"Not",
"In",
}
for _, kw := range keywords {
segment := kw
err := c.Namespace("T").Namespace(segment).RegisterFunction("TEST", func(ctx context.Context, args ...core.Value) (core.Value, error) {
return values.True, nil
})
So(err, ShouldBeNil)
err = c.Namespace("T").Namespace(segment).RegisterFunction(segment, func(ctx context.Context, args ...core.Value) (core.Value, error) {
return values.True, nil
})
So(err, ShouldBeNil)
p, err := c.Compile(fmt.Sprintf(`
RETURN T::%s::TEST()
`, segment))
So(err, ShouldBeNil)
out := p.MustRun(context.Background())
So(string(out), ShouldEqual, "true")
p, err = c.Compile(fmt.Sprintf(`
RETURN T::%s::%s()
`, segment, segment))
So(err, ShouldBeNil)
out = p.MustRun(context.Background())
So(string(out), ShouldEqual, "true")
}
})
}