diff --git a/internal/verifier/marshal.go b/internal/verifier/marshal.go index f22ab21..defee8f 100644 --- a/internal/verifier/marshal.go +++ b/internal/verifier/marshal.go @@ -350,6 +350,16 @@ func lastActionObject(runtime *goja.Runtime, action *Action) goja.Value { if action.DurationMillis > 0 { _ = object.Set("durationMillis", action.DurationMillis) } + case ActionKindScroll: + _ = object.Set("direction", action.Direction) + from := runtime.NewObject() + _ = from.Set("x", action.FromX) + _ = from.Set("y", action.FromY) + to := runtime.NewObject() + _ = to.Set("x", action.ToX) + _ = to.Set("y", action.ToY) + _ = object.Set("from", from) + _ = object.Set("to", to) case ActionKindPressKey: _ = object.Set("key", action.Key) case ActionKindWait: @@ -448,6 +458,20 @@ func jsValueToAction(runtime *goja.Runtime, value goja.Value) (Action, error) { ToY: toY, DurationMillis: intField(object, "durationMillis"), }, nil + case "LongPress": + on := object.Get("on") + x, y := coordinatesOf(runtime, on) + return Action{Kind: ActionKindLongPress, On: selectorOf(runtime, on), X: x, Y: y}, nil + case "Scroll": + in := object.Get("in") + x, y := coordinatesOf(runtime, in) + return Action{ + Kind: ActionKindScroll, + Direction: stringOf(object.Get("direction")), + On: selectorOf(runtime, in), + X: x, + Y: y, + }, nil case "PressKey": return Action{Kind: ActionKindPressKey, Key: stringOf(object.Get("key"))}, nil case "Wait": diff --git a/internal/verifier/types.go b/internal/verifier/types.go index 71fb9d1..a69aaa6 100644 --- a/internal/verifier/types.go +++ b/internal/verifier/types.go @@ -10,6 +10,8 @@ const ( ActionKindSwipe ActionKind = "Swipe" ActionKindPressKey ActionKind = "PressKey" ActionKindWait ActionKind = "Wait" + ActionKindLongPress ActionKind = "LongPress" + ActionKindScroll ActionKind = "Scroll" ) // Action is a single UI interaction produced by the spec's action generator. @@ -28,6 +30,9 @@ type Action struct { DurationMillis int // Key is the logical key name for ActionKindPressKey. Key string + // Direction is the scroll direction for ActionKindScroll: one of "up", + // "down", "left", "right". Empty for every other kind. + Direction string } // LogEntry mirrors a logcat line captured between steps.