authorgravatar for sentrycraft123@gmail.comJan200101 <sentrycraft123@gmail.com> 2023-06-21 21:50:35+02:00
committergravatar for sentrycraft123@gmail.comJan200101 <sentrycraft123@gmail.com> 2023-06-21 21:51:07+02:00
logf74285b3be58f0282fcdfeab4345660b6f5d35e5
treeeb6d839c347f254cd37366297bcb19d9ba6aab8e
parent1864ba2cccea8452c319bf2cb9787ecb41d44a34
signaturelock-open Commit is signed but in an unrecognized format.

test: add standalone test for cmakedefine


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

test/standalone.zig+4
......@@ -226,6 +226,10 @@ pub const build_cases = [_]BuildCase{
226226 .build_root = "test/standalone/strip_empty_loop",
227227 .import = @import("standalone/strip_empty_loop/build.zig"),
228228 },
229 .{
230 .build_root = "test/standalone/cmakedefine",
231 .import = @import("standalone/cmakedefine/build.zig"),
232 },
229233};
230234
231235const std = @import("std");
test/standalone/cmakedefine/build.zig created+56
......@@ -0,0 +1,56 @@
1const std = @import("std");
2const ConfigHeader = std.Build.Step.ConfigHeader;
3
4pub fn build(b: *std.Build) void {
5 const config_header = b.addConfigHeader(
6 .{
7 .style = .{ .cmake = .{ .path = "config.h.cmake" } },
8 },
9 .{
10 .noval = null,
11 .trueval = true,
12 .falseval = false,
13 .zeroval = 0,
14 .oneval = 1,
15 .tenval = 10,
16 .stringval = "test",
17
18 .boolnoval = void{},
19 .booltrueval = true,
20 .boolfalseval = false,
21 .boolzeroval = 0,
22 .booloneval = 1,
23 .booltenval = 10,
24 .boolstringval = "test",
25 },
26 );
27
28 const test_step = b.step("test", "Test it");
29 test_step.makeFn = compare_headers;
30 test_step.dependOn(&config_header.step);
31}
32
33fn compare_headers(step: *std.Build.Step, prog_node: *std.Progress.Node) !void {
34 _ = prog_node;
35 const allocator = step.owner.allocator;
36 const cmake_header_path = "expected.h";
37
38 const config_header_step = step.dependencies.getLast();
39 const config_header = @fieldParentPtr(ConfigHeader, "step", config_header_step);
40
41 const zig_header_path = config_header.output_file.path orelse @panic("Could not locate header file");
42
43 const cwd = std.fs.cwd();
44
45 const cmake_header = try cwd.readFileAlloc(allocator, cmake_header_path, config_header.max_bytes);
46 defer allocator.free(cmake_header);
47
48 const zig_header = try cwd.readFileAlloc(allocator, zig_header_path, config_header.max_bytes);
49 defer allocator.free(zig_header);
50
51 const header_text_index = std.mem.indexOf(u8, zig_header, "\n") orelse @panic("Could not find comment in header filer");
52
53 if (!std.mem.eql(u8, zig_header[header_text_index + 1 ..], cmake_header)) {
54 @panic("processed cmakedefine header does not match expected output");
55 }
56}
test/standalone/cmakedefine/config.h.cmake created+93
......@@ -0,0 +1,93 @@
1// cmakedefine
2// undefined
3#cmakedefine noval unreachable
4
5// 1
6#cmakedefine trueval 1
7
8// undefined
9#cmakedefine falseval unreachable
10
11// undefined
12#cmakedefine zeroval unreachable
13
14// 1
15#cmakedefine oneval 1
16
17// 1
18#cmakedefine tenval 1
19
20// 1
21#cmakedefine stringval 1
22
23
24// cmakedefine01
25// 0
26#cmakedefine01 boolnoval
27
28// 1
29#cmakedefine01 booltrueval
30
31// 0
32#cmakedefine01 boolfalseval
33
34// 0
35#cmakedefine01 boolzeroval
36
37// 1
38#cmakedefine01 booloneval
39
40// 1
41#cmakedefine01 booltenval
42
43// 1
44#cmakedefine01 boolstringval
45
46
47// @ substition
48
49// no substition
50// @noval@
51
52// 1
53// @trueval@
54
55// 0
56// @falseval@
57
58// 0
59// @zeroval@
60
61// 1
62// @oneval@
63
64// 10
65// @tenval@
66
67// test
68// @stringval@
69
70
71// ${} substition
72
73// removal
74// ${noval}
75
76// 1
77// ${trueval}
78
79// 0
80// ${falseval}
81
82// 0
83// ${zeroval}
84
85// 1
86// ${oneval}
87
88// 10
89// ${tenval}
90
91// test
92// ${stringval}
93
test/standalone/cmakedefine/expected.h created+93
......@@ -0,0 +1,93 @@
1// cmakedefine
2// undefined
3/* #undef noval */
4
5// 1
6#define trueval 1
7
8// undefined
9/* #undef falseval */
10
11// undefined
12/* #undef zeroval */
13
14// 1
15#define oneval 1
16
17// 1
18#define tenval 1
19
20// 1
21#define stringval 1
22
23
24// cmakedefine01
25// 0
26#define boolnoval 0
27
28// 1
29#define booltrueval 1
30
31// 0
32#define boolfalseval 0
33
34// 0
35#define boolzeroval 0
36
37// 1
38#define booloneval 1
39
40// 1
41#define booltenval 1
42
43// 1
44#define boolstringval 1
45
46
47// @ substition
48
49// no substition
50//
51
52// 1
53// 1
54
55// 0
56// 0
57
58// 0
59// 0
60
61// 1
62// 1
63
64// 10
65// 10
66
67// test
68// test
69
70
71// substition
72
73// removal
74//
75
76// 1
77// 1
78
79// 0
80// 0
81
82// 0
83// 0
84
85// 1
86// 1
87
88// 10
89// 10
90
91// test
92// test
93