aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManlio Perillo <[email protected]>2023-05-09 17:15:22 +0200
committerManlio Perillo <[email protected]>2023-05-09 17:28:41 +0200
commit7aa0737929a5de8420e4a90654ed49309add1ec2 (patch)
treeaf9abebe585ca1936f9332f84fc58a23c9907e35
parente4e096c680fc2c8b577cd64bbffc26baf250551a (diff)
downloadziglings-7aa0737929a5de8420e4a90654ed49309add1ec2.tar.xz
ziglings-7aa0737929a5de8420e4a90654ed49309add1ec2.zip
Restore unit tests
Commit dbd42bb (Cleaning up zig build output) broke the unit test. Always use exit code 2, instead of 0. This is the exit code used by the build runner to notify the compiler to not report any further diagnostics. Move the Ziglings logo from the `build` function scope to the global scope, and make it public so that tests.zig can use it to find the number of lines to skip, instead of using an hard coded value. Fixes #295
-rw-r--r--build.zig40
-rw-r--r--test/tests.zig5
2 files changed, 23 insertions, 22 deletions
diff --git a/build.zig b/build.zig
index 582350d..c762457 100644
--- a/build.zig
+++ b/build.zig
@@ -74,9 +74,22 @@ pub const Exercise = struct {
}
};
+pub const logo =
+ \\ _ _ _
+ \\ ___(_) __ _| (_)_ __ __ _ ___
+ \\ |_ | |/ _' | | | '_ \ / _' / __|
+ \\ / /| | (_| | | | | | | (_| \__ \
+ \\ /___|_|\__, |_|_|_| |_|\__, |___/
+ \\ |___/ |___/
+ \\
+ \\ "Look out! Broken programs below!"
+ \\
+ \\
+;
+
pub fn build(b: *Build) !void {
if (!compat.is_compatible) compat.die();
- if (!validate_exercises()) std.os.exit(1);
+ if (!validate_exercises()) std.os.exit(2);
use_color_escapes = false;
if (std.io.getStdErr().supportsAnsiEscapeCodes()) {
@@ -106,19 +119,6 @@ pub fn build(b: *Build) !void {
reset_text = "\x1b[0m";
}
- const logo =
- \\ _ _ _
- \\ ___(_) __ _| (_)_ __ __ _ ___
- \\ |_ | |/ _' | | | '_ \ / _' / __|
- \\ / /| | (_| | | | | | | (_| \__ \
- \\ /___|_|\__, |_|_|_| |_|\__, |___/
- \\ |___/ |___/
- \\
- \\ "Look out! Broken programs below!"
- \\
- \\
- ;
-
const healed = b.option(bool, "healed", "Run exercises from patches/healed") orelse
false;
const override_healed_path = b.option([]const u8, "healed-path", "Override healed path");
@@ -136,7 +136,7 @@ pub fn build(b: *Build) !void {
if (exno) |n| {
if (n == 0 or n > exercises.len - 1) {
print("unknown exercise number: {}\n", .{n});
- std.os.exit(1);
+ std.os.exit(2);
}
const ex = exercises[n - 1];
@@ -280,10 +280,10 @@ const ZiglingStep = struct {
self.help();
- // NOTE: Returning 0 'success' status because the *exercise* failed,
- // but Ziglings did not. Otherwise the learner will see this message:
- // "error: the following build command failed with exit code 1:..."
- std.os.exit(0);
+ // NOTE: Using exit code 2 will prevent the Zig compiler to print
+ // the message:
+ // "error: the following build command failed with exit code 1:..."
+ std.os.exit(2);
};
self.run(exe_path, prog_node) catch {
@@ -293,7 +293,7 @@ const ZiglingStep = struct {
self.help();
// NOTE: See note above!
- std.os.exit(0);
+ std.os.exit(2);
};
}
diff --git a/test/tests.zig b/test/tests.zig
index 2fd5ec4..6eab08e 100644
--- a/test/tests.zig
+++ b/test/tests.zig
@@ -175,7 +175,7 @@ pub fn addCliTests(b: *std.Build, exercises: []const Exercise) *Step {
const cmd = b.addSystemCommand(&.{ b.zig_exe, "build", "-Dn=1" });
const expect = exercises[0].hint orelse "";
cmd.setName("zig build -Dn=1");
- cmd.expectExitCode(1);
+ cmd.expectExitCode(2);
cmd.addCheck(.{ .expect_stderr_match = expect });
cmd.step.dependOn(case_step);
@@ -282,10 +282,11 @@ const CheckStep = struct {
for (exercises) |ex| {
if (ex.number() == 1 and self.has_logo) {
// Skip the logo.
+ const nlines = mem.count(u8, root.logo, "\n");
var buf: [80]u8 = undefined;
var lineno: usize = 0;
- while (lineno < 8) : (lineno += 1) {
+ while (lineno < nlines) : (lineno += 1) {
_ = try readLine(stderr, &buf);
}
}