mirror of
https://github.com/Luzifer/korvike.git
synced 2024-11-08 15:30:05 +00:00
Add 'now' function and function tests
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
349e518706
commit
63d5a27b80
3 changed files with 90 additions and 1 deletions
5
Makefile
5
Makefile
|
@ -1,3 +1,6 @@
|
||||||
ci:
|
ci: test
|
||||||
curl -sSLo golang.sh https://raw.githubusercontent.com/Luzifer/github-publish/master/golang.sh
|
curl -sSLo golang.sh https://raw.githubusercontent.com/Luzifer/github-publish/master/golang.sh
|
||||||
bash golang.sh
|
bash golang.sh
|
||||||
|
|
||||||
|
test:
|
||||||
|
go test -v ./functions
|
||||||
|
|
9
functions/func_now.go
Normal file
9
functions/func_now.go
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
package functions
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
registerFunction("now", func(name string, v ...string) string {
|
||||||
|
return time.Now().Format(name)
|
||||||
|
})
|
||||||
|
}
|
77
functions/func_test.go
Normal file
77
functions/func_test.go
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
package functions
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"math/rand"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
"text/template"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func renderHelper(tpl string, ctx map[string]interface{}) string {
|
||||||
|
t, err := template.New("mytemplate").Funcs(GetFunctionMap()).Parse(tpl)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
buf := bytes.NewBufferString("")
|
||||||
|
if err := t.Execute(buf, ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func randomString() string {
|
||||||
|
const chars = "abcdefghijklmnopqrstuvwxyz0123456789"
|
||||||
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
|
||||||
|
result := make([]byte, 32)
|
||||||
|
for i := range result {
|
||||||
|
result[i] = chars[r.Intn(len(chars))]
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(result)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_GetFunctionMap(t *testing.T) {
|
||||||
|
f := GetFunctionMap()
|
||||||
|
if f == nil || len(f) < 1 {
|
||||||
|
t.Fatal("No functions were registered.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_env(t *testing.T) {
|
||||||
|
result := randomString()
|
||||||
|
os.Setenv("KORVIKE_TESTING", result)
|
||||||
|
|
||||||
|
if r := renderHelper(`{{env "KORVIKE_TESTING"}}`, nil); r != result {
|
||||||
|
t.Errorf("[env] did not receive expected string: %q (expected %q)", r, result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_file(t *testing.T) {
|
||||||
|
f, err := ioutil.TempFile("", "")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
p := f.Name()
|
||||||
|
result := randomString()
|
||||||
|
fmt.Fprint(f, result)
|
||||||
|
f.Close()
|
||||||
|
defer os.Remove(p)
|
||||||
|
|
||||||
|
if r := renderHelper(fmt.Sprintf("{{file %q}}", p), nil); r != result {
|
||||||
|
t.Errorf("[file] did not receive expected string: %q (expected %q)", r, result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_now(t *testing.T) {
|
||||||
|
if _, err := time.Parse(time.RFC3339Nano, renderHelper(fmt.Sprintf("{{now %q}}", time.RFC3339Nano), nil)); err != nil {
|
||||||
|
t.Errorf("[now] did not produce expected time format")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue