github.com/thriqon/involucro@v1.1.3/integrationtest/32_task_list_test.go (about) 1 package integrationtest 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 "os" 8 "testing" 9 10 "github.com/involucro/involucro/app" 11 ) 12 13 func testStdoutOf(f func() error, expected string, t *testing.T) { 14 stdout := os.Stdout 15 r, w, err := os.Pipe() 16 if err != nil { 17 t.Fatal(err) 18 } 19 defer func() { 20 os.Stdout = stdout 21 }() 22 23 os.Stdout = w 24 25 outC := make(chan string) 26 go func() { 27 var buf bytes.Buffer 28 _, err := io.Copy(&buf, r) 29 r.Close() 30 if err != nil { 31 fmt.Fprintf(os.Stderr, "testing: copying pipe: %v\n", err) 32 os.Exit(1) 33 } 34 outC <- buf.String() 35 }() 36 37 if err := f(); err != nil { 38 t.Fatal(err) 39 } 40 41 w.Close() 42 out := <-outC 43 os.Stdout = stdout 44 45 if out != "a\nb\n" { 46 t.Errorf("unexpected output %v", out) 47 } 48 } 49 50 func TestTaskListWithTAndDirectScript(t *testing.T) { 51 if testing.Short() { 52 t.SkipNow() 53 } 54 testStdoutOf(func() error { 55 return app.Main([]string{ 56 "involucro", "-e", 57 "inv.task('a').using('busybox').run('x'); inv.task('b').using('busybox').run('z')", 58 "-T", 59 }) 60 }, "a\nb\n", t) 61 } 62 func TestTaskListWithTasksAndDirectScript(t *testing.T) { 63 if testing.Short() { 64 t.SkipNow() 65 } 66 testStdoutOf(func() error { 67 return app.Main([]string{ 68 "involucro", "-e", 69 "inv.task('a').using('busybox').run('x'); inv.task('b').using('busybox').run('z')", 70 "--tasks", 71 }) 72 }, "a\nb\n", t) 73 }