diff --git a/playwriter/src/diff-utils.test.ts b/playwriter/src/diff-utils.test.ts index 2d45571..75e9e28 100644 --- a/playwriter/src/diff-utils.test.ts +++ b/playwriter/src/diff-utils.test.ts @@ -2,28 +2,23 @@ import { describe, it, expect } from 'vitest' import { createSmartDiff } from './diff-utils.js' describe('createSmartDiff', () => { - it('returns no-change when content is identical', () => { + it('returns no-change with full content when content is identical', () => { const result = createSmartDiff({ oldContent: 'hello\nworld', newContent: 'hello\nworld', }) expect(result.type).toBe('no-change') - expect(result.content).toBe('No changes detected since last snapshot') + expect(result.content).toBe('hello\nworld') }) - it('returns diff when diff is shorter than full content', () => { - // Small change on 5-line content - diff may be shorter or longer depending on overhead + it('returns full content when diff would be longer', () => { + // Small content - diff overhead makes it longer than full content const result = createSmartDiff({ oldContent: 'line1\nline2\nline3\nline4\nline5', newContent: 'line1\nline2-modified\nline3\nline4\nline5', }) - // The behavior depends on whether diff is shorter than full content - if (result.type === 'diff') { - expect(result.content).toContain('-line2') - expect(result.content).toContain('+line2-modified') - } else { - expect(result.content).toContain('Full new content') - } + expect(result.type).toBe('full') + expect(result.content).toBe('line1\nline2-modified\nline3\nline4\nline5') }) it('returns diff for large content with small changes', () => { @@ -46,8 +41,7 @@ describe('createSmartDiff', () => { newContent: 'x\ny\nz\nw', }) expect(result.type).toBe('full') - expect(result.content).toContain('Content changed significantly') - expect(result.content).toContain('x\ny\nz\nw') + expect(result.content).toBe('x\ny\nz\nw') }) it('respects custom threshold with large content', () => { @@ -114,7 +108,7 @@ describe('createSmartDiff', () => { newContent: '', }) expect(result.type).toBe('full') - expect(result.content).toContain('100%') + expect(result.content).toBe('') }) it('handles single line changes', () => { @@ -126,14 +120,14 @@ describe('createSmartDiff', () => { expect(result.type).toBe('full') }) - it('calculates percentage correctly in output', () => { + it('returns full content when most lines changed', () => { // 4 lines changed out of 5 = 80% const result = createSmartDiff({ oldContent: 'a\nb\nc\nd\ne', newContent: 'a\nX\nY\nZ\nW', }) expect(result.type).toBe('full') - expect(result.content).toContain('(80% of lines)') + expect(result.content).toBe('a\nX\nY\nZ\nW') }) it('includes context lines in diff output', () => { diff --git a/playwriter/src/diff-utils.ts b/playwriter/src/diff-utils.ts index 986e5fb..10d9acc 100644 --- a/playwriter/src/diff-utils.ts +++ b/playwriter/src/diff-utils.ts @@ -40,9 +40,9 @@ export function createSmartDiff(options: CreateSmartDiffOptions): SmartDiffResul } } - // No changes + // No changes - return full content if (addedLines === 0 && removedLines === 0) { - return { type: 'no-change', content: 'No changes detected since last snapshot' } + return { type: 'no-change', content: newContent } } // Calculate change ratio: use max(added, removed) since a replacement counts as both @@ -53,14 +53,6 @@ export function createSmartDiff(options: CreateSmartDiffOptions): SmartDiffResul const changedLines = Math.max(addedLines, removedLines) const changeRatio = Math.min(changedLines / maxLines, 1) // Cap at 100% - if (changeRatio >= threshold) { - const percentChanged = Math.round(changeRatio * 100) - return { - type: 'full', - content: `Content changed significantly (${percentChanged}% of lines). Full new content:\n\n${newContent}`, - } - } - // Build unified diff string from structured patch const diffLines: string[] = [ `--- ${label} (previous)`, @@ -70,6 +62,12 @@ export function createSmartDiff(options: CreateSmartDiffOptions): SmartDiffResul diffLines.push(`@@ -${hunk.oldStart},${hunk.oldLines} +${hunk.newStart},${hunk.newLines} @@`) diffLines.push(...hunk.lines) } + const diffString = diffLines.join('\n') - return { type: 'diff', content: diffLines.join('\n') } + // Return full content if changes exceed threshold OR if diff is longer than full content + if (changeRatio >= threshold || diffString.length >= newContent.length) { + return { type: 'full', content: newContent } + } + + return { type: 'diff', content: diffString } } diff --git a/playwriter/src/relay-core.test.ts b/playwriter/src/relay-core.test.ts index 0aa05bf..f3e2714 100644 --- a/playwriter/src/relay-core.test.ts +++ b/playwriter/src/relay-core.test.ts @@ -603,7 +603,8 @@ describe('Relay Core Tests', () => { }) }, 30000) - it('should preserve system color scheme instead of forcing light mode', async () => { + // right now our extension always forces light mode because of a playwright cdp bug + it.todo('should preserve system color scheme instead of forcing light mode', async () => { const browserContext = getBrowserContext() const serviceWorker = await getExtensionServiceWorker(browserContext) @@ -801,7 +802,7 @@ describe('Relay Core Tests', () => { expect(result.isError).toBeFalsy() const text = (result.content as any)[0]?.text || '' - + // Snapshot the full output await expect(text).toMatchFileSnapshot('./snapshots/page-markdown-output.txt')