summaryrefslogtreecommitdiff
path: root/pkg/fontconfig/test.zig
blob: bd121c1bc9e8314c2d3a790881b90dcb4fe12b5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const std = @import("std");
const fontconfig = @import("main.zig");

test "fc-list" {
    const testing = std.testing;

    var cfg = fontconfig.initLoadConfigAndFonts();
    defer cfg.destroy();

    var pat = fontconfig.Pattern.create();
    defer pat.destroy();

    var os = fontconfig.ObjectSet.create();
    defer os.destroy();

    var fs = cfg.fontList(pat, os);
    defer fs.destroy();

    // Note: this is environmental, but in general we expect all our
    // testing environments to have at least one font.
    try testing.expect(fs.fonts().len > 0);
}

test "fc-match" {
    const testing = std.testing;

    var cfg = fontconfig.initLoadConfigAndFonts();
    defer cfg.destroy();

    var pat = fontconfig.Pattern.create();
    errdefer pat.destroy();
    try testing.expect(cfg.substituteWithPat(pat, .pattern));
    pat.defaultSubstitute();

    const result = cfg.fontSort(pat, false, null);
    errdefer result.fs.destroy();

    var fs = fontconfig.FontSet.create();
    defer fs.destroy();
    defer for (fs.fonts()) |font| font.destroy();

    {
        const fonts = result.fs.fonts();
        try testing.expect(fonts.len > 0);
        for (fonts) |font| {
            const pat_prep = try cfg.fontRenderPrepare(pat, font);
            try testing.expect(fs.add(pat_prep));
        }
        result.fs.destroy();
        pat.destroy();
    }

    {
        for (fs.fonts()) |font| {
            var it = font.objectIterator();
            while (it.next()) {
                try testing.expect(it.object().len > 0);
                try testing.expect(it.valueLen() > 0);
                var value_it = it.valueIterator();
                while (value_it.next()) |entry| {
                    try testing.expect(entry.value != .unknown);
                }
            }
        }
    }
}