Skip to content

Commit 33adc4f

Browse files
authored
Merge pull request #38 from arduino/shorten-path-test-improve
Fixed short-path tests.
2 parents 08cf9b4 + bc69599 commit 33adc4f

File tree

3 files changed

+100
-2
lines changed

3 files changed

+100
-2
lines changed

paths_others_test.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
//
2+
// This file is part of PathsHelper library.
3+
//
4+
// Copyright 2025 Arduino AG (http://www.arduino.cc/)
5+
//
6+
// PathsHelper library is free software; you can redistribute it and/or modify
7+
// it under the terms of the GNU General Public License as published by
8+
// the Free Software Foundation; either version 2 of the License, or
9+
// (at your option) any later version.
10+
//
11+
// This program is distributed in the hope that it will be useful,
12+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
// GNU General Public License for more details.
15+
//
16+
// You should have received a copy of the GNU General Public License
17+
// along with this program; if not, write to the Free Software
18+
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
//
20+
// As a special exception, you may use this file as part of a free software
21+
// library without restriction. Specifically, if other files instantiate
22+
// templates or use macros or inline functions from this file, or you compile
23+
// this file and link it with other files to produce an executable, this
24+
// file does not by itself cause the resulting executable to be covered by
25+
// the GNU General Public License. This exception does not however
26+
// invalidate any other reasons why the executable file might be covered by
27+
// the GNU General Public License.
28+
//
29+
30+
//go:build !windows
31+
32+
package paths
33+
34+
import (
35+
"testing"
36+
37+
"github.com/stretchr/testify/require"
38+
)
39+
40+
func shorten(t *testing.T, longPath string) string {
41+
require.FailNow(t, "shorten is not implemented for this platform")
42+
return ""
43+
}

paths_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,8 @@ func TestEquivalentPaths(t *testing.T) {
339339

340340
if runtime.GOOS == "windows" {
341341
q := New("testdata", "fileset", "anotherFile")
342-
r := New("testdata", "fileset", "ANOTHE~1")
342+
r := New(shorten(t, q.String()))
343+
t.Log("SHORTENED PATH:", r.String())
343344
require.True(t, q.EquivalentTo(r))
344345
require.True(t, r.EquivalentTo(q))
345346
}
@@ -356,7 +357,9 @@ func TestCanonicalize(t *testing.T) {
356357
require.Equal(t, wd.Join("testdata", "fileset", "nonexistentFile").String(), p.String())
357358

358359
if runtime.GOOS == "windows" {
359-
q := New("testdata", "fileset", "ANOTHE~1").Canonical()
360+
qshort := New(shorten(t, New("testdata", "fileset", "anotherFile").String()))
361+
t.Log("SHORTENED PATH:", qshort.String())
362+
q := qshort.Canonical()
360363
require.Equal(t, wd.Join("testdata", "fileset", "anotherFile").String(), q.String())
361364

362365
r := New("c:\\").Canonical()

paths_windows_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
//
2+
// This file is part of PathsHelper library.
3+
//
4+
// Copyright 2025 Arduino AG (http://www.arduino.cc/)
5+
//
6+
// PathsHelper library is free software; you can redistribute it and/or modify
7+
// it under the terms of the GNU General Public License as published by
8+
// the Free Software Foundation; either version 2 of the License, or
9+
// (at your option) any later version.
10+
//
11+
// This program is distributed in the hope that it will be useful,
12+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
// GNU General Public License for more details.
15+
//
16+
// You should have received a copy of the GNU General Public License
17+
// along with this program; if not, write to the Free Software
18+
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
//
20+
// As a special exception, you may use this file as part of a free software
21+
// library without restriction. Specifically, if other files instantiate
22+
// templates or use macros or inline functions from this file, or you compile
23+
// this file and link it with other files to produce an executable, this
24+
// file does not by itself cause the resulting executable to be covered by
25+
// the GNU General Public License. This exception does not however
26+
// invalidate any other reasons why the executable file might be covered by
27+
// the GNU General Public License.
28+
//
29+
30+
//go:build windows
31+
32+
package paths
33+
34+
import (
35+
"testing"
36+
37+
"github.com/stretchr/testify/require"
38+
"golang.org/x/sys/windows"
39+
)
40+
41+
func shorten(t *testing.T, longPath string) string {
42+
var buf [4096]uint16
43+
shortPath := &buf[0]
44+
n, err := windows.GetShortPathName(windows.StringToUTF16Ptr(longPath), &buf[0], uint32(len(buf)))
45+
if n >= uint32(len(buf)) {
46+
buf2 := make([]uint16, n+1)
47+
shortPath = &buf2[0]
48+
_, err = windows.GetShortPathName(windows.StringToUTF16Ptr(longPath), &buf2[0], uint32(len(buf2)))
49+
}
50+
require.NoError(t, err, "GetShortPathName failed for %v", longPath)
51+
return windows.UTF16PtrToString(shortPath)
52+
}

0 commit comments

Comments
 (0)