fix(driver): skip pre-erase for replace-on-input drivers

The web driver's InputText already replaces content via select-all, so
the runner's unconditional EraseText was a redundant round-trip on
every InputText. A new optional TextReplacer capability lets a driver
assert replace semantics; the runner skips the erase when asserted.
This commit is contained in:
pj committed 2026-06-06 00:35:13 +05:30
1 parent 6009adac48
commit 29ec13adcd
5 files changed
+64 -3

No files matched your search

+10
View File
@@ -63,6 +63,10 @@ type Driver struct {
MetricsData driver.Metrics
Failures map[ActionKind]error
// ReplacesText makes the mock assert the TextReplacer capability, so
// tests cover both the erase-before-type and replace-on-input paths.
ReplacesText bool
// ForegroundResults is consumed one entry per ForegroundApp call (the
// last entry repeats). Empty yields "", which disables the runner's
// app-scope guard so tests that don't care are unaffected.
@@ -212,6 +216,12 @@ func (d *Driver) InputText(ctx context.Context, text string) error {
return nil
}
func (d *Driver) ReplacesTextOnInput() bool {
d.mutex.Lock()
defer d.mutex.Unlock()
return d.ReplacesText
}
func (d *Driver) EraseText(ctx context.Context, characterCount int) error {
if err := d.failure(ActionEraseText); err != nil {
return err