Split test_deserializing into smaller, more focused tests.
This makes it easier to compare the input with the expected output. It also
reduces the probability of merge conflicts in the tests.
PiperOrigin-RevId: 397264484
diff --git a/rs_bindings_from_cc/ir.rs b/rs_bindings_from_cc/ir.rs
index 4cff1a7..592186f 100644
--- a/rs_bindings_from_cc/ir.rs
+++ b/rs_bindings_from_cc/ir.rs
@@ -78,10 +78,28 @@
use super::*;
#[test]
- fn test_deserializing() {
+ fn test_used_headers() {
let input = r#"
{
"used_headers": [{ "name": "foo/bar.h" }],
+ "functions": [],
+ "records": []
+ }
+ "#;
+ let ir = deserialize_ir(input.as_bytes()).unwrap();
+ let expected = IR {
+ used_headers: vec![HeaderName { name: "foo/bar.h".to_string() }],
+ functions: vec![],
+ records: vec![],
+ };
+ assert_eq!(ir, expected);
+ }
+
+ #[test]
+ fn test_functions() {
+ let input = r#"
+ {
+ "used_headers": [],
"functions": [
{
"identifier": { "identifier": "hello_world" },
@@ -96,40 +114,12 @@
"is_inline": false
}
],
- "records": [
- {
- "identifier": {"identifier": "SomeStruct" },
- "fields": [
- {
- "identifier": {"identifier": "public_int" },
- "type": {"rs_name": "i32", "cc_name": "int", "type_params": [] },
- "access": "Public"
- },
- {
- "identifier": {"identifier": "protected_int" },
- "type": {"rs_name": "i32", "cc_name": "int", "type_params": [] },
- "access": "Protected"
- },
- {
- "identifier": {"identifier": "private_int" },
- "type": {"rs_name": "i32", "cc_name": "int", "type_params": [] },
- "access": "Private"
- },
- {
- "identifier": {"identifier": "ptr" },
- "type": {"rs_name": "*mut", "cc_name": "*", "type_params": [
- {"rs_name": "SomeStruct", "cc_name": "SomeStruct", "type_params": []}
- ] },
- "access": "Public"
- }
- ]
- }
- ]
+ "records": []
}
"#;
let ir = deserialize_ir(input.as_bytes()).unwrap();
let expected = IR {
- used_headers: vec![HeaderName { name: "foo/bar.h".to_string() }],
+ used_headers: vec![],
functions: vec![Func {
identifier: Identifier { identifier: "hello_world".to_string() },
mangled_name: "$$mangled_name$$".to_string(),
@@ -148,6 +138,45 @@
}],
is_inline: false,
}],
+ records: vec![],
+ };
+ assert_eq!(ir, expected);
+ }
+
+ #[test]
+ fn test_member_access_specifiers() {
+ let input = r#"
+ {
+ "used_headers": [],
+ "functions": [],
+ "records": [
+ {
+ "identifier": {"identifier": "SomeStruct" },
+ "fields": [
+ {
+ "identifier": {"identifier": "public_int" },
+ "type": {"rs_name": "i32", "cc_name": "int", "type_params": [] },
+ "access": "Public"
+ },
+ {
+ "identifier": {"identifier": "protected_int" },
+ "type": {"rs_name": "i32", "cc_name": "int", "type_params": [] },
+ "access": "Protected"
+ },
+ {
+ "identifier": {"identifier": "private_int" },
+ "type": {"rs_name": "i32", "cc_name": "int", "type_params": [] },
+ "access": "Private"
+ }
+ ]
+ }
+ ]
+ }
+ "#;
+ let ir = deserialize_ir(input.as_bytes()).unwrap();
+ let expected = IR {
+ used_headers: vec![],
+ functions: vec![],
records: vec![Record {
identifier: Identifier { identifier: "SomeStruct".to_string() },
fields: vec![
@@ -178,22 +207,55 @@
},
access: AccessSpecifier::Private,
},
- Field {
- identifier: Identifier { identifier: "ptr".to_string() },
- type_: IRType {
- rs_name: "*mut".to_string(),
- cc_name: "*".to_string(),
- type_params: vec![IRType {
- rs_name: "SomeStruct".to_string(),
- cc_name: "SomeStruct".to_string(),
- type_params: vec![],
- }],
- },
- access: AccessSpecifier::Public,
- },
],
}],
};
assert_eq!(ir, expected);
}
+
+ #[test]
+ fn test_pointer_member_variable() {
+ let input = r#"
+ {
+ "used_headers": [],
+ "functions": [],
+ "records": [
+ {
+ "identifier": {"identifier": "SomeStruct" },
+ "fields": [
+ {
+ "identifier": {"identifier": "ptr" },
+ "type": {"rs_name": "*mut", "cc_name": "*", "type_params": [
+ {"rs_name": "SomeStruct", "cc_name": "SomeStruct", "type_params": []}
+ ] },
+ "access": "Public"
+ }
+ ]
+ }
+ ]
+ }
+ "#;
+ let ir = deserialize_ir(input.as_bytes()).unwrap();
+ let expected = IR {
+ used_headers: vec![],
+ functions: vec![],
+ records: vec![Record {
+ identifier: Identifier { identifier: "SomeStruct".to_string() },
+ fields: vec![Field {
+ identifier: Identifier { identifier: "ptr".to_string() },
+ type_: IRType {
+ rs_name: "*mut".to_string(),
+ cc_name: "*".to_string(),
+ type_params: vec![IRType {
+ rs_name: "SomeStruct".to_string(),
+ cc_name: "SomeStruct".to_string(),
+ type_params: vec![],
+ }],
+ },
+ access: AccessSpecifier::Public,
+ }],
+ }],
+ };
+ assert_eq!(ir, expected);
+ }
}