mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-03 22:02:01 +08:00
Merge pull request #4188 from TheGB0077/patch-2
[v3] Normalize Windows paths on system Dialogs invocations
This commit is contained in:
commit
0a05348220
@ -112,6 +112,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Fixed initially-hidden menu items by [@IanVS](https://github.com/IanVS) in [#4116](https://github.com/wailsapp/wails/pull/4116)
|
||||
- Fixed assetFileServer not serving `.html` files when non-extension request when `[request]` doesn't exist but `[request].html` does
|
||||
- Fixed icon generation paths by [@robin-samuel](https://github.com/robin-samuel) in [#4125](https://github.com/wailsapp/wails/pull/4125)
|
||||
- Fixed Dialogs runtime function returning escaped paths on Windows by [TheGB0077](https://github.com/TheGB0077) in [#4188](https://github.com/wailsapp/wails/pull/4188)
|
||||
|
||||
### Changed
|
||||
|
||||
|
@ -247,7 +247,20 @@ func showCfdDialog(newDlg func() (cfd.Dialog, error), isMultiSelect bool) (any,
|
||||
}()
|
||||
|
||||
if multi, _ := dlg.(cfd.OpenMultipleFilesDialog); multi != nil && isMultiSelect {
|
||||
return multi.ShowAndGetResults()
|
||||
paths, err := multi.ShowAndGetResults()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for i, path := range paths {
|
||||
paths[i] = filepath.Clean(path)
|
||||
}
|
||||
return paths, nil
|
||||
}
|
||||
return dlg.ShowAndGetResult()
|
||||
|
||||
path, err := dlg.ShowAndGetResult()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return filepath.Clean(path), nil
|
||||
}
|
||||
|
57
v3/pkg/application/dialogs_windows_test.go
Normal file
57
v3/pkg/application/dialogs_windows_test.go
Normal file
@ -0,0 +1,57 @@
|
||||
//go:build windows
|
||||
|
||||
package application_test
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
func TestCleanPath(t *testing.T) {
|
||||
i := is.New(t)
|
||||
tests := []struct {
|
||||
name string
|
||||
inputPath string
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "path with double separators",
|
||||
inputPath: `C:\\temp\\folder`,
|
||||
expected: `C:\temp\folder`,
|
||||
},
|
||||
{
|
||||
name: "path with forward slashes",
|
||||
inputPath: `C://temp//folder`,
|
||||
expected: `C:\temp\folder`,
|
||||
},
|
||||
{
|
||||
name: "path with trailing separator",
|
||||
inputPath: `C:\\temp\\folder\\`,
|
||||
expected: `C:\temp\folder`,
|
||||
},
|
||||
{
|
||||
name: "path with escaped tab character",
|
||||
inputPath: `C:\\Users\\test\\tab.txt`,
|
||||
expected: `C:\Users\test\tab.txt`,
|
||||
},
|
||||
{
|
||||
name: "newline character",
|
||||
inputPath: `C:\\Users\\test\\newline\\n.txt`,
|
||||
expected: `C:\Users\test\newline\n.txt`,
|
||||
},
|
||||
{
|
||||
name: "UNC path with multiple separators",
|
||||
inputPath: `\\\\\\\\host\\share\\test.txt`,
|
||||
expected: `\\\\host\share\test.txt`,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
cleaned := filepath.Clean(tt.inputPath)
|
||||
i.Equal(cleaned, tt.expected)
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user