Skip to content

Commit fb57353

Browse files
author
Thiago Perrotta
authored
[wdspec] browsingContext.print: fix rounding error in page.py test (web-platform-tests#40504)
* [wdspec] browsingContext.print: fix rounding error in page.py test [pytest](https://github.com/web-platform-tests/wpt/blob/7a087d54be8b6c0ca0181a86dc1ff0b28461c383/webdriver/tests/support/image.py) uses: def cm_to_px(cm): return round(cm * 96 / 2.54) [js](https://github.com/web-platform-tests/wpt/blob/7a087d54be8b6c0ca0181a86dc1ff0b28461c383/tools/wptrunner/wptrunner/print_pdf_runner.html) uses: const viewport = page.getViewport({ scale: 96. / 72. }); ... canvas.height = viewport.height; canvas.width = viewport.width; This produces a rounding error, even though the dimension is correct: > assert cm_to_px(expected_dimensions["height"]) == height E assert 454 == 453 E +454 E -453 The inconsistency of rounding in both ends becomes clear when we eliminate "round" in the pytest side: > assert cm_to_px(expected_dimensions["height"]) == height E assert 453.54330708661416 == 453 E +453.54330708661416 E -453 There are multiple ways to fix this issue. Option #1: Use "floor" instead of "round" in pytest. Option #2: Use a range in the assertion comparison, allowing a difference of up to +-1.0. This is what this PR does. The comparison is performed in [`assert_pdf_dimensions`](https://github.com/web-platform-tests/wpt/blob/b6107cc1ac8b9c2800b4c8e58af719b8e4d9b8db/webdriver/tests/support/fixtures_bidi.py#L210). The problematic part is .96 / .72 which evaluates to 4/3 = 1.333333.... * use floor in cm_to_px instead of round * compare to floor and to round instead of a range * Revert "compare to floor and to round instead of a range" This reverts commit 63f894e. * Revert "use floor in cm_to_px instead of round" This reverts commit 7e65d91.
1 parent 3d537ab commit fb57353

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

tools/wptrunner/wptrunner/print_pdf_runner.html

+6-6
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,19 @@
1111
let loadingTask = pdfjsLib.getDocument({data: atob(pdfData)});
1212
let pdf = await loadingTask.promise;
1313
let rendered = [];
14-
for (let pageNumber=1; pageNumber<=pdf.numPages; pageNumber++) {
14+
for (let pageNumber = 1; pageNumber <= pdf.numPages; pageNumber++) {
1515
let page = await pdf.getPage(pageNumber);
16-
var viewport = page.getViewport({scale: 96./72.});
16+
const viewport = page.getViewport({ scale: 96. / 72. });
1717
// Prepare canvas using PDF page dimensions
18-
var canvas = document.getElementsByTagName('canvas')[0];
19-
var context = canvas.getContext('2d');
18+
const canvas = document.getElementsByTagName('canvas')[0];
19+
const context = canvas.getContext('2d');
2020
canvas.height = viewport.height;
2121
canvas.width = viewport.width;
2222

2323
// Render PDF page into canvas context
24-
var renderContext = {
24+
const renderContext = {
2525
canvasContext: context,
26-
viewport: viewport
26+
viewport
2727
};
2828
await page.render(renderContext).promise;
2929
rendered.push(canvas.toDataURL());

webdriver/tests/support/fixtures_bidi.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ async def assert_pdf_dimensions(pdf, expected_dimensions):
207207
png = await render_pdf_to_png_bidi(pdf)
208208
width, height = png_dimensions(png)
209209

210-
assert cm_to_px(expected_dimensions["height"]) == height
211-
assert cm_to_px(expected_dimensions["width"]) == width
210+
assert (height - 1) <= cm_to_px(expected_dimensions["height"]) <= (height + 1)
211+
assert (width - 1) <= cm_to_px(expected_dimensions["width"]) <= (width + 1)
212212

213213
return assert_pdf_dimensions
214214

0 commit comments

Comments
 (0)