use super::render_assertion;
use crate::e2e::field_access::FieldResolver;
use crate::e2e::fixture::Assertion;
fn empty_resolver() -> FieldResolver {
FieldResolver::new(
&std::collections::HashMap::new(),
&std::collections::HashSet::new(),
&std::collections::HashSet::new(),
&std::collections::HashSet::new(),
&std::collections::HashSet::new(),
)
}
fn not_error_assertion() -> Assertion {
Assertion {
assertion_type: "not_error".to_string(),
..Default::default()
}
}
fn is_empty_assertion() -> Assertion {
Assertion {
assertion_type: "is_empty".to_string(),
..Default::default()
}
}
#[allow(clippy::too_many_arguments)]
fn render(assertion: &Assertion, has_other_assertions: bool) -> String {
let resolver = empty_resolver();
let mut out = String::new();
render_assertion(
&mut out,
assertion,
"result",
"SampleClass",
"SampleException",
&resolver,
false,
false,
false,
false,
&std::collections::HashMap::new(),
has_other_assertions,
);
out
}
#[test]
fn not_error_paired_with_is_empty_does_not_assert_presence() {
let out = render(¬_error_assertion(), true);
assert_eq!(
out, "",
"not_error must render nothing when a sibling assertion exists; got: {out}"
);
}
#[test]
fn not_error_as_sole_assertion_still_asserts_presence() {
let out = render(¬_error_assertion(), false);
assert_eq!(out, " Assert.NotNull(result);\n");
}
#[test]
fn not_error_then_is_empty_in_sequence_emits_only_is_empty() {
let mut out = String::new();
let resolver = empty_resolver();
for assertion in [¬_error_assertion(), &is_empty_assertion()] {
render_assertion(
&mut out,
assertion,
"result",
"SampleClass",
"SampleException",
&resolver,
false,
false,
false,
false,
&std::collections::HashMap::new(),
true,
);
}
assert!(
!out.contains("Assert.NotNull(result)"),
"not_error must not assert not-null alongside is_empty; got: {out}"
);
assert!(!out.is_empty(), "is_empty must still render its own check; got: {out}");
}