diff --git a/internal/tui/core/workspace/resolver_test.go b/internal/tui/core/workspace/resolver_test.go index 775a9ba8..790150b3 100644 --- a/internal/tui/core/workspace/resolver_test.go +++ b/internal/tui/core/workspace/resolver_test.go @@ -29,6 +29,16 @@ func TestResolveWorkspacePath(t *testing.T) { if resolved != filepath.Clean(base) { t.Fatalf("expected base directory for empty requested path, got %q", resolved) } + + // Empty base falls back to os.Getwd(). + resolved, err = ResolveWorkspacePath("", ".") + if err != nil { + t.Fatalf("ResolveWorkspacePath(empty base) error = %v", err) + } + cwd, _ := os.Getwd() + if resolved != filepath.Clean(cwd) { + t.Fatalf("expected current directory for empty base, got %q", resolved) + } } func TestResolveWorkspacePathErrors(t *testing.T) { diff --git a/internal/tui/services/file_service.go b/internal/tui/services/file_service.go index 21b59900..530f04ca 100644 --- a/internal/tui/services/file_service.go +++ b/internal/tui/services/file_service.go @@ -45,6 +45,9 @@ func ResolveWorkspaceDirectory(workdir string) string { if workdir == "" { return "" } + if strings.ContainsRune(workdir, '\x00') { + return "" + } absolute, err := filepath.Abs(workdir) if err != nil { return "" diff --git a/internal/tui/update_test.go b/internal/tui/update_test.go index ed307cc0..32c932e8 100644 --- a/internal/tui/update_test.go +++ b/internal/tui/update_test.go @@ -7,6 +7,7 @@ import ( "os" "path/filepath" "regexp" + goruntime "runtime" "strings" "sync" "testing" @@ -2481,7 +2482,14 @@ func TestWorkspaceCommandAndFileReferenceFlow(t *testing.T) { if !strings.Contains(menu, shellMenuTitle) || !strings.Contains(menu, workspaceCommandUsage) { t.Fatalf("expected shell hint menu, got %q", menu) } - if strings.Count(menu, "\n") > 3 { + // Shell menu should stay reasonably compact (title + one item row + padding). + // Allow extra newlines on Windows where long paths with non-ASCII characters + // may cause lipgloss to wrap the description line. + maxShellMenuLines := 4 + if goruntime.GOOS == "windows" { + maxShellMenuLines = 6 + } + if strings.Count(menu, "\n") > maxShellMenuLines { t.Fatalf("expected compact shell menu, got %q", menu) } }