Reference Test Extensibility

Testing frameworks tend to outlive the applications they test, making extensibility a critical attribute of their design. Extensibility is particularly important for reference testing because it must continue to adapt to the ever-changing open web. Although reference tests like the one in Table 19-1 were all you needed in 1996, today’s web pages exhibit far more complex behaviors, and the tests to mimic those behaviors have evolved as well. Reference tests continue to adapt to meet the challenges presented by the Web in order to maintain a comprehensive test suite for the rendering engine.

Asynchronous Tests

The Web is no longer a static playground. Pages modify their DOMs, adding and removing elements and style rules, and the browser must adapt on the fly. To test this behavior, “reftest-wait” tests were developed. In this class of tests, the rendered canvas is not sent to the compareCanvas function when the onload event fires. Instead, the test author uses JavaScript to indicate to the reference test framework when to snapshot the file for comparison. This allows us to craft tests that can make use of the standard onload handler ourselves, as many web pages do (Table 19-3).

Table 19-3. Asynchronous reference test



<!DOCTYPE HTML> <html class="reftest-wait"> <head> <style> body::before { content:"Before"; border:inherit; } .cl::after { display:block; content:"After"; } </style> <script> function fixupDOM() { document.body.setAttribute("style", ...

Get Beautiful Testing now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.