summaryrefslogtreecommitdiff
path: root/test/test-name-parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/test-name-parse.c')
-rw-r--r--test/test-name-parse.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/test/test-name-parse.c b/test/test-name-parse.c
new file mode 100644
index 00000000..0adb525c
--- /dev/null
+++ b/test/test-name-parse.c
@@ -0,0 +1,90 @@
+#include <fontconfig/fontconfig.h>
+#include <stdio.h>
+
+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;
+}