v0.29.0 21b3150

profile_test.go RawHistoryFolder

1package runtimeprofile
2
3import (
4	"errors"
5	"testing"
6
7	"github.com/stretchr/testify/require"
8)
9
10func TestResolve_ProdPreservesSharedLayout(t *testing.T) {
11	profile, err := Resolve(ResolveInput{
12		Env:    func(string) string { return "" },
13		Engine: "webkit",
14		CWD:    func() (string, error) { return "/repo", nil },
15		Base: BasePaths{
16			ConfigHome: "/home/u/.config/dumber",
17			DataHome:   "/home/u/.local/share/dumber",
18			StateHome:  "/home/u/.local/state/dumber",
19			CacheHome:  "/home/u/.cache/dumber",
20		},
21	})
22	require.NoError(t, err)
23	require.Equal(t, ModeProd, profile.Mode)
24	require.Equal(t, "/home/u/.config/dumber", profile.Shared.ConfigDir)
25	require.Equal(t, "/home/u/.local/share/dumber", profile.Shared.DataDir)
26	require.Equal(t, "/home/u/.local/state/dumber", profile.Shared.StateDir)
27	require.Equal(t, "/home/u/.cache/dumber", profile.Shared.CacheDir)
28	require.Equal(t, "/home/u/.local/state/dumber/logs", profile.Shared.LogDir)
29	require.Equal(t, "/home/u/.local/share/dumber/cef_user_data", profile.CEFUserDataDir())
30	require.Equal(t, "/home/u/.local/share/dumber", profile.WebKitDataDir())
31	require.Equal(t, "/home/u/.local/state/dumber/webkit-cache", profile.WebKitCacheDir())
32}
33
34func TestResolve_DevCEF_SeparatesSharedEngineAndIPC(t *testing.T) {
35	profile, err := Resolve(ResolveInput{
36		Env: func(key string) string {
37			if key == "ENV" {
38				return "dev"
39			}
40			return ""
41		},
42		Engine: "cef",
43		CWD:    func() (string, error) { return "/repo", nil },
44	})
45	require.NoError(t, err)
46	require.Equal(t, ModeDev, profile.Mode)
47	require.Equal(t, "/repo/.dev/dumber/config", profile.Shared.ConfigDir)
48	require.Equal(t, "/repo/.dev/dumber/data", profile.Shared.DataDir)
49	require.Equal(t, "/repo/.dev/dumber/engines/cef/data", profile.CEFUserDataDir())
50	require.Equal(t, "/repo/.dev/dumber/runtime/cef/browser-launch.sock", profile.IPC.BrowserLaunchSocket)
51}
52
53func TestResolve_DevWebKitAndCEF_HaveDifferentTechnicalNamespaces(t *testing.T) {
54	devEnv := func(key string) string {
55		if key == "ENV" {
56			return "dev"
57		}
58		return ""
59	}
60	repoCWD := func() (string, error) { return "/repo", nil }
61
62	cefProfile, err := Resolve(ResolveInput{Env: devEnv, Engine: "cef", CWD: repoCWD})
63	require.NoError(t, err)
64	wkProfile, err := Resolve(ResolveInput{Env: devEnv, Engine: "webkit", CWD: repoCWD})
65	require.NoError(t, err)
66
67	require.NotEqual(t, cefProfile.EnginePaths.RootDir, wkProfile.EnginePaths.RootDir)
68	require.NotEqual(t, cefProfile.IPC.RuntimeDir, wkProfile.IPC.RuntimeDir)
69	require.NotEqual(t, cefProfile.IPC.BrowserLaunchSocket, wkProfile.IPC.BrowserLaunchSocket)
70}
71
72func TestResolve_DefaultsEmptyEngineToWebKit(t *testing.T) {
73	profile, err := Resolve(ResolveInput{
74		Env:  func(string) string { return "" },
75		CWD:  func() (string, error) { return "/repo", nil },
76		Base: BasePaths{StateHome: "/state", DataHome: "/data"},
77	})
78	require.NoError(t, err)
79	require.Equal(t, "webkit", profile.Engine)
80	require.Equal(t, "/state/runtime/webkit/browser-launch.sock", profile.IPC.BrowserLaunchSocket)
81}
82
83func TestResolve_NormalizesEngineWhitespaceAndCase(t *testing.T) {
84	profile, err := Resolve(ResolveInput{
85		Env:    func(string) string { return "" },
86		Engine: "  CEF ",
87		CWD:    func() (string, error) { return "/repo", nil },
88		Base:   BasePaths{StateHome: "/state", DataHome: "/data"},
89	})
90	require.NoError(t, err)
91	require.Equal(t, "cef", profile.Engine)
92	require.Equal(t, "/state/runtime/cef/browser-launch.sock", profile.IPC.BrowserLaunchSocket)
93}
94
95func TestResolve_DefaultsUnknownEngineToWebKit(t *testing.T) {
96	profile, err := Resolve(ResolveInput{
97		Env:    func(string) string { return "" },
98		Engine: "wekbit",
99		CWD:    func() (string, error) { return "/repo", nil },
100		Base:   BasePaths{StateHome: "/state", DataHome: "/data"},
101	})
102	require.NoError(t, err)
103	require.Equal(t, "webkit", profile.Engine)
104	require.Equal(t, "/state/runtime/webkit/browser-launch.sock", profile.IPC.BrowserLaunchSocket)
105}
106
107func TestResolve_DevFailsWhenCWDUnavailable(t *testing.T) {
108	want := errors.New("boom")
109	_, err := Resolve(ResolveInput{
110		Env: func(key string) string {
111			if key == "ENV" {
112				return "dev"
113			}
114			return ""
115		},
116		Engine: "cef",
117		CWD:    func() (string, error) { return "", want },
118	})
119	require.ErrorIs(t, err, want)
120}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close