lib/wayland/src/protocol/value/test.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 const value = @import("root.zig");
 3 
 4 const Decoder = value.Decoder;
 5 const Encoder = value.Encoder;
 6 const Fixed = value.Fixed;
 7 const NewId = value.NewId;
 8 const ObjectId = value.ObjectId;
 9 const default_encoder_capacity = value.default_encoder_capacity;
10 
11 test "typed protocol value namespace is complete" {
12     std.testing.refAllDecls(value);
13 }
14 
15 test "all Wayland argument forms round trip with independent descriptors" {
16     const sys = @import("sys");
17     const protocol = @import("../root.zig");
18 
19     const arguments = [_]protocol.schema.Argument{
20         .{ .name = "signed", .kind = .int, .interface = null, .enumeration = null, .nullable = false },
21         .{ .name = "unsigned", .kind = .uint, .interface = null, .enumeration = null, .nullable = false },
22         .{ .name = "fixed", .kind = .fixed, .interface = null, .enumeration = null, .nullable = false },
23         .{ .name = "string", .kind = .string, .interface = null, .enumeration = null, .nullable = false },
24         .{ .name = "nullable", .kind = .string, .interface = null, .enumeration = null, .nullable = true },
25         .{ .name = "object", .kind = .object, .interface = null, .enumeration = null, .nullable = false },
26         .{ .name = "optional", .kind = .object, .interface = null, .enumeration = null, .nullable = true },
27         .{ .name = "new", .kind = .new_id, .interface = "made", .enumeration = null, .nullable = false },
28         .{ .name = "array", .kind = .array, .interface = null, .enumeration = null, .nullable = false },
29         .{ .name = "descriptor", .kind = .fd, .interface = null, .enumeration = null, .nullable = false },
30     };
31     const metadata: protocol.schema.Message = .{
32         .name = "all",
33         .opcode = 3,
34         .since = 1,
35         .deprecated_since = null,
36         .destructor = false,
37         .signature = "iufs?sonah",
38         .descriptor_count = 1,
39         .minimum_payload_size = 44,
40         .arguments = &arguments,
41     };
42     const descriptor: sys.fd.Descriptor = 37;
43     var encoder = try Encoder.init(std.testing.allocator, default_encoder_capacity);
44     defer encoder.deinit();
45     try encoder.signed(-17);
46     try encoder.unsigned(42);
47     try encoder.fixed(Fixed.fromRaw(-129));
48     try encoder.string("hello");
49     try encoder.optionalString(null);
50     try encoder.object(try ObjectId.init(9));
51     try encoder.optionalObject(null);
52     try encoder.newId(try NewId.init(10));
53     try encoder.array(&.{ 1, 2, 3, 4, 5 });
54     try encoder.descriptorBorrowed(descriptor);
55     const encoded = try encoder.finish(&metadata);
56 
57     var decoder = try Decoder.init(encoded.metadata, encoded.payload, encoded.descriptors);
58     try std.testing.expectEqual(@as(i32, -17), try decoder.signed());
59     try std.testing.expectEqual(@as(u32, 42), try decoder.unsigned());
60     try std.testing.expectEqual(@as(i32, -129), (try decoder.fixed()).raw);
61     try std.testing.expectEqualStrings("hello", try decoder.string());
62     try std.testing.expect((try decoder.optionalString()) == null);
63     try std.testing.expectEqual(@as(u32, 9), (try decoder.object()).raw);
64     try std.testing.expect((try decoder.optionalObject()) == null);
65     try std.testing.expectEqual(@as(u32, 10), (try decoder.newId()).raw);
66     try std.testing.expectEqualSlices(u8, &.{ 1, 2, 3, 4, 5 }, try decoder.array());
67     try std.testing.expectEqual(descriptor, try decoder.descriptor());
68     try decoder.finish();
69 }