diff options
Diffstat (limited to 'lib/std/testing.zig')
| -rw-r--r-- | lib/std/testing.zig | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/std/testing.zig b/lib/std/testing.zig index 5049218c90..4146e033b4 100644 --- a/lib/std/testing.zig +++ b/lib/std/testing.zig @@ -355,6 +355,19 @@ pub const TmpDir = struct { const random_bytes_count = 12; const sub_path_len = std.fs.base64_encoder.calcSize(random_bytes_count); + /// caller owns memory + pub fn getFullPath(self: *TmpDir, alloc: std.mem.Allocator) ![]u8 { + const cwd_str = try std.process.getCwdAlloc(alloc); + defer alloc.free(cwd_str); + const path = try std.fs.path.join(alloc, &[_][]const u8{ + cwd_str, + "zig-cache", + "tmp", + &self.sub_path, + }); + return path; + } + pub fn cleanup(self: *TmpDir) void { self.dir.close(); self.parent_dir.deleteTree(&self.sub_path) catch {}; @@ -400,6 +413,43 @@ pub fn tmpDir(opts: std.fs.Dir.OpenDirOptions) TmpDir { }; } +const TestArgs = struct { + testexec: [:0]const u8 = undefined, + zigexec: [:0]const u8 = undefined, +}; + +/// Get test arguments inside test block by regular test runner ('zig test file.zig') +/// Caller must provide backing ArgIterator +pub fn getTestArgs(it: *std.process.ArgIterator) !TestArgs { + var testargs = TestArgs{}; + testargs.testexec = it.next() orelse unreachable; + testargs.zigexec = it.next() orelse unreachable; + try expect(!it.skip()); + return testargs; +} + +test "getTestArgs" { + var it = try std.process.argsWithAllocator(allocator); + const testargs = try getTestArgs(&it); + defer it.deinit(); // no-op unless WASI or Windows + try expect(testargs.testexec.len > 0); // zig compiler executable path + try expect(testargs.zigexec.len > 0); // test runner executable path +} + +/// Spawns child process with 'zigexec build-exe zigfile -femit-bin=binfile' +/// and expects success +pub fn buildExe(zigexec: []const u8, zigfile: []const u8, binfile: []const u8) !void { + const flag_emit = "-femit-bin="; + const cmd_emit = try std.mem.concat(allocator, u8, &[_][]const u8{ flag_emit, binfile }); + defer allocator.free(cmd_emit); + const args = [_][]const u8{ zigexec, "build-exe", zigfile, cmd_emit }; + var procCompileChild = try std.ChildProcess.init(&args, allocator); + defer procCompileChild.deinit(); + try procCompileChild.spawn(); + const ret_val = try procCompileChild.wait(); + try expectEqual(ret_val, .{ .Exited = 0 }); +} + test "expectEqual nested array" { const a = [2][2]f32{ [_]f32{ 1.0, 0.0 }, |
