1
0
Fork 0
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:
Knut Ahlers 2017-04-17 16:25:59 +02:00
parent 349e518706
commit 63d5a27b80
Signed by: luzifer
GPG key ID: DC2729FDD34BE99E
3 changed files with 90 additions and 1 deletions

View file

@ -1,3 +1,6 @@
ci:
ci: test
curl -sSLo golang.sh https://raw.githubusercontent.com/Luzifer/github-publish/master/golang.sh
bash golang.sh
test:
go test -v ./functions

9
functions/func_now.go Normal file
View 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
View 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")
}
}