mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-04 20:17:09 +00:00
test(doubleTap): cover constructor, verifier round-trip, and runner dispatch
This commit is contained in:
1 parent
fb085eeaa0
commit
87834caf96
4 files changed
+71
No files matched your search
@@ -294,6 +294,47 @@ func TestApplyAction_V8InputTextAtOriginStillTaps(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestApplyAction_DoubleTapDispatchesTwoTapsAtCoordinates(t *testing.T) {
|
||||||
|
driverMock := mockdriver.New()
|
||||||
|
action := verifier.Action{Kind: verifier.ActionKindDoubleTap, X: 100, Y: 200}
|
||||||
|
|
||||||
|
start := time.Now()
|
||||||
|
if err := applyAction(context.Background(), driverMock, action, nil); err != nil {
|
||||||
|
t.Fatalf("apply action: %v", err)
|
||||||
|
}
|
||||||
|
elapsed := time.Since(start)
|
||||||
|
if elapsed < 40*time.Millisecond {
|
||||||
|
t.Errorf("expected >= 40ms gap between taps, elapsed %v", elapsed)
|
||||||
|
}
|
||||||
|
taps := 0
|
||||||
|
for _, a := range driverMock.Actions() {
|
||||||
|
if a.Kind == mockdriver.ActionTap && a.X == 100 && a.Y == 200 {
|
||||||
|
taps++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if taps != 2 {
|
||||||
|
t.Errorf("expected 2 Tap calls at (100,200), got %d in %v", taps, driverMock.Actions())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestApplyAction_DoubleTapDispatchesTwoSelectorTaps(t *testing.T) {
|
||||||
|
driverMock := mockdriver.New()
|
||||||
|
action := verifier.Action{Kind: verifier.ActionKindDoubleTap, On: "id:save"}
|
||||||
|
|
||||||
|
if err := applyAction(context.Background(), driverMock, action, nil); err != nil {
|
||||||
|
t.Fatalf("apply action: %v", err)
|
||||||
|
}
|
||||||
|
taps := 0
|
||||||
|
for _, a := range driverMock.Actions() {
|
||||||
|
if a.Kind == mockdriver.ActionTapSelector && a.Selector == "id:save" {
|
||||||
|
taps++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if taps != 2 {
|
||||||
|
t.Errorf("expected 2 TapSelector calls with id:save, got %d in %v", taps, driverMock.Actions())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestRunner_ParallelFetchCallsAllDriverMethods(t *testing.T) {
|
func TestRunner_ParallelFetchCallsAllDriverMethods(t *testing.T) {
|
||||||
state := newHarness(t)
|
state := newHarness(t)
|
||||||
state.mock.MetricsData = driver.Metrics{CPUPercent: 5.0, HeapBytes: 1024, TotalMemoryBytes: 4096}
|
state.mock.MetricsData = driver.Metrics{CPUPercent: 5.0, HeapBytes: 1024, TotalMemoryBytes: 4096}
|
||||||
|
|||||||
@@ -282,6 +282,27 @@ func TestNextAction_NoSetupRegistered(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDoubleTap_RoundTrip(t *testing.T) {
|
||||||
|
verifier := newVerifier(t)
|
||||||
|
mustLoad(t, verifier, `
|
||||||
|
globalThis.actions = __sanderling__.actions(() => [
|
||||||
|
__sanderling__.doubleTap({ on: "id:save" }),
|
||||||
|
]);
|
||||||
|
`)
|
||||||
|
_ = verifier.PushSnapshot(SnapshotInput{Snapshots: Snapshots{}})
|
||||||
|
|
||||||
|
action, err := verifier.NextAction()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if action.Kind != ActionKindDoubleTap {
|
||||||
|
t.Errorf("kind: got %v, want DoubleTap", action.Kind)
|
||||||
|
}
|
||||||
|
if action.On != "id:save" {
|
||||||
|
t.Errorf("selector: got %q, want id:save", action.On)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestInputText_RoundTrip(t *testing.T) {
|
func TestInputText_RoundTrip(t *testing.T) {
|
||||||
verifier := newVerifier(t)
|
verifier := newVerifier(t)
|
||||||
mustLoad(t, verifier, `
|
mustLoad(t, verifier, `
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import assert from "node:assert/strict";
|
|||||||
import { test } from "node:test";
|
import { test } from "node:test";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
DoubleTap,
|
||||||
InputText,
|
InputText,
|
||||||
PressKey,
|
PressKey,
|
||||||
Swipe,
|
Swipe,
|
||||||
@@ -138,6 +139,7 @@ function installFakeRuntime(): RecordedRuntime {
|
|||||||
return { generate: () => items[0] as T };
|
return { generate: () => items[0] as T };
|
||||||
},
|
},
|
||||||
tap: ({ on }) => ({ kind: "Tap", on }),
|
tap: ({ on }) => ({ kind: "Tap", on }),
|
||||||
|
doubleTap: ({ on }) => ({ kind: "DoubleTap", on }),
|
||||||
inputText: ({ into, text }) => ({ kind: "InputText", into, text }),
|
inputText: ({ into, text }) => ({ kind: "InputText", into, text }),
|
||||||
swipe: ({ from: fromPoint, to, durationMillis }) => ({
|
swipe: ({ from: fromPoint, to, durationMillis }) => ({
|
||||||
kind: "Swipe",
|
kind: "Swipe",
|
||||||
@@ -218,6 +220,12 @@ test("Tap returns a TapAction with the supplied selector", () => {
|
|||||||
assert.deepEqual(action, { kind: "Tap", on: "id:login_continue" });
|
assert.deepEqual(action, { kind: "Tap", on: "id:login_continue" });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("DoubleTap returns a DoubleTapAction with the supplied selector", () => {
|
||||||
|
installFakeRuntime();
|
||||||
|
const action = DoubleTap({ on: "id:save" });
|
||||||
|
assert.deepEqual(action, { kind: "DoubleTap", on: "id:save" });
|
||||||
|
});
|
||||||
|
|
||||||
test("Tap accepts an AccessibilityElement", () => {
|
test("Tap accepts an AccessibilityElement", () => {
|
||||||
installFakeRuntime();
|
installFakeRuntime();
|
||||||
const element: AccessibilityElement = {
|
const element: AccessibilityElement = {
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ function installRuntime(initialState: State): RecordedRuntime {
|
|||||||
}),
|
}),
|
||||||
from: <T>(_items: readonly T[]): Sampler<T> => ({ generate: () => _items[0] as T }),
|
from: <T>(_items: readonly T[]): Sampler<T> => ({ generate: () => _items[0] as T }),
|
||||||
tap: ({ on }) => ({ kind: "Tap", on }),
|
tap: ({ on }) => ({ kind: "Tap", on }),
|
||||||
|
doubleTap: ({ on }) => ({ kind: "DoubleTap", on }),
|
||||||
inputText: ({ into, text }) => ({ kind: "InputText", into, text }),
|
inputText: ({ into, text }) => ({ kind: "InputText", into, text }),
|
||||||
swipe: (p) => ({ kind: "Swipe", from: p.from, to: p.to, durationMillis: p.durationMillis }),
|
swipe: (p) => ({ kind: "Swipe", from: p.from, to: p.to, durationMillis: p.durationMillis }),
|
||||||
pressKey: ({ key }) => ({ kind: "PressKey", key }),
|
pressKey: ({ key }) => ({ kind: "PressKey", key }),
|
||||||
|
|||||||
Reference in new issue
Block a user