Add Mumble message review shortcuts
This commit is contained in:
1 parent
d5f8a392cf
commit
64440fbb78
18 files changed
+484
-30
No files matched your search
@@ -7,6 +7,7 @@ package app
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"testing"
|
||||
@@ -26,7 +27,71 @@ func pidginMessageEvent(text string) atspi.Event {
|
||||
return event
|
||||
}
|
||||
|
||||
func TestMumbleMessagingReviewBoundsOwnershipAndRetirement(t *testing.T) {
|
||||
queue, braille := &learnSpeechRecorder{}, &flashRecorder{}
|
||||
controller := newMessagingController(context.Background(), queue, nil, nil, func(_ context.Context, text string) error {
|
||||
if text != "Mumble message 3" {
|
||||
return fmt.Errorf("copied wrong message: %q", text)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
controller.braille = braille
|
||||
defer controller.stop()
|
||||
current := atspi.Snapshot{ApplicationProcess: "mumble", BusName: ":1.42"}
|
||||
for i := 0; i < 15; i++ {
|
||||
event := pidginMessageEvent(fmt.Sprintf("Mumble message %d", i))
|
||||
event.Source.ApplicationProcess = "mumble"
|
||||
if i%2 == 0 {
|
||||
event.Source.Role = "label"
|
||||
}
|
||||
if !controller.handle(event) {
|
||||
t.Fatal("Mumble log insertion was not handled")
|
||||
}
|
||||
}
|
||||
for i := 0; i < 12; i++ {
|
||||
controller.review(input.MessageCommand(i, false), current)
|
||||
want := fmt.Sprintf("Mumble message %d", 14-i)
|
||||
if queue.texts[len(queue.texts)-1] != want || braille.messages[len(braille.messages)-1] != want {
|
||||
t.Fatalf("review slot %d did not present %q", i, want)
|
||||
}
|
||||
}
|
||||
controller.review(input.MessageCommand(11, true), current)
|
||||
select {
|
||||
case result := <-controller.results:
|
||||
if result.err != nil {
|
||||
t.Fatal(result.err)
|
||||
}
|
||||
controller.copied(result)
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("Mumble F12 copy did not complete")
|
||||
}
|
||||
if queue.texts[len(queue.texts)-1] != "Copied Mumble message 3 to clipboard." {
|
||||
t.Fatal("Mumble F12 copy was not confirmed")
|
||||
}
|
||||
count := len(queue.texts)
|
||||
for _, focus := range []atspi.Snapshot{
|
||||
{ApplicationProcess: "mumble", BusName: ":1.43"},
|
||||
{ApplicationProcess: "chromium", BusName: ":1.42"},
|
||||
{ApplicationProcess: "pidgin", BusName: ":1.42"},
|
||||
} {
|
||||
controller.review(input.MessageCommand(11, false), focus)
|
||||
}
|
||||
retired := atspi.NewEvent(atspi.DefunctStateEvent, atspi.Snapshot{BusName: ":1.42", Path: "/transcript", Defunct: true})
|
||||
retired.Detail1 = 1
|
||||
controller.handle(retired)
|
||||
controller.review(input.MessageCommand(0, false), current)
|
||||
if len(queue.texts) != count || len(braille.messages) != count {
|
||||
t.Fatal("unowned or retired history was presented")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMessagingBackgroundPresentationKeepsFocusAndUsesCommands(t *testing.T) {
|
||||
for _, process := range []string{"pidgin", "mumble"} {
|
||||
t.Run(process, func(t *testing.T) { testMessagingBackgroundPresentationKeepsFocusAndUsesCommands(t, process) })
|
||||
}
|
||||
}
|
||||
|
||||
func testMessagingBackgroundPresentationKeepsFocusAndUsesCommands(t *testing.T, process string) {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
adapter := &fakeAdapter{events: make(chan atspi.Event)}
|
||||
queue := &fakeSpeechQueue{spoken: make(chan string, 16)}
|
||||
@@ -37,13 +102,18 @@ func TestMessagingBackgroundPresentationKeepsFocusAndUsesCommands(t *testing.T)
|
||||
}()
|
||||
defer func() { cancel(); <-done }()
|
||||
focus := ownerEvent(atspi.FocusedStateEvent, ":1.42", "/window", "/entry")
|
||||
focus.Source.ApplicationProcess, focus.Source.Role, focus.Source.Name = "pidgin", "entry", "Message input"
|
||||
focus.Source.ApplicationProcess, focus.Source.Role, focus.Source.Name = process, "entry", "Message input"
|
||||
focus.Source.Editable, focus.Source.Focused, focus.Detail1 = true, true, 1
|
||||
adapter.events <- focus
|
||||
expectActivationSpeech(t, queue.spoken, "Message input, entry")
|
||||
adapter.events <- pidginMessageEvent("First message")
|
||||
messageEvent := func(text string) atspi.Event {
|
||||
event := pidginMessageEvent(text)
|
||||
event.Source.ApplicationProcess = process
|
||||
return event
|
||||
}
|
||||
adapter.events <- messageEvent("First message")
|
||||
expectActivationSpeech(t, queue.spoken, "First message")
|
||||
adapter.events <- pidginMessageEvent("Second message")
|
||||
adapter.events <- messageEvent("Second message")
|
||||
expectActivationSpeech(t, queue.spoken, "Second message")
|
||||
requests <- input.MessageCommand(0, false)
|
||||
expectActivationSpeech(t, queue.spoken, "Second message")
|
||||
|
||||
Reference in new issue
Block a user