diff --git a/UnitTests/Sources/NavigationSplitCoordinatorTests.swift b/UnitTests/Sources/NavigationSplitCoordinatorTests.swift index cc5b7181e0..cc12ea20b6 100644 --- a/UnitTests/Sources/NavigationSplitCoordinatorTests.swift +++ b/UnitTests/Sources/NavigationSplitCoordinatorTests.swift @@ -99,6 +99,52 @@ class NavigationSplitCoordinatorTests: XCTestCase { assertCoordinatorsEqual(someOtherSheetCoordinator, navigationSplitCoordinator.sheetCoordinator) } + func testFullScreenCover() { + let sidebarCoordinator = SomeTestCoordinator() + navigationSplitCoordinator.setSidebarCoordinator(sidebarCoordinator) + let detailCoordinator = SomeTestCoordinator() + navigationSplitCoordinator.setDetailCoordinator(detailCoordinator) + + let fullScreenCoordinator = SomeTestCoordinator() + navigationSplitCoordinator.setFullScreenCoverCoordinator(fullScreenCoordinator) + + assertCoordinatorsEqual(sidebarCoordinator, navigationSplitCoordinator.sidebarCoordinator) + assertCoordinatorsEqual(detailCoordinator, navigationSplitCoordinator.detailCoordinator) + assertCoordinatorsEqual(fullScreenCoordinator, navigationSplitCoordinator.fullScreenCoverCoordinator) + + navigationSplitCoordinator.setFullScreenCoverCoordinator(nil) + + assertCoordinatorsEqual(sidebarCoordinator, navigationSplitCoordinator.sidebarCoordinator) + assertCoordinatorsEqual(detailCoordinator, navigationSplitCoordinator.detailCoordinator) + XCTAssertNil(navigationSplitCoordinator.fullScreenCoverCoordinator) + } + + func testOverlay() { + let sidebarCoordinator = SomeTestCoordinator() + navigationSplitCoordinator.setSidebarCoordinator(sidebarCoordinator) + let detailCoordinator = SomeTestCoordinator() + navigationSplitCoordinator.setDetailCoordinator(detailCoordinator) + + let overlayCoordinator = SomeTestCoordinator() + navigationSplitCoordinator.setOverlayCoordinator(overlayCoordinator) + + assertCoordinatorsEqual(sidebarCoordinator, navigationSplitCoordinator.sidebarCoordinator) + assertCoordinatorsEqual(detailCoordinator, navigationSplitCoordinator.detailCoordinator) + assertCoordinatorsEqual(overlayCoordinator, navigationSplitCoordinator.overlayCoordinator) + + // The coordinator should still be retained when changing the presentation mode. + navigationSplitCoordinator.setOverlayPresentationMode(.minimized) + assertCoordinatorsEqual(overlayCoordinator, navigationSplitCoordinator.overlayCoordinator) + navigationSplitCoordinator.setOverlayPresentationMode(.fullScreen) + assertCoordinatorsEqual(overlayCoordinator, navigationSplitCoordinator.overlayCoordinator) + + navigationSplitCoordinator.setOverlayCoordinator(nil) + + assertCoordinatorsEqual(sidebarCoordinator, navigationSplitCoordinator.sidebarCoordinator) + assertCoordinatorsEqual(detailCoordinator, navigationSplitCoordinator.detailCoordinator) + XCTAssertNil(navigationSplitCoordinator.overlayCoordinator) + } + func testSidebarReplacementCallbacks() { let sidebarCoordinator = SomeTestCoordinator() @@ -135,6 +181,43 @@ class NavigationSplitCoordinatorTests: XCTestCase { waitForExpectations(timeout: 1.0) } + func testFullScreenCoverDismissalCallback() { + let fullScreenCoordinator = SomeTestCoordinator() + + let expectation = expectation(description: "Wait for callback") + navigationSplitCoordinator.setFullScreenCoverCoordinator(fullScreenCoordinator) { + expectation.fulfill() + } + + navigationSplitCoordinator.setFullScreenCoverCoordinator(nil) + waitForExpectations(timeout: 1.0) + } + + func testOverlayDismissalCallback() { + let overlayCoordinator = SomeTestCoordinator() + + let expectation = expectation(description: "Wait for callback") + navigationSplitCoordinator.setOverlayCoordinator(overlayCoordinator) { + expectation.fulfill() + } + + navigationSplitCoordinator.setOverlayCoordinator(nil) + waitForExpectations(timeout: 1.0) + } + + func testOverlayDismissalCallbackWhenChangingMode() { + let overlayCoordinator = SomeTestCoordinator() + + let expectation = expectation(description: "Wait for callback") + expectation.isInverted = true + navigationSplitCoordinator.setOverlayCoordinator(overlayCoordinator) { + expectation.fulfill() + } + + navigationSplitCoordinator.setOverlayPresentationMode(.minimized) + waitForExpectations(timeout: 1.0) + } + func testEmbeddedStackPresentsSheetThroughSplit() { let sidebarNavigationStackCoordinator = NavigationStackCoordinator(navigationSplitCoordinator: navigationSplitCoordinator) sidebarNavigationStackCoordinator.setRootCoordinator(SomeTestCoordinator())