use super::{make_contains_assertion, render_bare};
#[test]
fn wildcard_contains_scans_every_element_not_just_index_zero() {
let out = render_bare(&make_contains_assertion("links[].link_type", "external"));
assert!(out.contains(".stream().anyMatch("), "got: {out}");
assert!(out.contains("assertTrue("), "got: {out}");
assert!(
!out.contains(".get(0)"),
"wildcard must not lower to index 0, got: {out}"
);
assert!(!out.contains("[0]"), "wildcard must not lower to index 0, got: {out}");
}
#[test]
fn explicit_numeric_index_still_targets_that_element() {
let out = render_bare(&make_contains_assertion("links[0].link_type", "external"));
assert!(
out.contains(".get(0)") || out.contains("[0]"),
"explicit index must be preserved, got: {out}"
);
assert!(
!out.contains("anyMatch"),
"explicit index must not become a scan, got: {out}"
);
}
#[test]
fn wildcard_match_in_element_one_is_reachable() {
let out = render_bare(&make_contains_assertion("links[].link_type", "internal"));
assert!(
out.contains(".stream().anyMatch("),
"an index-0 accessor would miss a match in element 1, got: {out}"
);
assert!(out.contains("\"internal\""), "got: {out}");
assert!(!out.contains(".get(0)"), "got: {out}");
}
#[test]
fn nested_wildcard_should_emit_a_visible_skip_rather_than_an_index_zero_check() {
let out = render_bare(&make_contains_assertion("pages[].links[].url", "example.test"));
assert_eq!(
out, " // skipped: nested array-wildcard field 'pages[].links[].url' not supported\n",
"got: {out}"
);
}
#[test]
fn wildcard_lambda_parameter_is_unique_per_assertion() {
let first = render_bare(&make_contains_assertion("links[].link_type", "external"));
let second = render_bare(&make_contains_assertion("links[].link_type", "internal"));
let param_of = |s: &str| {
let start = s.find("anyMatch(").expect("expected an anyMatch call") + "anyMatch(".len();
s[start..start + s[start..].find(' ').expect("param is space-delimited")].to_string()
};
assert_ne!(param_of(&first), param_of(&second), "lambda params must not collide");
}