-
-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
858cc10
commit 688810f
Showing
5 changed files
with
329 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,4 +13,5 @@ | |
/pdfiototext | ||
/testpdfio | ||
/testpdfio-*.pdf | ||
/testttf | ||
/x64 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,305 @@ | ||
// | ||
// Unit test program for TTF library | ||
// | ||
// https://github.com/michaelrsweet/ttf | ||
// | ||
// Copyright © 2018-2023 by Michael R Sweet. | ||
// | ||
// Licensed under Apache License v2.0. See the file "LICENSE" for more | ||
// information. | ||
// | ||
// Usage: | ||
// | ||
// ./testttf [FILENAME] | ||
// | ||
|
||
#include <stdio.h> | ||
#include "ttf.h" | ||
|
||
|
||
// | ||
// Local functions... | ||
// | ||
|
||
static void error_cb(void *data, const char *message); | ||
static int test_font(const char *filename); | ||
|
||
|
||
// | ||
// 'main()' - Main entry for unit tests. | ||
// | ||
|
||
int // O - Exit status | ||
main(int argc, // I - Number of command-line arguments | ||
char *argv[]) // I - Command-line arguments | ||
{ | ||
int i; // Looping var | ||
int errors = 0; // Number of errors | ||
|
||
|
||
if (argc > 1) | ||
{ | ||
for (i = 1; i < argc; i ++) | ||
errors += test_font(argv[i]); | ||
} | ||
else | ||
{ | ||
// Test with the bundled TrueType files... | ||
errors += test_font("testfiles/OpenSans-Bold.ttf"); | ||
errors += test_font("testfiles/OpenSans-Regular.ttf"); | ||
errors += test_font("testfiles/NotoSansJP-Regular.otf"); | ||
} | ||
|
||
if (!errors) | ||
puts("\nALL TESTS PASSED"); | ||
else | ||
printf("\n%d TEST(S) FAILED\n", errors); | ||
|
||
return (errors); | ||
} | ||
|
||
|
||
// | ||
// 'error_cb()' - Error callback. | ||
// | ||
|
||
static void | ||
error_cb(void *data, // I - User data (not used) | ||
const char *message) // I - Message string | ||
{ | ||
fprintf(stderr, "FAIL (%s)\n", message); | ||
} | ||
|
||
|
||
// | ||
// 'test_font()' - Test a font file. | ||
// | ||
|
||
static int // O - Number of errors | ||
test_font(const char *filename) // I - Font filename | ||
{ | ||
int i, // Looping var | ||
errors = 0; // Number of errors | ||
ttf_t *font; // Font | ||
const char *value; // Font (string) value | ||
int intvalue; // Font (integer) value | ||
float realvalue; // Font (real) value | ||
ttf_rect_t bounds; // Bounds | ||
ttf_rect_t extents; // Extents | ||
size_t num_fonts; // Number of fonts | ||
ttf_style_t style; // Font style | ||
ttf_weight_t weight; // Font weight | ||
static const char * const stretches[] = | ||
{ // Font stretch strings | ||
"TTF_STRETCH_NORMAL", // normal | ||
"TTF_STRETCH_ULTRA_CONDENSED", // ultra-condensed | ||
"TTF_STRETCH_EXTRA_CONDENSED", // extra-condensed | ||
"TTF_STRETCH_CONDENSED", // condensed | ||
"TTF_STRETCH_SEMI_CONDENSED", // semi-condensed | ||
"TTF_STRETCH_SEMI_EXPANDED", // semi-expanded | ||
"TTF_STRETCH_EXPANDED", // expanded | ||
"TTF_STRETCH_EXTRA_EXPANDED", // extra-expanded | ||
"TTF_STRETCH_ULTRA_EXPANDED" // ultra-expanded | ||
}; | ||
static const char * const strings[] = // Test strings | ||
{ | ||
"Hello, World!", // English | ||
"مرحبا بالعالم!", // Arabic | ||
"Bonjour le monde!", // French | ||
"Γειά σου Κόσμε!", // Greek | ||
"שלום עולם!", // Hebrew | ||
"Привет мир!", // Russian | ||
"こんにちは世界!" // Japanese | ||
}; | ||
static const char * const styles[] = // Font style names | ||
{ | ||
"TTF_STYLE_NORMAL", | ||
"TTF_STYLE_ITALIC", | ||
"TTF_STYLE_OBLIQUE" | ||
}; | ||
|
||
|
||
printf("ttfCreate(\"%s\"): ", filename); | ||
if ((font = ttfCreate(filename, 0, error_cb, NULL)) != NULL) | ||
puts("PASS"); | ||
else | ||
errors ++; | ||
|
||
fputs("ttfGetAscent: ", stdout); | ||
if ((intvalue = ttfGetAscent(font)) > 0) | ||
{ | ||
printf("PASS (%d)\n", intvalue); | ||
} | ||
else | ||
{ | ||
printf("FAIL (%d)\n", intvalue); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetBounds: ", stdout); | ||
if (ttfGetBounds(font, &bounds)) | ||
{ | ||
printf("PASS (%g %g %g %g)\n", bounds.left, bounds.bottom, bounds.right, bounds.top); | ||
} | ||
else | ||
{ | ||
puts("FAIL"); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetCapHeight: ", stdout); | ||
if ((intvalue = ttfGetCapHeight(font)) > 0) | ||
{ | ||
printf("PASS (%d)\n", intvalue); | ||
} | ||
else | ||
{ | ||
printf("FAIL (%d)\n", intvalue); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetCopyright: ", stdout); | ||
if ((value = ttfGetCopyright(font)) != NULL) | ||
{ | ||
printf("PASS (%s)\n", value); | ||
} | ||
else | ||
{ | ||
puts("FAIL"); | ||
errors ++; | ||
} | ||
|
||
for (i = 0; i < (int)(sizeof(strings) / sizeof(strings[0])); i ++) | ||
{ | ||
printf("ttfGetExtents(\"%s\"): ", strings[i]); | ||
if (ttfGetExtents(font, 12.0f, strings[i], &extents)) | ||
{ | ||
printf("PASS (%.1f %.1f %.1f %.1f)\n", extents.left, extents.bottom, extents.right, extents.top); | ||
} | ||
else | ||
{ | ||
puts("FAIL"); | ||
errors ++; | ||
} | ||
} | ||
|
||
fputs("ttfGetFamily: ", stdout); | ||
if ((value = ttfGetFamily(font)) != NULL) | ||
{ | ||
printf("PASS (%s)\n", value); | ||
} | ||
else | ||
{ | ||
puts("FAIL"); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetItalicAngle: ", stdout); | ||
if ((realvalue = ttfGetItalicAngle(font)) >= 0.0) | ||
{ | ||
printf("PASS (%g)\n", realvalue); | ||
} | ||
else | ||
{ | ||
printf("FAIL (%g)\n", realvalue); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetNumFonts: ", stdout); | ||
if ((num_fonts = ttfGetNumFonts(font)) > 0) | ||
{ | ||
printf("PASS (%u)\n", (unsigned)num_fonts); | ||
} | ||
else | ||
{ | ||
puts("FAIL"); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetPostScriptName: ", stdout); | ||
if ((value = ttfGetPostScriptName(font)) != NULL) | ||
{ | ||
printf("PASS (%s)\n", value); | ||
} | ||
else | ||
{ | ||
puts("FAIL"); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetStretch: ", stdout); | ||
if ((intvalue = (int)ttfGetStretch(font)) >= TTF_STRETCH_NORMAL && intvalue <= TTF_STRETCH_ULTRA_EXPANDED) | ||
{ | ||
printf("PASS (%s)\n", stretches[intvalue]); | ||
} | ||
else | ||
{ | ||
printf("FAIL (%d)\n", intvalue); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetStyle: ", stdout); | ||
if ((style = ttfGetStyle(font)) >= TTF_STYLE_NORMAL && style <= TTF_STYLE_ITALIC) | ||
{ | ||
printf("PASS (%s)\n", styles[style]); | ||
} | ||
else | ||
{ | ||
puts("FAIL"); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetVersion: ", stdout); | ||
if ((value = ttfGetVersion(font)) != NULL) | ||
{ | ||
printf("PASS (%s)\n", value); | ||
} | ||
else | ||
{ | ||
puts("FAIL"); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetWeight: ", stdout); | ||
if ((weight = ttfGetWeight(font)) >= 0) | ||
{ | ||
printf("PASS (%u)\n", (unsigned)weight); | ||
} | ||
else | ||
{ | ||
puts("FAIL"); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetWidth(' '): ", stdout); | ||
if ((intvalue = ttfGetWidth(font, ' ')) > 0) | ||
{ | ||
printf("PASS (%d)\n", intvalue); | ||
} | ||
else | ||
{ | ||
printf("FAIL (%d)\n", intvalue); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfGetXHeight: ", stdout); | ||
if ((intvalue = ttfGetXHeight(font)) > 0) | ||
{ | ||
printf("PASS (%d)\n", intvalue); | ||
} | ||
else | ||
{ | ||
printf("FAIL (%d)\n", intvalue); | ||
errors ++; | ||
} | ||
|
||
fputs("ttfIsFixedPitch: ", stdout); | ||
if (ttfIsFixedPitch(font)) | ||
puts("PASS (true)"); | ||
else | ||
puts("PASS (false)"); | ||
|
||
ttfDelete(font); | ||
|
||
return (errors); | ||
} |
Oops, something went wrong.