mirror of
https://github.com/chaisql/chai.git
synced 2025-10-06 16:18:14 +08:00

* Add packaged functions support * Add tests for math.floor func * Export FunctionsTable * Extract func stuff into its own package * Rename stuff * Fix tests * Move doc package to cmd/genji * Adjust naming, typos
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package functions_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/genjidb/genji/document"
|
|
"github.com/genjidb/genji/internal/expr"
|
|
"github.com/genjidb/genji/internal/expr/functions"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDefinitions(t *testing.T) {
|
|
packages := functions.DefaultPackages()
|
|
def, err := packages.GetFunc("", "count")
|
|
require.NoError(t, err)
|
|
|
|
t.Run("String()", func(t *testing.T) {
|
|
require.Equal(t, "count(arg1)", def.String())
|
|
})
|
|
|
|
t.Run("Function()", func(t *testing.T) {
|
|
fexpr, err := def.Function(expr.Path(document.NewPath("a")))
|
|
require.NoError(t, err)
|
|
require.NotNil(t, fexpr)
|
|
})
|
|
|
|
t.Run("Arity()", func(t *testing.T) {
|
|
require.Equal(t, 1, def.Arity())
|
|
})
|
|
}
|
|
|
|
func TestPackages(t *testing.T) {
|
|
table := functions.DefaultPackages()
|
|
|
|
t.Run("OK GetFunc()", func(t *testing.T) {
|
|
def, err := table.GetFunc("math", "floor")
|
|
require.NoError(t, err)
|
|
require.Equal(t, "floor", def.Name())
|
|
def, err = table.GetFunc("", "count")
|
|
require.NoError(t, err)
|
|
require.Equal(t, "count", def.Name())
|
|
})
|
|
|
|
t.Run("NOK GetFunc() missing func", func(t *testing.T) {
|
|
def, err := table.GetFunc("math", "foobar")
|
|
require.Error(t, err)
|
|
require.Nil(t, def)
|
|
def, err = table.GetFunc("", "foobar")
|
|
require.Error(t, err)
|
|
require.Nil(t, def)
|
|
})
|
|
|
|
t.Run("NOK GetFunc() missing package", func(t *testing.T) {
|
|
def, err := table.GetFunc("foobar", "foobar")
|
|
require.Error(t, err)
|
|
require.Nil(t, def)
|
|
})
|
|
}
|