Initial commit: 包装审核 POC、Docker 与前后端
Made-with: Cursor
This commit is contained in:
84
frontend/tests/pdfPreviewMath.test.ts
Normal file
84
frontend/tests/pdfPreviewMath.test.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
import type { FieldResult } from '../src/types'
|
||||
import { getOverlayRect, getScrollTarget, getTargetZoom } from '../src/components/pdfPreviewMath'
|
||||
|
||||
const field: FieldResult = {
|
||||
id: 'field-1',
|
||||
page: 1,
|
||||
text: '食品名称:天问礼品粽',
|
||||
font_name: 'Mock Font',
|
||||
font_size_pt: 12,
|
||||
font_height_mm: 4,
|
||||
x0_pt: 100,
|
||||
top_pt: 80,
|
||||
x1_pt: 180,
|
||||
bottom_pt: 116,
|
||||
normalized_text: '食品名称天问礼品粽',
|
||||
validation_status: 'matched',
|
||||
validation_reason: 'matched',
|
||||
matched_excerpt: '食品名称:天问礼品粽',
|
||||
}
|
||||
|
||||
test('getOverlayRect keeps tiny fields visible without drifting away from center', () => {
|
||||
const rect = getOverlayRect(
|
||||
{
|
||||
...field,
|
||||
x1_pt: 101,
|
||||
bottom_pt: 81,
|
||||
},
|
||||
0.4,
|
||||
0.4,
|
||||
)
|
||||
|
||||
assert.equal(rect.width, 4)
|
||||
assert.equal(rect.height, 4)
|
||||
assert.equal(rect.strokeWidth, 1)
|
||||
assert.equal(rect.left, 38.2)
|
||||
assert.equal(rect.top, 30.2)
|
||||
})
|
||||
|
||||
test('getTargetZoom caps focus zoom and keeps normal fit as the floor', () => {
|
||||
assert.equal(
|
||||
getTargetZoom(field, { width: 1200, height: 900 }, 0.5),
|
||||
2.8,
|
||||
)
|
||||
|
||||
assert.equal(
|
||||
getTargetZoom(field, { width: 0, height: 900 }, 0.5),
|
||||
1,
|
||||
)
|
||||
})
|
||||
|
||||
test('getScrollTarget centers the active field and clamps to scroll bounds', () => {
|
||||
const rect = getOverlayRect(field, 2, 2)
|
||||
const centered = getScrollTarget({
|
||||
containerWidth: 800,
|
||||
containerHeight: 600,
|
||||
scrollWidth: 2200,
|
||||
scrollHeight: 1800,
|
||||
pageOffsetLeft: 260,
|
||||
pageOffsetTop: 420,
|
||||
rect,
|
||||
})
|
||||
|
||||
assert.deepEqual(centered, {
|
||||
left: 140,
|
||||
top: 316,
|
||||
})
|
||||
|
||||
const clamped = getScrollTarget({
|
||||
containerWidth: 800,
|
||||
containerHeight: 600,
|
||||
scrollWidth: 1200,
|
||||
scrollHeight: 900,
|
||||
pageOffsetLeft: 20,
|
||||
pageOffsetTop: 30,
|
||||
rect,
|
||||
})
|
||||
|
||||
assert.deepEqual(clamped, {
|
||||
left: 0,
|
||||
top: 0,
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user