Add trivial parsing test case

This commit is contained in:
Isaac Freund
2020-09-23 19:33:46 +02:00
parent cca2cd4943
commit de61447c13
2 changed files with 50 additions and 6 deletions
+20 -6
View File
@@ -4,12 +4,26 @@ pub fn build(b: *Builder) void {
const target = b.standardTargetOptions(.{});
const mode = b.standardReleaseOptions();
const scanner = b.addExecutable("scanner", "scanner.zig");
scanner.setTarget(target);
scanner.setBuildMode(mode);
{
const scanner = b.addExecutable("scanner", "scanner.zig");
scanner.setTarget(target);
scanner.setBuildMode(mode);
scanner.linkLibC();
scanner.linkSystemLibrary("expat");
scanner.linkLibC();
scanner.linkSystemLibrary("expat");
scanner.install();
scanner.install();
}
{
const scanner_test = b.addTest("scanner.zig");
scanner_test.setTarget(target);
scanner_test.setBuildMode(mode);
scanner_test.linkLibC();
scanner_test.linkSystemLibrary("expat");
const test_step = b.step("test", "Run the tests");
test_step.dependOn(&scanner_test.step);
}
}
+30
View File
@@ -204,3 +204,33 @@ fn characterData(user_data: ?*c_void, s: ?[*]const u8, len: i32) callconv(.C) vo
const ctx = @intToPtr(*Context, @ptrToInt(user_data));
ctx.character_data.appendSlice(s.?[0..@intCast(usize, len)]) catch std.os.exit(1);
}
test "parsing" {
const testing = std.testing;
const parser = c.XML_ParserCreate(null) orelse return error.ParserCreateFailed;
defer c.XML_ParserFree(parser);
var ctx = Context{
.protocol = undefined,
.interface = undefined,
.message = undefined,
.enumeration = undefined,
};
defer ctx.deinit();
c.XML_SetUserData(parser, &ctx);
c.XML_SetElementHandler(parser, start, end);
c.XML_SetCharacterDataHandler(parser, characterData);
const sample =
\\<?xml version="1.0" encoding="UTF-8"?>
\\<protocol name="sample">
\\</protocol>
;
if (c.XML_Parse(parser, sample, sample.len, 1) == .XML_STATUS_ERROR)
return error.ParserError;
testing.expectEqualSlices(u8, ctx.protocol.name, "sample");
}