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
|
||||
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