gitlab.com/greut/eclint@v0.5.2-0.20240402114752-14681fe6e0bf/files_test.go (about) 1 package eclint_test 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 "testing" 8 9 "gitlab.com/greut/eclint" 10 ) 11 12 const ( 13 // testdataSimple contains a sample editorconfig directory with 14 // some errors. 15 testdataSimple = "testdata/simple" 16 ) 17 18 func TestListFiles(t *testing.T) { 19 d := testdataSimple 20 21 fs := 0 22 fsChan, errChan := eclint.ListFilesContext(context.TODO(), d) 23 24 outer: 25 for { 26 select { 27 case err, ok := <-errChan: 28 if ok && err != nil { 29 t.Fatal(err) 30 } 31 32 case _, ok := <-fsChan: 33 if !ok { 34 break outer 35 } 36 fs++ 37 } 38 } 39 40 if fs != 5 { 41 t.Errorf("%s should have five files, got %d", d, fs) 42 } 43 } 44 45 func TestListFilesNoArgs(t *testing.T) { 46 skipNoGit(t) 47 48 d := testdataSimple 49 50 cwd, err := os.Getwd() 51 if err != nil { 52 t.Fatal(err) 53 } 54 55 defer func() { 56 if err := os.Chdir(cwd); err != nil { 57 t.Fatal(err) 58 } 59 }() 60 61 err = os.Chdir(d) 62 if err != nil { 63 t.Fatal(err) 64 } 65 66 fs := 0 67 fsChan, errChan := eclint.ListFilesContext(context.TODO()) 68 outer: 69 for { 70 select { 71 case err, ok := <-errChan: 72 if ok && err != nil { 73 t.Fatal(err) 74 } 75 case _, ok := <-fsChan: 76 if !ok { 77 break outer 78 } 79 fs++ 80 } 81 } 82 83 if fs != 3 { 84 t.Errorf("%s should have three files, got %d", d, fs) 85 } 86 } 87 88 func TestListFilesNoGit(t *testing.T) { 89 d := fmt.Sprintf("/tmp/eclint/%d", os.Getpid()) 90 91 err := os.MkdirAll(d, 0o700) 92 if err != nil { 93 t.Fatal(err) 94 } 95 96 cwd, err := os.Getwd() 97 if err != nil { 98 t.Fatal(err) 99 } 100 101 defer func() { 102 if err := os.Chdir(cwd); err != nil { 103 t.Fatal(err) 104 } 105 }() 106 107 err = os.Chdir(d) 108 if err != nil { 109 t.Fatal(err) 110 } 111 112 _, errChan := eclint.ListFilesContext(context.TODO()) 113 114 err, ok := <-errChan 115 if !ok || err == nil { 116 t.Errorf("an error was expected, got nothing") 117 } 118 119 fs := 0 120 fsChan, errChan := eclint.ListFilesContext(context.TODO(), ".") 121 122 outer: 123 for { 124 select { 125 case err, ok := <-errChan: 126 if ok && err != nil { 127 t.Fatal(err) 128 } 129 case _, ok := <-fsChan: 130 if !ok { 131 break outer 132 } 133 fs++ 134 } 135 } 136 137 if fs != 1 { 138 t.Errorf("%s should have one file, got %d", d, fs) 139 } 140 } 141 142 func TestWalk(t *testing.T) { 143 d := testdataSimple 144 145 fs := 0 146 fsChan, errChan := eclint.WalkContext(context.TODO(), d) 147 148 outer: 149 for { 150 select { 151 case err, ok := <-errChan: 152 if ok && err != nil { 153 t.Fatal(err) 154 } 155 case _, ok := <-fsChan: 156 if !ok { 157 break outer 158 } 159 fs++ 160 } 161 } 162 163 if fs != 5 { 164 t.Errorf("%s should have five files, got %d", d, fs) 165 } 166 } 167 168 func TestGitLsFiles(t *testing.T) { 169 skipNoGit(t) 170 171 d := testdataSimple 172 173 fs := 0 174 fsChan, errChan := eclint.GitLsFilesContext(context.TODO(), d) 175 176 outer: 177 for { 178 select { 179 case err, ok := <-errChan: 180 if ok && err != nil { 181 t.Fatal(err) 182 } 183 case _, ok := <-fsChan: 184 if !ok { 185 break outer 186 } 187 fs++ 188 } 189 } 190 191 if fs != 3 { 192 t.Errorf("%s should have three files, got %d", d, fs) 193 } 194 } 195 196 func TestGitLsFilesFailure(t *testing.T) { 197 skipNoGit(t) 198 199 d := fmt.Sprintf("/tmp/eclint/%d", os.Getpid()) 200 201 err := os.MkdirAll(d, 0o700) 202 if err != nil { 203 t.Fatal(err) 204 } 205 206 _, errChan := eclint.GitLsFilesContext(context.TODO(), d) 207 208 if err := <-errChan; err == nil { 209 t.Error("an error was expected") 210 } 211 } 212 213 func skipNoGit(t *testing.T) { 214 t.Helper() 215 216 if _, err := os.Stat(".git"); os.IsNotExist(err) { 217 t.Skip("skipping test requiring .git to be present") 218 } 219 }