v0.30.0 eb3068f

messaging_test.go RawHistoryFolder

1package webkit
2
3import (
4	"context"
5	"sync"
6	"testing"
7
8	"github.com/stretchr/testify/require"
9)
10
11type messageRouterContextKey struct{}
12
13func TestMessageRouterBaseContextConcurrentUpdate(t *testing.T) {
14	t.Parallel()
15
16	router := NewMessageRouter(context.Background())
17	var wg sync.WaitGroup
18	wg.Add(2)
19
20	go func() {
21		defer wg.Done()
22		for i := range 1000 {
23			router.SetBaseContext(context.WithValue(context.Background(), messageRouterContextKey{}, i))
24		}
25	}()
26	go func() {
27		defer wg.Done()
28		for range 1000 {
29			if router.baseContext() == nil {
30				t.Error("base context must never be nil")
31			}
32		}
33	}()
34
35	wg.Wait()
36}
37
38func TestIsTrustedBridgeURI(t *testing.T) {
39	t.Parallel()
40
41	trusted := []string{
42		"dumb://history",
43		"dumb://favorites",
44		"dumb://config",
45		"dumb://error",
46		"dumb://crash",
47		"dumb://history/path?cursor=1",
48	}
49	for _, raw := range trusted {
50		t.Run(raw, func(t *testing.T) {
51			t.Parallel()
52			require.True(t, isTrustedBridgeURI(raw))
53		})
54	}
55
56	untrusted := []string{
57		"",
58		"https://example.com",
59		"http://localhost",
60		"file:///tmp/history.html",
61		"dumb://evil/history",
62		"dumb://example.com",
63		"javascript:alert(1)",
64	}
65	for _, raw := range untrusted {
66		t.Run(raw, func(t *testing.T) {
67			t.Parallel()
68			require.False(t, isTrustedBridgeURI(raw))
69		})
70	}
71}

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