The original `test.py` code, seec2376e5cea/test/test.py, did not have any timeout logic for TTX, but it got introduced when `test.py` was ported from Python to JavaScript as `test.js` inc2376e5cea (diff-a561630bb56b82342bc66697aee2ad96efddcbc9d150665abd6fb7ecb7c0ab2f). However, I don't think we've ever actually seen TTX timing out. Moreover, back then we used a very old version of TTX and ran the font tests on the bots (where a hanging process would block other jobs and would require a manual action to fix), so this code was most likely only included defensively. Fortunately, nowadays it should not be necessary anymore because we use the most recent version of TTX (which either returns the result or errors out, but isn't known to hang on inputs) and we run the font tests on GitHub Actions which doesn't block other jobs anymore and also automatically times the job out for us in the unlikely event that a hang would ever occur. In short, we can safely remove this logic to simplify the code and to get rid of a callback.
Font tests
The font tests check if PDF.js can read font data correctly. For validation
the ttx tool (from the Python fonttools library) is used that can convert
font data to an XML format that we can easily use for assertions in the tests.
In the font tests we let PDF.js read font data and pass the PDF.js-interpreted
font data through ttx to check its correctness. The font tests are successful
if PDF.js can successfully read the font data and ttx can successfully read
the PDF.js-interpreted font data back, proving that PDF.js does not apply any
transformations that break the font data.
Running the font tests
The font tests are run on GitHub Actions using the workflow defined in
.github/workflows/font_tests.yml, but it is also possible to run the font
tests locally. The current stable versions of the following dependencies are
required to be installed on the system:
- Python 3
fonttools(see https://pypi.org/project/fonttools and https://github.com/fonttools/fonttools)
The recommended way of installing fonttools is using pip in a virtual
environment because it avoids having to do a system-wide installation and
therefore improves isolation, but any other way of installing fonttools
that makes ttx available in the PATH environment variable also works.
Using the virtual environment approach the font tests can be run locally by
creating and sourcing a virtual environment with fonttools installed in
it before running the font tests:
python3 -m venv venv
source venv/bin/activate
pip install fonttools
gulp fonttest