use super::*;
use crate::core::ir::ReceiverKind;
use std::collections::HashMap;
fn mapper() -> WasmMapper {
WasmMapper::new(HashMap::new(), "Wasm".to_string())
}
fn default_method(return_type_name: &str) -> MethodDef {
MethodDef {
name: "default".to_string(),
is_static: true,
return_type: TypeRef::Named(return_type_name.to_string()),
receiver: None,
..Default::default()
}
}
#[test]
fn gen_method_static_default_uses_full_rust_path_for_nested_type() {
let typ = TypeDef {
name: "RenderOptions".to_string(),
rust_path: "sample_core::config::render::RenderOptions".to_string(),
..Default::default()
};
let method = default_method("RenderOptions");
let out = gen_method(
&method,
&mapper(),
"RenderOptions",
"sample_core",
&AHashSet::default(),
"Wasm",
&typ,
&AHashSet::default(),
&ahash::AHashMap::default(),
);
assert!(
out.contains("sample_core::config::render::RenderOptions::default()"),
"static default() must call the type's real module path: {out}"
);
assert!(
!out.contains("sample_core::RenderOptions::default()"),
"static default() must not assume the type is re-exported at the crate root: {out}"
);
}
#[test]
fn gen_method_static_default_uses_bare_path_for_root_type() {
let typ = TypeDef {
name: "PlainOptions".to_string(),
rust_path: "PlainOptions".to_string(),
..Default::default()
};
let method = default_method("PlainOptions");
let out = gen_method(
&method,
&mapper(),
"PlainOptions",
"sample_core",
&AHashSet::default(),
"Wasm",
&typ,
&AHashSet::default(),
&ahash::AHashMap::default(),
);
assert!(
out.contains("sample_core::PlainOptions::default()"),
"a crate-root type must still resolve to `{{core_import}}::{{name}}`: {out}"
);
}
#[test]
fn gen_method_instance_delegate_uses_full_rust_path_for_nested_type() {
let typ = TypeDef {
name: "RenderOptions".to_string(),
rust_path: "sample_core::config::render::RenderOptions".to_string(),
..Default::default()
};
let method = MethodDef {
name: "is_sane".to_string(),
is_static: false,
return_type: TypeRef::Primitive(crate::core::ir::PrimitiveType::Bool),
receiver: Some(ReceiverKind::Ref),
..Default::default()
};
let out = gen_method(
&method,
&mapper(),
"RenderOptions",
"sample_core",
&AHashSet::default(),
"Wasm",
&typ,
&AHashSet::default(),
&ahash::AHashMap::default(),
);
assert!(
out.contains("sample_core::config::render::RenderOptions::from(self.clone())"),
"instance delegation must call the type's real module path: {out}"
);
assert!(
!out.contains("sample_core::RenderOptions::from(self.clone())"),
"instance delegation must not assume the type is re-exported at the crate root: {out}"
);
}