| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- package sprig
- import (
- "strings"
- "testing"
- "github.com/stretchr/testify/assert"
- )
- func TestTuple(t *testing.T) {
- tpl := `{{$t := tuple 1 "a" "foo"}}{{index $t 2}}{{index $t 0 }}{{index $t 1}}`
- if err := runt(tpl, "foo1a"); err != nil {
- t.Error(err)
- }
- }
- func TestList(t *testing.T) {
- tpl := `{{$t := list 1 "a" "foo"}}{{index $t 2}}{{index $t 0 }}{{index $t 1}}`
- if err := runt(tpl, "foo1a"); err != nil {
- t.Error(err)
- }
- }
- func TestPush(t *testing.T) {
- // Named `append` in the function map
- tests := map[string]string{
- `{{ $t := tuple 1 2 3 }}{{ append $t 4 | len }}`: "4",
- `{{ $t := tuple 1 2 3 4 }}{{ append $t 5 | join "-" }}`: "1-2-3-4-5",
- `{{ $t := regexSplit "/" "foo/bar/baz" -1 }}{{ append $t "qux" | join "-" }}`: "foo-bar-baz-qux",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustPush(t *testing.T) {
- // Named `append` in the function map
- tests := map[string]string{
- `{{ $t := tuple 1 2 3 }}{{ mustAppend $t 4 | len }}`: "4",
- `{{ $t := tuple 1 2 3 4 }}{{ mustAppend $t 5 | join "-" }}`: "1-2-3-4-5",
- `{{ $t := regexSplit "/" "foo/bar/baz" -1 }}{{ mustPush $t "qux" | join "-" }}`: "foo-bar-baz-qux",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestChunk(t *testing.T) {
- tests := map[string]string{
- `{{ tuple 1 2 3 4 5 6 7 | chunk 3 | len }}`: "3",
- `{{ tuple | chunk 3 | len }}`: "0",
- `{{ range ( tuple 1 2 3 4 5 6 7 8 9 | chunk 3 ) }}{{. | join "-"}}|{{end}}`: "1-2-3|4-5-6|7-8-9|",
- `{{ range ( tuple 1 2 3 4 5 6 7 8 | chunk 3 ) }}{{. | join "-"}}|{{end}}`: "1-2-3|4-5-6|7-8|",
- `{{ range ( tuple 1 2 | chunk 3 ) }}{{. | join "-"}}|{{end}}`: "1-2|",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustChunk(t *testing.T) {
- tests := map[string]string{
- `{{ tuple 1 2 3 4 5 6 7 | mustChunk 3 | len }}`: "3",
- `{{ tuple | mustChunk 3 | len }}`: "0",
- `{{ range ( tuple 1 2 3 4 5 6 7 8 9 | mustChunk 3 ) }}{{. | join "-"}}|{{end}}`: "1-2-3|4-5-6|7-8-9|",
- `{{ range ( tuple 1 2 3 4 5 6 7 8 | mustChunk 3 ) }}{{. | join "-"}}|{{end}}`: "1-2-3|4-5-6|7-8|",
- `{{ range ( tuple 1 2 | mustChunk 3 ) }}{{. | join "-"}}|{{end}}`: "1-2|",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- err := runt(`{{ tuple `+strings.Repeat(" 0", 10001)+` | mustChunk 1 }}`, "a")
- assert.ErrorContains(t, err, "number of chunks 10001 exceeds maximum limit of 10000")
- }
- func TestPrepend(t *testing.T) {
- tests := map[string]string{
- `{{ $t := tuple 1 2 3 }}{{ prepend $t 0 | len }}`: "4",
- `{{ $t := tuple 1 2 3 4 }}{{ prepend $t 0 | join "-" }}`: "0-1-2-3-4",
- `{{ $t := regexSplit "/" "foo/bar/baz" -1 }}{{ prepend $t "qux" | join "-" }}`: "qux-foo-bar-baz",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustPrepend(t *testing.T) {
- tests := map[string]string{
- `{{ $t := tuple 1 2 3 }}{{ mustPrepend $t 0 | len }}`: "4",
- `{{ $t := tuple 1 2 3 4 }}{{ mustPrepend $t 0 | join "-" }}`: "0-1-2-3-4",
- `{{ $t := regexSplit "/" "foo/bar/baz" -1 }}{{ mustPrepend $t "qux" | join "-" }}`: "qux-foo-bar-baz",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestFirst(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | first }}`: "1",
- `{{ list | first }}`: "<no value>",
- `{{ regexSplit "/src/" "foo/src/bar" -1 | first }}`: "foo",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustFirst(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | mustFirst }}`: "1",
- `{{ list | mustFirst }}`: "<no value>",
- `{{ regexSplit "/src/" "foo/src/bar" -1 | mustFirst }}`: "foo",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestLast(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | last }}`: "3",
- `{{ list | last }}`: "<no value>",
- `{{ regexSplit "/src/" "foo/src/bar" -1 | last }}`: "bar",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustLast(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | mustLast }}`: "3",
- `{{ list | mustLast }}`: "<no value>",
- `{{ regexSplit "/src/" "foo/src/bar" -1 | mustLast }}`: "bar",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestInitial(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | initial | len }}`: "2",
- `{{ list 1 2 3 | initial | last }}`: "2",
- `{{ list 1 2 3 | initial | first }}`: "1",
- `{{ list | initial }}`: "[]",
- `{{ regexSplit "/" "foo/bar/baz" -1 | initial }}`: "[foo bar]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustInitial(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | mustInitial | len }}`: "2",
- `{{ list 1 2 3 | mustInitial | last }}`: "2",
- `{{ list 1 2 3 | mustInitial | first }}`: "1",
- `{{ list | mustInitial }}`: "[]",
- `{{ regexSplit "/" "foo/bar/baz" -1 | mustInitial }}`: "[foo bar]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestRest(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | rest | len }}`: "2",
- `{{ list 1 2 3 | rest | last }}`: "3",
- `{{ list 1 2 3 | rest | first }}`: "2",
- `{{ list | rest }}`: "[]",
- `{{ regexSplit "/" "foo/bar/baz" -1 | rest }}`: "[bar baz]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustRest(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | mustRest | len }}`: "2",
- `{{ list 1 2 3 | mustRest | last }}`: "3",
- `{{ list 1 2 3 | mustRest | first }}`: "2",
- `{{ list | mustRest }}`: "[]",
- `{{ regexSplit "/" "foo/bar/baz" -1 | mustRest }}`: "[bar baz]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestReverse(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | reverse | first }}`: "3",
- `{{ list 1 2 3 | reverse | rest | first }}`: "2",
- `{{ list 1 2 3 | reverse | last }}`: "1",
- `{{ list 1 2 3 4 | reverse }}`: "[4 3 2 1]",
- `{{ list 1 | reverse }}`: "[1]",
- `{{ list | reverse }}`: "[]",
- `{{ regexSplit "/" "foo/bar/baz" -1 | reverse }}`: "[baz bar foo]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustReverse(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | mustReverse | first }}`: "3",
- `{{ list 1 2 3 | mustReverse | rest | first }}`: "2",
- `{{ list 1 2 3 | mustReverse | last }}`: "1",
- `{{ list 1 2 3 4 | mustReverse }}`: "[4 3 2 1]",
- `{{ list 1 | mustReverse }}`: "[1]",
- `{{ list | mustReverse }}`: "[]",
- `{{ regexSplit "/" "foo/bar/baz" -1 | mustReverse }}`: "[baz bar foo]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestCompact(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 0 "" "hello" | compact }}`: `[1 hello]`,
- `{{ list "" "" | compact }}`: `[]`,
- `{{ list | compact }}`: `[]`,
- `{{ regexSplit "/" "foo//bar" -1 | compact }}`: "[foo bar]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustCompact(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 0 "" "hello" | mustCompact }}`: `[1 hello]`,
- `{{ list "" "" | mustCompact }}`: `[]`,
- `{{ list | mustCompact }}`: `[]`,
- `{{ regexSplit "/" "foo//bar" -1 | mustCompact }}`: "[foo bar]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestUniq(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 4 | uniq }}`: `[1 2 3 4]`,
- `{{ list "a" "b" "c" "d" | uniq }}`: `[a b c d]`,
- `{{ list 1 1 1 1 2 2 2 2 | uniq }}`: `[1 2]`,
- `{{ list "foo" 1 1 1 1 "foo" "foo" | uniq }}`: `[foo 1]`,
- `{{ list | uniq }}`: `[]`,
- `{{ regexSplit "/" "foo/foo/bar" -1 | uniq }}`: "[foo bar]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustUniq(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 4 | mustUniq }}`: `[1 2 3 4]`,
- `{{ list "a" "b" "c" "d" | mustUniq }}`: `[a b c d]`,
- `{{ list 1 1 1 1 2 2 2 2 | mustUniq }}`: `[1 2]`,
- `{{ list "foo" 1 1 1 1 "foo" "foo" | mustUniq }}`: `[foo 1]`,
- `{{ list | mustUniq }}`: `[]`,
- `{{ regexSplit "/" "foo/foo/bar" -1 | mustUniq }}`: "[foo bar]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestWithout(t *testing.T) {
- tests := map[string]string{
- `{{ without (list 1 2 3 4) 1 }}`: `[2 3 4]`,
- `{{ without (list "a" "b" "c" "d") "a" }}`: `[b c d]`,
- `{{ without (list 1 1 1 1 2) 1 }}`: `[2]`,
- `{{ without (list) 1 }}`: `[]`,
- `{{ without (list 1 2 3) }}`: `[1 2 3]`,
- `{{ without list }}`: `[]`,
- `{{ without (regexSplit "/" "foo/bar/baz" -1 ) "foo" }}`: "[bar baz]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustWithout(t *testing.T) {
- tests := map[string]string{
- `{{ mustWithout (list 1 2 3 4) 1 }}`: `[2 3 4]`,
- `{{ mustWithout (list "a" "b" "c" "d") "a" }}`: `[b c d]`,
- `{{ mustWithout (list 1 1 1 1 2) 1 }}`: `[2]`,
- `{{ mustWithout (list) 1 }}`: `[]`,
- `{{ mustWithout (list 1 2 3) }}`: `[1 2 3]`,
- `{{ mustWithout list }}`: `[]`,
- `{{ mustWithout (regexSplit "/" "foo/bar/baz" -1 ) "foo" }}`: "[bar baz]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestHas(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | has 1 }}`: `true`,
- `{{ list 1 2 3 | has 4 }}`: `false`,
- `{{ regexSplit "/" "foo/bar/baz" -1 | has "bar" }}`: `true`,
- `{{ has "bar" nil }}`: `false`,
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustHas(t *testing.T) {
- tests := map[string]string{
- `{{ list 1 2 3 | mustHas 1 }}`: `true`,
- `{{ list 1 2 3 | mustHas 4 }}`: `false`,
- `{{ regexSplit "/" "foo/bar/baz" -1 | mustHas "bar" }}`: `true`,
- `{{ mustHas "bar" nil }}`: `false`,
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestSlice(t *testing.T) {
- tests := map[string]string{
- `{{ slice (list 1 2 3) }}`: "[1 2 3]",
- `{{ slice (list 1 2 3) 0 1 }}`: "[1]",
- `{{ slice (list 1 2 3) 1 3 }}`: "[2 3]",
- `{{ slice (list 1 2 3) 1 }}`: "[2 3]",
- `{{ slice (regexSplit "/" "foo/bar/baz" -1) 1 2 }}`: "[bar]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestMustSlice(t *testing.T) {
- tests := map[string]string{
- `{{ mustSlice (list 1 2 3) }}`: "[1 2 3]",
- `{{ mustSlice (list 1 2 3) 0 1 }}`: "[1]",
- `{{ mustSlice (list 1 2 3) 1 3 }}`: "[2 3]",
- `{{ mustSlice (list 1 2 3) 1 }}`: "[2 3]",
- `{{ mustSlice (regexSplit "/" "foo/bar/baz" -1) 1 2 }}`: "[bar]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
- func TestConcat(t *testing.T) {
- tests := map[string]string{
- `{{ concat (list 1 2 3) }}`: "[1 2 3]",
- `{{ concat (list 1 2 3) (list 4 5) }}`: "[1 2 3 4 5]",
- `{{ concat (list 1 2 3) (list 4 5) (list) }}`: "[1 2 3 4 5]",
- `{{ concat (list 1 2 3) (list 4 5) (list nil) }}`: "[1 2 3 4 5 <nil>]",
- `{{ concat (list 1 2 3) (list 4 5) (list ( list "foo" ) ) }}`: "[1 2 3 4 5 [foo]]",
- }
- for tpl, expect := range tests {
- assert.NoError(t, runt(tpl, expect))
- }
- }
|