pdl: Test array fields with canonical tests
Test: atest pdl_rust_generator_tests_{le,be}
(cherry picked from https://android-review.googlesource.com/q/commit:77a9a2776141cb64b8b3dc1b0c02e6e0d0867f94)
Merged-In: If5ede67315de6811f2253ef6e108dfd1a15980dd
Change-Id: If5ede67315de6811f2253ef6e108dfd1a15980dd
diff --git a/tools/pdl/src/bin/generate-canonical-tests.rs b/tools/pdl/src/bin/generate-canonical-tests.rs
index a229f74..cee3c60 100644
--- a/tools/pdl/src/bin/generate-canonical-tests.rs
+++ b/tools/pdl/src/bin/generate-canonical-tests.rs
@@ -60,6 +60,8 @@
eprintln!("Skipping packet {}", test_packet);
continue;
}
+ eprintln!("Generating tests for packet {}", test_packet);
+
let parse_test_name = format_ident!(
"test_parse_{}_vector_{}_0x{}",
test_packet,
@@ -104,7 +106,7 @@
let builder: #module::#builder_name = serde_json::from_str(#json)
.expect("Could not create builder from canonical JSON data");
let packet = builder.build();
- let packed = #packed;
+ let packed: Vec<u8> = #packed;
assert_eq!(packet.to_vec(), packed);
}
});
@@ -131,5 +133,29 @@
let module_name = std::env::args().nth(2).expect("Need name for the generated module");
// TODO(mgeisler): remove the `packet_names` argument when we
// support all canonical packets.
- generate_unit_tests(&input_path, &["Packet_Scalar_Field", "Packet_Enum_Field"], &module_name);
+ generate_unit_tests(
+ &input_path,
+ &[
+ "Packet_Scalar_Field",
+ "Packet_Enum_Field",
+ "Packet_Enum8_Field",
+ "Packet_Array_Field_ByteElement_ConstantSize",
+ "Packet_Array_Field_ByteElement_UnknownSize",
+ "Packet_Array_Field_EnumElement",
+ "Packet_Array_Field_EnumElement_ConstantSize",
+ "Packet_Array_Field_EnumElement_UnknownSize",
+ "Packet_Array_Field_ScalarElement",
+ "Packet_Array_Field_ScalarElement_ConstantSize",
+ "Packet_Array_Field_ScalarElement_UnknownSize",
+ "Packet_Array_Field_SizedElement_ConstantSize",
+ "Packet_Array_Field_SizedElement_UnknownSize",
+ "Packet_Array_Field_UnsizedElement_ConstantSize",
+ "Packet_Array_Field_UnsizedElement_UnknownSize",
+ "Packet_Array_Field_UnsizedElement_VariableCount",
+ "Packet_Array_Field_UnsizedElement_VariableSize",
+ "Packet_Size_Field",
+ "Packet_Count_Field",
+ ],
+ &module_name,
+ );
}
diff --git a/tools/pdl/tests/canonical/be_rust_test_file.pdl b/tools/pdl/tests/canonical/be_rust_test_file.pdl
index 73dabd8..49330c6 100644
--- a/tools/pdl/tests/canonical/be_rust_test_file.pdl
+++ b/tools/pdl/tests/canonical/be_rust_test_file.pdl
@@ -41,3 +41,75 @@
a: Enum7,
c: 57,
}
+
+// Array fields
+// Array element types
+
+// The parser must be able to handle bit fields with size fields
+// up to 64 bits wide. The parser should generate a static size guard.
+packet Packet_Size_Field {
+ _size_(b): 3,
+ a: 61,
+ b: 8[],
+}
+
+
+// The parser must be able to handle bit fields with count fields
+// up to 64 bits wide. The parser should generate a static size guard.
+packet Packet_Count_Field {
+ _count_(b): 3,
+ a: 61,
+ b: 8[],
+}
+
+packet Packet_Array_Field_ByteElement_ConstantSize {
+ array: 8[4],
+}
+
+packet Packet_Array_Field_ByteElement_UnknownSize {
+ array: 8[],
+}
+
+packet Packet_Array_Field_ScalarElement_ConstantSize {
+ array: 16[4],
+}
+
+packet Packet_Array_Field_ScalarElement_UnknownSize {
+ array: 16[],
+}
+
+packet Packet_Array_Field_EnumElement_ConstantSize {
+ array: Enum16[4],
+}
+
+packet Packet_Array_Field_EnumElement_UnknownSize {
+ array: Enum16[],
+}
+
+packet Packet_Array_Field_SizedElement_ConstantSize {
+ array: SizedStruct[4],
+}
+
+packet Packet_Array_Field_SizedElement_UnknownSize {
+ array: SizedStruct[],
+}
+
+packet Packet_Array_Field_UnsizedElement_ConstantSize {
+ array: UnsizedStruct[4],
+}
+
+packet Packet_Array_Field_UnsizedElement_VariableSize {
+ _size_(array) : 4,
+ _reserved_: 4,
+ array: UnsizedStruct[],
+}
+
+packet Packet_Array_Field_UnsizedElement_VariableCount {
+ _count_(array) : 4,
+ _reserved_: 4,
+ array: UnsizedStruct[],
+}
+
+packet Packet_Array_Field_UnsizedElement_UnknownSize {
+ array: UnsizedStruct[],
+}
diff --git a/tools/pdl/tests/canonical/le_rust_test_file.pdl b/tools/pdl/tests/canonical/le_rust_test_file.pdl
index 22c1692..50ec65b 100644
--- a/tools/pdl/tests/canonical/le_rust_test_file.pdl
+++ b/tools/pdl/tests/canonical/le_rust_test_file.pdl
@@ -41,3 +41,75 @@
a: Enum7,
c: 57,
}
+
+// Array fields
+// Array element types
+
+// The parser must be able to handle bit fields with size fields
+// up to 64 bits wide. The parser should generate a static size guard.
+packet Packet_Size_Field {
+ _size_(b): 3,
+ a: 61,
+ b: 8[],
+}
+
+
+// The parser must be able to handle bit fields with count fields
+// up to 64 bits wide. The parser should generate a static size guard.
+packet Packet_Count_Field {
+ _count_(b): 3,
+ a: 61,
+ b: 8[],
+}
+
+packet Packet_Array_Field_ByteElement_ConstantSize {
+ array: 8[4],
+}
+
+packet Packet_Array_Field_ByteElement_UnknownSize {
+ array: 8[],
+}
+
+packet Packet_Array_Field_ScalarElement_ConstantSize {
+ array: 16[4],
+}
+
+packet Packet_Array_Field_ScalarElement_UnknownSize {
+ array: 16[],
+}
+
+packet Packet_Array_Field_EnumElement_ConstantSize {
+ array: Enum16[4],
+}
+
+packet Packet_Array_Field_EnumElement_UnknownSize {
+ array: Enum16[],
+}
+
+packet Packet_Array_Field_SizedElement_ConstantSize {
+ array: SizedStruct[4],
+}
+
+packet Packet_Array_Field_SizedElement_UnknownSize {
+ array: SizedStruct[],
+}
+
+packet Packet_Array_Field_UnsizedElement_ConstantSize {
+ array: UnsizedStruct[4],
+}
+
+packet Packet_Array_Field_UnsizedElement_VariableSize {
+ _size_(array) : 4,
+ _reserved_: 4,
+ array: UnsizedStruct[],
+}
+
+packet Packet_Array_Field_UnsizedElement_VariableCount {
+ _count_(array) : 4,
+ _reserved_: 4,
+ array: UnsizedStruct[],
+}
+
+packet Packet_Array_Field_UnsizedElement_UnknownSize {
+ array: UnsizedStruct[],
+}