mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-02 11:07:10 +00:00
feat(ioscompanion): expose native typing with an explicit replace flag
This commit is contained in:
1 parent
a6052c6745
commit
ee198d15de
3 files changed
+32
-1
No files matched your search
@@ -282,7 +282,11 @@ func (c *runnerCompanion) Uninstall(ctx context.Context, bundleID string) error
|
||||
}
|
||||
|
||||
func (c *runnerCompanion) InputText(ctx context.Context, text string) error {
|
||||
_, err := c.call(ctx, "typeText", map[string]any{"text": text, "replace": true})
|
||||
return c.TypeText(ctx, text, true)
|
||||
}
|
||||
|
||||
func (c *runnerCompanion) TypeText(ctx context.Context, text string, replace bool) error {
|
||||
_, err := c.call(ctx, "typeText", map[string]any{"text": text, "replace": replace})
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -467,3 +467,22 @@ func TestResponseIDMismatchIsSentinel(t *testing.T) {
|
||||
t.Fatalf("id mismatch must wrap the sentinel: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTypeTextAppendsWithoutReplace(t *testing.T) {
|
||||
server := startFakeServer(t, nil)
|
||||
companion := dialFake(t, server, "com.example.app")
|
||||
typer := companion.(TextTyper)
|
||||
|
||||
if err := typer.TypeText(context.Background(), "héllo 🌟", false); err != nil {
|
||||
t.Fatalf("TypeText: %v", err)
|
||||
}
|
||||
|
||||
requests := server.recorded()
|
||||
if len(requests) != 1 {
|
||||
t.Fatalf("recorded %d requests, want 1", len(requests))
|
||||
}
|
||||
request := requests[0]
|
||||
if request.Method != "typeText" || request.Params["text"] != "héllo 🌟" || request.Params["replace"] != false {
|
||||
t.Fatalf("typeText request = %+v", request)
|
||||
}
|
||||
}
|
||||
@@ -62,6 +62,14 @@ type TextEditor interface {
|
||||
PressKey(ctx context.Context, key string) error
|
||||
}
|
||||
|
||||
// TextTyper is an optional companion capability: the transport types text
|
||||
// natively into whatever holds keyboard focus. Unlike TextEditor it exposes
|
||||
// the replace flag, so a caller can clear the field through another channel
|
||||
// and append with replace false.
|
||||
type TextTyper interface {
|
||||
TypeText(ctx context.Context, text string, replace bool) error
|
||||
}
|
||||
|
||||
// ErrCompanionUnavailable marks a connection-level failure that a companion
|
||||
// restart can recover from. Transports wrap dropped-connection errors with it.
|
||||
var ErrCompanionUnavailable = errors.New("companion connection unavailable")
|
||||
|
||||
Reference in new issue
Block a user