test-name-parse.c revision a32e9e42
1#include <fontconfig/fontconfig.h>
2#include <stdio.h>
3
4static int
5test (const FcChar8 *query, const FcPattern *expect)
6{
7    FcPattern *pat;
8    int c = 0;
9
10    c++;
11    pat = FcNameParse (query);
12    if (!pat)
13	goto bail;
14    c++;
15    if (!FcPatternEqual (pat, expect))
16	goto bail;
17    c = 0;
18bail:
19    FcPatternDestroy (pat);
20
21    return c;
22}
23
24#define BEGIN(x)	(x) = FcPatternCreate (); c++;
25#define END(x)		FcPatternDestroy (x); (x) = NULL
26int
27main (void)
28{
29    FcPattern *expect;
30    int c = 0, ret;
31
32    BEGIN (expect) {
33	FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"sans-serif");
34	if ((ret = test ((const FcChar8 *)"sans\\-serif", expect)) != 0)
35	    goto bail;
36    } END (expect);
37    BEGIN (expect) {
38	FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo");
39	FcPatternAddInteger (expect, FC_SIZE, 10);
40	if ((ret = test ((const FcChar8 *)"Foo-10", expect)) != 0)
41	    goto bail;
42    } END (expect);
43    BEGIN (expect) {
44	FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo");
45	FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Bar");
46	FcPatternAddInteger (expect, FC_SIZE, 10);
47	if ((ret = test ((const FcChar8 *)"Foo,Bar-10", expect)) != 0)
48	    goto bail;
49    } END (expect);
50    BEGIN (expect) {
51	FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo");
52	FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM);
53	if ((ret = test ((const FcChar8 *)"Foo:weight=medium", expect)) != 0)
54	    goto bail;
55    } END (expect);
56    BEGIN (expect) {
57	FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo");
58	FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM);
59	if ((ret = test ((const FcChar8 *)"Foo:weight_medium", expect)) != 0)
60	    goto bail;
61    } END (expect);
62    BEGIN (expect) {
63	FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM);
64	if ((ret = test ((const FcChar8 *)":medium", expect)) != 0)
65	    goto bail;
66    } END (expect);
67    BEGIN (expect) {
68	FcPatternAddInteger (expect, FC_WIDTH, FC_WIDTH_NORMAL);
69	if ((ret = test ((const FcChar8 *)":normal", expect)) != 0)
70	    goto bail;
71    } END (expect);
72    BEGIN (expect) {
73	FcPatternAddInteger (expect, FC_WIDTH, FC_WIDTH_NORMAL);
74	if ((ret = test ((const FcChar8 *)":normal", expect)) != 0)
75	    goto bail;
76    } END (expect);
77    BEGIN (expect) {
78	FcRange *r = FcRangeCreateDouble (FC_WEIGHT_MEDIUM, FC_WEIGHT_BOLD);
79	FcPatternAddRange (expect, FC_WEIGHT, r);
80	FcRangeDestroy (r);
81	if ((ret = test ((const FcChar8 *)":weight=[medium bold]", expect)) != 0)
82	    goto bail;
83    } END (expect);
84
85bail:
86    if (expect)
87	FcPatternDestroy (expect);
88
89    return ret == 0 ? 0 : (c - 1) * 2 + ret;
90}
91