Add autofocus mode.
This commit is contained in:
1 parent
b232c1eebb
commit
3e2429b8a5
19 files changed
+279
-8
No files matched your search
@@ -753,3 +753,56 @@ func TestStickyBrowserModeSurvivesNavigationChromeAndWindowSuspension(t *testing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestStructuralNavigationAutomaticFocus(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
name, role string
|
||||
enabled bool
|
||||
origin review.NavigationOrigin
|
||||
sticky, want review.DocumentMode
|
||||
}{
|
||||
{name: "default entry", role: "entry", want: review.BrowseMode},
|
||||
{name: "entry opt in", role: "entry", enabled: true, want: review.FocusMode},
|
||||
{name: "combo opt in", role: "combo box", enabled: true, want: review.FocusMode},
|
||||
{name: "heading stays browse", role: "heading", enabled: true, want: review.BrowseMode},
|
||||
{name: "link stays browse", role: "link", enabled: true, want: review.BrowseMode},
|
||||
{name: "sticky browse", role: "entry", enabled: true, sticky: review.BrowseMode, want: review.BrowseMode},
|
||||
{name: "sticky focus", role: "heading", enabled: true, sticky: review.FocusMode, want: review.FocusMode},
|
||||
{name: "caret unchanged", role: "entry", enabled: true, origin: review.CaretNavigation, want: review.BrowseMode},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
keys := &modeKeys{}
|
||||
browser := newBrowserModeController(nil, keys, nil)
|
||||
browser.settings = func() review.ModeSettings {
|
||||
settings := review.DefaultModeSettings()
|
||||
settings.StructuralTriggersFocus = tc.enabled
|
||||
return settings
|
||||
}
|
||||
owner := modeContext(t, tc.role, false)
|
||||
browser.stickyModes[owner.TopLevel.ID().BusName] = tc.sticky
|
||||
origin := tc.origin
|
||||
if origin == review.NativeNavigation {
|
||||
origin = review.StructuralNavigation
|
||||
}
|
||||
result := review.Result{DocumentPosition: review.DocumentPosition{Document: owner.TopLevel, Snapshot: owner.Ancestors[0], Origin: origin}, DocumentCaretContext: owner.Ancestors}
|
||||
queue := &fakeSpeechQueue{spoken: make(chan string, 4)}
|
||||
browser.navigated(result.DocumentPosition, owner.TopLevel.ID())
|
||||
browser.navigationMode(result, queue)
|
||||
if browser.mode != tc.want || keys.enabled != (tc.want == review.BrowseMode) {
|
||||
t.Fatalf("mode=%v browse keys=%t, want %v", browser.mode, keys.enabled, tc.want)
|
||||
}
|
||||
if tc.want == review.FocusMode && tc.sticky == review.InactiveMode {
|
||||
select {
|
||||
case message := <-queue.spoken:
|
||||
if message != "Focus mode" {
|
||||
t.Fatalf("announcement=%q", message)
|
||||
}
|
||||
default:
|
||||
t.Fatal("missing focus mode announcement")
|
||||
}
|
||||
} else if len(queue.spoken) != 0 {
|
||||
t.Fatal("unnecessary mode announcement")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user