diff --git a/Taskfile.yml b/Taskfile.yml index ec13fd0cc4..504488a4ad 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -38,6 +38,13 @@ tasks: - "{{.BIN}}/mockery --dir ./internal/fingerprint --name SourcesCheckable" - "{{.BIN}}/mockery --dir ./internal/fingerprint --name StatusCheckable" + generate:fixtures: + desc: Runs tests and generates golden fixture files + aliases: [gen:fixtures, g:fixtures] + cmds: + - find ./testdata -name '*.golden' -delete + - go test -update ./... + install:mockery: desc: Installs mockgen; a tool to generate mock files vars: diff --git a/go.mod b/go.mod index 7ce778e37b..fcbde23375 100644 --- a/go.mod +++ b/go.mod @@ -21,6 +21,7 @@ require ( github.com/otiai10/copy v1.14.1 github.com/radovskyb/watcher v1.0.7 github.com/sajari/fuzzy v1.0.0 + github.com/sebdah/goldie/v2 v2.5.5 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.10.0 github.com/zeebo/xxh3 v1.0.2 diff --git a/go.sum b/go.sum index 6640e85f2d..22cf019fb9 100644 --- a/go.sum +++ b/go.sum @@ -7,14 +7,10 @@ github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lpr github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk= -github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4= github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= -github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE= -github.com/alecthomas/assert/v2 v2.7.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= -github.com/alecthomas/chroma/v2 v2.14.0 h1:R3+wzpnUArGcQz7fCETQBzO5n9IMNi13iIs46aU4V9E= -github.com/alecthomas/chroma/v2 v2.14.0/go.mod h1:QolEbTfmUHIMVpBqxeDnNBj2uoeI4EbYP4i6n68SG4I= +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/chroma/v2 v2.15.0 h1:LxXTQHFoYrstG2nnV9y2X5O94sOBzf0CIUpSTbpxvMc= github.com/alecthomas/chroma/v2 v2.15.0/go.mod h1:gUhVLrPDXPtp/f+L1jo9xepo9gL4eLwRuGAunSZMkio= github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= @@ -34,14 +30,12 @@ github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGL github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= -github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo= github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dominikbraun/graph v0.23.0 h1:TdZB4pPqCLFxYhdyMFb1TBdFxp8XLcJfTTBQucVPgCo= github.com/dominikbraun/graph v0.23.0/go.mod h1:yOjYyogZLY1LSG9E33JWZJiq5k83Qy2C6POAuiViluc= -github.com/elazarl/goproxy v1.2.3 h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ= -github.com/elazarl/goproxy v1.2.3/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64= +github.com/elazarl/goproxy v1.4.0 h1:4GyuSbFa+s26+3rmYNSuUVsx+HgPrV1bk1jXI0l9wjM= +github.com/elazarl/goproxy v1.4.0/go.mod h1:X/5W/t+gzDyLfHW4DrMdpjqYjpXsURlBt9lpBDxZZZQ= github.com/elliotchance/orderedmap/v2 v2.7.0 h1:WHuf0DRo63uLnldCPp9ojm3gskYwEdIIfAUVG5KhoOc= github.com/elliotchance/orderedmap/v2 v2.7.0/go.mod h1:85lZyVbpGaGvHvnKa7Qhx7zncAdBIBq6u56Hb1PRU5Q= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -52,14 +46,10 @@ github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.6.1 h1:u+dcrgaguSSkbjzHwelEjc0Yj300NUevrrPphk/SoRA= -github.com/go-git/go-billy/v5 v5.6.1/go.mod h1:0AsLr1z2+Uksi4NlElmMblP5rPcDZNRCD8ujZCRR2BE= github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.13.1 h1:DAQ9APonnlvSWpvolXWIuV6Q6zXy2wHbN4cVlNR5Q+M= -github.com/go-git/go-git/v5 v5.13.1/go.mod h1:qryJB4cSBoq3FRoBRf5A77joojuBcmPJ0qu3XXXVixc= github.com/go-git/go-git/v5 v5.13.2 h1:7O7xvsK7K+rZPKW6AQR1YyNhfywkv7B8/FsP3ki6Zv0= github.com/go-git/go-git/v5 v5.13.2/go.mod h1:hWdW5P4YZRjmpGHwRH2v3zkWcNl6HeXaXQEMGb3NJ9A= github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= @@ -102,18 +92,13 @@ github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELU github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= -github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8= github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I= -github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= -github.com/otiai10/mint v1.5.1/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs= github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -124,6 +109,9 @@ github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/sajari/fuzzy v1.0.0 h1:+FmwVvJErsd0d0hAPlj4CxqxUtQY/fOoY0DwX4ykpRY= github.com/sajari/fuzzy v1.0.0/go.mod h1:OjYR6KxoWOe9+dOlXeiCJd4dIbED4Oo8wpS89o0pwOo= +github.com/sebdah/goldie/v2 v2.5.5 h1:rx1mwF95RxZ3/83sdS4Yp7t2C5TCokvWP4TBRbAyEWY= +github.com/sebdah/goldie/v2 v2.5.5/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -135,6 +123,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= @@ -145,8 +134,6 @@ github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= @@ -154,8 +141,6 @@ golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbR golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= -golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= @@ -169,13 +154,9 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= -golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/task_test.go b/task_test.go index 3a5b64e95b..9314636788 100644 --- a/task_test.go +++ b/task_test.go @@ -14,12 +14,14 @@ import ( "path/filepath" "regexp" "runtime" + "sort" "strings" "sync" "testing" "time" "github.com/Masterminds/semver/v3" + "github.com/sebdah/goldie/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -31,6 +33,257 @@ import ( "github.com/go-task/task/v3/taskfile/ast" ) +type ( + PostProcessFn func(*testing.T, []byte) []byte + TaskTestOption func(*TaskTest) + TaskTest struct { + name string + dir string + taskfile string + task string + silent bool + verbose bool + versionCheck bool + concurrency int + experiments map[*experiments.Experiment]string + postProcessFns []PostProcessFn + wantSetupError bool + wantRunError bool + } +) + +func NewTaskTest(t *testing.T, opts ...TaskTestOption) { + t.Helper() + tt := &TaskTest{ + name: "", + dir: ".", + taskfile: "", + task: "default", + experiments: map[*experiments.Experiment]string{}, + } + // Apply the functional options + for _, opt := range opts { + opt(tt) + } + // Enable any experiments that have been set + for x, v := range tt.experiments { + prev := *x + *x = experiments.Experiment{ + Name: prev.Name, + Enabled: true, + Value: v, + } + t.Cleanup(func() { + *x = prev + }) + } + tt.run(t) +} + +// Functional options + +func WithName(name string) TaskTestOption { + return func(tt *TaskTest) { + tt.name = name + } +} + +func WithDir(dir string) TaskTestOption { + return func(tt *TaskTest) { + tt.dir = dir + } +} + +func WithTaskfile(taskfile string) TaskTestOption { + return func(tt *TaskTest) { + tt.taskfile = taskfile + } +} + +func WithTask(task string) TaskTestOption { + return func(tt *TaskTest) { + tt.task = task + } +} + +func WithSilent() TaskTestOption { + return func(tt *TaskTest) { + tt.silent = true + } +} + +func WithVerbose() TaskTestOption { + return func(tt *TaskTest) { + tt.verbose = true + } +} + +func WithVersionCheck() TaskTestOption { + return func(tt *TaskTest) { + tt.versionCheck = true + } +} + +func WithConcurrency(concurrency int) TaskTestOption { + return func(tt *TaskTest) { + tt.concurrency = concurrency + } +} + +func WithExperiment(experiment *experiments.Experiment, value string) TaskTestOption { + return func(tt *TaskTest) { + tt.experiments[experiment] = value + } +} + +func WithPostProcessFn(fn PostProcessFn) TaskTestOption { + return func(tt *TaskTest) { + tt.postProcessFns = append(tt.postProcessFns, fn) + } +} + +func WithSetupError() TaskTestOption { + return func(tt *TaskTest) { + tt.wantSetupError = true + } +} + +func WithRunError() TaskTestOption { + return func(tt *TaskTest) { + tt.wantRunError = true + } +} + +// Post-process functions + +func PPRemoveAbsolutePaths(t *testing.T, b []byte) []byte { + t.Helper() + wd, err := os.Getwd() + require.NoError(t, err) + return bytes.ReplaceAll(b, []byte(wd), nil) +} + +func PPSortedLines(t *testing.T, b []byte) []byte { + t.Helper() + lines := strings.Split(strings.TrimSpace(string(b)), "\n") + sort.Strings(lines) + return []byte(strings.Join(lines, "\n") + "\n") +} + +// Helpers + +func goldenFileName(t *testing.T) string { + t.Helper() + name := t.Name() + // Make the path safe for windows/linux + for _, c := range []string{` `, `<`, `>`, `:`, `"`, `/`, `\`, `|`, `?`, `*`} { + name = strings.ReplaceAll(name, c, "-") + } + return name +} + +func (tt *TaskTest) writeFixture( + t *testing.T, + g *goldie.Goldie, + goldenFileName string, + b []byte, +) { + t.Helper() + // Apply any post-process functions + for _, fn := range tt.postProcessFns { + b = fn(t, b) + } + // Write the fixture file + g.Assert(t, goldenFileName, b) +} + +func (tt *TaskTest) writeFixtureBuffer( + t *testing.T, + g *goldie.Goldie, + buff bytes.Buffer, +) { + t.Helper() + tt.writeFixture(t, g, goldenFileName(t), buff.Bytes()) +} + +func (tt *TaskTest) writeFixtureErrSetup( + t *testing.T, + g *goldie.Goldie, + err error, +) { + t.Helper() + tt.writeFixture(t, g, fmt.Sprintf("%s-err-setup", goldenFileName(t)), []byte(err.Error())) +} + +func (tt *TaskTest) writeFixtureErrRun( + t *testing.T, + g *goldie.Goldie, + err error, +) { + t.Helper() + tt.writeFixture(t, g, fmt.Sprintf("%s-err-run", goldenFileName(t)), []byte(err.Error())) +} + +func (tt *TaskTest) run(t *testing.T) { + t.Helper() + f := func(t *testing.T) { + t.Helper() + var buff bytes.Buffer + + // Set up the task executor + e := task.Executor{ + Dir: tt.dir, + Entrypoint: tt.taskfile, + TempDir: task.TempDir{ + Remote: filepathext.SmartJoin(tt.dir, ".task"), + Fingerprint: filepathext.SmartJoin(tt.dir, ".task"), + }, + Silent: tt.silent, + Verbose: tt.verbose, + EnableVersionCheck: tt.versionCheck, + Concurrency: tt.concurrency, + Stdout: &buff, + Stderr: &buff, + } + + // Create a golden fixture file for the output + g := goldie.New(t, + goldie.WithFixtureDir(filepath.Join(tt.dir, "testdata")), + ) + + // Call setup and check for errors + if err := e.Setup(); tt.wantSetupError { + require.Error(t, err) + tt.writeFixtureErrSetup(t, g, err) + tt.writeFixtureBuffer(t, g, buff) + return + } else { + require.NoError(t, err) + } + + // Run the task and check for errors + ctx := context.Background() + call := &ast.Call{Task: tt.task} + if err := e.Run(ctx, call); tt.wantRunError { + require.Error(t, err) + tt.writeFixtureErrRun(t, g, err) + tt.writeFixtureBuffer(t, g, buff) + return + } else { + require.NoError(t, err) + } + + tt.writeFixtureBuffer(t, g, buff) + } + + // Run the test (with a name if it has one) + if tt.name != "" { + t.Run(tt.name, f) + } else { + f(t) + } +} + func init() { _ = os.Setenv("NO_COLOR", "1") } @@ -99,120 +352,87 @@ func (fct fileContentTest) Run(t *testing.T) { func TestEmptyTask(t *testing.T) { t.Parallel() - - e := &task.Executor{ - Dir: "testdata/empty_task", - Stdout: io.Discard, - Stderr: io.Discard, - } - require.NoError(t, e.Setup(), "e.Setup()") - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "default"})) + NewTaskTest(t, + WithDir("testdata/empty_task"), + ) } func TestEmptyTaskfile(t *testing.T) { t.Parallel() - - e := &task.Executor{ - Dir: "testdata/empty_taskfile", - Stdout: io.Discard, - Stderr: io.Discard, - } - require.Error(t, e.Setup(), "e.Setup()") + NewTaskTest(t, + WithDir("testdata/empty_taskfile"), + WithSetupError(), + WithPostProcessFn(PPRemoveAbsolutePaths), + ) } func TestEnv(t *testing.T) { t.Setenv("QUX", "from_os") - tt := fileContentTest{ - Dir: "testdata/env", - Target: "default", - TrimSpace: false, - Files: map[string]string{ - "local.txt": "GOOS='linux' GOARCH='amd64' CGO_ENABLED='0'\n", - "global.txt": "FOO='foo' BAR='overridden' BAZ='baz'\n", - "multiple_type.txt": "FOO='1' BAR='true' BAZ='1.1'\n", - "not-overridden.txt": "QUX='from_os'\n", - "dynamic.txt": "foo\n", - }, - } - tt.Run(t) - enableExperimentForTest(t, &experiments.EnvPrecedence, "1") - ttt := fileContentTest{ - Dir: "testdata/env", - Target: "overridden", - TrimSpace: false, - Files: map[string]string{ - "overridden.txt": "QUX='from_taskfile'\n", - }, - } - ttt.Run(t) + NewTaskTest(t, + WithName("env precedence disabled"), + WithDir("testdata/env"), + WithSilent(), + ) + NewTaskTest(t, + WithName("env precedence enabled"), + WithDir("testdata/env"), + WithSilent(), + WithExperiment(&experiments.EnvPrecedence, "1"), + ) } func TestVars(t *testing.T) { t.Parallel() - - tt := fileContentTest{ - Dir: "testdata/vars", - Target: "default", - Files: map[string]string{ - "missing-var.txt": "\n", - "var-order.txt": "ABCDEF\n", - "dependent-sh.txt": "123456\n", - "with-call.txt": "Hi, ABC123!\n", - "from-dot-env.txt": "From .env file\n", - }, - } - t.Run("", func(t *testing.T) { - t.Parallel() - tt.Run(t) - }) + NewTaskTest(t, + WithDir("testdata/vars"), + WithSilent(), + ) } func TestRequires(t *testing.T) { - t.Parallel() - - const dir = "testdata/requires" - - var buff bytes.Buffer - e := &task.Executor{ - Dir: dir, - Stdout: &buff, - Stderr: &buff, - } - - require.NoError(t, e.Setup()) - require.ErrorContains(t, e.Run(context.Background(), &ast.Call{Task: "missing-var"}), "task: Task \"missing-var\" cancelled because it is missing required variables: FOO") - buff.Reset() - require.NoError(t, e.Setup()) - - vars := ast.NewVars() - vars.Set("FOO", ast.Var{Value: "bar"}) - require.NoError(t, e.Run(context.Background(), &ast.Call{ - Task: "missing-var", - Vars: vars, - })) - buff.Reset() - - require.NoError(t, e.Setup()) - require.ErrorContains(t, e.Run(context.Background(), &ast.Call{Task: "validation-var", Vars: vars}), "task: Task \"validation-var\" cancelled because it is missing required variables:\n - FOO has an invalid value : 'bar' (allowed values : [one two])") - buff.Reset() - - require.NoError(t, e.Setup()) - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "validation-var-dynamic", Vars: vars})) - buff.Reset() - - require.NoError(t, e.Setup()) - vars.Set("FOO", ast.Var{Value: "one"}) - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "validation-var", Vars: vars})) - buff.Reset() - - require.NoError(t, e.Setup()) - require.ErrorContains(t, e.Run(context.Background(), &ast.Call{Task: "require-before-compile"}), "task: Task \"require-before-compile\" cancelled because it is missing required variables: MY_VAR") - buff.Reset() - - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "var-defined-in-task"})) - buff.Reset() + NewTaskTest(t, + WithName("required var missing"), + WithDir("testdata/requires"), + WithTask("missing-var"), + WithRunError(), + ) + t.Setenv("FOO", "bar") + NewTaskTest(t, + WithName("required var ok"), + WithDir("testdata/requires"), + WithTask("missing-var"), + ) + NewTaskTest(t, + WithName("fails validation"), + WithDir("testdata/requires"), + WithTask("validation-var"), + WithRunError(), + ) + NewTaskTest(t, + WithName("fails validation dynamic"), + WithDir("testdata/requires"), + WithTask("validation-var-dynamic"), + ) + t.Setenv("FOO", "one") + NewTaskTest(t, + WithName("passes validation"), + WithDir("testdata/requires"), + WithTask("validation-var"), + ) + NewTaskTest(t, + WithName("require before compile"), + WithDir("testdata/requires"), + WithTask("require-before-compile"), + WithRunError(), + ) + NewTaskTest(t, + WithName("var defined in task"), + WithDir("testdata/requires"), + WithTask("var-defined-in-task"), + ) } +// TODO: mock fs func TestSpecialVars(t *testing.T) { t.Parallel() @@ -245,109 +465,46 @@ func TestSpecialVars(t *testing.T) { for _, dir := range []string{dir, subdir} { for _, test := range tests { - t.Run(test.target, func(t *testing.T) { - t.Parallel() - - var buff bytes.Buffer - e := &task.Executor{ - Dir: dir, - Stdout: &buff, - Stderr: &buff, - Silent: true, - EnableVersionCheck: true, - } - require.NoError(t, e.Setup()) - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: test.target})) - assert.Equal(t, test.expected+"\n", buff.String()) - }) + NewTaskTest(t, + WithName(fmt.Sprintf("%s-%s", dir, test.target)), + WithDir(dir), + WithTask(test.target), + WithSilent(), + WithVersionCheck(), + WithPostProcessFn(PPRemoveAbsolutePaths), + ) } } } func TestConcurrency(t *testing.T) { t.Parallel() - - const ( - dir = "testdata/concurrency" - target = "default" + NewTaskTest(t, + WithDir("testdata/concurrency"), + WithConcurrency(1), + WithPostProcessFn(PPSortedLines), ) - - e := &task.Executor{ - Dir: dir, - Stdout: io.Discard, - Stderr: io.Discard, - Concurrency: 1, - } - require.NoError(t, e.Setup(), "e.Setup()") - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: target}), "e.Run(target)") } func TestParams(t *testing.T) { t.Parallel() - - tt := fileContentTest{ - Dir: "testdata/params", - Target: "default", - TrimSpace: false, - Files: map[string]string{ - "hello.txt": "Hello\n", - "world.txt": "World\n", - "exclamation.txt": "!\n", - "dep1.txt": "Dependence1\n", - "dep2.txt": "Dependence2\n", - "spanish.txt": "¡Holla mundo!\n", - "spanish-dep.txt": "¡Holla dependencia!\n", - "portuguese.txt": "Olá, mundo!\n", - "portuguese2.txt": "Olá, mundo!\n", - "german.txt": "Welt!\n", - }, - } - t.Run("", func(t *testing.T) { - t.Parallel() - tt.Run(t) - }) + NewTaskTest(t, + WithDir("testdata/params"), + WithSilent(), + WithPostProcessFn(PPSortedLines), + ) } func TestDeps(t *testing.T) { t.Parallel() - - const dir = "testdata/deps" - - files := []string{ - "d1.txt", - "d2.txt", - "d3.txt", - "d11.txt", - "d12.txt", - "d13.txt", - "d21.txt", - "d22.txt", - "d23.txt", - "d31.txt", - "d32.txt", - "d33.txt", - } - - for _, f := range files { - _ = os.Remove(filepathext.SmartJoin(dir, f)) - } - - e := &task.Executor{ - Dir: dir, - Stdout: io.Discard, - Stderr: io.Discard, - } - require.NoError(t, e.Setup()) - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "default"})) - - for _, f := range files { - f = filepathext.SmartJoin(dir, f) - if _, err := os.Stat(f); err != nil { - t.Errorf("File %s should exist", f) - } - } + NewTaskTest(t, + WithDir("testdata/deps"), + WithSilent(), + WithPostProcessFn(PPSortedLines), + ) } +// TODO: mock fs func TestStatus(t *testing.T) { t.Parallel() @@ -367,28 +524,31 @@ func TestStatus(t *testing.T) { } } - var buff bytes.Buffer - e := &task.Executor{ - Dir: dir, - TempDir: task.TempDir{ - Remote: filepathext.SmartJoin(dir, ".task"), - Fingerprint: filepathext.SmartJoin(dir, ".task"), - }, - Stdout: &buff, - Stderr: &buff, - Silent: true, - } - require.NoError(t, e.Setup()) // gen-foo creates foo.txt, and will always fail it's status check. - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-foo"})) + NewTaskTest(t, + WithName("run gen-foo 1 silent"), + WithDir(dir), + WithTask("gen-foo"), + WithSilent(), + ) // gen-foo creates bar.txt, and will pass its status-check the 3. time it // is run. It creates bar.txt, but also lists it as its source. So, the checksum // for the file won't match before after the second run as we the file // only exists after the first run. - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-bar"})) + NewTaskTest(t, + WithName("run gen-bar 1 silent"), + WithDir(dir), + WithTask("gen-bar"), + WithSilent(), + ) // gen-silent-baz is marked as being silent, and should only produce output // if e.Verbose is set to true. - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-silent-baz"})) + NewTaskTest(t, + WithName("run gen-baz silent"), + WithDir(dir), + WithTask("gen-silent-baz"), + WithSilent(), + ) for _, f := range files { if _, err := os.Stat(filepathext.SmartJoin(dir, f)); err != nil { @@ -397,99 +557,102 @@ func TestStatus(t *testing.T) { } // Run gen-bar a second time to produce a checksum file that matches bar.txt - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-bar"})) - + NewTaskTest(t, + WithName("run gen-bar 2 silent"), + WithDir(dir), + WithTask("gen-bar"), + WithSilent(), + ) // Run gen-bar a third time, to make sure we've triggered the status check. - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-bar"})) - - // We're silent, so no output should have been produced. - assert.Empty(t, buff.String()) + NewTaskTest(t, + WithName("run gen-bar 3 silent"), + WithDir(dir), + WithTask("gen-bar"), + WithSilent(), + ) // Now, let's remove source file, and run the task again to to prepare // for the next test. err := os.Remove(filepathext.SmartJoin(dir, "bar.txt")) require.NoError(t, err) - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-bar"})) - buff.Reset() - - // Global silence switched of, so we should see output unless the task itself - // is silent. - e.Silent = false - + NewTaskTest(t, + WithName("run gen-bar 4 silent"), + WithDir(dir), + WithTask("gen-bar"), + WithSilent(), + ) // all: not up-to-date - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-foo"})) - assert.Equal(t, "task: [gen-foo] touch foo.txt", strings.TrimSpace(buff.String())) - buff.Reset() + NewTaskTest(t, + WithName("run gen-foo 2"), + WithDir(dir), + WithTask("gen-foo"), + ) // status: not up-to-date - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-foo"})) - assert.Equal(t, "task: [gen-foo] touch foo.txt", strings.TrimSpace(buff.String())) - buff.Reset() - + NewTaskTest(t, + WithName("run gen-foo 3"), + WithDir(dir), + WithTask("gen-foo"), + ) // sources: not up-to-date - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-bar"})) - assert.Equal(t, "task: [gen-bar] touch bar.txt", strings.TrimSpace(buff.String())) - buff.Reset() + NewTaskTest(t, + WithName("run gen-bar 5"), + WithDir(dir), + WithTask("gen-bar"), + ) // all: up-to-date - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-bar"})) - assert.Equal(t, `task: Task "gen-bar" is up to date`, strings.TrimSpace(buff.String())) - buff.Reset() - + NewTaskTest(t, + WithName("run gen-bar 6"), + WithDir(dir), + WithTask("gen-bar"), + ) // sources: not up-to-date, no output produced. - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-silent-baz"})) - assert.Empty(t, buff.String()) - + NewTaskTest(t, + WithName("run gen-baz 2"), + WithDir(dir), + WithTask("gen-silent-baz"), + ) // up-to-date, no output produced - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-silent-baz"})) - assert.Empty(t, buff.String()) - - e.Verbose = true + NewTaskTest(t, + WithName("run gen-baz 3"), + WithDir(dir), + WithTask("gen-silent-baz"), + ) // up-to-date, output produced due to Verbose mode. - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "gen-silent-baz"})) - assert.Equal(t, `task: Task "gen-silent-baz" is up to date`, strings.TrimSpace(buff.String())) - buff.Reset() + NewTaskTest(t, + WithName("run gen-baz 4 verbose"), + WithDir(dir), + WithTask("gen-silent-baz"), + WithVerbose(), + WithPostProcessFn(PPRemoveAbsolutePaths), + ) } func TestPrecondition(t *testing.T) { t.Parallel() - const dir = "testdata/precondition" - - var buff bytes.Buffer - e := &task.Executor{ - Dir: dir, - Stdout: &buff, - Stderr: &buff, - } - - // A precondition that has been met - require.NoError(t, e.Setup()) - require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "foo"})) - if buff.String() != "" { - t.Errorf("Got Output when none was expected: %s", buff.String()) - } - - // A precondition that was not met - require.Error(t, e.Run(context.Background(), &ast.Call{Task: "impossible"})) - - if buff.String() != "task: 1 != 0 obviously!\n" { - t.Errorf("Wrong output message: %s", buff.String()) - } - buff.Reset() - - // Calling a task with a precondition in a dependency fails the task - require.Error(t, e.Run(context.Background(), &ast.Call{Task: "depends_on_impossible"})) - - if buff.String() != "task: 1 != 0 obviously!\n" { - t.Errorf("Wrong output message: %s", buff.String()) - } - buff.Reset() - - // Calling a task with a precondition in a cmd fails the task - require.Error(t, e.Run(context.Background(), &ast.Call{Task: "executes_failing_task_as_cmd"})) - if buff.String() != "task: 1 != 0 obviously!\n" { - t.Errorf("Wrong output message: %s", buff.String()) - } - buff.Reset() + NewTaskTest(t, + WithName("a precondition has been met"), + WithDir(dir), + WithTask("foo"), + ) + NewTaskTest(t, + WithName("a precondition was not met"), + WithDir(dir), + WithTask("impossible"), + WithRunError(), + ) + NewTaskTest(t, + WithName("precondition in dependency fails the task"), + WithDir(dir), + WithTask("depends_on_impossible"), + WithRunError(), + ) + NewTaskTest(t, + WithName("precondition in cmd fails the task"), + WithDir(dir), + WithTask("executes_failing_task_as_cmd"), + WithRunError(), + ) } func TestGenerates(t *testing.T) { diff --git a/testdata/concurrency/testdata/TestConcurrency.golden b/testdata/concurrency/testdata/TestConcurrency.golden new file mode 100644 index 0000000000..066fc1f66d --- /dev/null +++ b/testdata/concurrency/testdata/TestConcurrency.golden @@ -0,0 +1,12 @@ +done 1 +done 2 +done 3 +done 4 +done 5 +done 6 +task: [t1] echo done 1 +task: [t2] echo done 2 +task: [t3] echo done 3 +task: [t4] echo done 4 +task: [t5] echo done 5 +task: [t6] echo done 6 diff --git a/testdata/deps/.gitignore b/testdata/deps/.gitignore deleted file mode 100644 index 2211df63dd..0000000000 --- a/testdata/deps/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.txt diff --git a/testdata/deps/Taskfile.yml b/testdata/deps/Taskfile.yml index bc2aa71c11..e120120e7f 100644 --- a/testdata/deps/Taskfile.yml +++ b/testdata/deps/Taskfile.yml @@ -7,50 +7,50 @@ tasks: d1: deps: [d11, d12, d13] cmds: - - echo 'Text' > d1.txt + - echo 'd1' d2: deps: [d21, d22, d23] cmds: - - echo 'Text' > d2.txt + - echo 'd2' d3: deps: [d31, d32, d33] cmds: - - echo 'Text' > d3.txt + - echo 'd3' d11: cmds: - - echo 'Text' > d11.txt + - echo 'd11' d12: cmds: - - echo 'Text' > d12.txt + - echo 'd12' d13: cmds: - - echo 'Text' > d13.txt + - echo 'd13' d21: cmds: - - echo 'Text' > d21.txt + - echo 'd21' d22: cmds: - - echo 'Text' > d22.txt + - echo 'd22' d23: cmds: - - echo 'Text' > d23.txt + - echo 'd23' d31: cmds: - - echo 'Text' > d31.txt + - echo 'd31' d32: cmds: - - echo 'Text' > d32.txt + - echo 'd32' d33: cmds: - - echo 'Text' > d33.txt + - echo 'd33' diff --git a/testdata/deps/testdata/TestDeps.golden b/testdata/deps/testdata/TestDeps.golden new file mode 100644 index 0000000000..0f0c8cd068 --- /dev/null +++ b/testdata/deps/testdata/TestDeps.golden @@ -0,0 +1,12 @@ +d1 +d11 +d12 +d13 +d2 +d21 +d22 +d23 +d3 +d31 +d32 +d33 diff --git a/testdata/empty_task/testdata/TestEmptyTask.golden b/testdata/empty_task/testdata/TestEmptyTask.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/empty_taskfile/testdata/TestEmptyTaskfile-err-setup.golden b/testdata/empty_taskfile/testdata/TestEmptyTaskfile-err-setup.golden new file mode 100644 index 0000000000..270d518269 --- /dev/null +++ b/testdata/empty_taskfile/testdata/TestEmptyTaskfile-err-setup.golden @@ -0,0 +1 @@ +task: Missing schema version in Taskfile "/testdata/empty_taskfile/Taskfile.yml" \ No newline at end of file diff --git a/testdata/empty_taskfile/testdata/TestEmptyTaskfile.golden b/testdata/empty_taskfile/testdata/TestEmptyTaskfile.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/env/.gitignore b/testdata/env/.gitignore deleted file mode 100644 index 2211df63dd..0000000000 --- a/testdata/env/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.txt diff --git a/testdata/env/Taskfile.yml b/testdata/env/Taskfile.yml index b81a1d1f10..70d4819063 100644 --- a/testdata/env/Taskfile.yml +++ b/testdata/env/Taskfile.yml @@ -28,13 +28,13 @@ tasks: CGO_ENABLED: sh: echo '0' cmds: - - echo "GOOS='$GOOS' GOARCH='$GOARCH' CGO_ENABLED='$CGO_ENABLED'" > local.txt + - echo "GOOS='$GOOS' GOARCH='$GOARCH' CGO_ENABLED='$CGO_ENABLED'" global: env: BAR: overridden cmds: - - echo "FOO='$FOO' BAR='$BAR' BAZ='$BAZ'" > global.txt + - echo "FOO='$FOO' BAR='$BAR' BAZ='$BAZ'" multiple_type: env: @@ -42,15 +42,15 @@ tasks: BAR: true BAZ: 1.1 cmds: - - echo "FOO='$FOO' BAR='$BAR' BAZ='$BAZ'" > multiple_type.txt + - echo "FOO='$FOO' BAR='$BAR' BAZ='$BAZ'" not-overridden: cmds: - - echo "QUX='$QUX'" > not-overridden.txt + - echo "QUX='$QUX'" overridden: cmds: - - echo "QUX='$QUX'" > overridden.txt + - echo "QUX='$QUX'" dynamic: silent: true @@ -58,4 +58,4 @@ tasks: DYNAMIC_FOO: sh: echo $FOO cmds: - - echo "{{ .DYNAMIC_FOO }}" > dynamic.txt + - echo "{{ .DYNAMIC_FOO }}" diff --git a/testdata/env/testdata/TestEnv-env_precedence_disabled.golden b/testdata/env/testdata/TestEnv-env_precedence_disabled.golden new file mode 100644 index 0000000000..a56fff4df8 --- /dev/null +++ b/testdata/env/testdata/TestEnv-env_precedence_disabled.golden @@ -0,0 +1,5 @@ +GOOS='linux' GOARCH='amd64' CGO_ENABLED='0' +FOO='foo' BAR='overridden' BAZ='baz' +QUX='from_os' +FOO='1' BAR='true' BAZ='1.1' +foo diff --git a/testdata/env/testdata/TestEnv-env_precedence_enabled.golden b/testdata/env/testdata/TestEnv-env_precedence_enabled.golden new file mode 100644 index 0000000000..6ac1cf97dd --- /dev/null +++ b/testdata/env/testdata/TestEnv-env_precedence_enabled.golden @@ -0,0 +1,5 @@ +GOOS='linux' GOARCH='amd64' CGO_ENABLED='0' +FOO='foo' BAR='overridden' BAZ='baz' +QUX='from_taskfile' +FOO='1' BAR='true' BAZ='1.1' +foo diff --git a/testdata/params/.gitignore b/testdata/params/.gitignore deleted file mode 100644 index 2211df63dd..0000000000 --- a/testdata/params/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.txt diff --git a/testdata/params/Taskfile.yml b/testdata/params/Taskfile.yml index 06cbe488f9..f8f1438265 100644 --- a/testdata/params/Taskfile.yml +++ b/testdata/params/Taskfile.yml @@ -12,33 +12,33 @@ tasks: GERMAN: "Welt!" deps: - task: write-file - vars: {CONTENT: Dependence1, FILE: dep1.txt} + vars: {CONTENT: Dependence1} - task: write-file - vars: {CONTENT: Dependence2, FILE: dep2.txt} + vars: {CONTENT: Dependence2} - task: write-file - vars: {CONTENT: "{{.SPANISH|replace \"mundo\" \"dependencia\"}}", FILE: spanish-dep.txt} + vars: {CONTENT: "{{.SPANISH|replace \"mundo\" \"dependencia\"}}"} cmds: - task: write-file - vars: {CONTENT: Hello, FILE: hello.txt} + vars: {CONTENT: Hello} - task: write-file - vars: {CONTENT: "$echo 'World'", FILE: world.txt} + vars: {CONTENT: "$echo 'World'"} - task: write-file - vars: {CONTENT: "!", FILE: exclamation.txt} + vars: {CONTENT: "!"} - task: write-file - vars: {CONTENT: "{{.SPANISH}}", FILE: spanish.txt} + vars: {CONTENT: "{{.SPANISH}}"} - task: write-file - vars: {CONTENT: "{{.PORTUGUESE}}", FILE: portuguese.txt} + vars: {CONTENT: "{{.PORTUGUESE}}"} - task: write-file - vars: {CONTENT: "{{.GERMAN}}", FILE: german.txt} + vars: {CONTENT: "{{.GERMAN}}"} - task: non-default write-file: cmds: - - echo {{.CONTENT}} > {{.FILE}} + - echo {{.CONTENT}} non-default: vars: PORTUGUESE: "{{.PORTUGUESE_HELLO_WORLD}}" cmds: - task: write-file - vars: {CONTENT: "{{.PORTUGUESE}}", FILE: portuguese2.txt} + vars: {CONTENT: "{{.PORTUGUESE}}"} diff --git a/testdata/params/testdata/TestParams.golden b/testdata/params/testdata/TestParams.golden new file mode 100644 index 0000000000..918811bf70 --- /dev/null +++ b/testdata/params/testdata/TestParams.golden @@ -0,0 +1,10 @@ +! +Dependence1 +Dependence2 +Hello +Olá, mundo! +Olá, mundo! +Welt! +World +¡Holla dependencia! +¡Holla mundo! diff --git a/testdata/precondition/testdata/TestPrecondition-a_precondition_has_been_met.golden b/testdata/precondition/testdata/TestPrecondition-a_precondition_has_been_met.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/precondition/testdata/TestPrecondition-a_precondition_was_not_met-err-run.golden b/testdata/precondition/testdata/TestPrecondition-a_precondition_was_not_met-err-run.golden new file mode 100644 index 0000000000..6952491ef1 --- /dev/null +++ b/testdata/precondition/testdata/TestPrecondition-a_precondition_was_not_met-err-run.golden @@ -0,0 +1 @@ +task: precondition not met \ No newline at end of file diff --git a/testdata/precondition/testdata/TestPrecondition-a_precondition_was_not_met.golden b/testdata/precondition/testdata/TestPrecondition-a_precondition_was_not_met.golden new file mode 100644 index 0000000000..8f4b5a4b48 --- /dev/null +++ b/testdata/precondition/testdata/TestPrecondition-a_precondition_was_not_met.golden @@ -0,0 +1 @@ +task: 1 != 0 obviously! diff --git a/testdata/precondition/testdata/TestPrecondition-precondition_in_cmd_fails_the_task-err-run.golden b/testdata/precondition/testdata/TestPrecondition-precondition_in_cmd_fails_the_task-err-run.golden new file mode 100644 index 0000000000..7e11556349 --- /dev/null +++ b/testdata/precondition/testdata/TestPrecondition-precondition_in_cmd_fails_the_task-err-run.golden @@ -0,0 +1 @@ +task: Failed to run task "executes_failing_task_as_cmd": task: precondition not met \ No newline at end of file diff --git a/testdata/precondition/testdata/TestPrecondition-precondition_in_cmd_fails_the_task.golden b/testdata/precondition/testdata/TestPrecondition-precondition_in_cmd_fails_the_task.golden new file mode 100644 index 0000000000..8f4b5a4b48 --- /dev/null +++ b/testdata/precondition/testdata/TestPrecondition-precondition_in_cmd_fails_the_task.golden @@ -0,0 +1 @@ +task: 1 != 0 obviously! diff --git a/testdata/precondition/testdata/TestPrecondition-precondition_in_dependency_fails_the_task-err-run.golden b/testdata/precondition/testdata/TestPrecondition-precondition_in_dependency_fails_the_task-err-run.golden new file mode 100644 index 0000000000..6952491ef1 --- /dev/null +++ b/testdata/precondition/testdata/TestPrecondition-precondition_in_dependency_fails_the_task-err-run.golden @@ -0,0 +1 @@ +task: precondition not met \ No newline at end of file diff --git a/testdata/precondition/testdata/TestPrecondition-precondition_in_dependency_fails_the_task.golden b/testdata/precondition/testdata/TestPrecondition-precondition_in_dependency_fails_the_task.golden new file mode 100644 index 0000000000..8f4b5a4b48 --- /dev/null +++ b/testdata/precondition/testdata/TestPrecondition-precondition_in_dependency_fails_the_task.golden @@ -0,0 +1 @@ +task: 1 != 0 obviously! diff --git a/testdata/requires/Taskfile.yml b/testdata/requires/Taskfile.yml index 1bc638e461..1f3e69e9e4 100644 --- a/testdata/requires/Taskfile.yml +++ b/testdata/requires/Taskfile.yml @@ -18,25 +18,21 @@ tasks: - FOO cmd: echo "{{.FOO}}" - validation-var-dynamic: vars: FOO: sh: echo "one" - requires: vars: - name: FOO enum: ['one', 'two'] - validation-var: requires: vars: - name: FOO enum: ['one', 'two'] - require-before-compile: requires: vars: [ MY_VAR ] diff --git a/testdata/requires/testdata/TestRequires-fails_validation-err-run.golden b/testdata/requires/testdata/TestRequires-fails_validation-err-run.golden new file mode 100644 index 0000000000..c1e1523b66 --- /dev/null +++ b/testdata/requires/testdata/TestRequires-fails_validation-err-run.golden @@ -0,0 +1,2 @@ +task: Task "validation-var" cancelled because it is missing required variables: + - FOO has an invalid value : 'bar' (allowed values : [one two]) diff --git a/testdata/requires/testdata/TestRequires-fails_validation.golden b/testdata/requires/testdata/TestRequires-fails_validation.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/requires/testdata/TestRequires-fails_validation_dynamic.golden b/testdata/requires/testdata/TestRequires-fails_validation_dynamic.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/requires/testdata/TestRequires-passes_validation.golden b/testdata/requires/testdata/TestRequires-passes_validation.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/requires/testdata/TestRequires-require_before_compile-err-run.golden b/testdata/requires/testdata/TestRequires-require_before_compile-err-run.golden new file mode 100644 index 0000000000..eebae1e677 --- /dev/null +++ b/testdata/requires/testdata/TestRequires-require_before_compile-err-run.golden @@ -0,0 +1 @@ +task: Task "require-before-compile" cancelled because it is missing required variables: MY_VAR \ No newline at end of file diff --git a/testdata/requires/testdata/TestRequires-require_before_compile.golden b/testdata/requires/testdata/TestRequires-require_before_compile.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/requires/testdata/TestRequires-required_var_missing-err-run.golden b/testdata/requires/testdata/TestRequires-required_var_missing-err-run.golden new file mode 100644 index 0000000000..e042f442d2 --- /dev/null +++ b/testdata/requires/testdata/TestRequires-required_var_missing-err-run.golden @@ -0,0 +1 @@ +task: Task "missing-var" cancelled because it is missing required variables: FOO \ No newline at end of file diff --git a/testdata/requires/testdata/TestRequires-required_var_missing.golden b/testdata/requires/testdata/TestRequires-required_var_missing.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/requires/testdata/TestRequires-required_var_ok.golden b/testdata/requires/testdata/TestRequires-required_var_ok.golden new file mode 100644 index 0000000000..89a25daac5 --- /dev/null +++ b/testdata/requires/testdata/TestRequires-required_var_ok.golden @@ -0,0 +1,2 @@ +task: [missing-var] echo "" + diff --git a/testdata/requires/testdata/TestRequires-var_defined_in_task.golden b/testdata/requires/testdata/TestRequires-var_defined_in_task.golden new file mode 100644 index 0000000000..9d71de9695 --- /dev/null +++ b/testdata/requires/testdata/TestRequires-var_defined_in_task.golden @@ -0,0 +1,2 @@ +task: [var-defined-in-task] echo "bar" +bar diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-root-dir.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-root-dir.golden new file mode 100644 index 0000000000..53fb1b33d2 --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-root-dir.golden @@ -0,0 +1 @@ +/testdata/special_vars diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-task-version.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-task-version.golden new file mode 100644 index 0000000000..3546645658 --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-task-version.golden @@ -0,0 +1 @@ +unknown diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-task.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-task.golden new file mode 100644 index 0000000000..b38fb17a36 --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-task.golden @@ -0,0 +1 @@ +included:print-task diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-taskfile-dir.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-taskfile-dir.golden new file mode 100644 index 0000000000..d1e887b107 --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-taskfile-dir.golden @@ -0,0 +1 @@ +/testdata/special_vars/included diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-taskfile.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-taskfile.golden new file mode 100644 index 0000000000..193f3dcc73 --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-included-print-taskfile.golden @@ -0,0 +1 @@ +/testdata/special_vars/included/Taskfile.yml diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-root-dir.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-root-dir.golden new file mode 100644 index 0000000000..53fb1b33d2 --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-root-dir.golden @@ -0,0 +1 @@ +/testdata/special_vars diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-task-dir.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-task-dir.golden new file mode 100644 index 0000000000..f9d92450d9 --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-task-dir.golden @@ -0,0 +1 @@ +/testdata/special_vars/foo diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-task-version.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-task-version.golden new file mode 100644 index 0000000000..3546645658 --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-task-version.golden @@ -0,0 +1 @@ +unknown diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-task.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-task.golden new file mode 100644 index 0000000000..6a29536662 --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-task.golden @@ -0,0 +1 @@ +print-task diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-taskfile-dir.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-taskfile-dir.golden new file mode 100644 index 0000000000..53fb1b33d2 --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-taskfile-dir.golden @@ -0,0 +1 @@ +/testdata/special_vars diff --git a/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-taskfile.golden b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-taskfile.golden new file mode 100644 index 0000000000..1e59e1e43d --- /dev/null +++ b/testdata/special_vars/subdir/testdata/TestSpecialVars-testdata-special_vars-subdir-print-taskfile.golden @@ -0,0 +1 @@ +/testdata/special_vars/Taskfile.yml diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-root-dir.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-root-dir.golden new file mode 100644 index 0000000000..53fb1b33d2 --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-root-dir.golden @@ -0,0 +1 @@ +/testdata/special_vars diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-task-version.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-task-version.golden new file mode 100644 index 0000000000..3546645658 --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-task-version.golden @@ -0,0 +1 @@ +unknown diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-task.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-task.golden new file mode 100644 index 0000000000..b38fb17a36 --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-task.golden @@ -0,0 +1 @@ +included:print-task diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-taskfile-dir.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-taskfile-dir.golden new file mode 100644 index 0000000000..d1e887b107 --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-taskfile-dir.golden @@ -0,0 +1 @@ +/testdata/special_vars/included diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-taskfile.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-taskfile.golden new file mode 100644 index 0000000000..193f3dcc73 --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-included-print-taskfile.golden @@ -0,0 +1 @@ +/testdata/special_vars/included/Taskfile.yml diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-root-dir.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-root-dir.golden new file mode 100644 index 0000000000..53fb1b33d2 --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-root-dir.golden @@ -0,0 +1 @@ +/testdata/special_vars diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-task-dir.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-task-dir.golden new file mode 100644 index 0000000000..f9d92450d9 --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-task-dir.golden @@ -0,0 +1 @@ +/testdata/special_vars/foo diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-task-version.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-task-version.golden new file mode 100644 index 0000000000..3546645658 --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-task-version.golden @@ -0,0 +1 @@ +unknown diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-task.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-task.golden new file mode 100644 index 0000000000..6a29536662 --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-task.golden @@ -0,0 +1 @@ +print-task diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-taskfile-dir.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-taskfile-dir.golden new file mode 100644 index 0000000000..53fb1b33d2 --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-taskfile-dir.golden @@ -0,0 +1 @@ +/testdata/special_vars diff --git a/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-taskfile.golden b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-taskfile.golden new file mode 100644 index 0000000000..1e59e1e43d --- /dev/null +++ b/testdata/special_vars/testdata/TestSpecialVars-testdata-special_vars-print-taskfile.golden @@ -0,0 +1 @@ +/testdata/special_vars/Taskfile.yml diff --git a/testdata/status/testdata/TestStatus-run_gen-bar_1_silent.golden b/testdata/status/testdata/TestStatus-run_gen-bar_1_silent.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/status/testdata/TestStatus-run_gen-bar_2_silent.golden b/testdata/status/testdata/TestStatus-run_gen-bar_2_silent.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/status/testdata/TestStatus-run_gen-bar_3_silent.golden b/testdata/status/testdata/TestStatus-run_gen-bar_3_silent.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/status/testdata/TestStatus-run_gen-bar_4_silent.golden b/testdata/status/testdata/TestStatus-run_gen-bar_4_silent.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/status/testdata/TestStatus-run_gen-bar_5.golden b/testdata/status/testdata/TestStatus-run_gen-bar_5.golden new file mode 100644 index 0000000000..b68e5f5dbb --- /dev/null +++ b/testdata/status/testdata/TestStatus-run_gen-bar_5.golden @@ -0,0 +1 @@ +task: [gen-bar] touch bar.txt diff --git a/testdata/status/testdata/TestStatus-run_gen-bar_6.golden b/testdata/status/testdata/TestStatus-run_gen-bar_6.golden new file mode 100644 index 0000000000..114d8035a2 --- /dev/null +++ b/testdata/status/testdata/TestStatus-run_gen-bar_6.golden @@ -0,0 +1 @@ +task: Task "gen-bar" is up to date diff --git a/testdata/status/testdata/TestStatus-run_gen-baz_2.golden b/testdata/status/testdata/TestStatus-run_gen-baz_2.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/status/testdata/TestStatus-run_gen-baz_3.golden b/testdata/status/testdata/TestStatus-run_gen-baz_3.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/status/testdata/TestStatus-run_gen-baz_4_verbose.golden b/testdata/status/testdata/TestStatus-run_gen-baz_4_verbose.golden new file mode 100644 index 0000000000..39a74c544b --- /dev/null +++ b/testdata/status/testdata/TestStatus-run_gen-baz_4_verbose.golden @@ -0,0 +1,3 @@ +task: [/testdata/status] Not found - Using alternative (Taskfile.yml) +task: "gen-silent-baz" started +task: Task "gen-silent-baz" is up to date diff --git a/testdata/status/testdata/TestStatus-run_gen-baz_silent.golden b/testdata/status/testdata/TestStatus-run_gen-baz_silent.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/status/testdata/TestStatus-run_gen-foo_1_silent.golden b/testdata/status/testdata/TestStatus-run_gen-foo_1_silent.golden new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testdata/status/testdata/TestStatus-run_gen-foo_2.golden b/testdata/status/testdata/TestStatus-run_gen-foo_2.golden new file mode 100644 index 0000000000..bed0a8eb3d --- /dev/null +++ b/testdata/status/testdata/TestStatus-run_gen-foo_2.golden @@ -0,0 +1 @@ +task: [gen-foo] touch foo.txt diff --git a/testdata/status/testdata/TestStatus-run_gen-foo_3.golden b/testdata/status/testdata/TestStatus-run_gen-foo_3.golden new file mode 100644 index 0000000000..bed0a8eb3d --- /dev/null +++ b/testdata/status/testdata/TestStatus-run_gen-foo_3.golden @@ -0,0 +1 @@ +task: [gen-foo] touch foo.txt diff --git a/testdata/vars/Taskfile.yml b/testdata/vars/Taskfile.yml index 187c48bde9..621a7afb73 100644 --- a/testdata/vars/Taskfile.yml +++ b/testdata/vars/Taskfile.yml @@ -19,7 +19,7 @@ tasks: - task: with-call - task: from-dot-env - missing-var: echo '{{.NON_EXISTING_VAR}}' > missing-var.txt + missing-var: echo '{{.NON_EXISTING_VAR}}' var-order: vars: @@ -27,7 +27,7 @@ tasks: VAR_E: '{{.VAR_D}}E' VAR_F: '{{.VAR_E}}F' cmds: - - echo '{{.VAR_F}}' > var-order.txt + - echo '{{.VAR_F}}' dependent-sh: vars: @@ -35,7 +35,7 @@ tasks: VAR_5: {sh: 'echo "{{.VAR_4}}5"'} VAR_6: {sh: 'echo "{{.VAR_5}}6"'} cmds: - - echo '{{.VAR_6}}' > dependent-sh.txt + - echo '{{.VAR_6}}' with-call: - task: called-task @@ -46,6 +46,6 @@ tasks: vars: MESSAGE: Hi, {{.ABC123}}! cmds: - - echo "{{.MESSAGE}}" > with-call.txt + - echo "{{.MESSAGE}}" - from-dot-env: echo '{{.DOT_ENV_VAR}}' > from-dot-env.txt + from-dot-env: echo '{{.DOT_ENV_VAR}}' diff --git a/testdata/vars/testdata/TestVars.golden b/testdata/vars/testdata/TestVars.golden new file mode 100644 index 0000000000..c6a02ab8cd --- /dev/null +++ b/testdata/vars/testdata/TestVars.golden @@ -0,0 +1,5 @@ + +ABCDEF +123456 +Hi, ABC123! +From .env file