-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathshellmenu_test.go
More file actions
108 lines (104 loc) · 3.5 KB
/
Copy pathshellmenu_test.go
File metadata and controls
108 lines (104 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package main
import (
"os"
"strings"
"testing"
)
// TestShellContextMenu 验证系统右键菜单枚举(含第三方扩展项)
func TestShellContextMenu(t *testing.T) {
app := NewApp()
items, err := app.GetShellContextMenu([]string{`D:\BaiduNetdiskDownload`})
if err != nil {
t.Fatalf("GetShellContextMenu: %v", err)
}
if len(items) == 0 {
t.Fatal("菜单为空")
}
// 应包含系统标准项与常见第三方项
joined := []string{}
var walk func(list []*ShellMenuItem)
walk = func(list []*ShellMenuItem) {
for _, it := range list {
joined = append(joined, it.Name)
if len(it.Children) > 0 {
walk(it.Children)
}
}
}
walk(items)
all := strings.Join(joined, "|")
t.Logf("菜单共 %d 项(含子菜单 %d 项):%s", len(items), len(joined), all)
found := func(s string) bool { return strings.Contains(all, s) }
// 标准项(内置菜单也有,但 shell 菜单里应存在)
if !found("发送到") {
t.Log("警告:未找到'发送到'(可能被系统/区域设置过滤)")
}
// 第三方扩展(7-Zip / 火绒 / Everything / Git 等任一存在即说明扩展菜单生效)
thirdParty := found("7z") || found("zip") || found("火绒") || found("Everything") ||
found("Git") || found("终端") || found("OneDrive") || found("ChatGPT")
if !thirdParty {
t.Log("警告:未检测到明显的第三方扩展项(当前系统可能未安装扩展)")
}
// 内置动词应被过滤(cut/copy/paste/delete/rename/properties)
for _, banned := range []string{"剪切", "复制", "粘贴", "删除", "重命名", "属性"} {
if found(banned) {
t.Logf("注意:'%s' 出现在 shell 菜单(未过滤干净,非致命)", banned)
}
}
t.Log("SHELL_MENU_OK")
}
// TestShellContextMenuMulti 验证多选时 shell 菜单仍包含第三方扩展与压缩项
// (回归:多选右键曾只显示内置的剪切/复制/删除)
func TestShellContextMenuMulti(t *testing.T) {
// 用系统目录中确定存在的文件(目录条目数不可靠)
candidates := []string{
`C:\Windows\System32\notepad.exe`,
`C:\Windows\System32\calc.exe`,
`C:\Windows\System32\mspaint.exe`,
`C:\Windows\System32\cmd.exe`,
`C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe`,
}
paths := []string{}
for _, c := range candidates {
if _, err := os.Stat(c); err == nil {
paths = append(paths, c)
}
if len(paths) == 2 {
break
}
}
if len(paths) < 2 {
t.Skip("找不到两个确定存在的测试文件")
}
t.Logf("多选测试文件:%v", paths)
app := NewApp()
items, err := app.GetShellContextMenu(paths)
if err != nil {
t.Fatalf("GetShellContextMenu(多选): %v", err)
}
if len(items) == 0 {
t.Fatal("多选菜单为空")
}
joined := []string{}
var walk func(list []*ShellMenuItem)
walk = func(list []*ShellMenuItem) {
for _, it := range list {
joined = append(joined, it.Name)
if len(it.Children) > 0 {
walk(it.Children)
}
}
}
walk(items)
all := strings.Join(joined, "|")
t.Logf("多选菜单共 %d 项(含子菜单 %d 项):%s", len(items), len(joined), all)
// 第三方扩展应出现在多选菜单(7-Zip 多选时提供"添加到压缩文件..."等)
thirdParty := strings.Contains(strings.ToLower(all), "7-zip") ||
strings.Contains(strings.ToLower(all), "压缩") ||
strings.Contains(strings.ToLower(all), "火绒") ||
strings.Contains(strings.ToLower(all), "everything")
if !thirdParty {
t.Log("警告:多选菜单未检测到第三方扩展(当前系统可能未安装扩展)")
}
t.Log("SHELL_MENU_MULTI_OK")
}