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:
@@ -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")
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user