diff --git a/test/Makefile.am b/test/Makefile.am index 75e326c..88b7f27 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -55,6 +55,10 @@ check_PROGRAMS += test-bz96676 test_bz96676_LDADD = $(top_builddir)/src/libfontconfig.la TESTS += test-bz96676 +check_PROGRAMS += test-name-parse +test_name_parse_LDADD = $(top_builddir)/src/libfontconfig.la +TESTS += test-name-parse + EXTRA_DIST=run-test.sh $(TESTDATA) out.expected-long-family-names out.expected-no-long-family-names CLEANFILES=out fonts.conf diff --git a/test/test-name-parse.c b/test/test-name-parse.c new file mode 100644 index 0000000..0adb525 --- /dev/null +++ b/test/test-name-parse.c @@ -0,0 +1,90 @@ +#include +#include + +int +test (const FcChar8 *query, const FcPattern *expect) +{ + FcPattern *pat; + int c = 0; + + c++; + pat = FcNameParse (query); + if (!pat) + goto bail; + c++; + if (!FcPatternEqual (pat, expect)) + goto bail; + c = 0; +bail: + FcPatternDestroy (pat); + + return c; +} + +#define BEGIN(x) (x) = FcPatternCreate (); c++; +#define END(x) FcPatternDestroy (x); (x) = NULL +int +main (void) +{ + FcPattern *pat, *expect; + int c = 0, ret; + + BEGIN (expect) { + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"sans-serif"); + if ((ret = test ((const FcChar8 *)"sans\\-serif", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); + FcPatternAddInteger (expect, FC_SIZE, 10); + if ((ret = test ((const FcChar8 *)"Foo-10", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Bar"); + FcPatternAddInteger (expect, FC_SIZE, 10); + if ((ret = test ((const FcChar8 *)"Foo,Bar-10", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); + FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); + if ((ret = test ((const FcChar8 *)"Foo:weight=medium", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); + FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); + if ((ret = test ((const FcChar8 *)"Foo:weight_medium", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); + if ((ret = test ((const FcChar8 *)":medium", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddInteger (expect, FC_WIDTH, FC_WIDTH_NORMAL); + if ((ret = test ((const FcChar8 *)":normal", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddInteger (expect, FC_WIDTH, FC_WIDTH_NORMAL); + if ((ret = test ((const FcChar8 *)":normal", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcRange *r = FcRangeCreateDouble (FC_WEIGHT_MEDIUM, FC_WEIGHT_BOLD); + FcPatternAddRange (expect, FC_WEIGHT, r); + FcRangeDestroy (r); + if ((ret = test ((const FcChar8 *)":weight=[medium bold]", expect)) != 0) + goto bail; + } END (expect); + +bail: + if (expect) + FcPatternDestroy (expect); + + return ret == 0 ? 0 : (c - 1) * 2 + ret; +}