From 06ee383da9a23016dcb25ff7cb6811e3dc2c387e Mon Sep 17 00:00:00 2001 From: Mason Remaley Date: Sat, 15 Feb 2025 15:42:59 -0800 Subject: compiler: allow `@import` of ZON without a result type In particular, this allows importing `build.zig.zon` at comptime. --- test/behavior/zon.zig | 54 +++++++++++++++++++++++++++++++++++++++++ test/behavior/zon/anon.zon | 16 ++++++++++++ test/behavior/zon/build.zig.zon | 20 +++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 test/behavior/zon/anon.zon create mode 100644 test/behavior/zon/build.zig.zon (limited to 'test/behavior') diff --git a/test/behavior/zon.zig b/test/behavior/zon.zig index 2003a87600..8a43b4894e 100644 --- a/test/behavior/zon.zig +++ b/test/behavior/zon.zig @@ -517,3 +517,57 @@ test "recursive" { const expected: Recursive = .{ .foo = &.{ .foo = null } }; try expectEqualDeep(expected, @as(Recursive, @import("zon/recursive.zon"))); } + +test "anon" { + const expected = .{ + .{ + .bool_true = true, + .bool_false = false, + .string = "foo", + }, + .{ + null, + 10, + 36893488147419103232, + 1.234, + 'z', + .bar, + .{}, + }, + }; + + const actual = @import("zon/anon.zon"); + try expectEqual(expected.len, actual.len); + try expectEqual(expected[1], actual[1]); + const expected_struct = expected[0]; + const actual_struct = actual[0]; + const expected_fields = @typeInfo(@TypeOf(expected_struct)).@"struct".fields; + const actual_fields = @typeInfo(@TypeOf(actual_struct)).@"struct".fields; + try expectEqual(expected_fields.len, actual_fields.len); + inline for (expected_fields) |field| { + try expectEqual(@field(expected_struct, field.name), @field(actual_struct, field.name)); + } +} + +test "build.zig.zon" { + const build = @import("zon/build.zig.zon"); + + try expectEqual(4, @typeInfo(@TypeOf(build)).@"struct".fields.len); + try expectEqualStrings("temp", build.name); + try expectEqualStrings("0.0.0", build.version); + + const dependencies = build.dependencies; + try expectEqual(2, @typeInfo(@TypeOf(dependencies)).@"struct".fields.len); + + const example_0 = dependencies.example_0; + try expectEqual(2, @typeInfo(@TypeOf(dependencies)).@"struct".fields.len); + try expectEqualStrings("https://example.com/foo.tar.gz", example_0.url); + try expectEqualStrings("...", example_0.hash); + + const example_1 = dependencies.example_1; + try expectEqual(2, @typeInfo(@TypeOf(dependencies)).@"struct".fields.len); + try expectEqualStrings("../foo", example_1.path); + try expectEqual(false, example_1.lazy); + + try expectEqual(.{ "build.zig", "build.zig.zon", "src" }, build.paths); +} diff --git a/test/behavior/zon/anon.zon b/test/behavior/zon/anon.zon new file mode 100644 index 0000000000..6a434cf627 --- /dev/null +++ b/test/behavior/zon/anon.zon @@ -0,0 +1,16 @@ +.{ + .{ + .bool_true = true, + .bool_false = false, + .string = "foo", + }, + .{ + null, + 10, + 36893488147419103232, + 1.234, + 'z', + .bar, + .{}, + }, +} diff --git a/test/behavior/zon/build.zig.zon b/test/behavior/zon/build.zig.zon new file mode 100644 index 0000000000..b77d742549 --- /dev/null +++ b/test/behavior/zon/build.zig.zon @@ -0,0 +1,20 @@ +.{ + // Comment + .name = "temp", + .version = "0.0.0", + .dependencies = .{ + .example_0 = .{ + .url = "https://example.com/foo.tar.gz", + .hash = "...", + }, + .example_1 = .{ + .path = "../foo", + .lazy = false, + }, + }, + .paths = .{ + "build.zig", + "build.zig.zon", + "src", + }, +} -- cgit v1.2.3