feat: add proxy labels and default profiles
This commit is contained in:
+67
-13
@@ -68,13 +68,16 @@ func TestShellInstanceRowsContainRequiredColumnsAndIndependentActionControls(t *
|
||||
}
|
||||
|
||||
func TestInstanceListColumnWeightsPrioritizeDirectoryAndCompactAction(t *testing.T) {
|
||||
got := instanceNameColumnWeight + instanceBrowserColumnWeight + instanceDirectoryColumnWeight + instancePortColumnWeight + instanceStatusColumnWeight + instanceActionColumnWeight
|
||||
got := instanceNameColumnWeight + instanceBrowserColumnWeight + instanceDirectoryColumnWeight + instanceProxyColumnWeight + instancePortColumnWeight + instanceStatusColumnWeight + instanceActionColumnWeight
|
||||
if got != 100 {
|
||||
t.Fatalf("instance column weights = %d, want 100", got)
|
||||
}
|
||||
if instanceDirectoryColumnWeight <= instanceNameColumnWeight {
|
||||
t.Fatal("user data directory must have the widest instance-list column")
|
||||
}
|
||||
if instanceProxyColumnWeight >= instanceDirectoryColumnWeight {
|
||||
t.Fatal("proxy name must remain a compact display-only column")
|
||||
}
|
||||
if instanceActionColumnWeight <= instanceStatusColumnWeight {
|
||||
t.Fatal("actions column must fit both compact icon commands")
|
||||
}
|
||||
@@ -716,8 +719,11 @@ func TestShellRequestsDiscardConfirmationForDirtyEdit(t *testing.T) {
|
||||
func TestShellCreatesAndEditsInstanceProxySelection(t *testing.T) {
|
||||
shell := NewShell(material.NewTheme())
|
||||
shell.SetProxies([]ProxyOption{{ID: "proxy-sg", Name: "新加坡", Server: "http://127.0.0.1:8080"}})
|
||||
if label := shell.proxyLabel("proxy-sg"); label != "http://127.0.0.1:8080" {
|
||||
t.Fatalf("proxy label = %q, want complete proxy address", label)
|
||||
if label := shell.proxyLabel("proxy-sg"); label != "新加坡 · http://127.0.0.1:8080" {
|
||||
t.Fatalf("proxy label = %q, want name and complete proxy address", label)
|
||||
}
|
||||
if display := shell.proxyDisplayName("proxy-sg"); display != "新加坡" {
|
||||
t.Fatalf("proxy display name = %q", display)
|
||||
}
|
||||
shell.instanceName.SetText("新实例")
|
||||
shell.instanceDir.SetText(t.TempDir())
|
||||
@@ -741,6 +747,7 @@ func TestShellPreventsDeletingReferencedProxy(t *testing.T) {
|
||||
shell.SetProxies([]ProxyOption{{ID: "proxy-sg", Name: "新加坡", Server: "http://127.0.0.1:8080"}})
|
||||
shell.rows[0].ProxyID = "proxy-sg"
|
||||
shell.settingsProxyID = "proxy-sg"
|
||||
shell.proxyName.SetText("新加坡")
|
||||
shell.proxyServer.SetText("http://127.0.0.1:8080")
|
||||
changes := 0
|
||||
shell.OnProxiesChanged(func([]ProxyOption) { changes++ })
|
||||
@@ -754,13 +761,13 @@ func TestShellPreventsDeletingReferencedProxy(t *testing.T) {
|
||||
t.Fatalf("pending proxy deletion = %q", shell.pendingProxyDelete)
|
||||
}
|
||||
shell.cancelProxyDelete()
|
||||
if shell.pendingProxyDelete != "" || len(shell.proxies) != 1 || changes != 0 || shell.settingsProxyID != "proxy-sg" || shell.proxyServer.Text() != "http://127.0.0.1:8080" {
|
||||
t.Fatalf("cancelled delete state = proxies %#v, changes %d, selection %q, server %q", shell.proxies, changes, shell.settingsProxyID, shell.proxyServer.Text())
|
||||
if shell.pendingProxyDelete != "" || len(shell.proxies) != 1 || changes != 0 || shell.settingsProxyID != "proxy-sg" || shell.proxyName.Text() != "新加坡" || shell.proxyServer.Text() != "http://127.0.0.1:8080" {
|
||||
t.Fatalf("cancelled delete state = proxies %#v, changes %d, selection %q, name %q, server %q", shell.proxies, changes, shell.settingsProxyID, shell.proxyName.Text(), shell.proxyServer.Text())
|
||||
}
|
||||
shell.requestProxyDelete()
|
||||
shell.confirmProxyDelete()
|
||||
if len(shell.proxies) != 0 || changes != 1 || shell.settingsProxyID != "" || shell.proxyServer.Text() != "" {
|
||||
t.Fatalf("unreferenced delete state = proxies %#v, changes %d, selection %q, server %q", shell.proxies, changes, shell.settingsProxyID, shell.proxyServer.Text())
|
||||
if len(shell.proxies) != 0 || changes != 1 || shell.settingsProxyID != "" || shell.proxyName.Text() != "" || shell.proxyServer.Text() != "" {
|
||||
t.Fatalf("unreferenced delete state = proxies %#v, changes %d, selection %q, name %q, server %q", shell.proxies, changes, shell.settingsProxyID, shell.proxyName.Text(), shell.proxyServer.Text())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -772,29 +779,76 @@ func TestShellSavesProxyFromAddressPicker(t *testing.T) {
|
||||
|
||||
shell.proxyPicker.target = proxyPickerSettings
|
||||
shell.selectPickerProxy("proxy-sg")
|
||||
if shell.settingsProxyID != "proxy-sg" || shell.proxyServer.Text() != "http://127.0.0.1:8080" {
|
||||
t.Fatalf("selected proxy = %q, server %q", shell.settingsProxyID, shell.proxyServer.Text())
|
||||
if shell.settingsProxyID != "proxy-sg" || shell.proxyName.Text() != "旧名称" || shell.proxyServer.Text() != "http://127.0.0.1:8080" {
|
||||
t.Fatalf("selected proxy = %q, name %q, server %q", shell.settingsProxyID, shell.proxyName.Text(), shell.proxyServer.Text())
|
||||
}
|
||||
|
||||
shell.proxyName.SetText("新加坡出口")
|
||||
shell.proxyServer.SetText("http://127.0.0.1:8081")
|
||||
shell.saveProxy()
|
||||
if len(shell.proxies) != 1 || shell.proxies[0].ID != "proxy-sg" || shell.proxies[0].Name != "http://127.0.0.1:8081" || shell.proxies[0].Server != "http://127.0.0.1:8081" || changes != 1 {
|
||||
if len(shell.proxies) != 1 || shell.proxies[0].ID != "proxy-sg" || shell.proxies[0].Name != "新加坡出口" || shell.proxies[0].Server != "http://127.0.0.1:8081" || changes != 1 {
|
||||
t.Fatalf("updated proxy = %#v, changes %d", shell.proxies, changes)
|
||||
}
|
||||
if display := shell.proxyDisplayName("proxy-sg"); display != "新加坡出口" {
|
||||
t.Fatalf("updated proxy display name = %q", display)
|
||||
}
|
||||
|
||||
shell.proxyPicker.target = proxyPickerSettings
|
||||
shell.selectPickerProxy("")
|
||||
if shell.settingsProxyID != "" || shell.proxyServer.Text() != "" {
|
||||
t.Fatalf("new proxy state = id %q, server %q", shell.settingsProxyID, shell.proxyServer.Text())
|
||||
if shell.settingsProxyID != "" || shell.proxyName.Text() != "" || shell.proxyServer.Text() != "" {
|
||||
t.Fatalf("new proxy state = id %q, name %q, server %q", shell.settingsProxyID, shell.proxyName.Text(), shell.proxyServer.Text())
|
||||
}
|
||||
|
||||
shell.proxyName.SetText("东京出口")
|
||||
shell.proxyServer.SetText("http://127.0.0.1:8082")
|
||||
shell.saveProxy()
|
||||
if len(shell.proxies) != 2 || shell.settingsProxyID == "" || shell.proxies[1].Name != "http://127.0.0.1:8082" || shell.proxies[1].Server != "http://127.0.0.1:8082" || changes != 2 {
|
||||
if len(shell.proxies) != 2 || shell.settingsProxyID == "" || shell.proxies[1].Name != "东京出口" || shell.proxies[1].Server != "http://127.0.0.1:8082" || changes != 2 {
|
||||
t.Fatalf("created proxy = %#v, selected %q, changes %d", shell.proxies, shell.settingsProxyID, changes)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShellRejectsDuplicateProxyNameWithoutReplacingSelectedProfile(t *testing.T) {
|
||||
shell := NewShell(material.NewTheme())
|
||||
shell.SetProxies([]ProxyOption{
|
||||
{ID: "proxy-sg", Name: "新加坡出口", Server: "http://127.0.0.1:8080"},
|
||||
{ID: "proxy-jp", Name: "东京出口", Server: "http://127.0.0.1:8081"},
|
||||
})
|
||||
shell.proxyPicker.target = proxyPickerSettings
|
||||
shell.selectPickerProxy("proxy-jp")
|
||||
shell.proxyName.SetText(" 新加坡出口 ")
|
||||
shell.proxyServer.SetText("http://127.0.0.1:8082")
|
||||
shell.saveProxy()
|
||||
if !strings.Contains(shell.proxyFeedback, "名称已存在") || shell.proxies[1].Name != "东京出口" || shell.proxies[1].Server != "http://127.0.0.1:8081" {
|
||||
t.Fatalf("duplicate name state = proxies %#v, feedback %q", shell.proxies, shell.proxyFeedback)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShellUsesDistinctDefaultDirectoriesForNewInstances(t *testing.T) {
|
||||
shell := NewShell(material.NewTheme())
|
||||
root := filepath.Join(t.TempDir(), "user_data_dirs")
|
||||
shell.SetDefaultInstanceUserDataRoot(root)
|
||||
|
||||
shell.beginCreate()
|
||||
firstID := shell.pendingCreateID
|
||||
firstDir := shell.instanceDir.Text()
|
||||
if firstID == "" || firstDir != filepath.Join(root, firstID) {
|
||||
t.Fatalf("first default directory = %q for id %q", firstDir, firstID)
|
||||
}
|
||||
shell.instanceName.SetText("第一个实例")
|
||||
shell.createInstanceFromForm()
|
||||
created := shell.rows[len(shell.rows)-1]
|
||||
if created.ID != firstID || created.UserDataDir != firstDir {
|
||||
t.Fatalf("created default instance = %#v", created)
|
||||
}
|
||||
|
||||
shell.beginCreate()
|
||||
secondID := shell.pendingCreateID
|
||||
secondDir := shell.instanceDir.Text()
|
||||
if secondID == "" || secondID == firstID || secondDir != filepath.Join(root, secondID) || secondDir == firstDir {
|
||||
t.Fatalf("second default directory = %q for id %q, first %q", secondDir, secondID, firstDir)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShellMarksUnexpectedManagedExitAndRestoresStartFocus(t *testing.T) {
|
||||
shell := NewShell(material.NewTheme())
|
||||
target := shell.rows[0]
|
||||
|
||||
Reference in New Issue
Block a user