use crate::core::config::ResolvedCrateConfig;
use crate::e2e::config::{CallConfig, E2eConfig};
use crate::e2e::field_access::SwiftFirstClassMap;
use crate::e2e::fixture::{Assertion, Fixture};
fn void_fixture(assertions: Vec<Assertion>) -> Fixture {
Fixture {
id: "prefetch_languages".to_string(),
description: "Prefetch languages".to_string(),
call: Some("prefetch_languages".to_string()),
assertions,
..Fixture::default()
}
}
fn render_void_call(is_async: bool, assertions: Vec<Assertion>) -> String {
let fixture = void_fixture(assertions);
let call_config = CallConfig {
function: "prefetch_languages".to_string(),
returns_void: true,
r#async: is_async,
..CallConfig::default()
};
let mut e2e_config = E2eConfig {
call: call_config.clone(),
..E2eConfig::default()
};
e2e_config.calls.insert("prefetch_languages".to_string(), call_config);
let config = ResolvedCrateConfig {
name: "sample".to_string(),
..ResolvedCrateConfig::default()
};
let map = SwiftFirstClassMap::default();
let mut out = String::new();
super::test_method::render_test_method(
&mut out,
&fixture,
&e2e_config,
"",
"",
&[],
false,
None,
&map,
"Sample",
&config,
&[],
&[],
&[],
&[],
);
out
}
fn not_error_assertion() -> Assertion {
Assertion {
assertion_type: "not_error".to_string(),
..Assertion::default()
}
}
#[test]
fn void_not_error_sync_wraps_the_call_in_xctassert_no_throw() {
let out = render_void_call(false, vec![not_error_assertion()]);
assert!(
out.contains("XCTAssertNoThrow(try Sample.prefetchLanguages())"),
"expected the void call wrapped in XCTAssertNoThrow, got:\n{out}"
);
assert!(
!out.contains("XCTSkipIf"),
"must not fall back to an unconditional skip, got:\n{out}"
);
assert!(
!out.contains(" try Sample.prefetchLanguages()\n"),
"the call must not also appear as a bare, unasserted statement, got:\n{out}"
);
}
#[test]
fn void_not_error_async_wraps_the_call_in_a_do_catch_that_fails_on_error() {
let out = render_void_call(true, vec![not_error_assertion()]);
assert!(
out.contains("do {"),
"expected a do/catch wrapping the async call, got:\n{out}"
);
assert!(
out.contains("try await Sample.prefetchLanguages()"),
"expected the async call inside the do block, got:\n{out}"
);
assert!(
out.contains("XCTFail("),
"expected the catch block to fail the test, got:\n{out}"
);
assert!(
!out.contains("XCTSkipIf"),
"must not fall back to an unconditional skip, got:\n{out}"
);
}
#[test]
fn void_call_without_not_error_stays_unchanged() {
let out = render_void_call(false, vec![]);
assert!(
out.contains("try Sample.prefetchLanguages()"),
"expected a bare call statement, got:\n{out}"
);
assert!(
!out.contains("XCTAssertNoThrow"),
"must not wrap the call when no not_error assertion is present, got:\n{out}"
);
}