72 lines
2.3 KiB
Go
72 lines
2.3 KiB
Go
package externalopen
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestOpenPathCommands(t *testing.T) {
|
|
cases := []struct {
|
|
goos string
|
|
path string
|
|
want commandCall
|
|
}{
|
|
{goos: "linux", path: "/vault/file.txt", want: commandCall{name: "xdg-open", args: []string{"/vault/file.txt"}}},
|
|
{goos: "darwin", path: "/vault/file.txt", want: commandCall{name: "open", args: []string{"/vault/file.txt"}}},
|
|
{goos: "windows", path: `C:\Vault\file.txt`, want: commandCall{name: "rundll32", args: []string{"url.dll,FileProtocolHandler", `C:\Vault\file.txt`}}},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.goos, func(t *testing.T) {
|
|
var got commandCall
|
|
svc := NewServiceFor(tc.goos, func(name string, args ...string) error {
|
|
got = commandCall{name: name, args: args}
|
|
return nil
|
|
})
|
|
if err := svc.OpenPath(tc.path); err != nil {
|
|
t.Fatalf("OpenPath: %v", err)
|
|
}
|
|
if !reflect.DeepEqual(got, tc.want) {
|
|
t.Fatalf("command = %#v, want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestShowInFolderCommands(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
goos string
|
|
path string
|
|
isDir bool
|
|
want commandCall
|
|
}{
|
|
{name: "linux file opens parent", goos: "linux", path: "/vault/Docs/file.txt", want: commandCall{name: "xdg-open", args: []string{"/vault/Docs"}}},
|
|
{name: "linux dir opens dir", goos: "linux", path: "/vault/Docs", isDir: true, want: commandCall{name: "xdg-open", args: []string{"/vault/Docs"}}},
|
|
{name: "darwin reveal", goos: "darwin", path: "/vault/file.txt", want: commandCall{name: "open", args: []string{"-R", "/vault/file.txt"}}},
|
|
{name: "windows select file", goos: "windows", path: `C:\Vault\file.txt`, want: commandCall{name: "explorer", args: []string{`/select,C:\Vault\file.txt`}}},
|
|
{name: "windows open dir", goos: "windows", path: `C:\Vault\Docs`, isDir: true, want: commandCall{name: "explorer", args: []string{`C:\Vault\Docs`}}},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
var got commandCall
|
|
svc := NewServiceFor(tc.goos, func(name string, args ...string) error {
|
|
got = commandCall{name: name, args: args}
|
|
return nil
|
|
})
|
|
if err := svc.ShowInFolder(tc.path, tc.isDir); err != nil {
|
|
t.Fatalf("ShowInFolder: %v", err)
|
|
}
|
|
if !reflect.DeepEqual(got, tc.want) {
|
|
t.Fatalf("command = %#v, want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
type commandCall struct {
|
|
name string
|
|
args []string
|
|
}
|