@@ -2,6 +2,7 @@ package task_test
22
33import (
44 "bytes"
5+ "fmt"
56 "io/ioutil"
67 "os"
78 "path/filepath"
@@ -149,6 +150,61 @@ func TestStatus(t *testing.T) {
149150 }
150151}
151152
153+ func TestGenerates (t * testing.T ) {
154+ var srcTask = "sub/src.txt"
155+ var relTask = "rel.txt"
156+ var absTask = "abs.txt"
157+
158+ // This test does not work with a relative dir.
159+ dir , err := filepath .Abs ("testdata/generates" )
160+ assert .NoError (t , err )
161+ var srcFile = filepath .Join (dir , srcTask )
162+
163+ for _ , task := range []string {srcTask , relTask , absTask } {
164+ path := filepath .Join (dir , task )
165+ _ = os .Remove (path )
166+ if _ , err := os .Stat (path ); err == nil {
167+ t .Errorf ("File should not exists: %v" , err )
168+ }
169+ }
170+
171+ buff := bytes .NewBuffer (nil )
172+ e := & task.Executor {
173+ Dir : dir ,
174+ Stdout : buff ,
175+ Stderr : buff ,
176+ }
177+ assert .NoError (t , e .ReadTaskfile ())
178+
179+ for _ , task := range []string {relTask , absTask } {
180+ var destFile = filepath .Join (dir , task )
181+ var upToDate = fmt .Sprintf ("task: Task \" %s\" is up to date\n " , srcTask ) +
182+ fmt .Sprintf ("task: Task \" %s\" is up to date\n " , task )
183+
184+ // Run task for the first time.
185+ assert .NoError (t , e .Run (task ))
186+
187+ if _ , err := os .Stat (srcFile ); err != nil {
188+ t .Errorf ("File should exists: %v" , err )
189+ }
190+ if _ , err := os .Stat (destFile ); err != nil {
191+ t .Errorf ("File should exists: %v" , err )
192+ }
193+ // Ensure task was not incorrectly found to be up-to-date on first run.
194+ if buff .String () == upToDate {
195+ t .Errorf ("Wrong output message: %s" , buff .String ())
196+ }
197+ buff .Reset ()
198+
199+ // Re-run task to ensure it's now found to be up-to-date.
200+ assert .NoError (t , e .Run (task ))
201+ if buff .String () != upToDate {
202+ t .Errorf ("Wrong output message: %s" , buff .String ())
203+ }
204+ buff .Reset ()
205+ }
206+ }
207+
152208func TestInit (t * testing.T ) {
153209 const dir = "testdata/init"
154210 var file = filepath .Join (dir , "Taskfile.yml" )
0 commit comments