Skip to content

Commit 2864477

Browse files
axdankrobbielyman
authored andcommitted
add tests for the new implementations
1 parent d21df8f commit 2864477

File tree

1 file changed

+121
-7
lines changed

1 file changed

+121
-7
lines changed

src/tests.zig

Lines changed: 121 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2382,6 +2382,91 @@ test "toAny struct" {
23822382
));
23832383
}
23842384

2385+
test "toAny tuple from vararg" {
2386+
var lua = try Lua.init(testing.allocator);
2387+
defer lua.deinit();
2388+
2389+
const Tuple = std.meta.Tuple(&.{ i32, bool, i32 });
2390+
2391+
lua.pushInteger(100);
2392+
lua.pushBoolean(true);
2393+
lua.pushInteger(300);
2394+
2395+
const result = try lua.toAny(Tuple, 1);
2396+
try testing.expect(std.meta.eql(result, .{ 100, true, 300 }));
2397+
2398+
const result_reverse = try lua.toAny(Tuple, -1);
2399+
try testing.expect(std.meta.eql(result_reverse, .{ 300, true, 100 }));
2400+
2401+
const result_error = lua.toAny(Tuple, 2);
2402+
try testing.expectError(error.NotInRange, result_error);
2403+
2404+
const result_reverse_error = lua.toAny(Tuple, -2);
2405+
try testing.expectError(error.NotInRange, result_reverse_error);
2406+
}
2407+
2408+
test "toAny tuple from struct" {
2409+
var lua = try Lua.init(testing.allocator);
2410+
defer lua.deinit();
2411+
2412+
const MyType = struct {
2413+
foo: i32,
2414+
bar: bool,
2415+
tuple: std.meta.Tuple(&.{ i32, bool, struct { foo: bool } }),
2416+
};
2417+
2418+
try lua.doString(
2419+
\\ value = {
2420+
\\ ["foo"] = 10,
2421+
\\ ["bar"] = false,
2422+
\\ ["tuple"] = {100, false, {["foo"] = true}}
2423+
\\ }
2424+
);
2425+
2426+
const lua_type = try lua.getGlobal("value");
2427+
try testing.expect(lua_type == .table);
2428+
const my_struct = try lua.toAny(MyType, 1);
2429+
try testing.expect(std.meta.eql(
2430+
my_struct,
2431+
MyType{ .foo = 10, .bar = false, .tuple = .{ 100, false, .{ .foo = true } } },
2432+
));
2433+
}
2434+
2435+
test "toAny from struct with custom toAny" {
2436+
var lua = try Lua.init(testing.allocator);
2437+
defer lua.deinit();
2438+
2439+
const MyType = struct {
2440+
foo: bool,
2441+
bar: struct {
2442+
const Self = @This();
2443+
foo: i32,
2444+
2445+
pub fn ziglua_toAny(l: *Lua, a: ?std.mem.Allocator, comptime aa: bool, i: i32) !Self {
2446+
return try ziglua.Internals.toStruct(l, Self, a, aa, i);
2447+
}
2448+
},
2449+
};
2450+
2451+
try lua.doString(
2452+
\\ value = {
2453+
\\ ["foo"] = true,
2454+
\\ ["bar"] = {
2455+
\\ ["foo"] = 12
2456+
\\ }
2457+
\\ }
2458+
);
2459+
2460+
const lua_type = try lua.getGlobal("value");
2461+
try testing.expect(lua_type == .table);
2462+
const my_struct = try lua.toAny(MyType, 1);
2463+
lua.pop(-1);
2464+
try testing.expect(std.meta.eql(
2465+
my_struct,
2466+
MyType{ .foo = true, .bar = .{ .foo = 12 } },
2467+
));
2468+
}
2469+
23852470
test "toAny mutable string" {
23862471
var lua = try Lua.init(testing.allocator);
23872472
defer lua.deinit();
@@ -2591,18 +2676,47 @@ test "pushAny struct" {
25912676
try testing.expect(value.bar == (MyType{}).bar);
25922677
}
25932678

2594-
test "pushAny anon struct" {
2679+
test "pushAny tuple" {
2680+
var lua = try Lua.init(testing.allocator);
2681+
defer lua.deinit();
2682+
2683+
const Tuple = std.meta.Tuple(&.{ i32, bool, i32 });
2684+
const value: Tuple = .{ 500, false, 600 };
2685+
2686+
try lua.pushAny(value);
2687+
2688+
const result = try lua.toAny(Tuple, 1);
2689+
try testing.expect(std.meta.eql(result, .{ 500, false, 600 }));
2690+
}
2691+
2692+
test "pushAny from struct with custom pushAny" {
25952693
var lua = try Lua.init(testing.allocator);
25962694
defer lua.deinit();
25972695

25982696
const MyType = struct {
2599-
x: i32,
2600-
enable: bool,
2697+
const Self = @This();
2698+
foo: i32,
2699+
tuple: std.meta.Tuple(&.{ i32, i32 }),
2700+
2701+
pub fn ziglua_pushAny(self: *const Self, l: *Lua) !void {
2702+
l.newTable();
2703+
2704+
inline for (@typeInfo(Self).@"struct".fields) |f| {
2705+
try l.pushAny(f.name);
2706+
try l.pushAny(@field(self, f.name));
2707+
l.setTable(-3);
2708+
}
2709+
}
26012710
};
2602-
try lua.pushAny(.{ .x = @as(i32, 13), .enable = true });
2603-
const value = try lua.toAny(MyType, -1);
2604-
try testing.expect(value.x == 13);
2605-
try testing.expect(value.enable == true);
2711+
2712+
const value: MyType = .{ .foo = 15, .tuple = .{ 1, 2 } };
2713+
2714+
try lua.pushAny(value);
2715+
const my_struct = try lua.toAny(MyType, 1);
2716+
try testing.expect(std.meta.eql(
2717+
my_struct,
2718+
MyType{ .foo = 15, .tuple = .{ 1, 2 } },
2719+
));
26062720
}
26072721

26082722
test "pushAny tagged union" {

0 commit comments

Comments
 (0)