authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-11-30 13:22:43-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-11-30 13:22:43-07:00
logb1793c2b524b4d2e740c130d92ab9499c2b34152
treef5993c4f1a0666bb644db65656b33991ee3f2090
parentabd9089aa6f1003a0bb474ac9e8969015e8808bd

add test coverage for zig build CLI and options API


4 files changed, 48 insertions(+), 0 deletions(-)

test/standalone.zig+11
...@@ -5,6 +5,17 @@ const tests = @import("tests.zig");...@@ -5,6 +5,17 @@ const tests = @import("tests.zig");
5pub fn addCases(cases: *tests.StandaloneContext) void {5pub fn addCases(cases: *tests.StandaloneContext) void {
6 cases.add("test/standalone/hello_world/hello.zig");6 cases.add("test/standalone/hello_world/hello.zig");
7 cases.addC("test/standalone/hello_world/hello_libc.zig");7 cases.addC("test/standalone/hello_world/hello_libc.zig");
8
9 cases.addBuildFile("test/standalone/options/build.zig", .{
10 .extra_argv = &.{
11 "-Dbool_true",
12 "-Dbool_false=false",
13 "-Dint=1234",
14 "-De=two",
15 "-Dstring=hello",
16 },
17 });
18
8 cases.add("test/standalone/cat/main.zig");19 cases.add("test/standalone/cat/main.zig");
9 if (builtin.zig_backend == .stage1) { // https://github.com/ziglang/zig/issues/602520 if (builtin.zig_backend == .stage1) { // https://github.com/ziglang/zig/issues/6025
10 cases.add("test/standalone/issue_9693/main.zig");21 cases.add("test/standalone/issue_9693/main.zig");
test/standalone/options/build.zig created+22
...@@ -0,0 +1,22 @@
1const std = @import("std");
2
3pub fn build(b: *std.build.Builder) void {
4 const target = b.standardTargetOptions(.{});
5 const mode = b.standardReleaseOptions();
6
7 const main = b.addTest("src/main.zig");
8 main.setTarget(target);
9 main.setBuildMode(mode);
10
11 const options = b.addOptions();
12 main.addOptions("build_options", options);
13 options.addOption(bool, "bool_true", b.option(bool, "bool_true", "t").?);
14 options.addOption(bool, "bool_false", b.option(bool, "bool_false", "f").?);
15 options.addOption(u32, "int", b.option(u32, "int", "i").?);
16 const E = enum { one, two, three };
17 options.addOption(E, "e", b.option(E, "e", "e").?);
18 options.addOption([]const u8, "string", b.option([]const u8, "string", "s").?);
19
20 const test_step = b.step("test", "Run unit tests");
21 test_step.dependOn(&main.step);
22}
test/standalone/options/src/main.zig created+12
...@@ -0,0 +1,12 @@
1const std = @import("std");
2const assert = std.debug.assert;
3
4const build_options = @import("build_options");
5
6test "build options" {
7 comptime assert(build_options.bool_true);
8 comptime assert(!build_options.bool_false);
9 comptime assert(build_options.int == 1234);
10 comptime assert(build_options.e == .two);
11 comptime assert(std.mem.eql(u8, build_options.string, "hello"));
12}
test/tests.zig+3
...@@ -1043,6 +1043,7 @@ pub const StandaloneContext = struct {...@@ -1043,6 +1043,7 @@ pub const StandaloneContext = struct {
1043 requires_stage2: bool = false,1043 requires_stage2: bool = false,
1044 use_emulation: bool = false,1044 use_emulation: bool = false,
1045 requires_symlinks: bool = false,1045 requires_symlinks: bool = false,
1046 extra_argv: []const []const u8 = &.{},
1046 }) void {1047 }) void {
1047 const b = self.b;1048 const b = self.b;
10481049
...@@ -1063,6 +1064,8 @@ pub const StandaloneContext = struct {...@@ -1063,6 +1064,8 @@ pub const StandaloneContext = struct {
1063 zig_args.append("--build-file") catch unreachable;1064 zig_args.append("--build-file") catch unreachable;
1064 zig_args.append(b.pathFromRoot(build_file)) catch unreachable;1065 zig_args.append(b.pathFromRoot(build_file)) catch unreachable;
10651066
1067 zig_args.appendSlice(features.extra_argv) catch unreachable;
1068
1066 zig_args.append("test") catch unreachable;1069 zig_args.append("test") catch unreachable;
10671070
1068 if (b.verbose) {1071 if (b.verbose) {