| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- package sprig
- import (
- "encoding/base32"
- "encoding/base64"
- "fmt"
- "testing"
- "github.com/stretchr/testify/assert"
- )
- func TestSubstr(t *testing.T) {
- tpl := `{{"fooo" | substr 0 3 }}`
- if err := runt(tpl, "foo"); err != nil {
- t.Error(err)
- }
- }
- func TestSubstr_shorterString(t *testing.T) {
- tpl := `{{"foo" | substr 0 10 }}`
- if err := runt(tpl, "foo"); err != nil {
- t.Error(err)
- }
- }
- func TestTrunc(t *testing.T) {
- tpl := `{{ "foooooo" | trunc 3 }}`
- if err := runt(tpl, "foo"); err != nil {
- t.Error(err)
- }
- tpl = `{{ "baaaaaar" | trunc -3 }}`
- if err := runt(tpl, "aar"); err != nil {
- t.Error(err)
- }
- tpl = `{{ "baaaaaar" | trunc -999 }}`
- if err := runt(tpl, "baaaaaar"); err != nil {
- t.Error(err)
- }
- tpl = `{{ "baaaaaz" | trunc 0 }}`
- if err := runt(tpl, ""); err != nil {
- t.Error(err)
- }
- }
- func TestQuote(t *testing.T) {
- tpl := `{{quote "a" "b" "c"}}`
- if err := runt(tpl, `"a" "b" "c"`); err != nil {
- t.Error(err)
- }
- tpl = `{{quote "\"a\"" "b" "c"}}`
- if err := runt(tpl, `"\"a\"" "b" "c"`); err != nil {
- t.Error(err)
- }
- tpl = `{{quote 1 2 3 }}`
- if err := runt(tpl, `"1" "2" "3"`); err != nil {
- t.Error(err)
- }
- tpl = `{{ .value | quote }}`
- values := map[string]any{"value": nil}
- if err := runtv(tpl, ``, values); err != nil {
- t.Error(err)
- }
- }
- func TestSquote(t *testing.T) {
- tpl := `{{squote "a" "b" "c"}}`
- if err := runt(tpl, `'a' 'b' 'c'`); err != nil {
- t.Error(err)
- }
- tpl = `{{squote 1 2 3 }}`
- if err := runt(tpl, `'1' '2' '3'`); err != nil {
- t.Error(err)
- }
- tpl = `{{ .value | squote }}`
- values := map[string]any{"value": nil}
- if err := runtv(tpl, ``, values); err != nil {
- t.Error(err)
- }
- }
- func TestContains(t *testing.T) {
- // Mainly, we're just verifying the paramater order swap.
- tests := []string{
- `{{if contains "cat" "fair catch"}}1{{end}}`,
- `{{if hasPrefix "cat" "catch"}}1{{end}}`,
- `{{if hasSuffix "cat" "ducat"}}1{{end}}`,
- }
- for _, tt := range tests {
- if err := runt(tt, "1"); err != nil {
- t.Error(err)
- }
- }
- }
- func TestTrim(t *testing.T) {
- tests := []string{
- `{{trim " 5.00 "}}`,
- `{{trimAll "$" "$5.00$"}}`,
- `{{trimPrefix "$" "$5.00"}}`,
- `{{trimSuffix "$" "5.00$"}}`,
- }
- for _, tt := range tests {
- if err := runt(tt, "5.00"); err != nil {
- t.Error(err)
- }
- }
- }
- func TestSplit(t *testing.T) {
- tpl := `{{$v := "foo$bar$baz" | split "$"}}{{$v._0}}`
- if err := runt(tpl, "foo"); err != nil {
- t.Error(err)
- }
- }
- func TestSplitn(t *testing.T) {
- tpl := `{{$v := "foo$bar$baz" | splitn "$" 2}}{{$v._0}}`
- if err := runt(tpl, "foo"); err != nil {
- t.Error(err)
- }
- }
- func TestToString(t *testing.T) {
- tpl := `{{ toString 1 | kindOf }}`
- assert.NoError(t, runt(tpl, "string"))
- }
- func TestToStrings(t *testing.T) {
- tpl := `{{ $s := list 1 2 3 | toStrings }}{{ index $s 1 | kindOf }}`
- assert.NoError(t, runt(tpl, "string"))
- tpl = `{{ list 1 .value 2 | toStrings }}`
- values := map[string]any{"value": nil}
- if err := runtv(tpl, `[1 2]`, values); err != nil {
- t.Error(err)
- }
- }
- func TestJoin(t *testing.T) {
- assert.NoError(t, runt(`{{ tuple "a" "b" "c" | join "-" }}`, "a-b-c"))
- assert.NoError(t, runt(`{{ tuple 1 2 3 | join "-" }}`, "1-2-3"))
- assert.NoError(t, runtv(`{{ join "-" .V }}`, "a-b-c", map[string]any{"V": []string{"a", "b", "c"}}))
- assert.NoError(t, runtv(`{{ join "-" .V }}`, "abc", map[string]any{"V": "abc"}))
- assert.NoError(t, runtv(`{{ join "-" .V }}`, "1-2-3", map[string]any{"V": []int{1, 2, 3}}))
- assert.NoError(t, runtv(`{{ join "-" .value }}`, "1-2", map[string]any{"value": []any{"1", nil, "2"}}))
- }
- func TestSortAlpha(t *testing.T) {
- // Named `append` in the function map
- tests := map[string]string{
- `{{ list "c" "a" "b" | sortAlpha | join "" }}`: "abc",
- `{{ list 2 1 4 3 | sortAlpha | join "" }}`: "1234",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestBase64EncodeDecode(t *testing.T) {
- magicWord := "coffee"
- expect := base64.StdEncoding.EncodeToString([]byte(magicWord))
- if expect == magicWord {
- t.Fatal("Encoder doesn't work.")
- }
- tpl := `{{b64enc "coffee"}}`
- if err := runt(tpl, expect); err != nil {
- t.Error(err)
- }
- tpl = fmt.Sprintf("{{b64dec %q}}", expect)
- if err := runt(tpl, magicWord); err != nil {
- t.Error(err)
- }
- }
- func TestBase32EncodeDecode(t *testing.T) {
- magicWord := "coffee"
- expect := base32.StdEncoding.EncodeToString([]byte(magicWord))
- if expect == magicWord {
- t.Fatal("Encoder doesn't work.")
- }
- tpl := `{{b32enc "coffee"}}`
- if err := runt(tpl, expect); err != nil {
- t.Error(err)
- }
- tpl = fmt.Sprintf("{{b32dec %q}}", expect)
- if err := runt(tpl, magicWord); err != nil {
- t.Error(err)
- }
- }
- func TestCat(t *testing.T) {
- tpl := `{{$b := "b"}}{{"c" | cat "a" $b}}`
- if err := runt(tpl, "a b c"); err != nil {
- t.Error(err)
- }
- tpl = `{{ .value | cat "a" "b"}}`
- values := map[string]any{"value": nil}
- if err := runtv(tpl, "a b", values); err != nil {
- t.Error(err)
- }
- }
- func TestIndent(t *testing.T) {
- tpl := `{{indent 4 "a\nb\nc"}}`
- if err := runt(tpl, " a\n b\n c"); err != nil {
- t.Error(err)
- }
- }
- func TestNindent(t *testing.T) {
- tpl := `{{nindent 4 "a\nb\nc"}}`
- if err := runt(tpl, "\n a\n b\n c"); err != nil {
- t.Error(err)
- }
- }
- func TestReplace(t *testing.T) {
- tpl := `{{"I Am Henry VIII" | replace " " "-"}}`
- if err := runt(tpl, "I-Am-Henry-VIII"); err != nil {
- t.Error(err)
- }
- }
- func TestPlural(t *testing.T) {
- tpl := `{{$num := len "two"}}{{$num}} {{$num | plural "1 char" "chars"}}`
- if err := runt(tpl, "3 chars"); err != nil {
- t.Error(err)
- }
- tpl = `{{len "t" | plural "cheese" "%d chars"}}`
- if err := runt(tpl, "cheese"); err != nil {
- t.Error(err)
- }
- }
|