mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-02 19:17:10 +00:00
feat(verifier): report a relaunch on state.lastAction
This commit is contained in:
1 parent
46f2969350
commit
365418f73e
3 files changed
+27
-1
No files matched your search
@@ -353,9 +353,20 @@ func lastActionFields(action *Action) []actionField {
|
|||||||
if action.Applied {
|
if action.Applied {
|
||||||
applied = true
|
applied = true
|
||||||
}
|
}
|
||||||
|
// A relaunch between two readings is not "no action happened", which is
|
||||||
|
// what dropping the action reported instead: the app restarted after an
|
||||||
|
// action that did run. Only the positive report is a fact the runner can
|
||||||
|
// vouch for, so the other side is null rather than false: a target whose
|
||||||
|
// foreground the runner cannot read (web, iOS) never relaunches the app and
|
||||||
|
// still cannot promise it never restarted.
|
||||||
|
var relaunched any
|
||||||
|
if action.Relaunched {
|
||||||
|
relaunched = true
|
||||||
|
}
|
||||||
fields := []actionField{
|
fields := []actionField{
|
||||||
{key: "kind", value: string(action.Kind)},
|
{key: "kind", value: string(action.Kind)},
|
||||||
{key: "applied", value: applied},
|
{key: "applied", value: applied},
|
||||||
|
{key: "relaunched", value: relaunched},
|
||||||
}
|
}
|
||||||
if action.On != "" {
|
if action.On != "" {
|
||||||
fields = append(fields, actionField{key: "on", value: action.On})
|
fields = append(fields, actionField{key: "on", value: action.On})
|
||||||
|
|||||||
@@ -38,6 +38,12 @@ type Action struct {
|
|||||||
// when the apply call failed and nothing can say whether the action
|
// 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.
|
// reached the app. The spec is told which of the two it is.
|
||||||
Applied bool
|
Applied bool
|
||||||
|
// 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.
|
// LogEntry mirrors a logcat line captured between steps.
|
||||||
|
|||||||
+10
-1
@@ -109,8 +109,17 @@ export interface ExceptionRecord {
|
|||||||
* tap landed. Null is unknown, not "it did not happen" (`state.lastAction` is
|
* tap landed. Null is unknown, not "it did not happen" (`state.lastAction` is
|
||||||
* itself null for that), so a property attributing an effect to this action
|
* itself null for that), so a property attributing an effect to this action
|
||||||
* has to decline unless `applied` is true.
|
* has to decline unless `applied` is true.
|
||||||
|
*
|
||||||
|
* `relaunched` is true when the runner had to bring the app back to the
|
||||||
|
* foreground after this action, so the previous reading and the current one
|
||||||
|
* straddle a restart. The action itself still happened; what a property cannot
|
||||||
|
* assume across it is that app state ran continuously between the two readings,
|
||||||
|
* and one demanding an effect of this action has to decline. Null is "not
|
||||||
|
* reported", which is weaker than "the app never restarted": a target whose
|
||||||
|
* foreground the runner cannot read never relaunches the app and cannot promise
|
||||||
|
* that either.
|
||||||
*/
|
*/
|
||||||
export type LastAction = Action & { applied: true | null };
|
export type LastAction = Action & { applied: true | null; relaunched: true | null };
|
||||||
|
|
||||||
export interface State {
|
export interface State {
|
||||||
snapshots: Snapshots;
|
snapshots: Snapshots;
|
||||||
|
|||||||
Reference in new issue
Block a user