github.com/tilt-dev/wat@v0.0.2-0.20180626175338-9349b638e250/cli/wat/recent_test.go (about)

     1  package wat
     2  
     3  import (
     4  	"testing"
     5  
     6  	"time"
     7  
     8  	"sort"
     9  
    10  	"reflect"
    11  
    12  	"fmt"
    13  	"regexp"
    14  )
    15  
    16  func TestWalk(t *testing.T) {
    17  	f := newWatFixture(t)
    18  	defer f.tearDown()
    19  
    20  	fileset := map[string]bool{
    21  		"foo":       true,
    22  		"bar":       true,
    23  		"baz":       true,
    24  		"beep/boop": true,
    25  		"beep/bop":  true,
    26  	}
    27  	for file := range fileset {
    28  		f.writeFile(file)
    29  	}
    30  
    31  	files, err := walkDir(f.root.Path())
    32  	if err != nil {
    33  		f.t.Fatalf("Error testing walk: %v", err)
    34  	}
    35  
    36  	f.assertExpectedFiles(fileset, files)
    37  }
    38  
    39  func TestSort(t *testing.T) {
    40  	now := fileInfo{name: "now", modTime: time.Now()}
    41  	yesterday := fileInfo{name: "yesterday", modTime: time.Now().Add(-24 * time.Hour)}
    42  	tomorrow := fileInfo{name: "tomorrow", modTime: time.Now().Add(24 * time.Hour)}
    43  	files := []fileInfo{now, yesterday, tomorrow}
    44  
    45  	sort.Sort(fileInfos(files))
    46  
    47  	expected := []fileInfo{yesterday, now, tomorrow}
    48  
    49  	if !reflect.DeepEqual(expected, files) {
    50  		t.Fatalf("Expected %v, got %v", expected, files)
    51  	}
    52  }
    53  
    54  func TestIgnore(t *testing.T) {
    55  	f := newWatFixture(t)
    56  	defer f.tearDown()
    57  
    58  	filesToExpected := map[string]bool{
    59  		"foo/a":           false, // ignore "a"
    60  		"foo/b":           true,
    61  		"foo/c":           true,
    62  		"bar/a":           false, // ignore "a"
    63  		"bar/b":           true,
    64  		"thingA.yes":      true,
    65  		"thingB.no":       false, // ignore "*.no"
    66  		"stuff/thingC.no": false, // ignore "*.no"
    67  		"hello":           true,
    68  		"world":           true,
    69  		"beep/boop/bzz":   false, // ignore "beep"
    70  		"beep/boop/bees":  false, // ignore "beep"
    71  		"blah/beep/bork":  false, // ignore "beep"
    72  		"blah/blorp":      true,
    73  	}
    74  	for file := range filesToExpected {
    75  		f.writeFile(file)
    76  	}
    77  
    78  	f.write(fnameWatIgnore, fmt.Sprintf(`*.no
    79  a
    80  beep
    81  %s`, fnameWatIgnore))
    82  
    83  	files, err := walkDir(f.root.Path())
    84  	if err != nil {
    85  		f.t.Fatalf("Error testing walk: %v", err)
    86  	}
    87  
    88  	f.assertExpectedFiles(filesToExpected, files)
    89  }
    90  
    91  // Make sure that WalkDir (public func.) looks in the right place for
    92  // .watignore (should be at wat root)
    93  func TestWalkDirFindsIgnore(t *testing.T) {
    94  	f := newWatFixture(t)
    95  	defer f.tearDown()
    96  	ws := f.watInit()
    97  
    98  	filesToExpected := map[string]bool{
    99  		"foo": false, // ignore "foo"
   100  		"bar": true,
   101  	}
   102  	for file := range filesToExpected {
   103  		f.writeFile(file)
   104  	}
   105  
   106  	f.write(fnameWatIgnore, fmt.Sprintf("foo\n%s", fnameWatIgnore))
   107  
   108  	files, err := ws.WalkRoot()
   109  	if err != nil {
   110  		f.t.Fatalf("Error testing walk: %v", err)
   111  	}
   112  
   113  	f.assertExpectedFiles(filesToExpected, files)
   114  }
   115  
   116  func TestFilterFilesMatchAny(t *testing.T) {
   117  	f := newWatFixture(t)
   118  	defer f.tearDown()
   119  
   120  	filesToExpected := map[string]bool{
   121  		"a.foo": true,
   122  		"b.foo": true,
   123  		"a.bar": true,
   124  		"b.bar": false, // does not match 'a.*' or '*.foo'
   125  	}
   126  	allFiles := []fileInfo{}
   127  	for file := range filesToExpected {
   128  		allFiles = append(allFiles, fileInfo{name: file})
   129  	}
   130  
   131  	regexps := []*regexp.Regexp{
   132  		regexp.MustCompile("a\\..*"),
   133  		regexp.MustCompile(".*\\.foo"),
   134  	}
   135  
   136  	filtered := filterFilesMatchAny(allFiles, regexps)
   137  
   138  	f.assertExpectedFiles(filesToExpected, filtered)
   139  }