Skip to content

Commit

Permalink
refactor: Move testing.runMain into testing.Prefix
Browse files Browse the repository at this point in the history
  • Loading branch information
Hejsil committed Mar 7, 2025
1 parent 67beb68 commit c474f43
Showing 1 changed file with 59 additions and 69 deletions.
128 changes: 59 additions & 69 deletions src/testing.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ test "dipm install test-file" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-file" } });
try prefix.run(&.{ "install", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0
\\
Expand All @@ -29,7 +29,7 @@ test "dipm install test-xz" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-xz" } });
try prefix.run(&.{ "install", "test-xz" });
try prefix.expectFile("stderr",
\\✓ test-xz 0.1.0
\\
Expand All @@ -56,7 +56,7 @@ test "dipm install test-gz" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-gz" } });
try prefix.run(&.{ "install", "test-gz" });
try prefix.expectFile("stderr",
\\✓ test-gz 0.1.0
\\
Expand All @@ -83,7 +83,7 @@ test "install test-zst" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-zst" } });
try prefix.run(&.{ "install", "test-zst" });
try prefix.expectFile("stderr",
\\✓ test-zst 0.1.0
\\
Expand All @@ -110,10 +110,7 @@ test "dipm install test-zst test-zst test-xz test-xz" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{
.prefix = prefix,
.args = &.{ "install", "test-zst", "test-zst", "test-xz", "test-xz" },
});
try prefix.run(&.{ "install", "test-zst", "test-zst", "test-xz", "test-xz" });
try prefix.expectFile("stderr",
\\✓ test-zst 0.1.0
\\✓ test-xz 0.1.0
Expand All @@ -125,13 +122,13 @@ test "dipm install test-file && dipm install test-file" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-file" } });
try prefix.run(&.{ "install", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0
\\
);

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-file" } });
try prefix.run(&.{ "install", "test-file" });
try prefix.expectFile("stderr",
\\⚠ test-file
\\└── Package already installed
Expand All @@ -143,13 +140,13 @@ test "dipm install test-file && dipm uninstall test-file" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-file" } });
try prefix.run(&.{ "install", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0
\\
);

try runMain(.{ .prefix = prefix, .args = &.{ "uninstall", "test-file" } });
try prefix.run(&.{ "uninstall", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0 -> ✗
\\
Expand All @@ -166,7 +163,7 @@ test "dipm uninstall test-file" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "uninstall", "test-file" } });
try prefix.run(&.{ "uninstall", "test-file" });
try prefix.expectFile("stderr",
\\⚠ test-file
\\└── Package is not installed
Expand All @@ -178,19 +175,19 @@ test "dipm install test-file && dipm uninstall test-file && dipm uninstall test-
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-file" } });
try prefix.run(&.{ "install", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0
\\
);

try runMain(.{ .prefix = prefix, .args = &.{ "uninstall", "test-file" } });
try prefix.run(&.{ "uninstall", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0 -> ✗
\\
);

try runMain(.{ .prefix = prefix, .args = &.{ "uninstall", "test-file" } });
try prefix.run(&.{ "uninstall", "test-file" });
try prefix.expectFile("stderr",
\\⚠ test-file
\\└── Package is not installed
Expand All @@ -202,7 +199,7 @@ test "dipm install test-xz test-zst && dipm update test-xz" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-xz", "test-zst" } });
try prefix.run(&.{ "install", "test-xz", "test-zst" });
try prefix.expectFile("stderr",
\\✓ test-xz 0.1.0
\\✓ test-zst 0.1.0
Expand Down Expand Up @@ -232,7 +229,7 @@ test "dipm install test-xz test-zst && dipm update test-xz" {
var prefix_v2 = try setupPrefix(.{ .version = "0.2.0", .prefix = prefix.prefix });
defer prefix_v2.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "update", "test-xz" } });
try prefix.run(&.{ "update", "test-xz" });
try prefix.expectFile("stderr",
\\✓ test-xz 0.1.0 -> 0.2.0
\\
Expand Down Expand Up @@ -261,7 +258,7 @@ test "dipm install test-xz test-zst && dipm update" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-xz", "test-zst" } });
try prefix.run(&.{ "install", "test-xz", "test-zst" });
try prefix.expectFile("stderr",
\\✓ test-xz 0.1.0
\\✓ test-zst 0.1.0
Expand Down Expand Up @@ -291,7 +288,7 @@ test "dipm install test-xz test-zst && dipm update" {
var prefix_v2 = try setupPrefix(.{ .version = "0.2.0", .prefix = prefix.prefix });
defer prefix_v2.deinit();

try runMain(.{ .prefix = prefix, .args = &.{"update"} });
try prefix.run(&.{"update"});
try prefix.expectFile("stderr",
\\✓ test-xz 0.1.0 -> 0.2.0
\\✓ test-zst 0.1.0 -> 0.2.0
Expand Down Expand Up @@ -321,7 +318,7 @@ test "dipm install test-xz test-gz && dipm update && dipm uninstall test-xz test
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-xz", "test-gz" } });
try prefix.run(&.{ "install", "test-xz", "test-gz" });
try prefix.expectFile("stderr",
\\✓ test-xz 0.1.0
\\✓ test-gz 0.1.0
Expand All @@ -332,14 +329,14 @@ test "dipm install test-xz test-gz && dipm update && dipm uninstall test-xz test
var prefix_v2 = try setupPrefix(.{ .version = "0.2.0", .prefix = prefix.prefix });
defer prefix_v2.deinit();

try runMain(.{ .prefix = prefix, .args = &.{"update"} });
try prefix.run(&.{"update"});
try prefix.expectFile("stderr",
\\✓ test-xz 0.1.0 -> 0.2.0
\\✓ test-gz 0.1.0 -> 0.2.0
\\
);

try runMain(.{ .prefix = prefix, .args = &.{ "uninstall", "test-xz", "test-gz" } });
try prefix.run(&.{ "uninstall", "test-xz", "test-gz" });
try prefix.expectFile("stderr",
\\✓ test-xz 0.2.0 -> ✗
\\✓ test-gz 0.2.0 -> ✗
Expand All @@ -351,7 +348,7 @@ test "dipm install wrong-hash" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

const res = runMain(.{ .prefix = prefix, .args = &.{ "install", "wrong-hash" } });
const res = prefix.run(&.{ "install", "wrong-hash" });
try std.testing.expectError(Diagnostics.Error.DiagnosticsReported, res);
try prefix.expectFile("stderr",
\\✗ wrong-hash 0.1.0
Expand All @@ -366,7 +363,7 @@ test "dipm install not-found" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "not-found" } });
try prefix.run(&.{ "install", "not-found" });
try prefix.expectFile("stderr",
\\⚠ not-found
\\└── Package not found
Expand All @@ -378,13 +375,13 @@ test "dipm install test-xz test-xz && dipm uninstall test-xz test-xz" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-xz", "test-xz" } });
try prefix.run(&.{ "install", "test-xz", "test-xz" });
try prefix.expectFile("stderr",
\\✓ test-xz 0.1.0
\\
);

try runMain(.{ .prefix = prefix, .args = &.{ "uninstall", "test-xz", "test-xz" } });
try prefix.run(&.{ "uninstall", "test-xz", "test-xz" });
try prefix.expectFile("stderr",
\\✓ test-xz 0.1.0 -> ✗
\\
Expand All @@ -395,7 +392,7 @@ test "dipm install not-found not-found" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "not-found", "not-found" } });
try prefix.run(&.{ "install", "not-found", "not-found" });
try prefix.expectFile("stderr",
\\⚠ not-found
\\└── Package not found
Expand All @@ -407,16 +404,13 @@ test "dipm install test-file && dipm update test-file" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{
.args = &.{ "install", "test-file" },
.prefix = prefix,
});
try prefix.run(&.{ "install", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0
\\
);

try runMain(.{ .prefix = prefix, .args = &.{ "update", "test-file" } });
try prefix.run(&.{ "update", "test-file" });
try prefix.expectFile("stderr",
\\⚠ test-file 0.1.0
\\└── Package is up to date
Expand All @@ -428,13 +422,13 @@ test "dipm install test-file && dipm update --force test-file" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-file" } });
try prefix.run(&.{ "install", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0
\\
);

try runMain(.{ .prefix = prefix, .args = &.{ "update", "--force", "test-file" } });
try prefix.run(&.{ "update", "--force", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0 -> 0.1.0
\\
Expand All @@ -445,13 +439,13 @@ test "dipm install test-file && dipm update" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-file" } });
try prefix.run(&.{ "install", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0
\\
);

try runMain(.{ .prefix = prefix, .args = &.{"update"} });
try prefix.run(&.{"update"});
try prefix.expectFile("stderr",
\\
);
Expand All @@ -461,13 +455,13 @@ test "dipm install test-file && dipm update --force" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "test-file" } });
try prefix.run(&.{ "install", "test-file" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0
\\
);

try runMain(.{ .prefix = prefix, .args = &.{ "update", "--force" } });
try prefix.run(&.{ "update", "--force" });
try prefix.expectFile("stderr",
\\✓ test-file 0.1.0 -> 0.1.0
\\
Expand All @@ -478,7 +472,7 @@ test "dipm install fails-download" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

const res = runMain(.{ .prefix = prefix, .args = &.{ "install", "fails-download" } });
const res = prefix.run(&.{ "install", "fails-download" });
try std.testing.expectError(Diagnostics.Error.DiagnosticsReported, res);
try prefix.expectFileStartsWith("stderr",
\\✗ fails-download 0.1.0
Expand All @@ -490,8 +484,8 @@ test "dipm install packages with shared files in bin/" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "dup-bin1" } });
const res = runMain(.{ .prefix = prefix, .args = &.{ "install", "dup-bin2" } });
try prefix.run(&.{ "install", "dup-bin1" });
const res = prefix.run(&.{ "install", "dup-bin2" });
try std.testing.expectError(Diagnostics.Error.DiagnosticsReported, res);
try prefix.expectFileStartsWith("stderr",
\\✗ dup-bin2
Expand All @@ -504,8 +498,8 @@ test "dipm install packages with shared files in lib/" {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

try runMain(.{ .prefix = prefix, .args = &.{ "install", "dup-lib1" } });
const res = runMain(.{ .prefix = prefix, .args = &.{ "install", "dup-lib2" } });
try prefix.run(&.{ "install", "dup-lib1" });
const res = prefix.run(&.{ "install", "dup-lib2" });
try std.testing.expectError(Diagnostics.Error.DiagnosticsReported, res);
try prefix.expectFileStartsWith("stderr",
\\✗ dup-lib2
Expand All @@ -527,7 +521,7 @@ fn fuzz(_: void, fuzz_input: []const u8) !void {
var prefix = try setupPrefix(.{ .version = "0.1.0" });
defer prefix.deinit();

runMain(.{ .prefix = prefix, .args = args.items }) catch |err| switch (err) {
prefix.run(args.items) catch |err| switch (err) {
Diagnostics.Error.DiagnosticsReported => {},
error.InvalidArgument => {},
else => try std.testing.expect(false),
Expand All @@ -538,30 +532,6 @@ test "fuzz" {
try std.testing.fuzz({}, fuzz, .{});
}

pub fn runMain(options: struct {
gpa: std.mem.Allocator = std.testing.allocator,
args: []const []const u8,
prefix: Prefix,
}) !void {
var dir = try std.fs.cwd().openDir(options.prefix.prefix, .{});
defer dir.close();

var stdout = try dir.createFile("stdout", .{ .read = true });
defer stdout.close();

var stderr = try dir.createFile("stderr", .{ .read = true });
defer stderr.close();

try main.mainFull(.{
.gpa = options.gpa,
.args = options.args,
.stdout = stdout,
.stderr = stderr,
.forced_prefix = options.prefix.prefix,
.forced_pkgs_uri = options.prefix.pkgs_uri,
});
}

pub fn setupPrefix(options: struct {
gpa: std.mem.Allocator = std.testing.allocator,
version: []const u8,
Expand Down Expand Up @@ -665,6 +635,26 @@ pub const Prefix = struct {
prefix.gpa.free(prefix.prefix);
}

pub fn run(prefix: Prefix, args: []const []const u8) !void {
var dir = try std.fs.cwd().openDir(prefix.prefix, .{});
defer dir.close();

var stdout = try dir.createFile("stdout", .{ .read = true });
defer stdout.close();

var stderr = try dir.createFile("stderr", .{ .read = true });
defer stderr.close();

try main.mainFull(.{
.gpa = prefix.gpa,
.args = args,
.stdout = stdout,
.stderr = stderr,
.forced_prefix = prefix.prefix,
.forced_pkgs_uri = prefix.pkgs_uri,
});
}

pub fn expectNoFile(prefix: Prefix, file: []const u8) !void {
const err_file = prefix.prefix_dir.openFile(file, .{});
defer if (err_file) |f| f.close() else |_| {};
Expand Down

0 comments on commit c474f43

Please sign in to comment.