diff --git a/build.zig b/build.zig index 4b05bf1..a4017b0 100644 --- a/build.zig +++ b/build.zig @@ -33,6 +33,8 @@ pub fn build(b: *std.Build) void { .optimize = optimize, }); + main_tests.linkLibrary(nats_c); + const run_main_tests = b.addRunArtifact(main_tests); const test_step = b.step("test", "Run tests"); test_step.dependOn(&run_main_tests.step); diff --git a/src/message.zig b/src/message.zig index 1c9d103..4963eb5 100644 --- a/src/message.zig +++ b/src/message.zig @@ -113,3 +113,63 @@ pub const Message = opaque { // NATS_EXTERN const char* stanMsg_GetData(const stanMsg *msg); // NATS_EXTERN int stanMsg_GetDataLength(const stanMsg *msg); // NATS_EXTERN void stanMsg_Destroy(stanMsg *msg); + +test "message: create message" { + const subject = "hello"; + const reply = "reply"; + const data = "world"; + + const nats = @import("./nats.zig"); + + // have to initialize the library so the reference counter can correctly destroy + // objects, otherwise we segfault on trying to free the memory. + try nats.init(-1); + defer nats.deinit(); + + const message = try Message.create(subject, reply, data); + defer message.destroy(); + + const message2 = try Message.create(subject, null, data); + defer message2.destroy(); + + const message3 = try Message.create(subject, data, null); + defer message3.destroy(); + + const message4 = try Message.create(subject, null, null); + defer message4.destroy(); +} + +test "message: get subject" { + const nats = @import("./nats.zig"); + + try nats.init(-1); + defer nats.deinit(); + + const subject = "hello"; + const message = try Message.create(subject, null, null); + defer message.destroy(); + + const received = message.getSubject(); + try std.testing.expectEqualStrings(subject, received); +} + +test "message: get reply" { + const nats = @import("./nats.zig"); + + try nats.init(-1); + defer nats.deinit(); + + const subject = "hello"; + const reply = "reply"; + const message = try Message.create(subject, reply, null); + defer message.destroy(); + + const received = message.getReply() orelse return error.TestUnexpectedResult; + try std.testing.expectEqualStrings(reply, received); + + const message2 = try Message.create(subject, null, null); + defer message2.destroy(); + + const received2 = message2.getReply(); + try std.testing.expect(received2 == null); +} diff --git a/src/nats.zig b/src/nats.zig index 3af8145..4d40796 100644 --- a/src/nats.zig +++ b/src/nats.zig @@ -150,6 +150,10 @@ pub const Statistics = opaque { } }; +test { + std.testing.refAllDecls(@This()); +} + // NATS_EXTERN natsStatus nats_Sign(const char *encodedSeed, const char *input, unsigned char **signature, int *signatureLength); // NATS_EXTERN natsStatus natsOptions_Create(natsOptions **newOpts);