146 lines
2.5 KiB
Go
146 lines
2.5 KiB
Go
|
package gluatemplate
|
||
|
|
||
|
import (
|
||
|
"github.com/yuin/gopher-lua"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestDoString(t *testing.T) {
|
||
|
L := lua.NewState()
|
||
|
defer L.Close()
|
||
|
|
||
|
L.PreloadModule("template", Loader)
|
||
|
if err := L.DoString(`
|
||
|
local template = require("template")
|
||
|
|
||
|
local output = template.dostring([[
|
||
|
This is a text template library.
|
||
|
Created by {{.first_name}} {{.last_name}}
|
||
|
]], {
|
||
|
first_name = "kohki",
|
||
|
last_name = "makimoto",
|
||
|
})
|
||
|
|
||
|
-- print(output)
|
||
|
--
|
||
|
-- This is a text template library.
|
||
|
-- Created by kohki makimoto
|
||
|
--
|
||
|
|
||
|
output = template.dostring("{{.a}}{{.b}}{{.c}}", {
|
||
|
a = "aaa",
|
||
|
b = "bbb",
|
||
|
c = "ccc",
|
||
|
|
||
|
})
|
||
|
assert(output == "aaabbbccc")
|
||
|
|
||
|
output = template.dostring("{{len .b}}{{range $i, $v := .b}}{{$v}}{{end}}", {
|
||
|
a = "aaa",
|
||
|
b = {
|
||
|
"hogehoge",
|
||
|
"foobarfoobar",
|
||
|
},
|
||
|
|
||
|
})
|
||
|
|
||
|
assert(output == "2hogehogefoobarfoobar")
|
||
|
|
||
|
`); err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestDoStringError(t *testing.T) {
|
||
|
L := lua.NewState()
|
||
|
defer L.Close()
|
||
|
|
||
|
L.PreloadModule("template", Loader)
|
||
|
if err := L.DoString(`
|
||
|
local template = require("template")
|
||
|
|
||
|
output, err = template.dostring("{{end}}{{.aaa}}{{.b}}{{.c}}", {
|
||
|
a = "aaa",
|
||
|
b = "bbb",
|
||
|
c = "ccc",
|
||
|
|
||
|
})
|
||
|
assert(output == nil)
|
||
|
print(err)
|
||
|
|
||
|
`); err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var sampleFile = "{{.a}}{{.b}}{{.c}}"
|
||
|
|
||
|
func TestDoFile(t *testing.T) {
|
||
|
tmpFile, err := ioutil.TempFile("", "")
|
||
|
if err != nil {
|
||
|
t.Errorf("should not raise error: %v", err)
|
||
|
}
|
||
|
if err = ioutil.WriteFile(tmpFile.Name(), []byte(sampleFile), 0644); err != nil {
|
||
|
t.Errorf("should not raise error: %v", err)
|
||
|
}
|
||
|
defer func() {
|
||
|
tmpFile.Close()
|
||
|
os.Remove(tmpFile.Name())
|
||
|
}()
|
||
|
|
||
|
L := lua.NewState()
|
||
|
defer L.Close()
|
||
|
|
||
|
L.PreloadModule("template", Loader)
|
||
|
if err := L.DoString(`
|
||
|
local template = require("template")
|
||
|
|
||
|
local output = template.dofile("` + tmpFile.Name() + `", {
|
||
|
a = "aaa",
|
||
|
b = "bbb",
|
||
|
c = "ccc",
|
||
|
})
|
||
|
|
||
|
assert(output == "aaabbbccc")
|
||
|
|
||
|
|
||
|
`); err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestDoFileError(t *testing.T) {
|
||
|
tmpFile, err := ioutil.TempFile("", "")
|
||
|
if err != nil {
|
||
|
t.Errorf("should not raise error: %v", err)
|
||
|
}
|
||
|
if err = ioutil.WriteFile(tmpFile.Name(), []byte(sampleFile), 0644); err != nil {
|
||
|
t.Errorf("should not raise error: %v", err)
|
||
|
}
|
||
|
defer func() {
|
||
|
tmpFile.Close()
|
||
|
os.Remove(tmpFile.Name())
|
||
|
}()
|
||
|
|
||
|
L := lua.NewState()
|
||
|
defer L.Close()
|
||
|
|
||
|
L.PreloadModule("template", Loader)
|
||
|
if err := L.DoString(`
|
||
|
local template = require("template")
|
||
|
|
||
|
local output = template.dofile("` + tmpFile.Name() + `.hoge", {
|
||
|
a = "aaa",
|
||
|
b = "bbb",
|
||
|
c = "ccc",
|
||
|
})
|
||
|
|
||
|
assert(output == nil)
|
||
|
|
||
|
`); err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
}
|