From b370a605a4b3548af643b040204259ec160fc1ea Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 18 May 2021 10:34:41 +0200 Subject: [PATCH 1/5] Added CI workflow --- .github/workflows/test.yaml | 44 +++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..903aed6 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,44 @@ +name: test + +on: + push: + pull_request: + +jobs: + test-matrix: + strategy: + matrix: + operating-system: + [ + ubuntu-latest, + ubuntu-18.04, + windows-latest, + windows-2016, + macos-latest, + ] + + runs-on: ${{ matrix.operating-system }} + + steps: + - name: Disable EOL conversions + run: git config --global core.autocrlf false + + - name: Checkout + uses: actions/checkout@v2 + + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: "1.16" + + - name: Run unit tests + run: go test -v ./... -coverprofile=coverage_unit.txt + + - name: Send unit tests coverage to Codecov + if: > + matrix.operating-system == 'ubuntu-latest' && + github.event_name == 'push' + uses: codecov/codecov-action@v1 + with: + file: ./coverage_unit.txt + flags: unit From 152f7f1073c784c65af456adfa3ac5c5e2aceca3 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 18 May 2021 11:40:12 +0200 Subject: [PATCH 2/5] Fix unit tests for Windows --- paths_test.go | 112 ++++++++++++++++++++++++++------------------------ 1 file changed, 58 insertions(+), 54 deletions(-) diff --git a/paths_test.go b/paths_test.go index 8548113..5cb38d1 100644 --- a/paths_test.go +++ b/paths_test.go @@ -38,6 +38,10 @@ import ( "github.com/stretchr/testify/require" ) +func pathEqualsTo(t *testing.T, expected string, actual *Path) { + require.Equal(t, expected, filepath.ToSlash(actual.String())) +} + func TestPathNew(t *testing.T) { test1 := New("path") require.Equal(t, "path", test1.String()) @@ -54,7 +58,7 @@ func TestPathNew(t *testing.T) { func TestPath(t *testing.T) { testPath := New("_testdata") - require.Equal(t, "_testdata", testPath.String()) + pathEqualsTo(t, "_testdata", testPath) isDir, err := testPath.IsDirCheck() require.True(t, isDir) require.NoError(t, err) @@ -67,7 +71,7 @@ func TestPath(t *testing.T) { require.False(t, testPath.NotExist()) folderPath := testPath.Join("folder") - require.Equal(t, "_testdata/folder", folderPath.String()) + pathEqualsTo(t, "_testdata/folder", folderPath) isDir, err = folderPath.IsDirCheck() require.True(t, isDir) require.NoError(t, err) @@ -81,7 +85,7 @@ func TestPath(t *testing.T) { require.False(t, folderPath.NotExist()) filePath := testPath.Join("file") - require.Equal(t, "_testdata/file", filePath.String()) + pathEqualsTo(t, "_testdata/file", filePath) isDir, err = filePath.IsDirCheck() require.False(t, isDir) require.NoError(t, err) @@ -94,7 +98,7 @@ func TestPath(t *testing.T) { require.False(t, filePath.NotExist()) anotherFilePath := filePath.Join("notexistent") - require.Equal(t, "_testdata/file/notexistent", anotherFilePath.String()) + pathEqualsTo(t, "_testdata/file/notexistent", anotherFilePath) isDir, err = anotherFilePath.IsDirCheck() require.False(t, isDir) require.Error(t, err) @@ -109,28 +113,28 @@ func TestPath(t *testing.T) { list, err := folderPath.ReadDir() require.NoError(t, err) require.Len(t, list, 4) - require.Equal(t, "_testdata/folder/.hidden", list[0].String()) - require.Equal(t, "_testdata/folder/file2", list[1].String()) - require.Equal(t, "_testdata/folder/file3", list[2].String()) - require.Equal(t, "_testdata/folder/subfolder", list[3].String()) + pathEqualsTo(t, "_testdata/folder/.hidden", list[0]) + pathEqualsTo(t, "_testdata/folder/file2", list[1]) + pathEqualsTo(t, "_testdata/folder/file3", list[2]) + pathEqualsTo(t, "_testdata/folder/subfolder", list[3]) list2 := list.Clone() list2.FilterDirs() require.Len(t, list2, 1) - require.Equal(t, "_testdata/folder/subfolder", list2[0].String()) + pathEqualsTo(t, "_testdata/folder/subfolder", list2[0]) list2 = list.Clone() list2.FilterOutHiddenFiles() require.Len(t, list2, 3) - require.Equal(t, "_testdata/folder/file2", list2[0].String()) - require.Equal(t, "_testdata/folder/file3", list2[1].String()) - require.Equal(t, "_testdata/folder/subfolder", list2[2].String()) + pathEqualsTo(t, "_testdata/folder/file2", list2[0]) + pathEqualsTo(t, "_testdata/folder/file3", list2[1]) + pathEqualsTo(t, "_testdata/folder/subfolder", list2[2]) list2 = list.Clone() list2.FilterOutPrefix("file") require.Len(t, list2, 2) - require.Equal(t, "_testdata/folder/.hidden", list2[0].String()) - require.Equal(t, "_testdata/folder/subfolder", list2[1].String()) + pathEqualsTo(t, "_testdata/folder/.hidden", list2[0]) + pathEqualsTo(t, "_testdata/folder/subfolder", list2[1]) } func TestResetStatCacheWhenFollowingSymlink(t *testing.T) { @@ -231,19 +235,19 @@ func TestCopyDir(t *testing.T) { func TestParents(t *testing.T) { parents := New("/a/very/long/path").Parents() require.Len(t, parents, 5) - require.Equal(t, "/a/very/long/path", parents[0].String()) - require.Equal(t, "/a/very/long", parents[1].String()) - require.Equal(t, "/a/very", parents[2].String()) - require.Equal(t, "/a", parents[3].String()) - require.Equal(t, "/", parents[4].String()) + pathEqualsTo(t, "/a/very/long/path", parents[0]) + pathEqualsTo(t, "/a/very/long", parents[1]) + pathEqualsTo(t, "/a/very", parents[2]) + pathEqualsTo(t, "/a", parents[3]) + pathEqualsTo(t, "/", parents[4]) parents2 := New("a/very/relative/path").Parents() require.Len(t, parents, 5) - require.Equal(t, "a/very/relative/path", parents2[0].String()) - require.Equal(t, "a/very/relative", parents2[1].String()) - require.Equal(t, "a/very", parents2[2].String()) - require.Equal(t, "a", parents2[3].String()) - require.Equal(t, ".", parents2[4].String()) + pathEqualsTo(t, "a/very/relative/path", parents2[0]) + pathEqualsTo(t, "a/very/relative", parents2[1]) + pathEqualsTo(t, "a/very", parents2[2]) + pathEqualsTo(t, "a", parents2[3]) + pathEqualsTo(t, ".", parents2[4]) } func TestReadDirRecursive(t *testing.T) { @@ -253,20 +257,20 @@ func TestReadDirRecursive(t *testing.T) { require.NoError(t, err) require.Len(t, list, 14) - require.Equal(t, "_testdata/anotherFile", list[0].String()) - require.Equal(t, "_testdata/file", list[1].String()) - require.Equal(t, "_testdata/folder", list[2].String()) - require.Equal(t, "_testdata/folder/.hidden", list[3].String()) - require.Equal(t, "_testdata/folder/file2", list[4].String()) - require.Equal(t, "_testdata/folder/file3", list[5].String()) - require.Equal(t, "_testdata/folder/subfolder", list[6].String()) - require.Equal(t, "_testdata/folder/subfolder/file4", list[7].String()) - require.Equal(t, "_testdata/symlinktofolder", list[8].String()) - require.Equal(t, "_testdata/symlinktofolder/.hidden", list[9].String()) - require.Equal(t, "_testdata/symlinktofolder/file2", list[10].String()) - require.Equal(t, "_testdata/symlinktofolder/file3", list[11].String()) - require.Equal(t, "_testdata/symlinktofolder/subfolder", list[12].String()) - require.Equal(t, "_testdata/symlinktofolder/subfolder/file4", list[13].String()) + pathEqualsTo(t, "_testdata/anotherFile", list[0]) + pathEqualsTo(t, "_testdata/file", list[1]) + pathEqualsTo(t, "_testdata/folder", list[2]) + pathEqualsTo(t, "_testdata/folder/.hidden", list[3]) + pathEqualsTo(t, "_testdata/folder/file2", list[4]) + pathEqualsTo(t, "_testdata/folder/file3", list[5]) + pathEqualsTo(t, "_testdata/folder/subfolder", list[6]) + pathEqualsTo(t, "_testdata/folder/subfolder/file4", list[7]) + pathEqualsTo(t, "_testdata/symlinktofolder", list[8]) + pathEqualsTo(t, "_testdata/symlinktofolder/.hidden", list[9]) + pathEqualsTo(t, "_testdata/symlinktofolder/file2", list[10]) + pathEqualsTo(t, "_testdata/symlinktofolder/file3", list[11]) + pathEqualsTo(t, "_testdata/symlinktofolder/subfolder", list[12]) + pathEqualsTo(t, "_testdata/symlinktofolder/subfolder/file4", list[13]) } func TestFilterDirs(t *testing.T) { @@ -276,15 +280,15 @@ func TestFilterDirs(t *testing.T) { require.NoError(t, err) require.Len(t, list, 4) - require.Equal(t, "_testdata/anotherFile", list[0].String()) - require.Equal(t, "_testdata/file", list[1].String()) - require.Equal(t, "_testdata/folder", list[2].String()) - require.Equal(t, "_testdata/symlinktofolder", list[3].String()) + pathEqualsTo(t, "_testdata/anotherFile", list[0]) + pathEqualsTo(t, "_testdata/file", list[1]) + pathEqualsTo(t, "_testdata/folder", list[2]) + pathEqualsTo(t, "_testdata/symlinktofolder", list[3]) list.FilterDirs() require.Len(t, list, 2) - require.Equal(t, "_testdata/folder", list[0].String()) - require.Equal(t, "_testdata/symlinktofolder", list[1].String()) + pathEqualsTo(t, "_testdata/folder", list[0]) + pathEqualsTo(t, "_testdata/symlinktofolder", list[1]) } func TestFilterOutDirs(t *testing.T) { @@ -294,15 +298,15 @@ func TestFilterOutDirs(t *testing.T) { require.NoError(t, err) require.Len(t, list, 4) - require.Equal(t, "_testdata/anotherFile", list[0].String()) - require.Equal(t, "_testdata/file", list[1].String()) - require.Equal(t, "_testdata/folder", list[2].String()) - require.Equal(t, "_testdata/symlinktofolder", list[3].String()) + pathEqualsTo(t, "_testdata/anotherFile", list[0]) + pathEqualsTo(t, "_testdata/file", list[1]) + pathEqualsTo(t, "_testdata/folder", list[2]) + pathEqualsTo(t, "_testdata/symlinktofolder", list[3]) list.FilterOutDirs() require.Len(t, list, 2) - require.Equal(t, "_testdata/anotherFile", list[0].String()) - require.Equal(t, "_testdata/file", list[1].String()) + pathEqualsTo(t, "_testdata/anotherFile", list[0]) + pathEqualsTo(t, "_testdata/file", list[1]) } func TestEquivalentPaths(t *testing.T) { @@ -343,23 +347,23 @@ func TestCanonicalize(t *testing.T) { func TestRelativeTo(t *testing.T) { res, err := New("/my/abs/path/123/456").RelTo(New("/my/abs/path")) require.NoError(t, err) - require.Equal(t, "../..", res.String()) + pathEqualsTo(t, "../..", res) res, err = New("/my/abs/path").RelTo(New("/my/abs/path/123/456")) require.NoError(t, err) - require.Equal(t, "123/456", res.String()) + pathEqualsTo(t, "123/456", res) res, err = New("my/path").RelTo(New("/other/path")) require.Error(t, err) require.Nil(t, res) res, err = New("/my/abs/path/123/456").RelFrom(New("/my/abs/path")) - require.Equal(t, "123/456", res.String()) + pathEqualsTo(t, "123/456", res) require.NoError(t, err) res, err = New("/my/abs/path").RelFrom(New("/my/abs/path/123/456")) require.NoError(t, err) - require.Equal(t, "../..", res.String()) + pathEqualsTo(t, "../..", res) res, err = New("my/path").RelFrom(New("/other/path")) require.Error(t, err) From 32a538ba2ba2d147c9d62822bead12ef53c737b1 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 18 May 2021 13:27:21 +0200 Subject: [PATCH 3/5] Fix IsDirCheck --- paths.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/paths.go b/paths.go index c242a91..d42eef6 100644 --- a/paths.go +++ b/paths.go @@ -299,9 +299,6 @@ func (p *Path) IsDirCheck() (bool, error) { if err == nil { return info.IsDir(), nil } - if os.IsNotExist(err) { - return false, nil - } return false, err } From 610d301af9b4ebcca3f94decdebcb05ef90218b1 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 18 May 2021 15:24:03 +0200 Subject: [PATCH 4/5] Fix to ExistCheck method --- paths.go | 4 ++++ paths_test.go | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/paths.go b/paths.go index d42eef6..0ab287a 100644 --- a/paths.go +++ b/paths.go @@ -36,6 +36,7 @@ import ( "os" "path/filepath" "strings" + "syscall" "time" "github.com/pkg/errors" @@ -274,6 +275,9 @@ func (p *Path) ExistCheck() (bool, error) { if os.IsNotExist(err) { return false, nil } + if err.(*os.PathError).Err == syscall.ENOTDIR { + return false, nil + } return false, err } diff --git a/paths_test.go b/paths_test.go index 5cb38d1..b563aac 100644 --- a/paths_test.go +++ b/paths_test.go @@ -106,9 +106,9 @@ func TestPath(t *testing.T) { require.False(t, anotherFilePath.IsNotDir()) exist, err = anotherFilePath.ExistCheck() require.False(t, exist) - require.Error(t, err) + require.NoError(t, err) require.False(t, anotherFilePath.Exist()) - require.False(t, anotherFilePath.NotExist()) + require.True(t, anotherFilePath.NotExist()) list, err := folderPath.ReadDir() require.NoError(t, err) From 4b51e48a1b897dd6379519c707e14fb57ec8a900 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 18 May 2021 15:29:43 +0200 Subject: [PATCH 5/5] Always send coverage report --- .github/workflows/test.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 903aed6..655508a 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -35,9 +35,6 @@ jobs: run: go test -v ./... -coverprofile=coverage_unit.txt - name: Send unit tests coverage to Codecov - if: > - matrix.operating-system == 'ubuntu-latest' && - github.event_name == 'push' uses: codecov/codecov-action@v1 with: file: ./coverage_unit.txt