github.com/golazy/golazy@v0.0.7-0.20221012133820-968fe65a0b65/lazydev/filewatcher/filewatcher_test.go (about)

     1  package filewatcher
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path"
     7  	"strings"
     8  	"testing"
     9  	"time"
    10  )
    11  
    12  func TestFindRootDirectory(t *testing.T) {
    13  	wd, _ := os.Getwd()
    14  	top, err := findRootDirectory(wd)
    15  	if err != nil {
    16  		t.Fatal(err)
    17  	}
    18  	if path.Base(top) != "golazy" {
    19  		t.Fatal(top)
    20  	}
    21  }
    22  
    23  func TestWatcher(t *testing.T) {
    24  
    25  	wd, err := os.Getwd()
    26  	if err != nil {
    27  		t.Fatal(err)
    28  	}
    29  	fw, err := New(wd)
    30  	if err != nil {
    31  		t.Fatal(err)
    32  	}
    33  
    34  	w, err := fw.Watch()
    35  	if err != nil {
    36  		t.Fatal(err)
    37  	}
    38  
    39  	os.Create("t")
    40  	time.Sleep(time.Millisecond)
    41  	os.Remove("t")
    42  	time.Sleep(time.Millisecond)
    43  	fw.Close()
    44  
    45  	changes := make([]string, 0)
    46  	calls := 0
    47  	for c := range w {
    48  		calls = calls + 1
    49  		for _, change := range c {
    50  			changes = append(changes,
    51  				fmt.Sprintf("%s(%s)", change.Op, path.Base(change.Path)))
    52  
    53  		}
    54  	}
    55  	changeList := strings.Join(changes, "\n")
    56  
    57  	if calls != 1 {
    58  		t.Fatal("expected 1 call. Got ", calls)
    59  	}
    60  	if changeList != "CREATE(t)\nREMOVE(t)" {
    61  		t.Fatal(changeList)
    62  	}
    63  
    64  	// Test delay is working
    65  
    66  	delay = 0
    67  	calls = 0
    68  	fw, err = New(wd)
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  
    73  	w, err = fw.Watch()
    74  	if err != nil {
    75  		t.Fatal(err)
    76  	}
    77  
    78  	os.Create("t")
    79  	time.Sleep(time.Millisecond)
    80  	os.Remove("t")
    81  	time.Sleep(time.Millisecond)
    82  	fw.Close()
    83  
    84  	for range w {
    85  		calls = calls + 1
    86  	}
    87  	if calls != 2 {
    88  		t.Fatal("expecting 2 calls. Got", calls)
    89  	}
    90  
    91  	// Test ignore file
    92  	IgnoredFiles = []string{"t"}
    93  	fw, err = New(wd)
    94  	if err != nil {
    95  		t.Fatal(err)
    96  	}
    97  
    98  	w, err = fw.Watch()
    99  	if err != nil {
   100  		t.Fatal(err)
   101  	}
   102  
   103  	os.Create("t")
   104  	time.Sleep(time.Millisecond)
   105  	os.Remove("t")
   106  	time.Sleep(time.Millisecond)
   107  	fw.Close()
   108  
   109  	calls = 0
   110  	for range w {
   111  		calls = calls + 1
   112  	}
   113  	if calls != 0 {
   114  		t.Fatal("t should have been ignored")
   115  	}
   116  
   117  	// Test ignore dir
   118  	IgnoredFiles = []string{}
   119  	IgnoredDirs = []string{"filewatcher"}
   120  	fw, err = New(wd)
   121  	if err != nil {
   122  		t.Fatal(err)
   123  	}
   124  
   125  	w, err = fw.Watch()
   126  	if err != nil {
   127  		t.Fatal(err)
   128  	}
   129  
   130  	os.Create("t")
   131  	time.Sleep(time.Millisecond)
   132  	os.Remove("t")
   133  	time.Sleep(time.Millisecond)
   134  	fw.Close()
   135  
   136  	calls = 0
   137  	for range w {
   138  		calls = calls + 1
   139  	}
   140  	if calls != 0 {
   141  		t.Fatal("filewatcher should have been ignored")
   142  	}
   143  
   144  }