| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package sprig
- import (
- "bytes"
- "fmt"
- "testing"
- "text/template"
- "github.com/stretchr/testify/assert"
- )
- func TestBase(t *testing.T) {
- assert.NoError(t, runt(`{{ base "foo/bar" }}`, "bar"))
- }
- func TestDir(t *testing.T) {
- assert.NoError(t, runt(`{{ dir "foo/bar/baz" }}`, "foo/bar"))
- }
- func TestIsAbs(t *testing.T) {
- assert.NoError(t, runt(`{{ isAbs "/foo" }}`, "true"))
- assert.NoError(t, runt(`{{ isAbs "foo" }}`, "false"))
- }
- func TestClean(t *testing.T) {
- assert.NoError(t, runt(`{{ clean "/foo/../foo/../bar" }}`, "/bar"))
- }
- func TestExt(t *testing.T) {
- assert.NoError(t, runt(`{{ ext "/foo/bar/baz.txt" }}`, ".txt"))
- }
- func TestRegex(t *testing.T) {
- assert.NoError(t, runt(`{{ regexQuoteMeta "1.2.3" }}`, "1\\.2\\.3"))
- assert.NoError(t, runt(`{{ regexQuoteMeta "pretzel" }}`, "pretzel"))
- }
- // runt runs a template and checks that the output exactly matches the expected string.
- func runt(tpl, expect string) error {
- return runtv(tpl, expect, map[string]string{})
- }
- // runtv takes a template, and expected return, and values for substitution.
- //
- // It runs the template and verifies that the output is an exact match.
- func runtv(tpl, expect string, vars any) error {
- fmap := TxtFuncMap()
- t := template.Must(template.New("test").Funcs(fmap).Parse(tpl))
- var b bytes.Buffer
- err := t.Execute(&b, vars)
- if err != nil {
- return err
- }
- if expect != b.String() {
- return fmt.Errorf("expected '%s', got '%s'", expect, b.String())
- }
- return nil
- }
- // runRaw runs a template with the given variables and returns the result.
- func runRaw(tpl string, vars any) (string, error) {
- fmap := TxtFuncMap()
- t := template.Must(template.New("test").Funcs(fmap).Parse(tpl))
- var b bytes.Buffer
- err := t.Execute(&b, vars)
- if err != nil {
- return "", err
- }
- return b.String(), nil
- }
|