diff --git a/task_test.go b/task_test.go index 31d52b8e92..4c1d09a3df 100644 --- a/task_test.go +++ b/task_test.go @@ -2249,3 +2249,52 @@ func TestFor(t *testing.T) { }) } } + +func TestWildcard(t *testing.T) { + tests := []struct { + name string + expectedOutput string + wantErr bool + }{ + { + name: "wildcard-foo", + expectedOutput: "Hello foo\n", + }, + { + name: "foo-wildcard-bar", + expectedOutput: "Hello foo bar\n", + }, + { + name: "start-foo", + expectedOutput: "Starting foo\n", + }, + { + name: "matches-exactly-*", + expectedOutput: "I don't consume matches: \n", + }, + { + name: "no-match", + wantErr: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + var buff bytes.Buffer + e := task.Executor{ + Dir: "testdata/wildcards", + Stdout: &buff, + Stderr: &buff, + Silent: true, + Force: true, + } + require.NoError(t, e.Setup()) + if test.wantErr { + require.Error(t, e.Run(context.Background(), &ast.Call{Task: test.name})) + return + } + require.NoError(t, e.Run(context.Background(), &ast.Call{Task: test.name})) + assert.Equal(t, test.expectedOutput, buff.String()) + }) + } +} diff --git a/testdata/wildcards/Taskfile.yml b/testdata/wildcards/Taskfile.yml index d13f836d57..31d8ec9f9e 100644 --- a/testdata/wildcards/Taskfile.yml +++ b/testdata/wildcards/Taskfile.yml @@ -9,6 +9,11 @@ tasks: cmds: - echo "Hello {{index .MATCH 0}} {{index .MATCH 1}}" + # Matches is empty when you call the task name exactly (i.e. `task matches-exactly-*`) + matches-exactly-*: + cmds: + - "echo \"I don't consume matches: {{.MATCH}}\"" + start-*: vars: SERVICE: "{{index .MATCH 0}}"