Skip to content

Commit

Permalink
Guard against using the same coordinator more than once
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanceriu committed Feb 23, 2023
1 parent a7f87e8 commit d881665
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,10 @@ class NavigationSplitCoordinator: CoordinatorProtocol, ObservableObject, CustomS
return
}

if sidebarModule?.coordinator === coordinator {
fatalError("Cannot use the same coordinator more than once")
}

sidebarModule = NavigationModule(coordinator, dismissalCallback: dismissalCallback)
}

Expand All @@ -151,6 +155,10 @@ class NavigationSplitCoordinator: CoordinatorProtocol, ObservableObject, CustomS
return
}

if detailModule?.coordinator === coordinator {
fatalError("Cannot use the same coordinator more than once")
}

detailModule = NavigationModule(coordinator, dismissalCallback: dismissalCallback)
}

Expand All @@ -164,6 +172,10 @@ class NavigationSplitCoordinator: CoordinatorProtocol, ObservableObject, CustomS
return
}

if sheetModule?.coordinator === coordinator {
fatalError("Cannot use the same coordinator more than once")
}

sheetModule = NavigationModule(coordinator, dismissalCallback: dismissalCallback)
}

Expand All @@ -177,6 +189,10 @@ class NavigationSplitCoordinator: CoordinatorProtocol, ObservableObject, CustomS
return
}

if fullScreenCoverModule?.coordinator === coordinator {
fatalError("Cannot use the same coordinator more than once")
}

fullScreenCoverModule = NavigationModule(coordinator, dismissalCallback: dismissalCallback)
}

Expand Down Expand Up @@ -509,6 +525,10 @@ class NavigationStackCoordinator: ObservableObject, CoordinatorProtocol, CustomS
return
}

if rootModule?.coordinator === coordinator {
fatalError("Cannot use the same coordinator more than once")
}

popToRoot(animated: false)

rootModule = NavigationModule(coordinator, dismissalCallback: dismissalCallback)
Expand Down Expand Up @@ -565,6 +585,10 @@ class NavigationStackCoordinator: ObservableObject, CoordinatorProtocol, CustomS
return
}

if sheetModule?.coordinator === coordinator {
fatalError("Cannot use the same coordinator more than once")
}

sheetModule = NavigationModule(coordinator, dismissalCallback: dismissalCallback)
}

Expand All @@ -584,6 +608,10 @@ class NavigationStackCoordinator: ObservableObject, CoordinatorProtocol, CustomS
return
}

if fullScreenCoverModule?.coordinator === coordinator {
fatalError("Cannot use the same coordinator more than once")
}

fullScreenCoverModule = NavigationModule(coordinator, dismissalCallback: dismissalCallback)
}

Expand Down
16 changes: 0 additions & 16 deletions UnitTests/Sources/NavigationSplitCoordinatorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -123,22 +123,6 @@ class NavigationSplitCoordinatorTests: XCTestCase {
waitForExpectations(timeout: 1.0)
}

func testNavigationStackDetailRootReplacement() {
let detailCoordinator = SomeTestCoordinator()

let navigationStackCoordinator = NavigationStackCoordinator()
navigationStackCoordinator.setRootCoordinator(detailCoordinator)

navigationSplitCoordinator.setDetailCoordinator(navigationStackCoordinator)

let newDetailCoordinator = SomeTestCoordinator()
navigationStackCoordinator.setRootCoordinator(newDetailCoordinator)

navigationSplitCoordinator.setDetailCoordinator(navigationStackCoordinator)

assertCoordinatorsEqual(navigationStackCoordinator.rootCoordinator, nil)
}

func testSheetDismissalCallback() {
let sheetCoordinator = SomeTestCoordinator()

Expand Down

0 comments on commit d881665

Please sign in to comment.