diff --git a/pkg/gci/gci_test.go b/pkg/gci/gci_test.go index 0d6e433..3fe4644 100644 --- a/pkg/gci/gci_test.go +++ b/pkg/gci/gci_test.go @@ -1,6 +1,7 @@ package gci import ( + "fmt" "io/ioutil" "os" "path" @@ -69,3 +70,49 @@ func TestInitGciConfigFromYAML(t *testing.T) { assert.True(t, gciCfg.NoInlineComments) assert.True(t, gciCfg.NoPrefixComments) } + +func TestSkippingOverIncorrectlyFormattedFiles(t *testing.T) { + cfg, err := GciStringConfiguration{}.Parse() + assert.NoError(t, err) + validFileProcessedChan := make(chan bool, 1) + + var importUnclosedCtr, noImportCtr, validCtr int + var files []io.FileObj + files = append(files, TestFile{io.File{"internal/skipTest/import-unclosed.testgo"}, &importUnclosedCtr}) + files = append(files, TestFile{io.File{"internal/skipTest/no-import.testgo"}, &noImportCtr}) + files = append(files, TestFile{io.File{"internal/skipTest/valid.testgo"}, &validCtr}) + + generatorFunc := func() ([]io.FileObj, error) { + return files, nil + } + fileAccessTestFunc := func(filePath string, unmodifiedFile, formattedFile []byte) error { + if filePath != "internal/skipTest/valid.testgo" { + return fmt.Errorf("malformed file %q should not have been processed", filePath) + } + validFileProcessedChan <- true + return nil + } + err = processFiles(generatorFunc, *cfg, fileAccessTestFunc) + + assert.NoError(t, err) + // check all files have been accessed + assert.Equal(t, importUnclosedCtr, 1) + assert.Equal(t, noImportCtr, 1) + assert.Equal(t, validCtr, 1) + // check that processing for the valid file was called + assert.True(t, <-validFileProcessedChan) +} + +type TestFile struct { + wrappedFile io.File + accessCounter *int +} + +func (t TestFile) Load() ([]byte, error) { + *t.accessCounter++ + return t.wrappedFile.Load() +} + +func (t TestFile) Path() string { + return t.wrappedFile.Path() +} diff --git a/pkg/gci/internal/skipTest/import-unclosed.testgo b/pkg/gci/internal/skipTest/import-unclosed.testgo new file mode 100644 index 0000000..289dd46 --- /dev/null +++ b/pkg/gci/internal/skipTest/import-unclosed.testgo @@ -0,0 +1,8 @@ +package main +import ( + "golang.org/x/tools" + + "fmt" + + "github.com/daixiang0/gci" + diff --git a/pkg/gci/internal/skipTest/no-import.testgo b/pkg/gci/internal/skipTest/no-import.testgo new file mode 100644 index 0000000..c6146b4 --- /dev/null +++ b/pkg/gci/internal/skipTest/no-import.testgo @@ -0,0 +1,4 @@ +package main + +func X() { +} \ No newline at end of file diff --git a/pkg/gci/internal/skipTest/valid.testgo b/pkg/gci/internal/skipTest/valid.testgo new file mode 100644 index 0000000..52cc6c0 --- /dev/null +++ b/pkg/gci/internal/skipTest/valid.testgo @@ -0,0 +1,8 @@ +package main +import ( + "golang.org/x/tools" + + "fmt" + + "github.com/daixiang0/gci" +) \ No newline at end of file