in uniffi_udl/src/finder.rs [233:316]
fn test_type_finding() {
test_a_finding(
r#"
callback interface TestCallbacks {
string hello(u32 count);
};
"#,
|types| {
assert!(
matches!(types.get_type_definition("TestCallbacks").unwrap(), Type::CallbackInterface { name, .. } if name == "TestCallbacks")
);
},
);
test_a_finding(
r#"
dictionary TestRecord {
u32 field;
};
"#,
|types| {
assert!(
matches!(types.get_type_definition("TestRecord").unwrap(), Type::Record { name, .. } if name == "TestRecord")
);
},
);
test_a_finding(
r#"
enum TestItems { "one", "two" };
[Error]
enum TestError { "ErrorOne", "ErrorTwo" };
"#,
|types| {
assert!(
matches!(types.get_type_definition("TestItems").unwrap(), Type::Enum { name, .. } if name == "TestItems")
);
assert!(
matches!(types.get_type_definition("TestError").unwrap(), Type::Enum { name, .. } if name == "TestError")
);
},
);
test_a_finding(
r#"
interface TestObject {
constructor();
};
"#,
|types| {
assert!(
matches!(types.get_type_definition("TestObject").unwrap(), Type::Object{ name, .. } if name == "TestObject")
);
},
);
test_a_finding(
r#"
[External="crate-name"]
typedef enum ExternalType;
[External="crate-name"]
typedef interface ExternalInterfaceType;
[Custom]
typedef string CustomType;
"#,
|types| {
assert!(
matches!(types.get_type_definition("ExternalType").unwrap(), Type::Enum { name, module_path, .. }
if name == "ExternalType" && module_path == "crate-name")
);
assert!(
matches!(types.get_type_definition("ExternalInterfaceType").unwrap(), Type::Object { name, module_path, imp: ObjectImpl::Struct, .. }
if name == "ExternalInterfaceType" && module_path == "crate-name")
);
assert!(
matches!(types.get_type_definition("CustomType").unwrap(), Type::Custom { name, builtin, ..}
if name == "CustomType" && *builtin == Type::String)
);
},
);
}