xgo/script/script_module_test.go

50 lines
1.4 KiB
Go
Raw Normal View History

2019-01-31 08:50:15 +03:00
package script_test
import (
"strings"
2019-01-31 08:50:15 +03:00
"testing"
"github.com/d5/tengo/assert"
"github.com/d5/tengo/objects"
2019-01-31 08:50:15 +03:00
"github.com/d5/tengo/script"
)
func TestScriptSourceModule(t *testing.T) {
2019-01-31 08:50:15 +03:00
// script1 imports "mod1"
2019-02-02 10:27:29 +03:00
scr := script.New([]byte(`out := import("mod")`))
scr.SetImports(map[string]objects.Importable{
"mod": &objects.SourceModule{Src: []byte(`export 5`)},
2019-02-02 10:27:29 +03:00
})
c, err := scr.Run()
2019-01-31 08:50:15 +03:00
assert.Equal(t, int64(5), c.Get("out").Value())
2019-02-02 10:27:29 +03:00
// executing module function
scr = script.New([]byte(`fn := import("mod"); out := fn()`))
scr.SetImports(map[string]objects.Importable{
"mod": &objects.SourceModule{Src: []byte(`a := 3; export func() { return a + 5 }`)},
2019-02-02 10:27:29 +03:00
})
c, err = scr.Run()
assert.NoError(t, err)
assert.Equal(t, int64(8), c.Get("out").Value())
2019-01-31 08:50:15 +03:00
2019-02-02 10:27:29 +03:00
scr = script.New([]byte(`out := import("mod")`))
scr.SetImports(map[string]objects.Importable{
"text": &objects.BuiltinModule{
Attrs: map[string]objects.Object{
"title": &objects.UserFunction{Name: "title", Value: func(args ...objects.Object) (ret objects.Object, err error) {
s, _ := objects.ToString(args[0])
return &objects.String{Value: strings.Title(s)}, nil
}},
},
},
"mod": &objects.SourceModule{Src: []byte(`text := import("text"); export text.title("foo")`)},
2019-02-02 10:27:29 +03:00
})
c, err = scr.Run()
assert.NoError(t, err)
assert.Equal(t, "Foo", c.Get("out").Value())
scr.SetImports(nil)
2019-02-02 10:27:29 +03:00
_, err = scr.Run()
assert.Error(t, err)
2019-01-31 08:50:15 +03:00
}