Commit f74285b3be

Jan200101 <sentrycraft123@gmail.com>
2023-06-21 21:50:35
test: add standalone test for cmakedefine
1 parent 1864ba2
Changed files (4)
test/standalone/cmakedefine/build.zig
@@ -0,0 +1,56 @@
+const std = @import("std");
+const ConfigHeader = std.Build.Step.ConfigHeader;
+
+pub fn build(b: *std.Build) void {
+    const config_header = b.addConfigHeader(
+        .{
+            .style = .{ .cmake = .{ .path = "config.h.cmake" } },
+        },
+        .{
+            .noval = null,
+            .trueval = true,
+            .falseval = false,
+            .zeroval = 0,
+            .oneval = 1,
+            .tenval = 10,
+            .stringval = "test",
+
+            .boolnoval = void{},
+            .booltrueval = true,
+            .boolfalseval = false,
+            .boolzeroval = 0,
+            .booloneval = 1,
+            .booltenval = 10,
+            .boolstringval = "test",
+        },
+    );
+
+    const test_step = b.step("test", "Test it");
+    test_step.makeFn = compare_headers;
+    test_step.dependOn(&config_header.step);
+}
+
+fn compare_headers(step: *std.Build.Step, prog_node: *std.Progress.Node) !void {
+    _ = prog_node;
+    const allocator = step.owner.allocator;
+    const cmake_header_path = "expected.h";
+
+    const config_header_step = step.dependencies.getLast();
+    const config_header = @fieldParentPtr(ConfigHeader, "step", config_header_step);
+
+    const zig_header_path = config_header.output_file.path orelse @panic("Could not locate header file");
+
+    const cwd = std.fs.cwd();
+
+    const cmake_header = try cwd.readFileAlloc(allocator, cmake_header_path, config_header.max_bytes);
+    defer allocator.free(cmake_header);
+
+    const zig_header = try cwd.readFileAlloc(allocator, zig_header_path, config_header.max_bytes);
+    defer allocator.free(zig_header);
+
+    const header_text_index = std.mem.indexOf(u8, zig_header, "\n") orelse @panic("Could not find comment in header filer");
+
+    if (!std.mem.eql(u8, zig_header[header_text_index + 1 ..], cmake_header)) {
+        @panic("processed cmakedefine header does not match expected output");
+    }
+}
test/standalone/cmakedefine/config.h.cmake
@@ -0,0 +1,93 @@
+// cmakedefine
+// undefined
+#cmakedefine noval unreachable
+
+// 1
+#cmakedefine trueval 1
+
+// undefined
+#cmakedefine falseval unreachable
+
+// undefined
+#cmakedefine zeroval unreachable
+
+// 1
+#cmakedefine oneval 1
+
+// 1
+#cmakedefine tenval 1
+
+// 1
+#cmakedefine stringval 1
+
+
+// cmakedefine01
+// 0
+#cmakedefine01 boolnoval
+
+// 1
+#cmakedefine01 booltrueval
+
+// 0
+#cmakedefine01 boolfalseval
+
+// 0
+#cmakedefine01 boolzeroval
+
+// 1
+#cmakedefine01 booloneval
+
+// 1
+#cmakedefine01 booltenval
+
+// 1
+#cmakedefine01 boolstringval
+
+
+// @ substition
+
+// no substition
+// @noval@
+
+// 1
+// @trueval@
+
+// 0
+// @falseval@
+
+// 0
+// @zeroval@
+
+// 1
+// @oneval@
+
+// 10
+// @tenval@
+
+// test
+// @stringval@
+
+
+// ${} substition
+
+// removal
+// ${noval}
+
+// 1
+// ${trueval}
+
+// 0
+// ${falseval}
+
+// 0
+// ${zeroval}
+
+// 1
+// ${oneval}
+
+// 10
+// ${tenval}
+
+// test
+// ${stringval}
+
test/standalone/cmakedefine/expected.h
@@ -0,0 +1,93 @@
+// cmakedefine
+// undefined
+/* #undef noval */
+
+// 1
+#define trueval 1
+
+// undefined
+/* #undef falseval */
+
+// undefined
+/* #undef zeroval */
+
+// 1
+#define oneval 1
+
+// 1
+#define tenval 1
+
+// 1
+#define stringval 1
+
+
+// cmakedefine01
+// 0
+#define boolnoval 0
+
+// 1
+#define booltrueval 1
+
+// 0
+#define boolfalseval 0
+
+// 0
+#define boolzeroval 0
+
+// 1
+#define booloneval 1
+
+// 1
+#define booltenval 1
+
+// 1
+#define boolstringval 1
+
+
+// @ substition
+
+// no substition
+// 
+
+// 1
+// 1
+
+// 0
+// 0
+
+// 0
+// 0
+
+// 1
+// 1
+
+// 10
+// 10
+
+// test
+// test
+
+
+//  substition
+
+// removal
+// 
+
+// 1
+// 1
+
+// 0
+// 0
+
+// 0
+// 0
+
+// 1
+// 1
+
+// 10
+// 10
+
+// test
+// test
+
test/standalone.zig
@@ -226,6 +226,10 @@ pub const build_cases = [_]BuildCase{
         .build_root = "test/standalone/strip_empty_loop",
         .import = @import("standalone/strip_empty_loop/build.zig"),
     },
+    .{
+        .build_root = "test/standalone/cmakedefine",
+        .import = @import("standalone/cmakedefine/build.zig"),
+    },
 };
 
 const std = @import("std");