feat: add portable directory safeguards
This commit is contained in:
@@ -618,6 +618,48 @@ func TestShellSettingsCanBeRestored(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestShellTracksPortableSettingsDirectoriesAndRestoresThem(t *testing.T) {
|
||||
shell := NewShell(material.NewTheme())
|
||||
root := t.TempDir()
|
||||
portableData := filepath.Join(root, "user_data_dirs")
|
||||
portableLogs := filepath.Join(root, "logs")
|
||||
shell.SetPortableDirectoryDefaults(portableData, portableLogs)
|
||||
shell.SetSettings(SettingsState{DefaultDir: portableData, DefaultDirMode: "portable", LogDir: portableLogs, LogDirMode: "portable", RemoteDebugStartPort: 9666, CloseOnExit: true})
|
||||
shell.dataDir.SetText(filepath.Join(root, "custom"))
|
||||
state, err := shell.settingsState()
|
||||
if err != nil || state.DefaultDirMode != "custom" {
|
||||
t.Fatalf("custom settings state = %#v, error = %v", state, err)
|
||||
}
|
||||
shell.restorePortableDirectory(PathDefaultUserData)
|
||||
state, err = shell.settingsState()
|
||||
if err != nil || state.DefaultDir != portableData || state.DefaultDirMode != "portable" {
|
||||
t.Fatalf("restored settings state = %#v, error = %v", state, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShellRejectsDuplicateInstanceNamesButAllowsEditingSelf(t *testing.T) {
|
||||
shell := NewShell(material.NewTheme())
|
||||
shell.SetInstances([]InstanceRow{
|
||||
{ID: "one", Name: "Audit", Browser: "Chrome", UserDataDir: `C:\profiles\one`, Status: "已退出", PreferredRemoteDebugPort: 9666},
|
||||
{ID: "two", Name: "投放", Browser: "Edge", UserDataDir: `C:\profiles\two`, Status: "已退出", PreferredRemoteDebugPort: 9667},
|
||||
})
|
||||
shell.instanceName.SetText("AUDIT")
|
||||
shell.instanceDir.SetText(`C:\profiles\three`)
|
||||
shell.instancePort.SetText("9668")
|
||||
shell.createInstanceFromForm()
|
||||
if len(shell.rows) != 2 || !strings.Contains(shell.formFeedback, "实例名称") {
|
||||
t.Fatalf("duplicate instance create = rows %#v, feedback %q", shell.rows, shell.formFeedback)
|
||||
}
|
||||
shell.beginEdit("one")
|
||||
shell.editName.SetText("Audit")
|
||||
shell.editURL.SetText("https://example.com")
|
||||
shell.saveEdit()
|
||||
row, _ := shell.instanceRow("one")
|
||||
if row.TargetURL != "https://example.com" || shell.editingID != "" {
|
||||
t.Fatalf("self edit = %#v, feedback %q", row, shell.editFeedback)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShellNormalizesRemoteDebugStartPort(t *testing.T) {
|
||||
shell := NewShell(material.NewTheme())
|
||||
shell.remoteDebugPort.SetText("")
|
||||
@@ -1011,10 +1053,15 @@ func TestShellUsesDistinctDefaultDirectoriesForNewInstances(t *testing.T) {
|
||||
shell.beginCreate()
|
||||
firstID := shell.pendingCreateID
|
||||
firstDir := shell.instanceDir.Text()
|
||||
if firstID == "" || firstDir != filepath.Join(root, firstID) {
|
||||
if firstID == "" || filepath.Dir(firstDir) != root || !strings.HasPrefix(filepath.Base(firstDir), "instance-新实例-") {
|
||||
t.Fatalf("first default directory = %q for id %q", firstDir, firstID)
|
||||
}
|
||||
shell.instanceName.SetText("第一个实例")
|
||||
shell.syncDefaultCreateDirectory()
|
||||
firstDir = shell.instanceDir.Text()
|
||||
if !strings.HasPrefix(filepath.Base(firstDir), "instance-第一个实例-") {
|
||||
t.Fatalf("named default directory = %q", firstDir)
|
||||
}
|
||||
shell.createInstanceFromForm()
|
||||
created := shell.rows[len(shell.rows)-1]
|
||||
if created.ID != firstID || created.UserDataDir != firstDir {
|
||||
@@ -1024,7 +1071,7 @@ func TestShellUsesDistinctDefaultDirectoriesForNewInstances(t *testing.T) {
|
||||
shell.beginCreate()
|
||||
secondID := shell.pendingCreateID
|
||||
secondDir := shell.instanceDir.Text()
|
||||
if secondID == "" || secondID == firstID || secondDir != filepath.Join(root, secondID) || secondDir == firstDir {
|
||||
if secondID == "" || secondID == firstID || filepath.Dir(secondDir) != root || secondDir == firstDir {
|
||||
t.Fatalf("second default directory = %q for id %q, first %q", secondDir, secondID, firstDir)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user