Files
sanderling/internal/verifier/types.go
pj 61bf82e43c docs(verifier): Action's field comments name the kinds that read them
X/Y were documented as Tap and InputText only, while DoubleTap and LongPress
resolve coordinates from the same fields; the endpoints and DurationMillis were
documented as Swipe only, and Scroll reads both.
2026-08-22 21:10:22 +05:30

79 lines
2.8 KiB
Go

package verifier
// ActionKind identifies the category of a generated UI action.
type ActionKind string
const (
ActionKindTap ActionKind = "Tap"
ActionKindDoubleTap ActionKind = "DoubleTap"
ActionKindInputText ActionKind = "InputText"
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.
type Action struct {
Kind ActionKind
On string
Text string
// X, Y hold the element center when the spec passed an ax element to a
// point-dispatched kind (Tap, DoubleTap, LongPress, InputText). Zero means
// the runner must resolve On against the current hierarchy.
X, Y int
// Gesture endpoints (raw px), read by Swipe and by Scroll. A Scroll that
// carries none has them computed from its container and Direction, so
// leaving them zero is how an authored Scroll asks for that.
FromX, FromY int
ToX, ToY int
// DurationMillis is the Swipe or Scroll gesture duration, or the Wait
// duration.
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
// Applied is meaningful only on the action a step reports to the spec as
// state.lastAction: true when the runner saw the dispatch succeed, false
// when the apply call failed and nothing can say whether the action
// reached the app. The spec is told which of the two it is.
Applied bool
// Source names the generator that produced this action, "setup" or
// "seeded", as the runtime entry tagged it. Empty on an action the runner
// built itself (the model policy's pick), which the runner names instead.
Source string
// Relaunched, like Applied, is meaningful only on state.lastAction: the
// runner brought the app back to the foreground after this action, so the
// two readings the spec compares straddle a restart. The action still
// happened; what a property cannot assume across it is that app state ran
// continuously from one reading to the next.
Relaunched bool
}
// LogEntry mirrors a logcat line captured between steps.
type LogEntry struct {
UnixMillis int64
Level string
Tag string
Message string
}
// Exception mirrors an SDK-captured uncaught throwable.
type Exception struct {
Class string
Message string
StackTrace string
UnixMillis int64
}
// ExtractorChange records a single extractor's value transition across one
// step. Used to surface "what changed at this step" breadcrumbs at violation
// markers in the replay UI.
type ExtractorChange struct {
Prev []byte
Curr []byte
}