diff options
author | David Turner <david@freetype.org> | 2021-06-15 23:12:57 +0200 |
---|---|---|
committer | David Turner <david@freetype.org> | 2021-06-16 10:28:47 +0200 |
commit | 6f273f68788265b2bf0a127be68062f5eaccbb1b (patch) | |
tree | 15ef2ed0fa826f5961e6d5da508509deea23ce8d /tests | |
parent | c6fcd61228ea349e76aa4f09442c431308da3262 (diff) | |
download | freetype2-6f273f68788265b2bf0a127be68062f5eaccbb1b.tar.gz |
[meson] Add first regression test to FreeType
* tests/README.md: documentation explaining how to
build and run the tests with the Meson build.
* tests/scripts/download-test-fonts.sh: Simple script
to download test font files to the 'tests/data/'
folder.
* meson.build, meson_options.txt, tests/meson.build:
Add 'tests' option to enable building and running the
test programs, disabled by default.
* tests/issue-1063/main.c: Simple regression test to
exhibit issue 1063.
* .gitignore: Ignore the content of the tests/data/
folder for now.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/README.md | 22 | ||||
-rw-r--r-- | tests/issue-1063/main.c | 32 | ||||
-rw-r--r-- | tests/meson.build | 7 | ||||
-rwxr-xr-x | tests/scripts/download-test-fonts.sh | 66 |
4 files changed, 127 insertions, 0 deletions
diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 000000000..f6f861182 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,22 @@ +# Unit and regression tests for the FreeType library + +## Quick Start + +### Download test fonts + +Run the `tests/scripts/download-fonts.sh` script, which will +download test fonts to the `tests/data/` directory first. + +### Build the test programs + +The tests are only built with the Meson build system, and +are disabled by default, enable the 'tests' option to compile +them, as in: + + meson setup out -Dtests=enabled + meson compile -C out + +### Run the test programs + + meson test -C out + diff --git a/tests/issue-1063/main.c b/tests/issue-1063/main.c new file mode 100644 index 000000000..eac02642a --- /dev/null +++ b/tests/issue-1063/main.c @@ -0,0 +1,32 @@ +#include <stdio.h> + +#include <freetype/freetype.h> +#include <ft2build.h> + +int +main( void ) +{ + FT_Library library; + FT_Face face; + + /* Assumes this is run from out/ build directory though 'meson test -C out' */ + const char* filepath = "../tests/data/As.I.Lay.Dying.ttf"; + + FT_Init_FreeType( &library ); + FT_New_Face( library, filepath, 0, &face ); + if ( !face ) + { + fprintf( stderr, "Could not open file: %s\n", filepath ); + return 1; + } + + for ( FT_ULong i = 59; i < 171; i++ ) + { + FT_UInt gid = FT_Get_Char_Index( face, i ); + FT_Error code = FT_Load_Glyph( face, gid, FT_LOAD_DEFAULT ); + if ( code ) + printf( "unknown %d for char %lu, gid %u\n", code, i, gid ); + } + + return 0; +} diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 000000000..8c5d0345f --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,7 @@ +test_issue_1063 = executable('issue-1063', + files([ 'issue-1063/main.c' ]), + dependencies: freetype_dep, +) + +test('issue-1063', test_issue_1063, suite: 'regression') + diff --git a/tests/scripts/download-test-fonts.sh b/tests/scripts/download-test-fonts.sh new file mode 100755 index 000000000..1158f10c5 --- /dev/null +++ b/tests/scripts/download-test-fonts.sh @@ -0,0 +1,66 @@ +#!/usr/bin/bash +# Download test fonts used by the FreeType regression test programs. +# These will be copied to $FREETYPE/tests/data/ +# Each font file contains an 8-hexchar prefix corresponding to its md5sum + +set -e + +export LANG=C +export LC_ALL=C + +PROGDIR=$(dirname "$0") +PROGNAME=$(basename "$0") + +# Download a file from a given URL +# +# $1: URL +# $2: Destination directory +# $3: If not empty, destination file name. Default is to take +# the URL's basename. +# +download_file () { + local URL=$1 + local DST_DIR=$2 + local DST_FILE=$3 + if [[ -z "$DST_FILE" ]]; then + DST_FILE=$(basename "$URL") + fi + echo "URL: $URL" + wget -q -O "$DST_DIR/$DST_FILE" "$URL" +} + +# $1: URL +# $2: Destination directory +# $3+: Optional file list, otherwise the full archive is extracted to $2 +download_and_extract_zip () { + local URL=$1 + local DST_DIR=$2 + shift + shift + TEMP_DST_DIR=$(mktemp -d) + TEMP_DST_NAME="a.zip" + download_file "$URL" "$TEMP_DST_DIR" "$TEMP_DST_NAME" + unzip -qo "$TEMP_DST_DIR/$TEMP_DST_NAME" -d "$DST_DIR" "$@" + rm -rf "$TEMP_DST_DIR" +} + +# $1: File path +# $2: Expected md5sum +md5sum_check () { + local FILE=$1 + local EXPECTED=$2 + local HASH=$(md5sum "$FILE" | cut -d" " -f1) + if [[ "$EXPECTED" != "$HASH" ]]; then + echo "$FILE: Invalid md5sum $HASH expected $EXPECTED" + return 1 + fi +} + +INSTALL_DIR=$(cd $PROGDIR/.. && pwd)/data + +mkdir -p "$INSTALL_DIR" + +# See https://gitlab.freedesktop.org/freetype/freetype/-/issues/1063 +download_and_extract_zip "https://github.com/python-pillow/Pillow/files/6622147/As.I.Lay.Dying.zip" "$INSTALL_DIR" +mv "$INSTALL_DIR/As I Lay Dying.ttf" "$INSTALL_DIR/As.I.Lay.Dying.ttf" +md5sum_check "$INSTALL_DIR/As.I.Lay.Dying.ttf" e153d60e66199660f7cfe99ef4705ad7 |