123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- //go:build watch
- // +build watch
- package task_test
- import (
- "bytes"
- "context"
- "fmt"
- "os"
- "strings"
- "testing"
- "time"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "github.com/go-task/task/v3"
- "github.com/go-task/task/v3/internal/filepathext"
- "github.com/go-task/task/v3/taskfile/ast"
- )
- func TestFileWatcherInterval(t *testing.T) {
- const dir = "testdata/watcher_interval"
- expectedOutput := strings.TrimSpace(`
- task: Started watching for tasks: default
- task: [default] echo "Hello, World!"
- Hello, World!
- task: [default] echo "Hello, World!"
- Hello, World!
- `)
- var buff bytes.Buffer
- e := &task.Executor{
- Dir: dir,
- Stdout: &buff,
- Stderr: &buff,
- Watch: true,
- }
- require.NoError(t, e.Setup())
- buff.Reset()
- err := os.MkdirAll(filepathext.SmartJoin(dir, "src"), 0755)
- require.NoError(t, err)
- err = os.WriteFile(filepathext.SmartJoin(dir, "src/a"), []byte("test"), 0644)
- if err != nil {
- t.Fatal(err)
- }
- ctx := context.Background()
- ctx, cancel := context.WithCancel(ctx)
- go func(ctx context.Context) {
- for {
- select {
- case <-ctx.Done():
- return
- default:
- err := e.Run(ctx, &ast.Call{Task: "default"})
- if err != nil {
- return
- }
- }
- }
- }(ctx)
- time.Sleep(10 * time.Millisecond)
- err = os.WriteFile(filepathext.SmartJoin(dir, "src/a"), []byte("test updated"), 0644)
- if err != nil {
- t.Fatal(err)
- }
- time.Sleep(700 * time.Millisecond)
- cancel()
- assert.Equal(t, expectedOutput, strings.TrimSpace(buff.String()))
- buff.Reset()
- err = os.RemoveAll(filepathext.SmartJoin(dir, ".task"))
- require.NoError(t, err)
- err = os.RemoveAll(filepathext.SmartJoin(dir, "src"))
- require.NoError(t, err)
- }
- func TestShouldIgnoreFile(t *testing.T) {
- tt := []struct {
- path string
- expect bool
- }{
- {"/.git/hooks", true},
- {"/.github/workflows/build.yaml", false},
- }
- for k, ct := range tt {
- ct := ct
- t.Run(fmt.Sprintf("ignore - %d", k), func(t *testing.T) {
- t.Parallel()
- require.Equal(t, task.ShouldIgnoreFile(ct.path), ct.expect)
- })
- }
- }
|