Skip to content

Latest commit

 

History

History
55 lines (40 loc) · 2.34 KB

README.md

File metadata and controls

55 lines (40 loc) · 2.34 KB

FontTest

This is a very early draft for what might become some day an OpenType test suite. The purpose of this test suite is to make sure that all OpenType implementations render fonts in a reasonably similar way. Currently, the test suite is very much in its infancy, so please don’t be disappointed if you don’t find much. Of course you are more than welcome to help; just send a pull request.

$ git clone --recursive https://github.com/brawer/fonttest.git && cd fonttest
$ python check.py --output=report.html --engine=FreeStack

Supported Platforms

Currently, the test suite supports only two OpenType implementations:

  • With --engine=FreeStack, the tests are run on the free/libre open-source text rendering stack with FreeType, HarfBuzz, FriBidi, and Raqm. These libraries are used by Linux, Android, ChromeOS, and many other systems.

  • With --engine=CoreText, the tests are run on Apple’s CoreText. This option will work only if you run the test suite on MacOS X.

If you’d like to test another OpenType implementation, please go ahead.

Generated Reports

When you pass --output=report.html, the test suite will generate a test report that explains what was tested, which tests have passed, and which ones have failed. By clicking the following links, you can also just look at the reports for FreeStack and CoreText without running the test suite yourself.

Test Cases

The test cases are defined in the testcases directory. It contains HTML snippets which describe each test, and define the rendering parameters together with the expected result.

For each test case, the check.py script parses the HTML snippet to extract the rendering parameters. Then, it runs a sub-process (written in C++ and Objective C) that writes the observed rendering in SVG format to Standard Output. Finally, the script checks whether the expected rendering matches the observed result. Currently, “matching” is implemented as exact string equality on the SVG file; if needed, this could of course be made resilient to small rounding differences.