use super::FieldResolver;
use std::collections::{HashMap, HashSet};
fn resolver(optional: &[&str], method_calls: &[&str], result_fields: &[&str]) -> FieldResolver {
let optional: HashSet<String> = optional.iter().map(|s| s.to_string()).collect();
let method_calls: HashSet<String> = method_calls.iter().map(|s| s.to_string()).collect();
let result_fields: HashSet<String> = result_fields.iter().map(|s| s.to_string()).collect();
FieldResolver::new(
&HashMap::new(),
&optional,
&result_fields,
&HashSet::new(),
&method_calls,
)
}
#[test]
fn opaque_handle_getter_field_renders_as_a_real_zig_method_call() {
let r = resolver(&[], &["language"], &[]);
assert_eq!(r.accessor("language", "zig", "result"), "result.language()");
}
#[test]
fn field_also_classified_as_result_field_keeps_plain_dot_access() {
let r = resolver(&[], &["content"], &["content"]);
assert_eq!(r.accessor("content", "zig", "result"), "result.content");
}
#[test]
fn optional_opaque_handle_getter_unwraps_after_the_call() {
let r = resolver(&["language"], &["language"], &[]);
assert_eq!(r.accessor("language", "zig", "result"), "result.language().?");
}
#[test]
fn plain_struct_field_is_unaffected() {
let r = resolver(&[], &[], &[]);
assert_eq!(r.accessor("active", "zig", "result"), "result.active");
}
#[test]
fn tagged_union_variant_style_field_still_suppresses_forced_unwrap() {
let r = resolver(&["format.excel"], &["format.excel"], &["format.excel"]);
assert_eq!(r.accessor("format.excel", "zig", "result"), "result.format.excel");
}