// Copyright (c) 2026 Storm Dragon // SPDX-License-Identifier: GPL-3.0-or-later package interaction import "testing" func TestHiddenControlsRetainDraftAndRemainOutsideBothTabOrders(t *testing.T) { session, err := New_session(test_form()) if err != nil { t.Fatal(err) } session.Set_hidden("speech", "range", true) for _, want := range []string{"enabled", "text", "ok", "cancel", ""} { session.Handle(Key{Name: "tab"}) got, focused := session.Focused_control() if focused != (want != "") || got.ID != want { t.Fatal(got, want) } } for _, want := range []string{"cancel", "ok", "text", "enabled", ""} { session.Handle(Key{Name: "tab", Shift: true}) got, focused := session.Focused_control() if focused != (want != "") || got.ID != want { t.Fatal(got, want) } } session.Handle(Key{Name: "tab"}) session.Handle(Key{Name: "tab"}) session.Handle(Key{Ctrl: true, Text: "a"}) session.Handle(Key{Text: "draft"}) session.Set_hidden("speech", "text", true) if got, _ := session.Focused_control(); got.ID != "ok" { t.Fatal("hidden focus retained", got) } session.Set_hidden("speech", "text", false) session.Handle(Key{Name: "tab", Shift: true}) if got := session.Values()["speech.text"]; got.Text != "draft" || got.Hidden { t.Fatal(got) } for _, id := range []string{"enabled", "range", "text", "ok", "cancel"} { session.Set_hidden("speech", id, true) } if got := session.Handle(Key{Name: "tab"}).Speech; got != "Speech tab" { t.Fatal("all-hidden tab trapped focus", got) } }