1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-03-19 21:28:32 +02:00
ferret/pkg/compiler/namespace_test.go
Tim Voronov 2643321e0f
Migration to lab (#526)
* Switched to Lab for e2e tests

* Switched to binary

* Updated lab installation

* Updated use of Lab installer

* updates

* Changed lab installation path

* Updated use of installer

* Works

* Added additional functions

* Updated some tests

* Updated go.sum

* Works

* Refactored assertions

* Added tests for testing.True

* Added tests for testing.None

* Added tests for testing.Lte

* Added tests for testing.Lt

* Added generic consturctor

* Added tests for testing.Len

* Added tests for testing.Gte

* Added tests for testing.Gt

* Added tests for testing.False

* Added tests for testing.Empty

* Added tests for testing.Fail

* Added tests for testing.Equal

* Added tests for testing.Include

* Updated urls in static page tests

* Fixed namespace unit tests

* Fixed unit test for testing.Len

* Updated E2E scripts

* Updaes

* Updated Chrome in CI/CD

* Added e2e for example test click.fql

* Added suite cases for example scripts

* Updated examples

* Updated

* Added type assertions

* Updated Chrome opts and disabled headers and cookies related tests

* Fixed iframes example

* Increased timeouts in navigation examples

* Updated value example

* Updated comments

* Disabled cookies examples

* Fixed static url

* Disabled headers examples

* Disabled UA test

* Simplified wait logic

* Added base testing module

* Fixes after codereview

* Disabled failing tests
2020-06-17 17:37:01 -04:00

97 lines
2.5 KiB
Go

package compiler_test
import (
"context"
"github.com/MontFerret/ferret/pkg/compiler"
"github.com/MontFerret/ferret/pkg/runtime/core"
"github.com/MontFerret/ferret/pkg/runtime/values"
. "github.com/smartystreets/goconvey/convey"
"testing"
)
func TestNamespaceBuilder(t *testing.T) {
Convey("Namespaces", t, func() {
Convey("Should return an error when a function name contains NS separator", func() {
c := compiler.New()
err := c.RegisterFunction("FOO::SPY", func(ctx context.Context, args ...core.Value) (value core.Value, e error) {
return values.None, nil
})
So(err, ShouldNotBeNil)
})
Convey("Should successfully register a name within a namespace", func() {
c := compiler.New()
err := c.Namespace("FOO").RegisterFunction("SPY", func(ctx context.Context, args ...core.Value) (value core.Value, e error) {
return values.None, nil
})
So(err, ShouldBeNil)
funcs := c.RegisteredFunctions()
var exists bool
for _, name := range funcs {
exists = name == "FOO::SPY"
if exists {
break
}
}
So(exists, ShouldBeTrue)
})
Convey("Root namespace should return all registered functions", func() {
c := compiler.New()
err := c.Namespace("FOO").RegisterFunction("SPY", func(ctx context.Context, args ...core.Value) (value core.Value, e error) {
return values.None, nil
})
So(err, ShouldBeNil)
funcs := c.RegisteredFunctions()
So(len(funcs), ShouldBeGreaterThan, 1)
})
Convey("Namespace should return all registered functions", func() {
c := compiler.New()
err := c.Namespace("FOO").RegisterFunction("SPY", func(ctx context.Context, args ...core.Value) (value core.Value, e error) {
return values.None, nil
})
So(err, ShouldBeNil)
err = c.Namespace("FOO").Namespace("UTILS").RegisterFunction("SPY", func(ctx context.Context, args ...core.Value) (value core.Value, e error) {
return values.None, nil
})
So(err, ShouldBeNil)
funcs := c.Namespace("FOO").RegisteredFunctions()
So(funcs, ShouldHaveLength, 2)
funcs2 := c.Namespace("FOO").Namespace("UTILS").RegisteredFunctions()
So(funcs2, ShouldHaveLength, 1)
})
Convey("Namespace should return an error if namespace name is incorrect", func() {
c := compiler.New()
noop := func(ctx context.Context, args ...core.Value) (value core.Value, e error) {
return values.None, nil
}
err := c.Namespace("FOO::").RegisterFunction("SPY", noop)
So(err, ShouldNotBeNil)
err = c.Namespace("@F").RegisterFunction("SPY", noop)
So(err, ShouldNotBeNil)
})
})
}