commit b1793c2b524b4d2e740c130d92ab9499c2b34152 (tree)
parent abd9089aa6f1003a0bb474ac9e8969015e8808bd
Author: Andrew Kelley <andrew@ziglang.org>
Date: Wed, 30 Nov 2022 13:22:43 -0700
add test coverage for zig build CLI and options API
Diffstat:
4 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/test/standalone.zig b/test/standalone.zig
@@ -5,6 +5,17 @@ const tests = @import("tests.zig");
pub fn addCases(cases: *tests.StandaloneContext) void {
cases.add("test/standalone/hello_world/hello.zig");
cases.addC("test/standalone/hello_world/hello_libc.zig");
+
+ cases.addBuildFile("test/standalone/options/build.zig", .{
+ .extra_argv = &.{
+ "-Dbool_true",
+ "-Dbool_false=false",
+ "-Dint=1234",
+ "-De=two",
+ "-Dstring=hello",
+ },
+ });
+
cases.add("test/standalone/cat/main.zig");
if (builtin.zig_backend == .stage1) { // https://github.com/ziglang/zig/issues/6025
cases.add("test/standalone/issue_9693/main.zig");
diff --git a/test/standalone/options/build.zig b/test/standalone/options/build.zig
@@ -0,0 +1,22 @@
+const std = @import("std");
+
+pub fn build(b: *std.build.Builder) void {
+ const target = b.standardTargetOptions(.{});
+ const mode = b.standardReleaseOptions();
+
+ const main = b.addTest("src/main.zig");
+ main.setTarget(target);
+ main.setBuildMode(mode);
+
+ const options = b.addOptions();
+ main.addOptions("build_options", options);
+ options.addOption(bool, "bool_true", b.option(bool, "bool_true", "t").?);
+ options.addOption(bool, "bool_false", b.option(bool, "bool_false", "f").?);
+ options.addOption(u32, "int", b.option(u32, "int", "i").?);
+ const E = enum { one, two, three };
+ options.addOption(E, "e", b.option(E, "e", "e").?);
+ options.addOption([]const u8, "string", b.option([]const u8, "string", "s").?);
+
+ const test_step = b.step("test", "Run unit tests");
+ test_step.dependOn(&main.step);
+}
diff --git a/test/standalone/options/src/main.zig b/test/standalone/options/src/main.zig
@@ -0,0 +1,12 @@
+const std = @import("std");
+const assert = std.debug.assert;
+
+const build_options = @import("build_options");
+
+test "build options" {
+ comptime assert(build_options.bool_true);
+ comptime assert(!build_options.bool_false);
+ comptime assert(build_options.int == 1234);
+ comptime assert(build_options.e == .two);
+ comptime assert(std.mem.eql(u8, build_options.string, "hello"));
+}
diff --git a/test/tests.zig b/test/tests.zig
@@ -1043,6 +1043,7 @@ pub const StandaloneContext = struct {
requires_stage2: bool = false,
use_emulation: bool = false,
requires_symlinks: bool = false,
+ extra_argv: []const []const u8 = &.{},
}) void {
const b = self.b;
@@ -1063,6 +1064,8 @@ pub const StandaloneContext = struct {
zig_args.append("--build-file") catch unreachable;
zig_args.append(b.pathFromRoot(build_file)) catch unreachable;
+ zig_args.appendSlice(features.extra_argv) catch unreachable;
+
zig_args.append("test") catch unreachable;
if (b.verbose) {