From f0c566620e4766fa84cd147f1a18ba635e86f1f7 Mon Sep 17 00:00:00 2001 From: Dylan Frankland Date: Mon, 31 Aug 2026 12:27:22 -0700 Subject: [PATCH 1/5] feat(xcresult): resolve declarations from `swift test --xunit-output` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `swift test --xunit-output` writes no file path for any test, and on Linux there is no `.xcresult` to fall back to — so today a Swift test run there can never be attributed to a file. The declaration index needs nothing from Xcode, so it can answer this too. The xunit XML carries more than it first appears. `classname` is the target followed by the dot-qualified suite path, and only collapses to the bare target for a top-level `@Test func`: classname="MyCLITests" name="helloworld()" classname="MyCLITests.AlphaSuite" name="shared()" classname="MyCLITests.AlphaSuite.Inner" name="deep()" classname="MyCLITests.BetaSuite" name="shared()" That maps onto the existing `TestKey` almost unchanged: the innermost component is the declaring type, exactly as the innermost component of an xcresult `Suite/Inner/case()` identifier is, so only the separator differs. A top-level function falls to the suiteless lookup already there for xcresult, and the first component is the target, so the collision tie-break carries over for free. Parameterised tests need no special handling either: swift-testing emits one entry per function rather than one per argument, keeping argument labels (`squares(n:)`), and that single entry is the declaration site we want. XCTest needs none either. One run writes **two files** — swift-testing to `-swift-testing.xml` and XCTest to `` — and the XCTest form is the same `Module.Type` plus method, minus the `()`: classname="MyCLITests.LegacyXCTests" name="testOldStyle" so the same parse resolves it. That second file is only written when `--parallel` is passed; without it the XCTest cases still run but are silently absent from the output, which is worth knowing before trusting a project's xunit to be complete. The fixture is a real package plus both files it actually produced. Its two suites both declare `shared()` in different files, so a regression that ignored the suite component would make one borrow the other's file — reverting the suite component fails those tests rather than neither. This is the resolver only. Nothing reads a JUnit file or writes a `file` attribute back yet, and no flag is wired up. Co-Authored-By: Claude Opus 5 (1M context) --- xcresult/src/test_locations.rs | 58 ++++++++ .../data/swift-test-xunit-xctest.junit.xml | 8 ++ .../tests/data/swift-test-xunit.junit.xml | 11 ++ .../swift-test-xunit/Package.swift | 10 ++ .../fixture-src/swift-test-xunit/README.md | 63 +++++++++ .../Sources/MyCLI/MyCLI.swift | 1 + .../Tests/MyCLITests/BetaSuite.swift | 7 + .../Tests/MyCLITests/Legacy.swift | 5 + .../Tests/MyCLITests/Parameterized.swift | 9 ++ .../Tests/MyCLITests/Suites.swift | 9 ++ .../Tests/MyCLITests/TopLevel.swift | 5 + xcresult/tests/swift_test_xunit.rs | 125 ++++++++++++++++++ 12 files changed, 311 insertions(+) create mode 100644 xcresult/tests/data/swift-test-xunit-xctest.junit.xml create mode 100644 xcresult/tests/data/swift-test-xunit.junit.xml create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Package.swift create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/README.md create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Sources/MyCLI/MyCLI.swift create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/BetaSuite.swift create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Legacy.swift create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Parameterized.swift create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Suites.swift create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/TopLevel.swift create mode 100644 xcresult/tests/swift_test_xunit.rs diff --git a/xcresult/src/test_locations.rs b/xcresult/src/test_locations.rs index 01d71051..03bd4972 100644 --- a/xcresult/src/test_locations.rs +++ b/xcresult/src/test_locations.rs @@ -94,6 +94,24 @@ impl TestKey { } impl TestKey { + /// `classname` is the target plus the dot-qualified suite path (`MyCLITests.Outer.Inner`), + /// collapsing to the bare target for a top-level `@Test func`, which declares no suite. + pub fn from_junit_classname(classname: &str, name: &str) -> Self { + let mut components = classname.rsplit('.'); + let innermost = components.next().unwrap_or_default(); + let has_suite = components.next().is_some(); + Self { + suite: has_suite.then(|| container_name(innermost).to_string()), + case: normalized_case(name), + } + } + + /// The first component, which tells same-named suites in different modules apart. + pub fn target_from_junit_classname(classname: &str) -> Option { + let target = classname.split('.').next()?; + (!target.is_empty()).then(|| target.to_string()) + } + /// `test://com.apple.xcode////` — the second component is /// the test bundle, which is the only thing distinguishing two same-named suites. pub fn target_from_identifier_url(identifier_url: &str) -> Option { @@ -937,4 +955,44 @@ mod tests { ) { assert_eq!(recorded(target, files), expected); } + + #[rstest] + #[case::top_level_function("MyCLITests", "helloworld()", None, "helloworld")] + #[case::in_a_suite("MyCLITests.AlphaSuite", "shared()", Some("AlphaSuite"), "shared")] + #[case::nested_suite("MyCLITests.AlphaSuite.Inner", "deep()", Some("Inner"), "deep")] + #[case::other_suite_same_case("MyCLITests.BetaSuite", "shared()", Some("BetaSuite"), "shared")] + #[case::parameterized( + "MyCLITests.ParamSuite", + "squares(n:)", + Some("ParamSuite"), + "squares(n:" + )] + #[case::objc_style( + "MyCLITests.LegacyXCTests", + "testOldStyle", + Some("LegacyXCTests"), + "testOldStyle" + )] + fn a_junit_classname_names_a_suite_and_a_case( + #[case] classname: &str, + #[case] name: &str, + #[case] suite: Option<&str>, + #[case] case: &str, + ) { + assert_eq!( + TestKey::from_junit_classname(classname, name), + key(suite, case) + ); + } + + #[rstest] + #[case::with_suite("MyCLITests.AlphaSuite", Some("MyCLITests"))] + #[case::bare_target("MyCLITests", Some("MyCLITests"))] + #[case::empty("", None)] + fn a_junit_classname_names_the_target(#[case] classname: &str, #[case] expected: Option<&str>) { + assert_eq!( + TestKey::target_from_junit_classname(classname).as_deref(), + expected + ); + } } diff --git a/xcresult/tests/data/swift-test-xunit-xctest.junit.xml b/xcresult/tests/data/swift-test-xunit-xctest.junit.xml new file mode 100644 index 00000000..ecbcfd58 --- /dev/null +++ b/xcresult/tests/data/swift-test-xunit-xctest.junit.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/xcresult/tests/data/swift-test-xunit.junit.xml b/xcresult/tests/data/swift-test-xunit.junit.xml new file mode 100644 index 00000000..0408c82b --- /dev/null +++ b/xcresult/tests/data/swift-test-xunit.junit.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Package.swift b/xcresult/tests/fixture-src/swift-test-xunit/Package.swift new file mode 100644 index 00000000..4dcb3cf4 --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Package.swift @@ -0,0 +1,10 @@ +// swift-tools-version: 6.0 +import PackageDescription + +let package = Package( + name: "MyCLI", + targets: [ + .target(name: "MyCLI"), + .testTarget(name: "MyCLITests", dependencies: ["MyCLI"]), + ] +) diff --git a/xcresult/tests/fixture-src/swift-test-xunit/README.md b/xcresult/tests/fixture-src/swift-test-xunit/README.md new file mode 100644 index 00000000..f4d94e36 --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/README.md @@ -0,0 +1,63 @@ +# `swift test --xunit-output` fixture + +A SwiftPM package whose test target covers every shape `swift test --xunit-output` emits, +and the XML it produced, checked in as `../../data/swift-test-xunit.junit.xml`. + +Unlike the `.xcresult` scenarios next to this one, nothing here needs Xcode. `swift test` +produces no result bundle, `sourcekit-lsp` ships with the Swift toolchain on Linux, and the +xunit XML **contains no file path at all** — so a declaration is the only way to attribute +a test to a file on that platform. + +## Regenerating + +```sh +cp -R . /tmp/swift-test-xunit && cd /tmp/swift-test-xunit +swift test --parallel --xunit-output /tmp/out.xml +cp /tmp/out-swift-testing.xml ../../data/swift-test-xunit.junit.xml +cp /tmp/out.xml ../../data/swift-test-xunit-xctest.junit.xml +``` + +`--parallel` is **required**: without it `--xunit-output` emits nothing for XCTest, and only +the swift-testing file appears. + +Copy it out first: building in place leaves a `.build` directory inside the fixture, and the +declaration scan would then walk it (`.build` is in `SKIPPED_DIRECTORIES`, so it is ignored, +but it should not be committed either). + +Note that one run writes **two files**, and neither is named what you asked for in the +XCTest case being the only one at ``: + +| file | holds | +| -------------------------- | --------------------------------- | +| `-swift-testing.xml` | swift-testing (`@Test`, `@Suite`) | +| `` | XCTest (`XCTestCase` subclasses) | + +A project with both frameworks has to upload both. + +## What each shape proves + +| `classname` | `name` | declared in | why it is here | +| ----------------------------- | ---------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `MyCLITests` | `helloworld()` | `TopLevel.swift` | a top-level `@Test func` has no suite, so classname collapses to the bare target and only the suiteless lookup can find it | +| `MyCLITests.AlphaSuite` | `shared()` | `Suites.swift` | the ordinary case: innermost classname component is the declaring type | +| `MyCLITests.AlphaSuite.Inner` | `deep()` | `Suites.swift` | a nested suite is fully qualified, and only the innermost component declares the method | +| `MyCLITests.BetaSuite` | `shared()` | `BetaSuite.swift` | same case name as `AlphaSuite`'s in a **different file**, so collapsing the classname would make one borrow the other's file | +| `MyCLITests.ParamSuite` | `squares(n:)` | `Parameterized.swift` | a parameterised test keeps its argument labels and appears **once**, not once per argument, so the single entry is the declaration site | +| `MyCLITests.ParamSuite` | `pairs(s:flag:)` | `Parameterized.swift` | two labels, same shape | + +## XCTest needs `--parallel`, and needs no special handling + +`Legacy.swift` holds an `XCTestCase`, and it lands in `` rather than +`-swift-testing.xml`: + +```xml + +``` + +Which is the same `Module.Type` + method shape swift-testing uses, minus the `()` — so the +same parse resolves it, and `an_xctest_case_resolves_to_the_class_that_declares_it` proves +that against this package. + +Worth knowing: **without `--parallel` this file is not written at all**. The XCTest case runs +either way (the console reports `-[MyCLITests.LegacyXCTests testOldStyle] passed`), so a +project that omits `--parallel` silently uploads only its swift-testing results. diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Sources/MyCLI/MyCLI.swift b/xcresult/tests/fixture-src/swift-test-xunit/Sources/MyCLI/MyCLI.swift new file mode 100644 index 00000000..f233da78 --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Sources/MyCLI/MyCLI.swift @@ -0,0 +1 @@ +public let answer = 42 diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/BetaSuite.swift b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/BetaSuite.swift new file mode 100644 index 00000000..2f9399da --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/BetaSuite.swift @@ -0,0 +1,7 @@ +import Testing + +/// Declares a `shared()` too, in a different file, so the suite component of the JUnit +/// classname is the only thing that can tell the two apart. +@Suite struct BetaSuite { + @Test func shared() { #expect(true) } +} diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Legacy.swift b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Legacy.swift new file mode 100644 index 00000000..b3efd521 --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Legacy.swift @@ -0,0 +1,5 @@ +import XCTest + +final class LegacyXCTests: XCTestCase { + func testOldStyle() { XCTAssertTrue(true) } +} diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Parameterized.swift b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Parameterized.swift new file mode 100644 index 00000000..4c314e1c --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Parameterized.swift @@ -0,0 +1,9 @@ +import Testing + +@Suite struct ParamSuite { + @Test(arguments: [1, 2, 3]) + func squares(n: Int) { #expect(n * n >= n) } + + @Test(arguments: ["a", "b"], [true, false]) + func pairs(s: String, flag: Bool) { #expect(!s.isEmpty || flag) } +} diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Suites.swift b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Suites.swift new file mode 100644 index 00000000..d74f05fc --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/Suites.swift @@ -0,0 +1,9 @@ +import Testing + +@Suite struct AlphaSuite { + @Test func shared() { #expect(true) } + + @Suite struct Inner { + @Test func deep() { #expect(true) } + } +} diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/TopLevel.swift b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/TopLevel.swift new file mode 100644 index 00000000..d95f8e41 --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/TopLevel.swift @@ -0,0 +1,5 @@ +import Testing + +@Test func helloworld() { + #expect(1 == 1) +} diff --git a/xcresult/tests/swift_test_xunit.rs b/xcresult/tests/swift_test_xunit.rs new file mode 100644 index 00000000..f1bf5081 --- /dev/null +++ b/xcresult/tests/swift_test_xunit.rs @@ -0,0 +1,125 @@ +//! `swift test --xunit-output` reports no file at all, and needs no Xcode to produce — so +//! this is the shape the declaration path takes on Linux. See the fixture's README. + +use std::{collections::HashMap, path::Path}; + +use xcresult::test_locations::{Limits, TestKey, TestLocationIndex}; + +const FIXTURE_ROOT: &str = "tests/fixture-src/swift-test-xunit"; +const XUNIT: &str = include_str!("data/swift-test-xunit.junit.xml"); +/// `--xunit-output` needs `--parallel` to emit XCTest results, and writes them to a separate +/// file from swift-testing's — which goes to `-swift-testing.xml`. +const XUNIT_XCTEST: &str = include_str!("data/swift-test-xunit-xctest.junit.xml"); + +fn testcases(xunit: &str) -> Vec<(String, String)> { + xunit + .lines() + .filter(|line| line.contains(" HashMap<(String, String), String> { + resolve_from(XUNIT) +} + +fn resolve_from(xunit: &str) -> HashMap<(String, String), String> { + let cases = testcases(xunit); + assert!(!cases.is_empty(), "the fixture must have testcases"); + + let keys = cases + .iter() + .map(|(classname, name)| { + ( + TestKey::from_junit_classname(classname, name), + TestKey::target_from_junit_classname(classname), + ) + }) + .collect::>(); + let index = TestLocationIndex::resolve(Path::new(FIXTURE_ROOT), &keys, Limits::default()); + + cases + .into_iter() + .filter_map(|(classname, name)| { + let key = TestKey::from_junit_classname(&classname, &name); + index + .lookup(&key) + .map(|site| ((classname, name), site.file.as_str().to_owned())) + }) + .collect() +} + +#[test] +fn every_swift_testing_case_resolves_to_the_file_it_is_declared_in() { + let resolved = resolve(); + for (classname, name, expected) in [ + ("MyCLITests", "helloworld()", "TopLevel.swift"), + ("MyCLITests.AlphaSuite", "shared()", "Suites.swift"), + ("MyCLITests.AlphaSuite.Inner", "deep()", "Suites.swift"), + ("MyCLITests.BetaSuite", "shared()", "BetaSuite.swift"), + ( + "MyCLITests.ParamSuite", + "squares(n:)", + "Parameterized.swift", + ), + ( + "MyCLITests.ParamSuite", + "pairs(s:flag:)", + "Parameterized.swift", + ), + ] { + let key = (String::from(classname), String::from(name)); + let file = resolved + .get(&key) + .unwrap_or_else(|| panic!("{classname} {name} resolved to nothing")); + assert!( + file.ends_with(expected), + "expected {classname} {name} in {expected}, got {file}" + ); + } +} + +// Collapsing the classname to its target would make one `shared()` borrow the other's file. +#[test] +fn two_suites_declaring_the_same_case_resolve_separately() { + let resolved = resolve(); + let alpha = resolved + .get(&( + String::from("MyCLITests.AlphaSuite"), + String::from("shared()"), + )) + .expect("alpha resolved"); + let beta = resolved + .get(&( + String::from("MyCLITests.BetaSuite"), + String::from("shared()"), + )) + .expect("beta resolved"); + assert_ne!(alpha, beta, "both `shared()` cases resolved to {alpha}"); +} + +// XCTest goes to its own file and names a case `Module.Class` + a bare method, so it needs no +// separate handling — the innermost component is still the declaring type. +#[test] +fn an_xctest_case_resolves_to_the_class_that_declares_it() { + let resolved = resolve_from(XUNIT_XCTEST); + let file = resolved + .get(&( + String::from("MyCLITests.LegacyXCTests"), + String::from("testOldStyle"), + )) + .expect("the XCTest case resolved"); + assert!(file.ends_with("Legacy.swift"), "got {file}"); +} From eaaf5761bd1ea2a921d1eeb1ded677bd0d1e7008 Mon Sep 17 00:00:00 2001 From: Dylan Frankland Date: Mon, 31 Aug 2026 13:10:27 -0700 Subject: [PATCH 2/5] test(xcresult): pin parity between the xcresult and swift test inputs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both inputs feed one `TestLocationIndex`, and nothing checked they agree. They were tested against different fixture packages, so a divergence in either adapter would have gone unnoticed until it reached a repository using both. Three layers of parity now: - `an_xcresult_identifier_and_a_junit_classname_key_alike` — the same test keys the same way from either input. The two build `suite` from different places, an identifier's second-to-last component against a classname's innermost, and arrive at `None` by different routes, so only this catches them drifting. - `an_xcresult_url_and_a_junit_classname_name_the_same_target` — the collision tie-break reads the target from `nodeIdentifierURL` on one side and `classname` on the other, and is only correct if they agree. - `parity::both_inputs_resolve_every_test_to_the_same_file` — one package captured both ways, via `swift test --xunit-output` and via `xcodebuild` into an `.xcresult`, asserting the full set of (test, file) pairs is identical. Writing it turned up two things worth having pinned. The real xcresult identifier for a Swift XCTest method is `testOldStyle()`, with parens, where Objective-C reports none — both shapes are now covered rather than the one I assumed. More importantly the two inputs disagree on that name: `xcodebuild` reports `testOldStyle()` and `swift test --xunit-output` reports `testOldStyle`. They resolve to the same file because keying normalises the parens away, but `name` feeds `gen_info_id_base`, so the same test arriving through the two inputs does not currently land on one identity. That is upstream of this crate and is not worked around here, only pinned by `the_two_inputs_spell_an_xctest_method_differently` so it cannot change unnoticed. Comparison is over sorted `(name, file)` pairs rather than a map keyed by name, because two suites in the fixture both declare `shared()` — keyed by name one silently displaced the other and the test failed on roughly half of runs depending on hash order. Co-Authored-By: Claude Opus 5 (1M context) --- xcresult/src/test_locations.rs | 49 ++++++++ .../data/swift-test-parity.xcresult.tar.gz | Bin 0 -> 42875 bytes xcresult/tests/swift_test_xunit.rs | 115 ++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 xcresult/tests/data/swift-test-parity.xcresult.tar.gz diff --git a/xcresult/src/test_locations.rs b/xcresult/src/test_locations.rs index 03bd4972..09082824 100644 --- a/xcresult/src/test_locations.rs +++ b/xcresult/src/test_locations.rs @@ -995,4 +995,53 @@ mod tests { expected ); } + + // The two build `suite` from different places — an identifier's second-to-last component + // versus a classname's innermost — so nothing else catches them drifting apart. + #[rstest] + #[case::top_level("helloworld()", "MyCLITests", "helloworld()")] + #[case::in_a_suite("AlphaSuite/shared()", "MyCLITests.AlphaSuite", "shared()")] + #[case::nested_suite( + "OuterSuite/InnerSuite/deep()", + "MyCLITests.OuterSuite.InnerSuite", + "deep()" + )] + #[case::parameterized("ParamSuite/squares(n:)", "MyCLITests.ParamSuite", "squares(n:)")] + #[case::swift_xctest_method( + "LegacyXCTests/testOldStyle()", + "MyCLITests.LegacyXCTests", + "testOldStyle" + )] + #[case::objc_xctest_method( + "ObjcXCTestTests/testFailsInsideSharedHelper", + "ObjcXCTestTests.ObjcXCTestTests", + "testFailsInsideSharedHelper" + )] + fn an_xcresult_identifier_and_a_junit_classname_key_alike( + #[case] node_identifier: &str, + #[case] classname: &str, + #[case] name: &str, + ) { + assert_eq!( + TestKey::from_node_identifier(node_identifier), + TestKey::from_junit_classname(classname, name) + ); + } + + // Different fields, and the collision tie-break depends on them agreeing. + #[rstest] + #[case::in_a_suite( + "test://com.apple.xcode/MyCLI/MyCLITests/AlphaSuite/shared()", + "MyCLITests.AlphaSuite" + )] + #[case::top_level("test://com.apple.xcode/MyCLI/MyCLITests/helloworld()", "MyCLITests")] + fn an_xcresult_url_and_a_junit_classname_name_the_same_target( + #[case] identifier_url: &str, + #[case] classname: &str, + ) { + assert_eq!( + TestKey::target_from_identifier_url(identifier_url), + TestKey::target_from_junit_classname(classname) + ); + } } diff --git a/xcresult/tests/data/swift-test-parity.xcresult.tar.gz b/xcresult/tests/data/swift-test-parity.xcresult.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..8a4cd694b26793796c2f6543a4878fd763bd1a92 GIT binary patch literal 42875 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 T0S6rL*YW=VC3t$L0N4Zog_9O_ literal 0 HcmV?d00001 diff --git a/xcresult/tests/swift_test_xunit.rs b/xcresult/tests/swift_test_xunit.rs index f1bf5081..1b5b1e5e 100644 --- a/xcresult/tests/swift_test_xunit.rs +++ b/xcresult/tests/swift_test_xunit.rs @@ -123,3 +123,118 @@ fn an_xctest_case_resolves_to_the_class_that_declares_it() { .expect("the XCTest case resolved"); assert!(file.ends_with("Legacy.swift"), "got {file}"); } + +/// One package captured both ways, which must land every test on the same file. +#[cfg(target_os = "macos")] +mod parity { + use std::{fs::File, path::PathBuf}; + + use flate2::read::GzDecoder; + use tar::Archive; + use temp_testdir::TempDir; + use xcresult::xcresult::XCResult; + + use super::*; + + fn xcresult_report() -> Vec { + let temp_dir = TempDir::default(); + Archive::new(GzDecoder::new( + File::open("tests/data/swift-test-parity.xcresult.tar.gz").unwrap(), + )) + .unpack(temp_dir.as_ref()) + .unwrap(); + let bundle: PathBuf = temp_dir.as_ref().join("MyCLI.xcresult"); + + let xcresult = XCResult::new_with_declaration_locations( + bundle.to_str().unwrap(), + String::from("trunk"), + String::from("github.com/trunk-io/analytics-cli"), + Path::new(FIXTURE_ROOT), + Limits::default(), + ) + .expect("the declaration path reads the bundle"); + + xcresult.generate_junits() + } + + fn without_parens(name: &str) -> String { + name.trim_end_matches(['(', ')']).to_owned() + } + + fn xcresult_raw_names() -> Vec { + xcresult_report() + .iter() + .flat_map(|report| report.test_suites.iter()) + .flat_map(|test_suite| test_suite.test_cases.iter()) + .map(|test_case| test_case.name.as_str().to_owned()) + .collect() + } + + /// Pairs rather than a map keyed by name: two suites here both declare `shared()`. + fn xcresult_pairs() -> Vec<(String, String)> { + let mut pairs = xcresult_report() + .iter() + .flat_map(|report| report.test_suites.iter()) + .flat_map(|test_suite| test_suite.test_cases.iter()) + .filter_map(|test_case| { + test_case + .extra + .iter() + .find(|(key, _)| key.as_str() == "file") + .map(|(_, value)| { + ( + without_parens(test_case.name.as_str()), + file_name(value.as_str()), + ) + }) + }) + .collect::>(); + pairs.sort(); + pairs + } + + fn xunit_pairs() -> Vec<(String, String)> { + let mut pairs = [XUNIT, XUNIT_XCTEST] + .into_iter() + .flat_map(|xunit| resolve_from(xunit).into_iter()) + .map(|((_, name), file)| (without_parens(&name), file_name(&file))) + .collect::>(); + pairs.sort(); + pairs + } + + fn file_name(path: &str) -> String { + Path::new(path) + .file_name() + .map(|name| name.to_string_lossy().into_owned()) + .unwrap_or_else(|| String::from(path)) + } + + #[test] + fn both_inputs_resolve_every_test_to_the_same_file() { + let from_xcresult = xcresult_pairs(); + assert!( + from_xcresult.len() >= 6, + "the bundle should carry every test, got {from_xcresult:?}" + ); + pretty_assertions::assert_eq!(xunit_pairs(), from_xcresult); + } + + // Upstream, not ours: `name` feeds `gen_info_id_base`, so the same test arriving through + // the two inputs does not land on one identity. Pinned so it cannot change unnoticed. + #[test] + fn the_two_inputs_spell_an_xctest_method_differently() { + assert_eq!( + testcases(XUNIT_XCTEST) + .into_iter() + .map(|(_, name)| name) + .collect::>(), + vec![String::from("testOldStyle")] + ); + assert!( + xcresult_raw_names().contains(&String::from("testOldStyle()")), + "the bundle spells it {:?}", + xcresult_raw_names() + ); + } +} From 8534f1f104c1c5fa82be6d73c4c22bf0e4ac1571 Mon Sep 17 00:00:00 2001 From: Dylan Frankland Date: Mon, 31 Aug 2026 13:23:15 -0700 Subject: [PATCH 3/5] test(xcresult): pin that argument labels are part of a test's identity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two tests can differ only by argument label, and a normalisation that dropped labels would silently merge them — giving one the other's file, which for codeowners is the worst outcome available: confidently wrong rather than absent. Nothing covered that. `OverloadSuite` declares `check()`, `check(a:)` and `check(b:)`, with `check(b:)` in a different file via an extension, so a collapse shows up as a wrong file rather than only a wrong line. Both inputs report all three and agree on how they spell them: xcresult OverloadSuite/check() OverloadSuite/check(a:) OverloadSuite/check(b:) xunit check() check(a:) check(b:) `normalized_case` trims only trailing parens, so `check()` becomes `check` while `check(a:)` becomes the unbalanced `check(a:`. That is untidy but correct: the same function is applied to the language server's symbol name and to the test identifier, so what matters is that it is identical on both sides rather than well-formed. Because labels survive it, the three key distinctly and resolve to their own declarations, which the parity test now covers end to end from both artifacts. Rewriting `normalized_case` to split on `(` instead fails the new test with both labelled overloads resolving to `OverloadA.swift`. Co-Authored-By: Claude Opus 5 (1M context) --- xcresult/src/test_locations.rs | 2 + .../data/swift-test-parity.xcresult.tar.gz | Bin 42875 -> 45562 bytes .../data/swift-test-xunit-xctest.junit.xml | 4 +- .../tests/data/swift-test-xunit.junit.xml | 17 +++++--- .../fixture-src/swift-test-xunit/README.md | 40 ++++++++++++++---- .../Tests/MyCLITests/OverloadA.swift | 6 +++ .../Tests/MyCLITests/OverloadB.swift | 6 +++ xcresult/tests/swift_test_xunit.rs | 15 +++++++ 8 files changed, 73 insertions(+), 17 deletions(-) create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/OverloadA.swift create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/OverloadB.swift diff --git a/xcresult/src/test_locations.rs b/xcresult/src/test_locations.rs index 09082824..75496dcc 100644 --- a/xcresult/src/test_locations.rs +++ b/xcresult/src/test_locations.rs @@ -1007,6 +1007,8 @@ mod tests { "deep()" )] #[case::parameterized("ParamSuite/squares(n:)", "MyCLITests.ParamSuite", "squares(n:)")] + #[case::no_argument_overload("OverloadSuite/check()", "MyCLITests.OverloadSuite", "check()")] + #[case::labelled_overload("OverloadSuite/check(a:)", "MyCLITests.OverloadSuite", "check(a:)")] #[case::swift_xctest_method( "LegacyXCTests/testOldStyle()", "MyCLITests.LegacyXCTests", diff --git a/xcresult/tests/data/swift-test-parity.xcresult.tar.gz b/xcresult/tests/data/swift-test-parity.xcresult.tar.gz index 8a4cd694b26793796c2f6543a4878fd763bd1a92..8b17eded0537b8242f9796ddaf730b858490d3d4 100644 GIT binary patch literal 45562 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 T0S6rL*YW=VC3t$L0N4Zog_9O_ diff --git a/xcresult/tests/data/swift-test-xunit-xctest.junit.xml b/xcresult/tests/data/swift-test-xunit-xctest.junit.xml index ecbcfd58..e952fcce 100644 --- a/xcresult/tests/data/swift-test-xunit-xctest.junit.xml +++ b/xcresult/tests/data/swift-test-xunit-xctest.junit.xml @@ -1,8 +1,8 @@ - - + + diff --git a/xcresult/tests/data/swift-test-xunit.junit.xml b/xcresult/tests/data/swift-test-xunit.junit.xml index 0408c82b..1fea7036 100644 --- a/xcresult/tests/data/swift-test-xunit.junit.xml +++ b/xcresult/tests/data/swift-test-xunit.junit.xml @@ -1,11 +1,14 @@ - - - - - - - + + + + + + + + + + diff --git a/xcresult/tests/fixture-src/swift-test-xunit/README.md b/xcresult/tests/fixture-src/swift-test-xunit/README.md index f4d94e36..ee315a93 100644 --- a/xcresult/tests/fixture-src/swift-test-xunit/README.md +++ b/xcresult/tests/fixture-src/swift-test-xunit/README.md @@ -36,14 +36,17 @@ A project with both frameworks has to upload both. ## What each shape proves -| `classname` | `name` | declared in | why it is here | -| ----------------------------- | ---------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| `MyCLITests` | `helloworld()` | `TopLevel.swift` | a top-level `@Test func` has no suite, so classname collapses to the bare target and only the suiteless lookup can find it | -| `MyCLITests.AlphaSuite` | `shared()` | `Suites.swift` | the ordinary case: innermost classname component is the declaring type | -| `MyCLITests.AlphaSuite.Inner` | `deep()` | `Suites.swift` | a nested suite is fully qualified, and only the innermost component declares the method | -| `MyCLITests.BetaSuite` | `shared()` | `BetaSuite.swift` | same case name as `AlphaSuite`'s in a **different file**, so collapsing the classname would make one borrow the other's file | -| `MyCLITests.ParamSuite` | `squares(n:)` | `Parameterized.swift` | a parameterised test keeps its argument labels and appears **once**, not once per argument, so the single entry is the declaration site | -| `MyCLITests.ParamSuite` | `pairs(s:flag:)` | `Parameterized.swift` | two labels, same shape | +| `classname` | `name` | declared in | why it is here | +| ----------------------------- | ---------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `MyCLITests` | `helloworld()` | `TopLevel.swift` | a top-level `@Test func` has no suite, so classname collapses to the bare target and only the suiteless lookup can find it | +| `MyCLITests.AlphaSuite` | `shared()` | `Suites.swift` | the ordinary case: innermost classname component is the declaring type | +| `MyCLITests.AlphaSuite.Inner` | `deep()` | `Suites.swift` | a nested suite is fully qualified, and only the innermost component declares the method | +| `MyCLITests.BetaSuite` | `shared()` | `BetaSuite.swift` | same case name as `AlphaSuite`'s in a **different file**, so collapsing the classname would make one borrow the other's file | +| `MyCLITests.ParamSuite` | `squares(n:)` | `Parameterized.swift` | a parameterised test keeps its argument labels and appears **once**, not once per argument, so the single entry is the declaration site | +| `MyCLITests.ParamSuite` | `pairs(s:flag:)` | `Parameterized.swift` | two labels, same shape | +| `MyCLITests.OverloadSuite` | `check()` | `OverloadA.swift` | the no-argument member of an overload set | +| `MyCLITests.OverloadSuite` | `check(a:)` | `OverloadA.swift` | differs from `check(b:)` **only by argument label** | +| `MyCLITests.OverloadSuite` | `check(b:)` | `OverloadB.swift` | declared in another file via an extension, so a normalisation that dropped labels would silently merge two distinct tests and give one the wrong file | ## XCTest needs `--parallel`, and needs no special handling @@ -61,3 +64,24 @@ that against this package. Worth knowing: **without `--parallel` this file is not written at all**. The XCTest case runs either way (the console reports `-[MyCLITests.LegacyXCTests testOldStyle] passed`), so a project that omits `--parallel` silently uploads only its swift-testing results. + +## Parens and argument labels are part of a test's identity + +Both inputs report the same three overloads, and agree on how they spell them: + +| | `check()` | `check(a:)` | `check(b:)` | +| ------------------------- | ----------------------- | ------------------------- | ------------------------- | +| xcresult `nodeIdentifier` | `OverloadSuite/check()` | `OverloadSuite/check(a:)` | `OverloadSuite/check(b:)` | +| xunit `name` | `check()` | `check(a:)` | `check(b:)` | + +`normalized_case` trims only _trailing_ parens, so `check()` becomes `check` while +`check(a:)` becomes the unbalanced `check(a:`. Ugly but correct: the same function is applied +to the language server's symbol name and to the test identifier, so what matters is that it +is _identical on both sides_, not that it is tidy. Because labels survive it, the three +overloads key distinctly and resolve to their own declarations — including across files, +which `overloads_differing_only_by_argument_label_resolve_separately` pins. + +The one place the inputs genuinely disagree is an XCTest method: `xcodebuild` reports +`testOldStyle()` and `swift test` reports `testOldStyle`. Keying normalises that away so both +resolve to the same file, but the names differ in the uploaded JUnit — see +`the_two_inputs_spell_an_xctest_method_differently`. diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/OverloadA.swift b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/OverloadA.swift new file mode 100644 index 00000000..308ad010 --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/OverloadA.swift @@ -0,0 +1,6 @@ +import Testing + +@Suite struct OverloadSuite { + @Test func check() {} + @Test(arguments: [1]) func check(a: Int) { _ = a } +} diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/OverloadB.swift b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/OverloadB.swift new file mode 100644 index 00000000..127bf93f --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/OverloadB.swift @@ -0,0 +1,6 @@ +import Testing + +/// Same suite, different file, differing from `check(a:)` only by the argument label. +extension OverloadSuite { + @Test(arguments: [2]) func check(b: Int) { _ = b } +} diff --git a/xcresult/tests/swift_test_xunit.rs b/xcresult/tests/swift_test_xunit.rs index 1b5b1e5e..76304085 100644 --- a/xcresult/tests/swift_test_xunit.rs +++ b/xcresult/tests/swift_test_xunit.rs @@ -91,6 +91,21 @@ fn every_swift_testing_case_resolves_to_the_file_it_is_declared_in() { } } +#[test] +fn overloads_differing_only_by_argument_label_resolve_separately() { + let resolved = resolve(); + let file = |name: &str| { + resolved + .get(&(String::from("MyCLITests.OverloadSuite"), String::from(name))) + .unwrap_or_else(|| panic!("{name} resolved to nothing")) + .clone() + }; + let (a, b, none) = (file("check(a:)"), file("check(b:)"), file("check()")); + assert_ne!(a, b, "both labelled overloads resolved to {a}"); + assert!(a.ends_with("OverloadA.swift") && none.ends_with("OverloadA.swift")); + assert!(b.ends_with("OverloadB.swift")); +} + // Collapsing the classname to its target would make one `shared()` borrow the other's file. #[test] fn two_suites_declaring_the_same_case_resolve_separately() { From 98a9eb0a47d4eb8eb3bc4448288a500e5824acd9 Mon Sep 17 00:00:00 2001 From: Dylan Frankland Date: Mon, 31 Aug 2026 13:38:33 -0700 Subject: [PATCH 4/5] test(xcresult): cover an inherited XCTest method, which has no labels to key on MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An XCTest test method takes no arguments, so there is nothing like `check(a:)` to separate two of them — every one normalises to a bare method name and the class name carries the entire load. That is the opposite of the swift-testing overload case, and it was untested end to end on both inputs. `BaseTests`, `ChildATests` and `ChildBTests` all report a test called `testInherited`, distinguished only by class: MyCLITests.BaseTests testInherited -> BaseTests.swift declares it MyCLITests.ChildATests testInherited -> BaseTests.swift inherits it MyCLITests.ChildBTests testInherited -> ChildBTests.swift overrides it The inherited case is resolved by walking `supertypes`, built from the language server's superclass parse, and the overriding case never needs the walk because the subclass declares the method itself. Both inputs spell the identifier the same way (`ChildATests/testInherited()` against classname `MyCLITests.ChildATests` plus `testInherited`), so this is covered by the parity test too — which is also why comparison is over pairs rather than a map, since three tests now share one name. `supertypes` had only a seeded-index unit test behind it before this. Disabling the chain walk fails the `inherited` case alone, leaving `declared` and `overridden` passing. Co-Authored-By: Claude Opus 5 (1M context) --- .../data/swift-test-parity.xcresult.tar.gz | Bin 45562 -> 40609 bytes .../data/swift-test-xunit-xctest.junit.xml | 10 ++++- .../tests/data/swift-test-xunit.junit.xml | 20 ++++----- .../fixture-src/swift-test-xunit/README.md | 16 ++++++++ .../Tests/MyCLITests/BaseTests.swift | 5 +++ .../Tests/MyCLITests/ChildATests.swift | 4 ++ .../Tests/MyCLITests/ChildBTests.swift | 6 +++ xcresult/tests/swift_test_xunit.rs | 38 +++++++++++++++--- 8 files changed, 82 insertions(+), 17 deletions(-) create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/BaseTests.swift create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/ChildATests.swift create mode 100644 xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/ChildBTests.swift diff --git a/xcresult/tests/data/swift-test-parity.xcresult.tar.gz b/xcresult/tests/data/swift-test-parity.xcresult.tar.gz index 8b17eded0537b8242f9796ddaf730b858490d3d4..274f248467a1c64d58d3201602609dce3f62196d 100644 GIT binary patch literal 40609 zcmV(lK=i*KiwFS4<&|mx1MIqWSX@uGE{wao)4_t%jWjgcxVr=h4h=N!PH=ZiaA_pC zBte3^I|=R(Ab|i036K!rl9@T@&K$Yte%~`Q=Q-c^d;i$GyJ}U{>b2HeYt`PZ?k}sR z% zAEM2_fw!lZrN@IRHvUeQF8>EPUwatL>HpCGw?7K-ch>SB2KB%7znrC)<=;IB{$KcC zSeXA0|Nk@aZ~U+9V(ZH5<^=cj`a7=iU=OgM;D73WkN`;FU;Pgj7I^SK7$_`&1OWaW zb@)&5|8xI~OZhoF0eoN{o^V$e2__IPkO=^Dv39kAyVyxE>FX)*h%iY>;)p+z)0EXS z(vk=KDL4RH`Z8+DvH&I?K0awTHzyb$pPZf?Kub+oR}b(o2Opoj1`~kE-pk8Pl#kEX z*O%Aww-m3ntMhL`Pd+UVS2vi4m%rM>WIPW8cx}9Fm>!n-^Xz}4&O@sW+}cYL2V2|` z<}Ybu=>?PZfIVDo#QA z(=nEZYr1*M!i4>K3;r42p+We|UZk}-4Cn65A{(3yBvbu^I+7c4te1BQuK@YyaHiM^^tB0i> z>_1l0%F@~q=3?{j^t6RL!DN2-+3^3>#D5<1;2O7wP2jiP|J}F;in!QVdf5D@+Wf^~ z|FJgCmJY5S|9eijixE{&i5}L|5Xz1@*hbGf&W_cUsnF#_df-VB+h>~mHtQK zPYK@xX6wldd}gfzcG6U_(d8HP1sUiH@CysNI9dDYs{1|hePS$cXm217SJ45>>nQ6g z`8z22YdEPtag%lgtAl0zfFcl(09Zvx+uq6^%%f-^VyFnSSC_W(llGO6_%HTS%oxeAH;`Z}eJD(+C(md#NPeSY(86JgwGRLMW3 z&ie!ZA^ybwha_pq`;SXv{{{aA1o-*?E&m0;f`9P;p8@t}zFQgK40NZNx#uSkB%GAV+p61evXfdw=Ot z05UlHK%7aoh8SMMkE}*UnP;OOe7$3lbHkx!Xfr@CR$|N&bjT<;I1;hP0pBwb!OERt zav%dHiqX4qk7s4;_LVf@CCQe*$754jGij?=giwNAS4|zwXmtyL3 zRJC+OEs*-aHHU^2 zDG`_u{1bWAaLyrfdI(qj498hMp%5=$1c`vB7t~>SHr&qza)4osg zq`2oqww!4R24HHm#Kw|`TCdc zSghsCueYo9TkdeDb@P+d(4K;`b3hC?rNy5J*)A5yxDmR`04F>*GOEm@#%$#Bj9$S! z%-B(~l{E_Tw&lpdj}`{)1*dy4 zH415l91><`>dZ19Sf8_h943ire8JWA-8H1RY<1J62VFX_<2H|vrJU@rc$iFZ#2P9QV$Osz0y9m@2LJ1or6Lj2f%(V<3+a}OUjyhI+qifU}48?`USHkR2OFRF7Znu^_(qE5-PmdtLFZmD)R|v3KlgV$jEwscN^dJay|Lo z9$og%`hDM`$`$#oX*~&Nmci$tR|h)pJbe5FDK|II7<+nNi#+-H6OEN8bY`L0B50eL zTzn=YltD>i=Awc zPhusQii(YmVqKCFZhq;0^!fHK%=5+Pr|nw|tshisz>d?Q>8lRJUbPzUMS}TaDDuzh zuU&2lPrMnVm5c1Yuu$Pf?}kZA6ZGLmlDx~v-X$&gY0AjpeC2T)wMCt7w)$O=SG`t& zYzaupj!t}mLqZ}FF&P`jhEFs0J=?8TNp5g^SIctFx?lcX%xF{b@>}%Gc|~OUc|o&h z*KfY8opKp(_=}OTmKQ6k#v4|!`)P-JM5ovHa8qND#I=;q%{p8KL}=Nl zisvmJt0faeXjI)#?}sSUTF!iw=OZI^yt!jq6tNzo%X)nD4fYfCebVZKMN8>ovihBl zK^oJPk2uroxW~_Hr``GO&(8ui!N{!Tf}9mpp~-H*T8 zK1sU3`lK=ZgNzlQNE<^N4GQF7IU;rdr}UPa&ZK?LGlHgT;9v(tUcBG1ZrN%V00sGe zMhOkAETMxX_5#ooK{#jvC~_GD(C~1z_c_QUp+F)|r3iq6G!<)>c03U}sTxaK?5M3B z9=2+M=9j#em|F*$tMwgU(&bM&BAN>($zA!s`l+=TLTNgg(5&B5oJDJ4^7R|Iifl~0 zZF>Qbl_D$|TPo<*4jN^BPS9=gAItmS?hU8xXu_ow!bCLgS#)D=K|4l+K`7HPgV zMA&$YqUY#CSy`4 z@fgfqjEI3m?U>%QYVaWM^=V(a=jf%K%jGcA^JjfU{$D>0^$5E>S!4Kk+V1l6>BThr z2+LriX)x}N>d;J@(Aa6 z<%y32{D}ZqO^yGFAxKD3!Q9VK1!$}1E(=!I_0Vw;k(bjH);ACqc2*G<@;7(2vr^R8 zfjFp0|JUa~urTni>OcNJo&Uf>f7E~f4E(wN3&uyHSXN;H)U+Y@luYu2r*2c*50ohN`V^0L>`eeh7!PGwJ5docx7)lZ`69GjZbV(7ulL;-Zek4-MK^MVu)2 z6{UtA;i68Ki9}HmAeqcQHyw;bVuai0)W_a*FjnVW&hFO2#7d zrH}U$M4hj^i=8`8>E#!yLT3(r&u*)=6w2|2w{GH;uy|3~m>#v^Wk0w2mTGTrlwWK$ z2>iL(pdtIJx6ytTqcUozj9~j~(~uVk01e+={(_v6#!^N78eif$C-*ZnNbM9r)(gWE z%aLWwv>t9>%><r-cq_I7?tNu<2@Zs<8()q`+&7&Dksr{7DgGU|6cz8 z>*qhhU?&kBprD|?KFnEFTUW;yCTMK$uB7hnr>x}$QFXQ9@wZa)bl}ki+leR{7|81C zxLNuNX`Ab-T5H-X`hYZ*tR2jKCV zf8ZaDzvjQQ5Wm3_OD9=JD~Pp~jFGM`kByqTpC%X%F)*^?7q+$1_S5ro77~HUxXbZ7 zXu@>iEiSHUkLce z^WT38{!;&AAR+KLnSk(WqzI*F$;t43ZP!UOyJR(abT#s6-3@lKDoo(ehHc=g6it+LD}ZIQdsnSg25=;m|Dv-%x3qW$$I{upf{({0VZ&fP~5qU2!VR>(VWj|E`2N!KyRTWQVLzttWAKVZq zXru<#6twiyaCUbx_VG5iwvy&?Ru%Se1_AZeWqnk=t(4?7gdP3-?9DaJ)s+;D|1bD2 z1m^!Y{1*ZV0sr9tKLdYx|AUM4oI-&a;Jl%kW^-XgTSK#=#8b61)apA{QN>q)zBKzb z2`L;Y92Hp%Ndid}2_J49*p!*Xd)HKhomQK;wozo*t*U-g#mEvBP0}-Rvz+;w{dD$# zcT8WX=qlQ3|Mnd_asom&&k>pwA0i&7n8V&*G9{5zFH%y6i})$Qus`M|EyB2(yB2j7 zt!KGKuG*66zLqIZOyKPD=*w7$*Q1*%B+s=@OrpYXJwNog{iUBiRiXA=v)b?azP}%g zl%u2DZs8Irle|f*Q}K8o%XIxzQ88-?rB$2SDXxUqMM@O8<5WWZLK~%M=Dzc)CX}DT z8}Q{Snl8F8Dpdq80{0P|lV6>k#+ZVudNh;e;l%IUXYZz!y@r&8w3%*4hlDLlGO$nF zIhIXr@sY*@y&;Wft!_}>#-91aQN!X5NNYffnyZ@l(~)-M0LqxSvJ*!}*7J%Oyu9(W ziorO(W?VKDnaX(FUg0FQH01wokN++Hn*WAA3ih%h!j^KXb~ZjXy4Da+H*I4jc^Q8h zEoFBIKfklCwVJSupu1&&n~I#EovfptqEdj8x}S=ijk1-4il70%u7bS_kG{OO9lyMq zzOI9th@jcmS0I;{tsd zz3ce8AHiRtV2qVAdBD${(ptCCEM7s-`yRYU4oEPgeh+zN57Ug zcw52c>T=o$jyV-s=>@Aws$5I|pqrSUlZoyVf-IE*31en;4nJcqFrZ^W~Cj$sitoj=jFVDA}Z{pY!c8Ha| ztQ#%0$#W@^lYvLnPY zXIn1oDfGX@;~~kOy@~8fdnHwz(Y7YZSRQmE5DQ}{N%bo;%DE5O{QYJj1Ovp8#O)@< z%XhnUdn%JIJ?x^^i_&p$0-4ve7tX@rP0g6{Cqhb&iv&wFl<3MyGJ_~hoX0~I=q!)) z4ODH@N%rC0PC1naaD(D)%ths|=Wix*i71*w--%D*kWtFjiE>cB@N)Be%{DYEIu$E9 zfkTGl2RyZYMidLB#v(#$KiaU8!ZPH>r_qT(Lbi~NnVI&tHn|2^gz*yrdOMOP2vKxp zk1>!@g4XV@06?KPW>_rSD_Qyqg)j6KX1KJ--oYKX0Y)`J*LmSg>B~JoJcXUM5UnFw zm9+xZZcJm+bT0^sm6L|s|nSc=lkRU3jQb7CLE4Jv2oJt`O z`w=4TP@;XnhwWx^FDu#2t)5RYI@EBf=D+z)sg_u(&<-ec9Z7aUV+Q5+Y;nGWc zx9Ar^0pE&Yn|v$JzHtXMfz&cy{qXSD!nUH6JC0^~JjP3ln#IDM{iQd&klh$oUZE^GiIbJf@T4dtUraCIRa+qpJsx{bg-6_F0KxxS@^aGU@ruKl#Xo^K@u7#irn@|h@ORX6oVBh zd5;blN)Z}yF{z@CX(;fjGEVe~Eh0@$7-L$1OGsifK=-{mYi_g7R8T%SyGbHX|Mw-c zlV`_ksh=)mx_XW`hcV6fjr4z8noSN=>#zMjE+1zKoxR2b0XJrNMj3py1ae{&?q2&G zZ#*l+OrDFYMIkGwKC$2od02zeuET#x`Dp|HK18t0MY~gdj8T}?70*+jSbZHT>gCJ&{bU%cwg`RjFG%cr6pC={nee{4_ zd35~mP>Dm3=RU_1TB#(9FsR%P!vpDy*QJKaq9E5dAFMYK)>7rVLl|TZ0k1E7pKiHM zZ=DVt*rt#T`x}?%M!b~Aq`!3vyQ7jkO4|#p|1NsDGCZ58${*&W#qefci^%ucH6RjS z(x;nP#uewm{Myj4Njb-dfgH|E@j6u)!<)g&$J1X@L2_IVX3ve7 znLAx|ykbyXvidbjQ|X~aw;L`$Z=6Y|bWV!;44+s!PS5zYsw@vT?W`b=BdUJqg5mre z6mKR_OzfJbo8taO=~egM;$60BrW$~j?B&C9Lt|=Qxn+arZ*-8jTR8&cr{CM(o5?~BoXf&5ydJF+;mHcl`wU@czwL7HkO=(@f;cm=s=CEfIYx; z;cNE8^}_0b4ll6P$vP??^4nA`KO%k5VmcE{Twe9tJ%SmKrLtO`DS0m=&s-L-rr$>S zO`sQJ`M8Mhh>FBA;@9kP;Z#DP!)n3Tui_r@9jJX|I)shIH~BkL<&g|EwpV?Mwjw}N z1|IfXXelqk9V*b(Ga&*9!AX?ruPBrj1P?z{)tHjAN%fV#(JQNI>w)yeC=DW_Y|oPU zfp&1NQA3hyfBx^nfe_m>Ul$~}SIr)Zf|-U>&SWY5%8dxl4%F)FMFOR&aWYMY0kDl= z`z4@KWh?FPRu9{bvg}LU_O_MZ1BNMnfjo^Ty|rwcoFWfQNt*D6&qk)=nrO zu2C)CY<}Dl8&`@26GM+%$_U+swA)aT^K!o>PXmfoqLS=)N>>$K3rV&i=VhIB0Hv) z)$yVYRc=47HVyans#~_V@vNM5iZyz?azTYHs&?8)(>G}H=B}b`H!m9}9L$ShM43lL z;;o(lp-xZ{ARYeD2!&S2>#Ihw?z%n1CLn1nKPkSQQ@LtBcR{U^eH7Jy#XRt{Q1tQK z6b`(z!L$DMR?#eG)3FMgK7ZUopE&EAmsgIWJU*Zk#`0l@PV||}+?M~zVT)C=d@1gf zHR6S0mu-|FH_h8(@h$xBn6piZ7~F4MQGuRO)BIxu-St9u6dlfq8%;NBv@#?0 zzNQf~1?HQy1(v_OU8&oHw_Hx8d_t~#?*j=X_{Ds>W`}Cb7W$+|@$YV~2%jC_wbmCo zx>Jh!DU-?Rk5_YYveZ?BxIPJKYoT|HCgtR;NP(AIq$zKQD4q_@;w20egj`6uUZ473 z{U~t_?8!bFBwnKymG$)*>28ql>Lln7DO8JNGVx?qjtx*JEBn2}?0o)y{7fR$mqzvH zz~QEgFVXOQTswuEUOGQ(yq2*3hFlZZcr$dA;rVFa6xzCEv7)p>`{dUD{8W@|eG z2YKTwaP48g@+tP_dCBoOxkFv%&DEE z-dFoB-tW2T$&uB`#M>(uf>)kR%}G7YS0Mhxo@1K!m{8z3_DnA>U!RQJ{-Z)Gpz%XP<+gcvGE zLWf!|4=^NBb3;b}t3+%_Kgc5zg;d`$sRV`!?-_MIG*M0ojU%)BxAuM3K~RW zk}2toL61R4bGcEcz%d+7$G;UiTXL7`kDj*PKfo0ztu!M7Uv=FxSVr&-XBQ(8yZ4e| z#-U+eKSJmb?Z_eThgxS-%YP5pz`faMI1>x{yexb-3;E^m8J%`j6llnCJw`zWNIj23 zjYZ4Ex>_!=vLMAV%*u?c%C^rs8ZJfzZe0a7^exST0#BTi^46kUp31PQu(1#U&UUDw zp-L=*EX8VcZ{quqJ3=ea-)uCLT#VqYnR-#(Z-jK5$x<>h7yxD^%X;R zSXqdeGDfTA_1_PBD3g8I?)n0``b;BwR9~{TnAb*7Ft8zia4`4zr;Aj?IG7ID>lXTm zH4OHMD3{qUTPc>j^3`Gtes?Dq<==~}Qu6qp#M@ATlVMNDG|`y`A1Lm=Ui*`}K;MLry_jN0g! zz1)6C$WWG)(k-lnR?6v5du@&!5rm|MynT_Av(z*LmUk3-loWv3sQB&@($A}FDm;Rvg?6yz{#+f zGsze+25aC$oBKO|Q*>PfWxUSgDdzd?=G8{Ph(h@yM(&dJsv)7Ol{j63LLz7cQST^| zsSmFgof3V>lTQk43t05^wI0FslOkfann!##8P+ZaTtmKmx%hCjp1d<8_ju-VFXl6q z!qHtojiYfgm$kC(R6?A}Bx1Z8VfKnCp5@_Gn}Y2r$cvMnTUFw{YItIWAc>%8)1o@i zqlN%U>nbzKo)1=zKBV4UeHp!K@LVEiWt_Ag^UI`BD}oQj)q2wURsFwblkp70^)AuT z<8!d0%zDV&RPmv``M6nZlQ}>;uEk7VvQ@cE{fE4>*qL3)(nsg;)h+RMV`8Q+3iNaD zYBQL=m4155>g;MQYHGd?)YJO;{`}Ti?AOrU@ae|pkn5J;dq>d|SFblcjwc|Oi2Io) zLX#2m@3{oeM>p2*dycy2Ztst;30~X_xq2q%97WdRdxIJT8rG;R8wAc0(r$W!okBWE zy?M5aDXAGfPGoGUa~LO+~-HI0`pT zjQ`Wgf8=+%b_cc}ws)Ae3Nb@?^0Ac@g^uM4M#CE8q`3qs+w}5tn%F+TJLcvl&zJ^| z*1x<$w^2S&BKu%5rKExS;$aNFoPf2u%0qUT80cCTZTBJeIbKXI$**zPfAdKQrj_Q2 ztUV74@LN~J>JhrQISc54om4NpQ%i6m0MgQ-KO7wX^r(am-Ndm@=xUS6genwCWU-d& zqY34U+8M{$Ia=#TcgA~#m`?W+f@}TmI4!dy3UT z`%t=aOIw6)tBV7GsUmM=Q`Oo=8g{p-m>#(9h^nsIYWu9swa4A$@UE-X6MwHhVQ!+(T?cxb?cB znW|LmkboVV6PJ(}D;ir6nzI}^g1wB`CA2{^|67)HDZv#S=_cVr< zIiCusrB$4|&GLLK5{;J(YK+o$4kWf*Kmbm!=w+~q2CnXD6s|_t)E+)FO%=1@t;Pz-0VD!i$Q&= z1xKsv#lfdzTn|4Ut;UDJc)2-CcM-p~x;ngFh`=egDLqen_BKi#Pdn=RL?BQ&5jG|T zUME!n3i1w78j@w$8{3CNv`J-rf&;GU2nM9(a{aUHa_9Y{k;~g;U!T*%l&h|*4&}Dz zv1%f6OaL5ifw=(nm>4-(BdiBrkg>KeQN8lqYIlG73@9pm<{L6iKZD=Bj9ajFb=~Y7 zg{dkB@b@FaeC~@|wB1We9*O$Q55xW0=itPtq0Nxl6-aAnMUvMqi;&2T$@*s3R7(_( z-t^w>M^?-vEObNw8U}{dSLfO2g3e`Vv?GUDYo$^rzD-?@)1QrpP}0ecatC~P6qd6e z6S3f-ZJ9{M>qf(|y!peH=2?e~tuiq(9p{lc&7$k8pc9*T-PR zMWf-=mz1aX5@DgamxM#BM3%Cnc93`dw!9q=*9dPY`(3)%F6C(gguITgFMoc%IGX(& zI1nan&0Z{yjTI|Er?)w8aXty$A+k)1HamT>v?taBi`k$nTC;0CBb{or+4rZv?>qzC z_h6Nt9WMh2Xvo;H86JsC`^AP*36iN(meZB6s(-S?j(d{pF+7mKU zzt^#G*U}^5PLv*vj)fX!aDGl8!VP6{3xC1}=&)_pK9-}uYrnchTqWFHE`nIJ>Kz$@)(nqMz(Wcpc3!MT?d>WY}Q!Kp>Hm~z(#XP-u zT{@_UiQM*!i~BrMk+=wMwE!S#jz%?--r-;Jm?6w!zI+NxEo+WjZbWajI9fV34)MVW zsN$&rcoQ`f7T$>polm&d4r=Bo4FMA+XIJYN=ETl9#ui_~U~?(g=&3c)!>J}~#@J#& zUkNn{6b}&aiV({JM#@cymmX2<} zYT+=s!f~5KL?R>Vsl@xkk;eoQIE8Y4ngz|w(e}Ik>N#7d6~(0gDQdEHdax~uO4xl) z9*vDggpWrQzGI27=(h-EtRW4?yY)A}agE$Ob@!~>=ySckXUIG24wi((Lfum3SYn}O za)Xiky#|YvY*b{+LN!Uo?#?D_xt`bgjyLOcUU((GQfDEvL(Wa~YCz&SB!~eE2@p!e z4W;8INks)AM+hHZuJZhHsh1D=-1C-F2R|#IWMGN@O7?m&&y`kAt&^p%xWDmy1{fA9 za*l~dN5(?ZSo0v&xv_C`y?QC*!Vtq+8S%VNi{>#TDi$=#9%F0ofD}QBL=+080( z4pnpiB8B$#hW5{eijc$%^g#i5SP^~OT0k^pAWk?E77`Mc1yU^Yq$+ZXW3bfmla`@( zD@0h*u%|thuR+ACbM~pPdRGCglR~ag9YJN*HSZXr(a(f5ptv214bWlm7r&sCr{zLc z$}wS=Ow#JDXhwNdOx12m@g$O&Ho3U-Eg;X`#m7p`*Rl&PY2aQmlW(@B-+ZvYg=&We z`sM|y6ApVzq*MhnONX4%da)wkv|~LLwgMI{zEGKU zU7?U9=~|2=*m!{q3mtvJZ+ND9ELv8~2^K>qNirmB^eS};tY9+&Rc&BZk|%ZPmS-eRz7>@?N>x%iIOT`mFXlS&PAK?k<=rDrVjj~ASWjr03H z(q8Vym<;VB--T>qEE5Q)friPj>+yTeQq^=Ec-AIoy;qC9(?wVYCxvW{a#Go;KvgEE zTHiD_GoA~LRh)wkuB~a1nUirw^EHc~+4`%_4cT zER4fsDk7IlPu+Ci_dG3y`*?0n!WJ(KNZbWCaZ<>WBx6f)hc&@Fmn7?Jwu;GmO^TB+ za>}kDa!zPCA1!I>cFbH+UVeE7r*=Rai>t_uus>3u)xwgYEvr-X(+EmP3ImTja!eKv z3|94+oz$Vy=;AKrfhXqos2JhGhlDdd$5SWSucU4|Kk4OX^uf45Aq&9P17Gf2c z^RAO&x{h3!a8M;jzI^-z_v`F%En=knv?8w=K1bpSZe}H-Q~7$U74M`=E75=MUT<=} zJqIGCo;=Gx;fOEA=yrBGztk_G_!$-xRm8m*NV4x-8k24b#^GYvv*F&eLpiiSZL67p+2RJ;9H#qQ-M`j?xGMmG+mYVe4SwP{Xu{h9*;32g&cRP0&R9TwF z<=h<)oP6ByOc)eU^(CyD64}DMeQ}Y%;uUr~&Gm<2yHU#!FN_SX&WS=szQ<3&v(*xO zmMHi6ZODoWiw8b$gzK>97-|f$yWu>)rlO2JZ0FL92p*1Y_5GU&demr_bj{}(wH9F z8=t6)`v%v;-^X!iN{`Wea(e7{VO-6m?TewQ`a@yoMb6>ZPjw;{nQgOn`zp`RoiR1K zi`c{LDPHHuuQ;X^US3h>~qHEuHK1t6K(C|FH)hkPG`6N@%h z4C@L8z8tRb|MFJPCp_5D%s!{;8{qIv*>L}rMh3E8vAE#ql@`D4Cl5NINulr|xEQZV zby=C>In@Ln*F^|-(s|9`-R31>2VIX?7>Lc>yF2xr5cHB5h(LqaaR8N}a-B-$>@EF_ z^gPxOJPpYCX^8jNW{HM*2WNG$>cvDON&QMsVL;-lZ-&PFrmt5~aO<@#xngDaVfV9G zW1(xw3R$r>5HPIqh!Yy+eehW2-o$sZknE{^F8g^N+qWJD+19R0`^;aABw zAQ)JT{}f7{_Thu-SC&sTu(|4QFWwu++plNRKoSZ%1_q-7^3%;t8k4h_hs7-`w;nx9 ze@w8I1>Rcom|buwtVfK64e8V>y^q49wGAq&2)HFSxV>m-)zrciN{!Cr2PHL8TGk%NWVR)1OH)(d*SU{?o`X$r4~C3N_ImX$!5 zT-^^f$ zby`!gqCn`Z8zFu?ZZ8agmwaN`4Ao#5FARyu=zYC0*fl3(FS9gqM}J+t{VZdgH1^5B zn(TcCCR4Z>(J=rs1`VqIC0{<$$~3F#$SwmC^-+XiX)g2#96-@{8`<~1*EL%`C5@j} zzV@*()6BAniP+*%dALS+DUE>{=KGj_ACyN>S=HK)6MZ7mJn2E({R3vmXkG(VlfL%S zPww8l54t=q@pbC`{vIRlNA?7ISyYxy0zv^@qQX5IDtK>nw zpOgOegnbL8#I*kv$GfXnh&sEK7lDG}CUVXPfMLq1X)#YZ*7g~;9 zGj!cX)As@JFjI22SlS}M-I%T#w41pqw5Jhzp%cQ+V~}_QeP`Y~vwZ2_X6-C2p6+Od zgKMI+#kI^l))+tSw5Est>6R>E0$+S7b*1UziksNMEcm<0N)#-J9hk$FNnylxB#^>0 zmt~?Wi5=smq%Mg*VJT?u2Jah1`9d9+Ewjk?9<#(x|Jpp4-^5N3f*3rj^7F0sm=DF z)>R+JBt$fdd&A85rOY1F7i>Mrsem03hOJn}V7(Uo^whMiW@kz9dHehG5XVCif9-y7 zUb%A{p@d3kmLzbCB((;k{iMTnVZ88R&WXPo<{(>pu61;lFp8xp(a_>A`PRphnd zuCqMYM+vN6j?3*{x2IhRUAPC~*%)Z(URNJC%r!o{rn8{lQ{SZ+FFdBY@=SEAbeqY` z|H?7EzHRng_(MIt@LWo!CP`LV(Cec@(kZ`}QG}9v^cs#G(%l~vDkxwD0OW+e$(;9s zXQqjBM-pMFB-_nN=W}F5g=3X&yHTRpi}&Bg9LlxrAfsi?%ckBPMdysRG23z~-!Qw5 zKFS^V0W33pB%RB#b02vcSFuZlCtfDTYbWiA$P*cVHPl%2uu%f2nY57P@gv)*;8VZm z@v?8(nGjfXEAG!wu>5pG-M^CVSnN6{z{UI7mfK}k zk$25XCWaol?NDuLRM6?Y3dZ5(qH`Q-@%;k61rvcx2Qg3jTb^&rDeGaC$=b^DFM2e| zGPSdEbdq0xt%MmR(-#t&3tjf-=-np>ctD+oO8E(DA{Rg0iE+>E%3Tv>m7hih-`>=k zGQA_F*QU@C`UvKhFOdPQEOMr2j#S#qwbsY(q`lJYZ_dSCcX*U3f<3g! zi|1{}X5z{iYS=r*y(SrF%`_})bfh#2YIua`R2`W{aX!F9aP+GKV_1(O5$Yb=M%C{% zYeLb39F5*vBW3FMs2zRl)g|Bgffo*!PEXQnM%eTxKAmE{h-XZwe=K9!CsX(6a~6+< zY|)%|4GLwUF52s_oK2CEW(n*|N0=`I9*v1!Q@;U>$}-g{6@$2_ zi}#pHjYXjRi|9AC+4Wp+?NO@<=XOuY**dwtKT8PW$-6hiLEAR0i>dRbW5H-ms?G%TXky})VkmXY5n`0|QN?i|!aZu90k)JG#dHH?DLETwsME70_bYY>2 z$@1}FO)^QwBC#ax3$oJTF!#Qh71AT<%bXBXH{UP1q@q)sc!c=4x~^I2!3cM*%$JIu zfX*k{d*=(?ES($aeHtCJP2p-oG<)i0KngUba26LEQ`CA%6|-u|5+XHyj0dbvkt-KW zwm#xAvoAuuIcjc{&*s)^q~U{KI?xj4*;$|Iq|zyAc60Juhbouz%5h)K%WU4Wkt=Ta z^xiwYqKdDqQE{2d-edx$*Ua{QU4B)m&`SKy+BFf-rCJxUP--9_W>F>Y$B}uECX1~C zNB!Z9c%krEh16fs=~B)L7mpTt#YdX(oLe-WGRq;YJK{|)BW@^wTvZA)cm-|#WfGN^ zCvfKpCC!wbJo~N+4OcHFIuC*Hah2tnMF9t<}kQedue2)Yv{; zoRlu(*A@R~0CK)IL+8z`7NgSvZH;9Y+ld&~XNFV*A8383{;3g0m=ZzSS~mJi;f4x1 z0poB|w!!C7cF}z;V`9k}k&f1E=KDUAuWj`cGeo)%QkihCAnn4thp$U47G-k}Q2btf zmwaxO+2KEZ5*BCi^YnYUEIwN zZbut&F1l1g#k7}c$?nsRt&gycl_CYPvYrNIB!$l4zW1;5d)(Psk?C)9lfk%4?s!S< zESEV8s@+Hj_s?YY8gg~>^=*u3r!&yFf=bRr--tUc9?W8~6}#a2=6i)RAG{$u&x`Rz zb@*1|&HUD^_a)tP^QXE!PcJ`YN=onQo^`k?6#XnsLDSfZX$c}9TSM2ob43K3_yb<< z8_;}|5`J4-DGv3BttmH2-V>{$MHs)%+0{XHThBDsEW%0MGZ)>dVLtWpKZ`76L zq%m0e2?7<0>_`IFu`heXj5CMw-&we^xt5iM{zxostw_}K%TfI1o46nP%Yeggd|C(F z?vw&iCf@Vo`RVRB`I=H{|3#((`eOdiv|{6W_q?H)_@ycbgN&i@h=g2Hjd2k3nrh^Z zPg=?MYrloKSSY!afd1X9ciAOB75TV*Xy8HQ29`-#5V!}j*L|A&f#35Z| zgTkmXNF^=GmiEKbpXtX0lcC?1k|1dbUUuyZ&5{@9x{1wV-KW6t?StH7^XvCYRzr(r zj5C~6YRT1w!PHE$T(o;TE<2LEG~XHJqNN*jzrTKB7PD){L|oQHdF%;;s)|aGJt@N& zdX2Z&?#wmEbK%dwUyRW%%cF(yqkuxgg{Jk+Yc_yY2Kjmj52*MP#kVzR-*{a{DYw3$ z3u*jYC_7K1Q}UinX6F!7C^@Rum2_aITGwNN<&$T`J|nHH9b+y!MBOqf&kG6)oTbFJ zBT+n298rcHp8q^emUi#MA|*{nueFa_8^tuSP#^1s#?GtJF%ohH7v)t4#<$gf(ioeu z*OuV>GHD7*K>)*w4P`K*&?2n(`v^(#aYoW(BGHa?OxdsEZr7(%jta9!uHM$1jIP=B z99|OQ(r|(~$)YcMitS^I?IW#6?R!(9dIP)SjX_=&1aNCh`;h6NqMFgJv!(jUnTk7j z!*icB`8&OmCaZL4lf7H48x$WC4+j%>a!i(xQ<>RaiL4n&6}i#*Y;mCLO`xl*MK?YEh#OyWY#vFbF!M^!-ICQ0YwQx)$K2Cx@*Qxx2C5q zdz^oeQMXz&Sh8l};Aig3hez%+NxPOrz4h{fa+2a#U%g$PxvejlnTq*IU3Y&~RM7yx z`lxSWrpIm14wMrV)(VnxVpkK{D+zbYnJ)AV*z_-&aJ}E6{Ol?m;JRk|a<9KXQu0kd zhaN8lui&>51d2?lFbnReZ+38ga)Wd0`r886f>yia%aE-xHD#sP^BSmMF%W7v*}n^T zD}s$Ki=r;boid>)TX@{m{mPh0GT`yC;&{Dpl4J6cGYtiPIy&CmVPn%aT|Wl}!4GmY z*-DQ_?ivC0$&ja-Kl0DME$cFN_)FJio^?SLxdHa*b%!~kJK%2ku(@KXV!u>KtphmXCR*T(mrx>J7{AD{6 z6VDtQGX|WYXDXUCI4A8En$Erv<5w|O+tXfu*zz$gpa$;S`u5;v3k4lLItn`uF8HC3 z^WHd(*j@2$4140cP|uItwbNyOSIHCcpImQ#cD6s$w|(YsugH_Ys<;jx>%Lk!iBFUN zi?2&e>h3;g z^2FKvb?MOOfwLZ8J=fS&w|41Tr}w7+N$-WjMTiH?(vSv$B z`SpHZpYuIkpZ9gn=l!{U-|Oo0`5w39Fn=&-%J*wFblVvVS~3tI54%^j$fjliMVyrQg=`{J_LxUjta5EL^$+x%BHZ3UJ&n6~GKakCN z3};b?>UD@H(%ZTBisp&_3a5eIx{#vjOEWJ&Fcu|Pa?gK@ zJ2ZT;%Oba?upxG>x=6e{E8%eFQ-7)^?%DyHLap2Vf?Zc_iPZU(>f6nScZx$lo%B;s zaNa-bT&CxouNX1#`g_8%^G)wBshUqVzXURG+)^INO@uv?X2`F4cH61v+gi*gr^bHg zJ>J%9H{Lk7)lPhZJ54rUxU8IE8CCarb?xwL$t5+Hd?CD=B{gimI z`_*{MWU>+mf14(J)M9ME&j0K&f7@FVK<_4HmKS5MY3NSOT&3+n)Q^A+kgCIVm$ z$KC8K+Z4TBMze#tovOj?yLw}J*jZ*EQOzB~$3a$1IpnCN%h* zTy7KB@FRoyrRI$c)uIql6ck)eL;)EJPL)(s%$?I!d~Z?t3iX0h;IhNnv+by<+R62b z3N&T0b%{8c8)#?56Mvh3tEAv{;o}vM)q%)^92CuIu;Pw!UEYl5pvXDiag1QswM%yR*l##{kH4%+gZxn?7ON zGX2p=_|R?jOw<`FCb6oVZ{@jPE~*<)G4-0@)g*K~y|9}fpYu(uZ+i`#-FGs#oinYT zo1V9R{$8@0;=n8jJ#W&)8tDWw;=QCbk++OY*byB(Dm4rDS zNoV(nuC2{~|L$JveJP~yQVC@E`Uh*!9bL_H|M=i=tzA+`%sqRzFayF8z(9taWT!z4 z=Bk}d@7fIV$bVk5=@Pek(rI#`Jx8F`8YaAybN~4$MSxjBs*>>1+fqFZS%#=;*CI8R z?ATKQ(g_F}A}WLKb{uk8rdKZ={Voh@ zl+O6w1~bZFoT%C<&T+dEDE;DbChHE`=T{B-NdeB7*PWO3+}$<3-9z?jyUYS@W-y++ zyH*rNYbqt$m^|MjnZ?=O0JH0pz?Rp%QQ1Cf0SR;yjFFL?B)Av*PLyQ`XY>+$uc z!JjDjBRdwlF__Ly$Hq@D2S>sj?_cd#)~$8a9cf;0nmr%d1oo=YwVn%IEZW6BUYp$C zs9f`!fiDk6T`B75xt*j#{Wz@7ePC8?=c$dZGg(!N zr|M2O5A>}?d@}(FyD$?2?7nr3gnZyXJ94}#uVGm?&_B^h)M~MM<9KaXB;Hv3eTwz= zsi?KI2@#FX_{@R>a%8?JbaB7;itM82~kqxg@#_Ma((g|e4GWuAGBO$iJp11f6VXki${zj%8-PY*L7|kwAY`B z3V-d!Ub&!Y*lOZgAc~K;Ht940SmVes^5LVn$GYEJI{3U&@i^^ae73%Nxh2ox=7q&f z>D4Ul!uEAYAkvpTuR04 zrtsG@O}}Saob71xgiU`?YCPxLIPmEjQIK2t`cw@~u6m6t$Nfw$xk}}toy(SP1Zz?} zCy8izX*aJrtG(!y+EQ!7xOD61Oucu+w?;}glxiquhlW9!I+}VX9PO{?(s`>yR1tBr zic5kD>}?jp@wb9_2SA-3;j%RsrjD0-w~ND_(zg2HJ`6Wd(%c;lf+OQE^y@ROT~=G& z8!UctX0q4fyL@$OjJ-tlUgZ7afzl58So8cF2b@jQJUH@YKZgXGHDq3^s`s)TTj590U674UyH9Z&`q6s`ov5m z1U924|5&JUWi};KYtuH(mY27qA)HP{zT#WZSiYll!;twIDrArpFRx?IduRiI3Ot*ZES80o(Aqq?d7x9&t&6<-7FY2>Ys# zxAfEutgVkT8!xd>agAuK(BIp#mB7h%K5OV6gU8qhaZ?iJbBUQ2+NTfsZoC%4R6fRE1vk35`x2aG@^jw>of-@Q#W_@KvYw9dO{ zitjV6JadOqjY?@PTiE@f7hgR$yBqMawssn?JM%C-^kJtQ=Ugs2)~6Ck+Y@CEAKWaR z(n0u;uZb`nU*H3rdA(&%x)iB7iMG*aZ@J|CP0`A{X)M06!iVw&NnpwAg0GfUnn_&p z!Fo?_dLrD*-Z6Lm)pVSYUW>nl$9FCk%!DL?BI9cQ!MlVDmlc9i<|=e4OCorr%uk*= z3v3&>7jVs@L6>Q#*CO0Tl*7sRL0lF@l@}Ru>I8RxTl`f9Z@?QnR_3AM(2k@E%FIV> zm8DDKIR%pF?U4!Asqku^I2iLaeRwy@vYbhH-6EHtUUhXkNlZ%etwHhT1iO%@xg(Fb zsP5jKRjDsau(X7_2W`83kLvN~(hZe!WimUdZWwo>+xiXC%R+E*MY!*dAMg zAsLm|CSbM`EvA>^2?gIc-`B6ckmV;(5c`fI_hQQhMrFQityd`ZCXz>{$L%7@YZY=~ zhO{rbRkFiB!Q`{ACXln?lci5(KMvZ4$=QN;UzTWEl+v8#qL!-@?mKMNh&9kr`S7It zxY2$OOu?_7A^jq>L$l5rDtGgQB*M4RLaEiI`M45&U1h8Q)wP)>($ymBK8H?+hFH00 zb7(9{+vRFDHdUBU!-X&ibd`Bkaxwr*&B^Is$A(u z^q&^Ke((s+?UQpW_C)sGn`GN@PM0^y(B_oW?KcLfZgG5sogVd(c)ci?7py96iR2SZ zqb{U8E$PiFlWuy!f?}F$NZ~ZGqT{7{vChj&%wbNi+mkew>-4PmP0qIpI&!H6CeMdb z=;m7TFBf7a>h~wor21&@Zg#J)uTU%&UAbi{@+`$v_P*O2^h?U6yK@}%f;#hMj-$(8 zFHu4YWiy+6C_Asb{tx)TJ}Pu5|~&52^1sF`l+3{q7p9-05B`migS{*<#( z$YSy{T4ymom&hi+3l448OL^(3JSU=SyVRm-Z$u;md{YI*)v;Nk;P8|y-w}@Lem=gh z!#*X9ETA~Oq#5(Ep;}pR=U>s8WKI)r_Xyv>MzfV(z#eczZnwE~b5e z3KYOt9Wzwy3H4Q;v{!uUln&Li=_HR)3XiFd#&%FBe~;}9Vc}juzWo!7Rl_| zd3}chnmf4fO6BpmZAyAGyFgN$f+cZyRtyot`EF32NBLSHbh9uuZ?j1aS#oZ$w(f)< zch2eRdp4I8bpVBg-R!LSTk|NTD68|y8XWd(pVLN8(NLAqo49s&$H&h1M1+)UWwtzP zCdsJzN2BaM;$2<~10CM3EWWA9wO3h;(Xp#L&32-8@U1?xK9f9Oku&XRV>D)vv#{rN z2z^eTOF1yU#*i}2D=yk1?S#W!7{h}>TB?Ag6qWjy_VMPdb~>d8grS0L$xT*SCdY59 z5}Zz;K_j0Dk$S5(I@W~vEB6BxWqA%iwO6d2j!+b2^^d7B8oEncxwFQ!;{N5)ihWf< zl*sO07|SbZ+CgqwW?*fO?D3P$J@sK?Z$daXiZli61^BmjYR;GX9W=B`@O;zGiiUl0 z<2l7godj6}nd^B%q79pYZu#(cq^`R=X?Zq7Ye2FKv$t8%Xemtewn9Aokhso2a;}WIXYqAnv z%h}(DM-4>gJV)rcVx^gC4oWAVWNNZIzvA398a)wXt7DoKmd@sTLg_{R)WR<6*e&BB z$=mDUa~nNDkDrlZxqJ3>A6i{M)l)q?FTBv%}D5~@1SYg0Djk?6Vg-_^0CN)_{%A1g` zlR>@nZ`ED8782-2SxO!m20WFg-juv{;1h&>qJV#WdE3!j6S=W7QaUX^}wJ#UZ(a8bq7jO?|Lz6DV?aPnNs z%Fbn+wx?T5jc?UDG0MFG#>I74#6QvJ=ctWIn@mf$44uw)*V4Tcob9%&%@EieJ}{Iq zvZFyy>&FOcFBoVZyI~tkS4tB@DN#)=U%V+l1({D$*TP#NK~X&4#HYjC*qcXmAj3O% zwoG3<+p2C`Y%lS&Nw{@(L2DAUa*9=}&Qs5{%@E4RAeKanSxU>4FV^tBzu*$?;H&uj zL0b?S=7-=Me!4H6Z=<{!dQRS}ZBH;MBS`**09^9Sm~~~*2}8@Rv-e|Yd;O#u*Xy0I zADX17Nuuov^_=cxfmf$@KKdyMiaa;h(F2C^FN71eXx&_H(n89ui)vS z?Wh~%?Lfw8nZP^=XeU1niy*Xvi6%*#=z`JkFt-f$@dW#82B2XMB!^&Kv_H-stW7ct zG;neWR5!;UQ1Wh`&brQ~|Lyso|D6A&s33nd|L2G!{%U@n|E1#wH*hz?;k3MbWaW_v z?H~xrU5n%(YZ#0pda3KkBA_I9ZMdr*!Q9Kti0nW_Kz#ybEwGjbAS0Zukp|vD)4&#` z=ML1tJ9@z_A^PT8nt1hpWB#`S6#Ad%e=0za=KuaJ{5JpV5gj0c1thAbvp^9!F>m-Dm!eZg3;w~ijh7vqvvhz# za3CF1kUYXxR?iFsHMG!{1>1vACVCq7f%4k+?yvw`eOa_Q!W0U0v;cbo{d_z;eC*-I z`lc3IiotkGoZ-K*|3eX?@SpUr06DV%e-FRu-}D%ObW=-AIB}WcavJVr>8mxLC%hOp zmw_tSau#P8@9Cg=*zG7l6d;*a8K44C0-c;V2SB^ z_#neG^!b2i7My1uUbKk58Ibk(_zT@j9zicer5|2oSz^24ACw+1%HFuAG95vaOkjOq zb&cafl*eU&4R@->dNfbDUry_`3S544$Z zL=4frLa=Gxp-O9oIz<`YmGEhDBkF}!Z2G1$KI+!XZ=?A4l2?AbLdy8im6Q=X$K*~|AV~Y&D3=iHd3h$$(lZhaExXQ|FHnYtlPiEs z0DrDrXQwT#0Dul@j2Ga2?Y){*5X20Re%X6-&Fq~hsD|y6;%VR{Z_(SVB(5>~fE~$p ze7Iw#SZ&%t&+j?xk-l>;9+gzoO#N{@1^U-`RhlYd=+gWqrw)`!I*fprw{mo19q{ zIjejjR`u*!HzOj{+x}ty(>v&TE;Vnz9@Hm$V)}H_24)ZN{F=2cdU?IvWyOhS1#IMb zw=2(1^0(|M*oX16cPwdO!YQ_LnE=`QD{It!PxhdfHwr@;D9x8;@PNM!J~| zkcs}j^mEEtFi4a3SHJzgoS)DC1a-2nEz(#v5KhGT`4|Hg^?ulSogfD@Gew}8zPqy) z8RUx8_V98?;dFuwv8Gy%kRXJm6VcDa%Nc2*X|E|uMkDpqb@a&cI;KGeX4+1=(0|AN z|Ka|hBl~~E5q~*9+kcXNfGu208?WW=OCsxeIDjxt3Pe9A1FW-xESB&?n@BAPUe64Q z#=D~3K+Y~8buC>a2B&A}W=!z0B?ifo>?rs6+W- zXwxXaTj%pR@$~ra2VV8;Vm+69G7ABifgJnVc$NNgNtei|jlgAD+2oz|k;$_r(t^a3 zLOB(c?zJIub+#X$-%+D~Pv^xTso_$fboOSK33Dj_oxvTw&j>&chv;zk&{ZO7(_~FNI>7yWj4V-_ z>ST389U>eA^29pmLDj)Te6SB%1MG}+H_=7~qcA~e4M!b&H#FD`gw=BKk~P%~a0Y4W znPT01U|{@zyZ`T>@jnH~k^Mj7h`*el_3vP;<*rMVC%FdeLP$`ETOdJ46E2TMnESYz z1{ekCcn8`eObJF##(rM1KO6yB7vEr0bvRbr%>k=L!1%bk8S5J%2}ZIoxP^nfrlYI{ z6zHrO_~+_>K}YewBaZmX`C0#DFq9CWYwruw^!JBq29R}vbQRpZjGT1QemXdUJ2=P{ z2LxN_K@7n7Abn4whb1Y%*1;Yj>!}O%^^^yiVvr==0DF|CKGZ!Z$i>#c7K75Z{8Rc@ zl!qMo|3@70m-D;+ADpX+B}B(r!_XV)3$-^1_Jsih-Q1C8vLF`)v^mMm)m#Chrw1~} z$t!AW*#_azKqnI-5`w|{8oR+XH4LDpW>Ban8mdUP^>((`HZ_L3q5oX}4-k4(|8v9< ze>p$r|DX^Lm@yCxCYusGb&asbfdsIn3lW7O2I(03z;(SHWy$s^KQ~z{#2JP%GecsH zeei*bMz*H94hAmTBzXgrgPU!jhQ2P5C=b;jYl8?F66W8C|Nl|_AL!`(|F`ge>i=l} zQU7<838+1DCvI7F(G5UDNDNfs(?}}N;;tm zLYAQTkMciOeZEuVY)N;oVa`)E0q2ZcJ|HrW@kIFe&aL4}XO~@oAFzl=t z3n#(z%-HpfG?9bi2!;_O84HA9EwDSby^U9B5_q>JT>d;~d0~j>w4*p7{kQ5rW@!#L z9X`FO%oOpBZ!USK=jj3_*UuoVUjDQE@56tT{|((AcG}##B%B(tVi&H#SRPqWz^f_7 zZ^?bSh*vhTdGA3-91tv%UQ20-hZWP+g?Pw*llxu$U*SLN|1MI)vj?&f{^P#%x?)dl zF1fl$iOTR)zK_1aRw?uPd1v%~8N9xC^<#h1V2XQ&_5Y;$zyHv`ry|JA9Pfd2w}(5} zt6N~PvW|L~AOnai+|0rr1a-1E3Ni`uRD==Ki5eg`0|M67OVJqbuBh(iiE@TnkX+53 zgPeeYE@%&hKsTfj!au+s8hzgF#jmS~T$*OdKZ# z>qA|+8QO{0X&>kuD6kYZ6zf+rmA}1x45G-oG*bqjF4s|LxoLFu+3h<`e!h%h!TINA zu2@)=R#By|Eq-5{JO6P+@KS8kJ@?xu<@d~2cZq@3Nu#H3FWNMh*^u>a1m5ZdEyrpLntBgrZg2LF)jCtP8ZJ_();f}*Ij&1Xtlb8g#okx38N>CEa_raUhReJ-aKQR z3AD(~k4q6&BfY7^BfBrZRgX8j$amgoJaxJ=u7Xv#0fuw!4a^Ihdh-SOwsr$ukt2Cus`%L%SK zJ;*84p`+i~Id(dgLa0^MR9epAMdZurxmyP~r}{-RoYtqlu;5Wq--3Y8f(@WVf@2G1 zQO|L!jt2$a7x}K?=J(%aT5;8@xez>2bD35FyiY@Ca(Xo**1-dB$M?ntg7iiNyh818 zCt}R|cDxIu9Eam;uRqeAX$c^1Gc55Mk1%DXfSb!;ku;$vrw^RkDP zR$CC(BR%#xsNV&~03oU2fvP~YnEhxI8=-4)!G zRkJf|Qb*ng11+R@6*9P8{5YYnXWxwXg~2}Bw!Ls` z>qVq?RbZg&I`OXN&8TP?hji+|3y!ly|HJVvVD82N%lRmS_ok8EOmgLpll}b0;#I&X z_58s%(9b3pWXy`v`R6KMao*DylrxaVbm{nKkwcxjonM>w<?=+4RRH{RXgY75Z5G1f4>!t7`mJR35Ij?1$;|Nt~bk6n))k!wl`)czIEu z+nL;OfQ>;rYVJh!o&0fkJbV^y3#vu^xF>dbXdt?>B+w^ zEL(gdP1~~2`GdKo9z6fVa1l5iR8Z?*=&T|(NL@iKmqgcn@Q(O~usOQ=e0AI=QgB$m z?ReX|%dK^ivUCG@1~8Lyys-L%;l1KxU}_hao|G#&i2C#J^Y!Q8=jv7J;c$5ULje#E zoi^=hS~}WAnjV^4F@6!(iG(`k$Iu@@9xFZuKbCuZ_VKR7+n7$L4zmtO2Y1IO&ziOV zPle-!PNl9z_#&Gk%vi1)mmB&~jRZYS)H}pVwvQoniJy}xn8q_g0&z7P#mV$7tQOvK z*XFsb^UdvN7VpJ;mtnSdWuJ2uZfOw5PlsmS+j1pk!oKj4Ao70cv;O!hplQ049=N(6 zoPoQa#y~iK8=>&j-;R4S>QlC?3*BT`?Y$YN!U;m{jWWlBS1=Os;#%3gM>(Vsv&rVr znnaS9d-#`Y_e-?pY<}o<7fK!;Rd!mPJvtf=Vxv zS$ajK_slGit^J?K z&;FkS8scGqcEp0ff%0Zp1rQYM<>3&7#RQoLnpV;wAt?1m!idtl6c z5bh8R1Q`T`!Q~YoXhkCzdl!hTwiyhkO>n^=?1K>hM*J59QuxpLU*OUFm%oSqnEyr% z$n8BT49xMMycJNEaA}@3XiSvwF2*V@pj}1D^mS z0ZNv|fxUG#y)+1h&|n=H9_ZmC55|L$>Q2E}xTUL+ry1GLz`;bFOaPlgbs=ywM@?53 zJp&_4XcO@N` zILcJ{*nU5GF(}Fl6lCrg9dkL2eF?()h&?$A=7s?HWEQ|~8BZlCn#z9Kh=1?LnbhUM z?Wp2cTrb?qakq&=j}D?$%O6p3JKzmoK(m}OMTHShSQQ` zBfI6|UF0w8iAdOdOcDdsE_}*B0G>>>>=-Ebw;>7>k*Z*hx?*qaa86xyGj01gb z10W#VAd(hb(aqdZ-9*C}4-Z0tb@a8+o**}Sw?M213*#7i{GFXm zO~C{-*;&)k4-7O=3^39T@Cx`h@;^U3jsG0~g(@8B|8L(B3GV3MTCVNeM;sGn?c{N;f1y8$5O184IlB&~2r!=uwFMEF%h2W)znQ`Bov@G~< zI7sQ{`N||q)cd@lqh@Cr7JE4fz09G>L9VS|l%b(zSP%{qdB@KYym@-}9odd!TqD!- zxag3@p;`8pHMJjWdmnC=HP5DsQlphc@_8irS!yn7r+UCt5zW5)x_`*^0*KVczwhC9 ze2$tKpl2kS9{x}b9T(nSmf8Ih$9?|<8=Tapp+;{?r1*S4RSNX0-`4*%{A~Z7T}{pX zfWBHfpdhf9fjYY>pb1U^ zPQL24&JZn-K8S1rBbl2SE7*enT>m#n;i&%eh$H@Te)j)y4jQHgICWDuJrlCCyblo` z1h+IL_&9>xT%CNh-4Oa9VgShA-Nn=vic`m9HNAojAwd?l2zgW>7!eR02oH9|!Oe|L zeRcJrFp#H?1`(zO{WtnQz`%d0|9~9LfBSp*&Hrzr16(rziK@BoQX%V&fR?!qZ4xq1 zkycOC04HxSg$Ncw~9YYmahfntW{A@6NsI>ms6K(?c!|kqgfLTjV zC!Q6+$n$O&$voq2+4IX4;}pHLX#}I8rR5<2T1RcY=Mc;N$F8zAcj8 zFXXBSuPaJsi_z=xhg3cyfk|>Xtec5dQXi^laSzSDkt^a^{y6|X(3NbUj1YA}XY6J- zuNCVso!m^kqWoYv`1Oe@v(N^hKf{U5L`D?bA1;7NV5Q};tJlC89Swm0iQmnCHbi=( zyujK9Fs!M8nV}O>!vt&QUzJTVD?|jJH-05ol~~=AfvdsOt_1 z^z+bhadvld#@Q+cyZ9L4y@8%M6HOOGOFYoU9s+g`w)C@=bvDQN>XMv%Eew3Ye{TLO z2z*rkdBhQaIX~+kW8#l>R&YV0Ocjjf13b-1h#*&gTb!YWzm6^18=?^q80_fo?#SKY}iz}ys#(GP?}y^$Cb0@BpO6=&?M;|o?KA>~PbuK)AL&m;XGal~KE&-&Lg z^}+gkfh;r#4#oy`&&SajWGJomPlVX z+7qVFhiL1=o@(EhqE2mF z=Znedf56UCI9wFCdgo;CcikctK~r@de#?$DRl~yLQSQ62z*C2S0qK%Qt12-Qb8_+s z02kW0HZ+}ikxdC0F_yL@%!U?X)L3y{{a!N_zz5tn@N~#G1is>9Y|*(*RKb&O!L#3= z$s8ij#fmHtb3QPNA^@VQ`l&Q8xq~l_3e)yHnCIR*ud29wm;F3dYV%6Dmnx|L7Vi(tRMq{)xUQrPdh+BzBnqg?&C2Q}YyG%3xyxa}Hu zyn<#O0r*-p<@vejg4`9?Lxab+g|PjEZj&VOPi{h2!EW{O;ew-AGC^%0I7@lv>In?M z>2vF0NticjH^pCsC464^_^1T|@aQJ(+niYcay>xe@zN%{_Nri&Omy&AVjO3NU+Lad z?}23MJBc%d%%-xIPacWIxw-gL`Ah0@+F25+I2Q4*H3$Ha%~86{I}y~-(wx`!j(X1| z%rZT#{#aZdZL86|kk-@hcHYe~Pe$oRW3F^Y2R(DV!ePiTe|~#hU{w2(Lz6HE0uUtd z;H%iBj>%h9Y5wyyeN0K#rWgE8CWLupbLm~3Qv!NBchb0CKcu*|{1E@s`_LRO6IlQw7w^# zpWPrY{o-mHmGUF5jr#bFyDho2-9|zVVhBK3nMZtT*#W)S)*A7|iKPjHyJa*5?=6oF zj$X-vq=!G~RdkQDb&Akos6&=zu)%#c=W58DucdpQ^CVG2tf3W#50v+xcmHL zr!)=PC_C|A7H+2%C3Me6@nrW(U#DqsC*Zg`oA^v_C-M0Sqz;dxSP1FHJL)w9r+d#E z#J~}NLc)*=6;hk=u(7PAdoy%F@g5EEh5NMjn@CLw&pa;`_FDsxfswa4pM|PL895%< zg=@ls?q;)1!G_ko)Z7c}5P*`rpaMqz#ru01M)%I}3-q>Ox18fIwZ7`S#lgN=64mcskqSN?s>PZas;RT{T1iQ92*Xye{_%G|eb^&Z6-g_8&FoBy~LWlIWe zm-Of!T2odK@0F!4o%Zf>>Y#tRv2|`c^4!Kd50D6Z36klAlrGaLsMd#sJEPWX?HOE* zC5-n#Vs~f1ry>APJ{Fz4M62AH2FK3QgNIGKL$#N6Se3FCd7dY9YuN`TxqiR+u`lZR zZdDrak!tddbMki*YUT7LFfV#8AD&x4BLIELuj}rweAM+^)vY?k{y5oRNb(N7%?DVw z_|DsiedU;k5Vr!SgBD`t`SkLYJ2sraGtcTDc0%jryM>;AZR>Xa)gO}o5A(DAcd<0r z(}il7nd@5M<+1u&CNNE8kTyzD(Z|!2sN<`xsAGil#yAt*1I;0LkeP*+0~W4rhP8B4 z_XtLzQCN9*XG2R%7c5*;7Z{9n(lK zko?j9*T03|^8W*LfT}@|DA2W^s=qS+x#jf{Chn_s*Lj&So8+2RK3d8~-mA_U8u>nc z4S{9p^IZ=MP{U62#j8KrgI@M7lJAwa+3DziH@WhD?B-13c2jgX4UIZAh^A2Nd40!b zWV}`<@cDhQetx_6mY+UEWBNPci{`;iy0o7kv59G5*&oq;@-|2YykqM~x2Y)setA9g zXw{rbPL6mg#)v|Sk`;hWy_-(ug9oyn^uXadN6_ja9}`&Fc;G5f z{}ko_rT-UtH2>}I;WzzrF#@=`wZ()JmnmA~eJ&f8MU46AzSk2N*|_m6(XEBs&BBAv zjp7H#=u`mb0Lp+AgU{JDn#f2V-U9U6na`M6dVQl_g4G`W0Zs9+_v34KXu7{=e)BRs zvoHG~CZq0AuAGq9O-;{_lza?Hvu3Y5@uIPF(->{(epx+*=-W(pj;nPDVD^S{C3Dgo z&4*ix$_H}k+eRqN?led=j#p6XW()(fQtvz3)2s#Wk6E|^(JYBGxjAjeOn?HzbmM2% zDsDKww0n|yiR;bFQY_uKWreq_S@Z8-+NGT|dsm|Cb$w!7j7nbGP+1^@gWhKye>EJy zy8~nL+dx#(iKNqQ3aIknvlZJb+IVO8&fK5MJo}h7FF?F*lx2cm#)#F2uksiZz(_e; zaXQ?oRH#~S!NyL>xU1DjT4112)zDb2;)NZj2;;B5lz)n!_5Z8#e}Az59i(^^|NmR~ zpS%D4fn=hnz~r?0yX%Kb>YuO_3$}J{0I1-;f7|q@D1jzuzMerZ zTSMK<)nw@k8m~OiD|V#K^d*1Fqy6uH%+LD&Rrx;!g@3L81s|RN{}%qE{+AZu%OrhD zEq;jtSyNxUR!f~Xd=3(zs(hES4SANPfGU7tC_D?#>p;oc@HlPMDjGX@`1)Y4l3GyS zCj9+IlNe*3Td4-#myM_w0 z6l)aQ6n7g`bZiE^OBR+GGVdvVcOi|_^1hMBpN~;`2;Q}n;&LR+*~+`5h{hkc@3O3$ zqUqj@^u>=06tb+E^d|V}S2h&U+iApfNw<^C2??U~%)@pRL}K)gCk3;&A&<{cV}$feX*+~2zIWN>`mqr?@wyBec5XY|pALB-g7 zd+!t17k~0W?04!DCuthrS8hz6{1o_Yap?V~mJMduVRknQy1x~K{B+Bt@m=Hh?J_xo zomrbc8k?7cAukUN7p`-gZts^LhU{m094uaGR`G4$+6s(~9hfz``fVu7z0ViDt<^ZY zn^91-&=vO2Z#*vzCEgg_T%#UV6ySaHT*hfl(f;^77~M zm!o4}bHcPwwWPbOgs}JC+8ZysdBa6~RO$w{Tq9^DW>{V7=32fu zeLJ8ir2kr59cnSx@_9>6a``a#lh2o?ug8ir-rG8v*znkX?^5K+B8>$o^FxfxTDMKA z^JHR!C(BP=J-cyd`6e#p%Ppc!^YYjY%uAom*^rs8TbC_nGyzvL=C({{_le-H0=bfU z`pWXlBEn%5x!xB)uvhMM?Rsh>4RExyv~}RnvC9F>_5S3jjo>S~mNo;kEz2WNYt8i~ z?YUMxf$?{Bu?Y4I06_Hnea<3zrl%(pAyTDD|^u>v%-$c&>-kF+^OX zHJ8LdYp?$;Yc_gB17~Xayutj7FV3QqpUV%aMo7|L$CW>DO~0_rfN-s?t;W0M7P{^@ z3>}N1Kea4rx@x9iB;2eevKrOXbB>hPC#KhrrbNS3h21*O=q&@o#VH(^O&HCIKoO7h z*3=MIlMK8mRnIvI=H(jN0Xv{iE%gVNgxc`|1y*(|u@;LdL6yt-Z7TCK}VeTGLDSg7O z&XjD5eF^U8&ILo+xe!;W6^C!C3~pP$jD35D_%!tL;qAxOl$rM~uS~pT_Hrk2C*W<` zhDI#Kx^FL;kv)yd*trzA<7Kxp=dx!c&Sz$=PYWdJ<$HSHr$c<`?i585OfqYUl%aHr zBw7dG2k?kD`dqdbu|F+-WuNM*mN*lc|BG<#kcVD?x!w^iPVS%a|_AZGSh zprkmV_nWH*7lhdB!^N&i(e)bTC3x2Vm`RW}BX;vMVij-92pdt$jUH=_p;?FE}w zhJMZ8S|r`puO$rn4P$(fk8*2{gX? zpPi>rTiVfm88fK@FNa0UND4U?ArXuE9JDdJ!t~@`!tg~U*O|r4YQ7NyLn?=O8+A1##4@P!iciA#ZX<1#X+R(nW3K4xhNUg z(JOgRY1pz^+1vONJa9a$HQz*2=@$eWQ_s&nycwyhlo8d;L{~!>Fn*+RuyCa*Mkb4Caab2~8V%Xa83}-5byaDW*&$9uwlBax7tkny( z;xaS3@S0qG1^6MZ^;ipw0%Dl+S(k9UQ;oXso~69Y zM{JTD$3IP@i7+Nzz4~yKSa9i1R$-e2_!{-`5Bw}CF;6Ul&2UtjH_~rY;!;fVOX|}e za`dLUyaL5~5aZ$#PD=X?()zZCfmx~9pK&8{q_SxpY?9Txn9M@gR6ZI~r&=tVG#fCT z&~kRG%vWrSTnN*+iZrM8Pj0=@-k2`tvU;onef*v~M2nAKDoQ(}t!d@B|sEF!9)oNqY|NML-khXQLx(y0~q5v)RMv_ z6C&t^X(IuSKl}qWdrr_$O8C$lim?QTSYuB5d#3Zok=1wHrvzmBaRh_WT)lflYv1@P zyqR6zi$-S1*N8V2QS?u&-c-HhVgzuoeCCvTGI@A*hWP=0pYGD7@>rRhjNqzvmm6FQ zWuNx%r0I*iKq7gRrR`{zZ?K5LYPsnmFx8IChP3xBUNg=ca^HMp<|=sF_(`ulBCHFO z{&3~3(R~5$F?ETY#+(Bz3%KfAJYAG#M{80xm6gIYKTC}XsWnZ6mPsY&jqu{Ts06F_ zWu?CN_|SAd)9ZZqfKMtEJ!`&;izK@B(TMafb;c$|I~V%n+i4NRM?G&?9}NYwA!Ku4 zb=8;23n9YC#KK#HbIn&IfeVLfLLvNw@0^oBJWVnr4dpf9x8BOAiS9uQ! z%)1%h*S7?XGg$e62}D9HN^Hye>zQ{blI9I6JB8JzM2g;^#s?q`3#qaRum7*Tvxi~@fw*Y}gf(Q2m8kZ0>&{%MSGz1z5PSD^4cL@^Q2?Tc!p-BjChqKRp z`0w5O?T)?w^N??>r#aTcTyxE;TB~YSl>!57$&dRzL%b+)R!3Bj>V zaMkZ~cWep?y)w(s+HiQV#`=y_t#G&^-i^U7W4j7bA6oWcfz5jK_{{kuEBt{{b4N@R zT>l8qQ+M#R+zuWQ&UgF;!^uDHV2Ur`0hd-8@`CkN&Z(N2$qgq9|9zn*Wr}mJBB}f7 zx*Ie*ljErbQ8|+|VdG2#z%gj`)Xm3c$|l77fcY|VlE>Fd<@U6NOOSdFFrjP}BQ9tL z&LKysKA&@z_xW;8GxbU^l#|VbmklG(mW;MewTwBR85hc zc%`xQWCoFWX;*kPqX5Pio9{Xap`NtNa!T%j!7i&GSq)f|r$kvu7A(gQhuC*ej}Gy; zap`c*9GUoy&*oj_4qyAlCCnzre%SPx-}L=2bGiJl;;-jF{;vG*e|i2}T60goEaWfUx|x|2L$rDTrrip7`U~!>UDnJ!~#g zxEYynKh%9)j|w{l)gf06nQee;QM_Hm+uZW zEcQpOBpHGm%f#83Ib_OCG0>k4J|!tCLy2ga9K!0(mfg!x zBf(N$(2d=~$VnM#CtRS6nCZ+%x*f!#FBcVZELyKDtjjt^D}@+M)n8yXyg^1KF$enT z*|Ug0(4YE`{}KMr`L8mxsH<9DX&HPv+%d^xHK{gJ z!jx}9QW%Bvy`;#9w1}-5rl3d4c+GD>jPh2YL7~O954+C_TjWzy4}M+qfBflo%SVkh zj)8{RhcT1C7G$r7`O!LA*xn@q-2Cp>O!w8PtB>4+(e4lHO*h7ia;rBpQ&OKLg#ym5 z)_8lXPg+E8m6EjMcXc%8E#z$5)XPkr#3F;!2s}`URD&UHboRiv zAs6D6F^06KibdXsEz76oyf;QNGNnwE;r((!Ls|*|%F?yZY1~Yt3Cb4az{IFrDp~5h z)LfN`@#vBfXmEv1E)`8dk_EHl@P%z=M?GB0@b|BWG0c(#v4)Mcz)iMA%#awoa}=+4jyx~^DAa6?UqCJT(cbu z1~u_Qfn7ke`tO>7VjF~u6_~~-@gJ2_R+@#F`?`Vgn96oFy?z0h@QYDF;DNxQ*OP4+ zyUzfiRC$zx)#D3*o^FfE5;1<*N4>X_O#zu-#L0@K%%Q=q!eyQL%CP==Dctfo&9-D=11`N|eIVHVtb)6zrq|zBvavY*Ra3nZvvo3R!)o$sF36lS92X%T92F(Sp?`sGR(+h1@qBh_tQGStNqU)pJD z0ZZtYbJsK{=jkrP$I^bd37t9mT-%>yJw2_dOZ;tfvQiPl2d@Pv6x*ap-*UY+-Q6GaV(5n>F!lkAqkxiHoM`OujKVYq&iNFsvgqrWsb zf3ICmO^f_jYb`s#I8G)%;5QLjcx-#b7{Of@5C$}jvg1?CluyH>n5HVd$PjHwK zi7T@s+#xjbR8Ey&2KLb>00Mip*X(61~)4?Ld7)dwZ`q zpV%Ip)w$dcCbvAodediS(+Q`(j_p7MVeB{&%la;xfQ!tbEE0NdZA+@h4{+Sm-_pwS zF*CE?YolvnxGWasuLju8Cs};X6h3vkUv$hIy}R;ZX97|itxtDWU|}?*sXshdvJ*xL zAiKI8V7-1N2#%m4JEsgVj}q1!hkoYotJbqas)*em5b&U#8jw?9i8mfN+98MEgjzWz zr^RAg(8k3E6A$Rj&AHUjMd{7C9z3F28RWG7gF1dZJKmG(5#=+EwzFwj5-qu3oU*})d!gw& zUbyvOgABA`!UOJxmS|b>_8;F?FPJfFQSZQpSS(4~pElhrNU!HCqtLG3hz?s5i8q{_ z(%Zyby?+uO<0{=j5b1TB7JOW3Eqg)`{+R*WtFD1@{ikH>@wZjqMvN*7a9(K8Qa2;^ zDeCk`lj z7`r_CU?egMiO|f@%gt9&*7nFP;PrV%XKnMn{iYX`c$Djf?PKh94)i5HxW1x6Z>W&D zeNeF*6ZE`yar#AgHV?f*Y9bpuv@%Y3dl~&;NnNx$9GAx9q2*N*CXsoxOY6eQPeZ_i z)P46{4?6@>jzJkJl;(ByIO8_M00oQk{O#x67=cO|Ud~YKyIRP4aWqj>=Gq~m0pFB1d&1=bPhM{I}Lji;+*-%7*9dfm-3K3*=S}Jy<_V#sJ zQ1Yb@f;5g){C62Kr#lEEyj-O^MQvmf@*`v`G#_6bs6Y-b2*so1&h)I-s-ud@hcE|c zu4h32)#y7ED|3B%uWw&qUxF+^BDK@ls7I7{(SyT!QVay~?~syBGx+vK;XLPVkZ`r1`hi?cAFO=u^d!-$zf+h{|cJqk)m zC9b8xIiM_Y<^J|wEDELiJ9#%^8!$vlTuF|S8(tb^U`oF8CpCB(TGa4F)wjpd7;|XS zyNUST7_S648##+0iI9q80T&`pb4os*xonXd9#Nda3h_uAgd4PWDr-aY>xHr0mk4cf z`z)2T1Q-t>9$jzb;YdjpK-0-eS5G}Dw;+P!Yd@RgBI-6)IKX@8ednl|V_IZ2C!R5P zi5Hl`+Y1kID_l{JC@_@i~yTPEshKp9E#_q?cL|RBhhf{b0-QVyZT`W~}h5X>5-~N#2@vYRb;xlH*T#-P&E-+MH z#vF}_j0qo&f&hyM40~Y9BSIm=heoFq3{c=F>S4k|VjUbTahZ~h2GcSC(C9;~kv{k&0vhL5(} zacp~H8sZ3Pll1TNIF_gMF*Fa}Dmeye`ooH+T3xBj@GKgC!ETb*mn&&EUY>|qd%@L1 zMr27}ViS&1s@(c8WcSF?3y{C{=uas7os;P$f6m;=Y$tfNj}cet3Z}Il9<6hwO^XOs zwJCk+;In!S)<{7g?_iS`WNO`MLeacbYpkNnFwZBFd{ zjB<_rGV8&DVp;a!!U2Q=YPOreh_Xo1t1Kh<9l+n=-LG!S&^*lrra9*1hnWI-Z&{Bg zafU4I3_3ac--b3d75+~4*IK9Nr>W90m1({+flT+%6rszBik<|tR~>=2{T>^yEp2z~ zq+9U2QN|pZ^pJflIcIvMf5`uarYNB=ofyZj1Th+MMQnRiB)~+RIUA%4r045U;NV!{ zj4#)_&?p75!NTj!hV6a`Sr+({ez@^J6aEm{OYsZV*$OCIgn6cHpdGJ}dAB?ms)FNMUW`wYipU^Xlbe4g9dydf z%!N|2)#%Zj9`XevM$*rR4f;cJeA630^p@Zd;WjN@9 zOYtK{1juo+qUTVulWHQyKP8LsMKw!0cFlfqSuw8&j%A*UZ=sjW2_c&Gq*Tpj!zC$*=^EpnsOU3^fUOb~M)b~H zoQflH&4C)7N%BH3=E$W$Zz(6q@AcJ*5Ac1rX>00>m|mvDfUZP4IZ+-kgLn8!;c^hK zpRWVGQjn+5g4^p6%sb{*g`xV>lX1^u$h@cfOEjrto3<-}D8^^{xM1m@>=Ug0;~5T! z#F6#kcqEF>ynec~b#KO>nsk&L+r%mf)HqU$r-_ox9cp5BFFM*Lf%{NN?d! z7JV}d7Kr`XTJ)vs_pFwhu0){rQvRe*#AZ4cID*Ogm&KX5>ocX)@tfyCtY=}P z3!P83A3Ia-O^&drDdlh1JhWp21%JWtB*%22FS3JVV)<-7$N|%3kR3BE`dmE6TC%|2 zw0Z0OX!m8s5)B8DDMkcg{>7-&_f`)wTBtOod0NXNJwn2Yq`BfHEdl2EP9av*3P$+L z?{|;DrFaG|FgI(Alo6`d&3_#C_M*5WY>Wy$S_I7n;iTkFFT;R94u*C7KsfF*e>+!p7U!ABP$$>jp zE7Noqrk%S~LhQ(2^k9QtKf9FIC`wQ4@w&{352Q=$Twu5{JK;^-YlZW#8mtEUu|%)| z2tlth9C(GEd}|oKWPPVqo~po<>k3-Q)Ysga{c2-uK6YAPeg1~l%q4gG>&{2rUwe>9 z(bcfj$8LuT7*-WYdmJzGXmObeMFj7{IfH^TfxinUU?U^~hNRbcMf*|j<6`y_=sEe= z^RPuCBT~9}3A&B|P`mmxiUTFJXT9LG_k6QN$yx>*s)9aa!H|9Y_^~rL>QRNxz>MAn zLfL1r0&L_Y0@rI`=#qmp@@2v8TU?n2f3}~Tq*8> z1GdD^lWosH8`FIw#KwynL%m)-@A2wi`LFo1#7m_-eeL zZnxsbRUX@Aj=rXNKrAKt7=P@{eOi%swGXc!n%rYzyiD74G(PW!Dz zz*(ZZPQgli@s@C)Me7%WLCZhVDFo0|L-cI?D73gGo{(snutRYSz5lvDQg|q%=N0~% zRtmN6$atx~4@gqSw_(z@ktQ#LPw^{nPOz(Q!@7zezjkh4F(cP1GlR@S#)m{b7njZC zk<`?-tNM<;{Y0cxKmAi)twJqcxKDdhQ3re+Zd%Hr`A#%^f%EjP%0UG0>ocspTX2eECl)DO!C?cs1$4c)4NdBrq%GUDJS-#S8c6x z;P9l<_gt@KH6k`KSQ=%80?d6b@wN;HOl+n4kER%PYMIj4!ctabYq$J)a<%*Ao{t{} z<;v9Gs3qp|8@t4=XI$+G7Qc;xny8{eiPNlF2|-T-rUu(NE4V#!ru9dyN5-Z;?_!DP z7|d6c0fFQs+A%qh&~=^9bnhLAbUZ*q0E8H5YbgeKT=b$d-@NWTPd}KFk-#TpyPE6D zo5$^vplp@rFnRt&Ht#^p(=~-w`3B3trC2G}$e?WPm3RHkH`Ze;5CzG@Vq?&Ha~;s> zTClH^E$MyK=YTyU<*^Wu+Jsfrs4TSrD8U8Nm7>3%8jJfV$m{&kIt`$1cRnIW6GkNa zTjDV8shoEziF&`|)m2zM<9?{TWCN}ciP;+4PW3vD!ZCK@h%_$hU_atZ{ZD(gy*C(F z(s8DJWLX>HC3D6szn|zcwVEU493ytth(_hJ3}YW_Ei!!4-i*g^msBmMV4$V7O`BTv z4FaQu_+nVSV>J0~*C+nrwLRbhGT=+_mAi%Ts6n~>^6X9?b?=hYK?%eZ$yXmB(*teij|;LDC<3c zpPK#=j~L?#rc#pMJhuCRu;=fuIo7Scu?OoZW)h{>G-8L=69us?VsG|1q=yqPeNT)q zj63eU_d77$a49aoGQWknFoQ|DSD{LNCCi~*dDeBoB`=T%I(K?B2prrnagte_2>9(0 zMF0SVhAXEH0|Azu4-f@#V)3wV{qKM1ud@i$lAj8*^UVW_);=Jpr}19@=IDY2S!IFi z69-gOr{u!bx0H0&dy?m|DbbmAzhJMXD}L<%yI=VK!(Z+H-_`&1U)ldZ{U87Ehd=z` R4}bXg@n3pqF`WQV0RVX*1mFMw literal 45562 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 - - + + + + + + + + diff --git a/xcresult/tests/data/swift-test-xunit.junit.xml b/xcresult/tests/data/swift-test-xunit.junit.xml index 1fea7036..edd16d67 100644 --- a/xcresult/tests/data/swift-test-xunit.junit.xml +++ b/xcresult/tests/data/swift-test-xunit.junit.xml @@ -1,14 +1,14 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/xcresult/tests/fixture-src/swift-test-xunit/README.md b/xcresult/tests/fixture-src/swift-test-xunit/README.md index ee315a93..1f5e16cf 100644 --- a/xcresult/tests/fixture-src/swift-test-xunit/README.md +++ b/xcresult/tests/fixture-src/swift-test-xunit/README.md @@ -48,6 +48,22 @@ A project with both frameworks has to upload both. | `MyCLITests.OverloadSuite` | `check(a:)` | `OverloadA.swift` | differs from `check(b:)` **only by argument label** | | `MyCLITests.OverloadSuite` | `check(b:)` | `OverloadB.swift` | declared in another file via an extension, so a normalisation that dropped labels would silently merge two distinct tests and give one the wrong file | +## XCTest has no labels, so the class name carries the whole load + +XCTest test methods take no arguments, so there is nothing like `check(a:)` to separate two +of them — every one normalises to a bare method name. `BaseTests`, `ChildATests` and +`ChildBTests` all report a test called `testInherited`, and only the class name tells them +apart: + +| `classname` | `name` | declared in | why | +| ------------------------ | --------------- | ------------------- | --------------------------------------------------------------------------------------------------- | +| `MyCLITests.BaseTests` | `testInherited` | `BaseTests.swift` | declares it | +| `MyCLITests.ChildATests` | `testInherited` | `BaseTests.swift` | inherits it — resolved by walking `supertypes`, which the language server's superclass parse builds | +| `MyCLITests.ChildBTests` | `testInherited` | `ChildBTests.swift` | overrides it, so it is declared here and no chain walk is needed | + +That is the shape most XCTest suites actually have, and it is why `supertypes` exists. +Disabling the chain walk fails only the `inherited` case, which is the point. + ## XCTest needs `--parallel`, and needs no special handling `Legacy.swift` holds an `XCTestCase`, and it lands in `` rather than diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/BaseTests.swift b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/BaseTests.swift new file mode 100644 index 00000000..e5b417db --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/BaseTests.swift @@ -0,0 +1,5 @@ +import XCTest + +class BaseTests: XCTestCase { + func testInherited() { XCTAssertTrue(true) } +} diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/ChildATests.swift b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/ChildATests.swift new file mode 100644 index 00000000..1dabe79c --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/ChildATests.swift @@ -0,0 +1,4 @@ +import XCTest + +/// Inherits `testInherited` without redeclaring it, so its declaration is in BaseTests.swift. +final class ChildATests: BaseTests {} diff --git a/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/ChildBTests.swift b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/ChildBTests.swift new file mode 100644 index 00000000..8c829185 --- /dev/null +++ b/xcresult/tests/fixture-src/swift-test-xunit/Tests/MyCLITests/ChildBTests.swift @@ -0,0 +1,6 @@ +import XCTest + +/// Overrides it, so its declaration is here. +final class ChildBTests: BaseTests { + override func testInherited() { XCTAssertTrue(true) } +} diff --git a/xcresult/tests/swift_test_xunit.rs b/xcresult/tests/swift_test_xunit.rs index 76304085..4286b0d2 100644 --- a/xcresult/tests/swift_test_xunit.rs +++ b/xcresult/tests/swift_test_xunit.rs @@ -3,6 +3,7 @@ use std::{collections::HashMap, path::Path}; +use rstest::rstest; use xcresult::test_locations::{Limits, TestKey, TestLocationIndex}; const FIXTURE_ROOT: &str = "tests/fixture-src/swift-test-xunit"; @@ -127,6 +128,34 @@ fn two_suites_declaring_the_same_case_resolve_separately() { // XCTest goes to its own file and names a case `Module.Class` + a bare method, so it needs no // separate handling — the innermost component is still the declaring type. +// +// `ChildATests` is the case that cannot be answered. It declares no `testInherited` of its +// own, so the method it ran is written elsewhere — but `testInherited` is declared twice in +// this target, by `BaseTests` (which it inherits from) and by `ChildBTests` (which merely +// overrides it). An override is a declaration of the same name, so by name alone the ancestor +// and the sibling are the same fact, and telling them apart needs an inheritance hierarchy, +// which is semantic and would cost a build to resolve. Reporting `BaseTests.swift` here would +// be a guess that happens to be right; reporting the suite's own file is the honest answer, +// and `inherited_declaration` warns when it declines. +// +// Where only one class declares the case there is nothing to guess between, and the base +// class's file is reported — `test_an_inherited_test_is_attributed_to_the_class_that_declares_it` +// covers that shape. +#[rstest] +#[case::declared("MyCLITests.BaseTests", "BaseTests.swift")] +#[case::inherited_but_ambiguous("MyCLITests.ChildATests", "ChildATests.swift")] +#[case::overridden("MyCLITests.ChildBTests", "ChildBTests.swift")] +fn an_xctest_method_resolves_to_its_declaration_unless_two_classes_declare_it( + #[case] classname: &str, + #[case] expected: &str, +) { + let resolved = resolve_from(XUNIT_XCTEST); + let file = resolved + .get(&(String::from(classname), String::from("testInherited"))) + .unwrap_or_else(|| panic!("{classname} resolved to nothing")); + assert!(file.ends_with(expected), "expected {expected}, got {file}"); +} + #[test] fn an_xctest_case_resolves_to_the_class_that_declares_it() { let resolved = resolve_from(XUNIT_XCTEST); @@ -239,12 +268,11 @@ mod parity { // the two inputs does not land on one identity. Pinned so it cannot change unnoticed. #[test] fn the_two_inputs_spell_an_xctest_method_differently() { - assert_eq!( + assert!( testcases(XUNIT_XCTEST) - .into_iter() - .map(|(_, name)| name) - .collect::>(), - vec![String::from("testOldStyle")] + .iter() + .any(|(_, name)| name == "testOldStyle"), + "the xunit spells it with parens" ); assert!( xcresult_raw_names().contains(&String::from("testOldStyle()")), From cf97a8574f25cbcca7ca3352974eda855bebc49b Mon Sep 17 00:00:00 2001 From: Dylan Frankland Date: Wed, 9 Sep 2026 21:33:40 +0000 Subject: [PATCH 5/5] test(xcresult): give CI the Swift toolchain these tests actually need `find_program` looks on `PATH`, which is where swift.org's tarball instructions, Swiftly and the official Docker images all put `sourcekit-lsp`. The Ubuntu runner image is the exception: `install-swift.sh` symlinks only `swift` and `swiftc` into /usr/local/bin and leaves the rest of the toolchain reachable only through $SWIFT_PATH. So put that directory on `PATH` for the Linux test jobs. A missing server leaves the index empty rather than failing, so these tests failed rather than skipped on any machine without a Swift toolchain -- including the self-hosted runner behind the Windows job, which has none. They now skip when no server is found, and `REQUIRE_LANGUAGE_SERVER` turns that skip back into a failure everywhere CI is supposed to have provided one, so the coverage cannot lapse unnoticed on the runners that matter. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/pull_request.yml | 19 +++++++++++++++ xcresult/tests/swift_test_xunit.rs | 39 ++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 2c830c25..be778c31 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -198,10 +198,29 @@ jobs: exit 1 fi + # The declaration path finds `sourcekit-lsp` on `PATH`, which is where every documented + # Linux install puts it. The Ubuntu runner image is the exception: it symlinks only + # `swift` and `swiftc` into /usr/local/bin and leaves the rest of the toolchain reachable + # only through $SWIFT_PATH. Without this the swift-test-xunit tests find no server. + - name: Put the Swift toolchain on PATH + if: ${{ startsWith(matrix.platform.os-name, 'linux-') }} + shell: bash + run: | + if [[ -z "${SWIFT_PATH:-}" ]]; then + echo "SWIFT_PATH is unset - the runner image no longer ships Swift where expected" >&2 + exit 1 + fi + echo "$SWIFT_PATH" >> "$GITHUB_PATH" + - name: Run tests uses: ./.github/actions/run_tests id: tests continue-on-error: true + env: + # macOS finds the server through `xcrun`, and the step above puts it on `PATH` for + # Linux -- so anywhere but the self-hosted Windows runner, which has no Swift at all, + # a missing server means the environment broke rather than that these should skip. + REQUIRE_LANGUAGE_SERVER: ${{ matrix.platform.os-name != 'windows-x86_64' && '1' || '' }} with: target: ${{ matrix.platform.target }} codecov-token: ${{ secrets.CODECOV_TOKEN }} diff --git a/xcresult/tests/swift_test_xunit.rs b/xcresult/tests/swift_test_xunit.rs index 4286b0d2..81b8735a 100644 --- a/xcresult/tests/swift_test_xunit.rs +++ b/xcresult/tests/swift_test_xunit.rs @@ -5,6 +5,7 @@ use std::{collections::HashMap, path::Path}; use rstest::rstest; use xcresult::test_locations::{Limits, TestKey, TestLocationIndex}; +use xcresult::xcrun::find_program; const FIXTURE_ROOT: &str = "tests/fixture-src/swift-test-xunit"; const XUNIT: &str = include_str!("data/swift-test-xunit.junit.xml"); @@ -12,6 +13,29 @@ const XUNIT: &str = include_str!("data/swift-test-xunit.junit.xml"); /// file from swift-testing's — which goes to `-swift-testing.xml`. const XUNIT_XCTEST: &str = include_str!("data/swift-test-xunit-xctest.junit.xml"); +/// Every case below resolves through a real `sourcekit-lsp` -- the fixture is all Swift, so +/// no `clangd` is involved. A missing server leaves the index empty rather than failing, so +/// without this the whole file fails on a machine that simply has no Swift toolchain. +/// +/// Skipping is only safe while something still runs these, so `REQUIRE_LANGUAGE_SERVER` turns +/// the skip back into a failure. CI sets it wherever it has just put the toolchain on `PATH`, +/// which is what stops the coverage from lapsing there unnoticed. +fn language_server_is_available() -> bool { + if find_program("sourcekit-lsp").is_some() { + return true; + } + // Empty counts as unset: a workflow computing this per-runner writes `""` for the ones it + // does not apply to, and `var_os` would otherwise read that as "required". + let required = std::env::var("REQUIRE_LANGUAGE_SERVER").is_ok_and(|value| !value.is_empty()); + assert!( + !required, + "sourcekit-lsp is not on PATH and REQUIRE_LANGUAGE_SERVER is set -- the toolchain this \ + job is supposed to provide is missing, so these tests would have silently skipped" + ); + eprintln!("skipping: sourcekit-lsp is not on PATH, so no declaration can be resolved"); + false +} + fn testcases(xunit: &str) -> Vec<(String, String)> { xunit .lines() @@ -64,6 +88,9 @@ fn resolve_from(xunit: &str) -> HashMap<(String, String), String> { #[test] fn every_swift_testing_case_resolves_to_the_file_it_is_declared_in() { + if !language_server_is_available() { + return; + } let resolved = resolve(); for (classname, name, expected) in [ ("MyCLITests", "helloworld()", "TopLevel.swift"), @@ -94,6 +121,9 @@ fn every_swift_testing_case_resolves_to_the_file_it_is_declared_in() { #[test] fn overloads_differing_only_by_argument_label_resolve_separately() { + if !language_server_is_available() { + return; + } let resolved = resolve(); let file = |name: &str| { resolved @@ -110,6 +140,9 @@ fn overloads_differing_only_by_argument_label_resolve_separately() { // Collapsing the classname to its target would make one `shared()` borrow the other's file. #[test] fn two_suites_declaring_the_same_case_resolve_separately() { + if !language_server_is_available() { + return; + } let resolved = resolve(); let alpha = resolved .get(&( @@ -149,6 +182,9 @@ fn an_xctest_method_resolves_to_its_declaration_unless_two_classes_declare_it( #[case] classname: &str, #[case] expected: &str, ) { + if !language_server_is_available() { + return; + } let resolved = resolve_from(XUNIT_XCTEST); let file = resolved .get(&(String::from(classname), String::from("testInherited"))) @@ -158,6 +194,9 @@ fn an_xctest_method_resolves_to_its_declaration_unless_two_classes_declare_it( #[test] fn an_xctest_case_resolves_to_the_class_that_declares_it() { + if !language_server_is_available() { + return; + } let resolved = resolve_from(XUNIT_XCTEST); let file = resolved .get(&(