File size: 2,009 Bytes
eb1202c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import type { Page, TestInfo } from "@playwright/test"
import { analyzeVisualObservations, analyzeVisualTraceByMarker } from "./visual-stability/analyzer"
import { legacyVisualPlan, type LegacyVisualStabilityOptions } from "./visual-stability/invariant"
import type { CapturedFrame, VisualStabilityTrace } from "./visual-stability/model"
import { markVisualProbe, startVisualProbe, stopVisualProbe } from "./visual-stability/probe"
import type { VisualRegionDefinition } from "./visual-stability/regions"
import { reportVisualStability } from "./visual-stability/reporter"

export * from "./visual-stability/index"

const capturedFrames = Symbol("capturedFrames")

export async function startVisualStabilityProbe(page: Page, regions: Record<string, VisualRegionDefinition>) {
  await startVisualProbe(page, regions)
}

export async function stopVisualStabilityProbe(page: Page) {
  const result = await stopVisualProbe(page)
  const trace: VisualStabilityTrace = { markers: result.markers, samples: result.samples }
  Object.defineProperty(trace, capturedFrames, { value: result.frames })
  return trace
}

export async function markVisualStability(page: Page, label: string) {
  await markVisualProbe(page, label)
}

export function analyzeVisualStability(trace: VisualStabilityTrace, options: LegacyVisualStabilityOptions = {}) {
  return analyzeVisualObservations(trace.samples, legacyVisualPlan(options))
}

export function analyzeVisualStabilityByMarker(
  trace: VisualStabilityTrace,
  options: LegacyVisualStabilityOptions = {},
) {
  return analyzeVisualTraceByMarker(trace, legacyVisualPlan(options))
}

export async function expectVisualStability(
  testInfo: TestInfo,
  name: string,
  trace: VisualStabilityTrace,
  options: LegacyVisualStabilityOptions = {},
) {
  await reportVisualStability(
    testInfo,
    name,
    {
      ...trace,
      frames: (trace as VisualStabilityTrace & { [capturedFrames]?: CapturedFrame[] })[capturedFrames] ?? [],
    },
    legacyVisualPlan(options),
  )
}