1
0
Fork 0
mirror of https://github.com/zigzap/zap.git synced 2025-10-20 23:24:09 +00:00
zap/src/tests/test_mustache.zig
sadbeast 42cd2fd624 Add MustacheLoad to support loading from file
According to the facil.io docs
(http://facil.io/0.7.x/fiobj_mustache#fiobj_mustache_new):

> By setting the filename argument even when the data argument exists,
> it will allow path resolution for partial templates. Otherwise, there
> is no way to know where to find the partial templates.

This will allow partial templates to work.

However, this also introduces a breaking change to the existing
MustacheNew function. This change makes it mirror the C version where it
accepts a MustacheLoadArgs struct instead of just the data.  That's also
a handy method to have, so I renamed that to MustacheData...maybe
there's a better name?
2023-09-12 17:38:53 -07:00

44 lines
1.1 KiB
Zig

const std = @import("std");
const zap = @import("zap");
const User = struct {
name: []const u8,
id: isize,
};
const data = .{
.users = [_]User{
.{
.name = "Rene",
.id = 1,
},
.{
.name = "Caro",
.id = 6,
},
},
.nested = .{
.item = "nesting works",
},
};
test "MustacheData" {
const template = "{{=<< >>=}}* Users:\n<<#users>><<id>>. <<& name>> (<<name>>)\n<</users>>\nNested: <<& nested.item >>.";
const p = try zap.MustacheData(template);
defer zap.MustacheFree(p);
const ret = zap.MustacheBuild(p, data);
defer ret.deinit();
try std.testing.expectEqualSlices(u8, "* Users:\n1. Rene (Rene)\n6. Caro (Caro)\nNested: nesting works.", ret.str().?);
}
test "MustacheLoad" {
const p = try zap.MustacheLoad("./src/tests/testtemplate.html");
defer zap.MustacheFree(p);
const ret = zap.MustacheBuild(p, data);
defer ret.deinit();
try std.testing.expectEqualSlices(u8, "* Users:\n1. Rene (Rene)\n6. Caro (Caro)\nNested: nesting works.\n", ret.str().?);
}