fix: disambiguate repeated-target event timing
This commit is contained in:
@@ -63,6 +63,7 @@ describe('performance metric math', () => {
|
||||
id,
|
||||
target: `target-${id}`,
|
||||
dispatchTime: index * 1_000,
|
||||
captureEndTime: null,
|
||||
acknowledgementCount: 1,
|
||||
mutationTime: index * 1_000 + 20,
|
||||
doubleRafTime: index * 1_000 + 40,
|
||||
@@ -74,6 +75,52 @@ describe('performance metric math', () => {
|
||||
expect(() => evaluateEventToNextPaint([{ ...actions[0]!, acknowledgementCount: 2 }, ...actions.slice(1)])).toThrow(/acknowledgement/u);
|
||||
});
|
||||
|
||||
it('excludes a later compressed interaction when sequential actions share one DOM target', () => {
|
||||
const ids = ['start', 'volume', 'mute', 'unmute', 'pause', 'resume', 'toolkit', 'contact'] as const;
|
||||
const actions = ids.map((id, index): ScriptedActionSample => ({
|
||||
id,
|
||||
target: id,
|
||||
dispatchTime: index === 4 ? 400 : index === 5 ? 450 : index * 1_000,
|
||||
captureEndTime: index === 4 ? 450 : null,
|
||||
acknowledgementCount: 1,
|
||||
mutationTime: (index === 4 ? 400 : index === 5 ? 450 : index * 1_000) + 5,
|
||||
doubleRafTime: (index === 4 ? 400 : index === 5 ? 450 : index * 1_000) + 10,
|
||||
eventTimingSupported: true,
|
||||
eventEntries: id === 'pause'
|
||||
? [
|
||||
{ target: 'pause', startTime: 410, duration: 30, interactionId: 41 },
|
||||
{ target: 'pause', startTime: 460, duration: 40, interactionId: 42 },
|
||||
]
|
||||
: id === 'resume'
|
||||
? [{ target: 'resume', startTime: 460, duration: 40, interactionId: 42 }]
|
||||
: [],
|
||||
}));
|
||||
|
||||
expect(evaluateEventToNextPaint(actions).values.slice(4, 6)).toEqual([30, 40]);
|
||||
});
|
||||
|
||||
it('still rejects genuinely ambiguous interaction groups within one capture window', () => {
|
||||
const ids = ['start', 'volume', 'mute', 'unmute', 'pause', 'resume', 'toolkit', 'contact'] as const;
|
||||
const actions = ids.map((id, index): ScriptedActionSample => ({
|
||||
id,
|
||||
target: id,
|
||||
dispatchTime: index * 1_000,
|
||||
captureEndTime: null,
|
||||
acknowledgementCount: 1,
|
||||
mutationTime: index * 1_000 + 5,
|
||||
doubleRafTime: index * 1_000 + 10,
|
||||
eventTimingSupported: true,
|
||||
eventEntries: id === 'pause'
|
||||
? [
|
||||
{ target: 'pause', startTime: 4_010, duration: 30, interactionId: 41 },
|
||||
{ target: 'pause', startTime: 4_020, duration: 40, interactionId: 42 },
|
||||
]
|
||||
: [],
|
||||
}));
|
||||
|
||||
expect(() => evaluateEventToNextPaint(actions)).toThrow(/ambiguous/u);
|
||||
});
|
||||
|
||||
it('evaluates scene continuity at interval boundaries and callback coverage', () => {
|
||||
const result = evaluateSceneContinuity(
|
||||
[{ start: 0, end: 100 }],
|
||||
|
||||
Reference in New Issue
Block a user