diff --git a/cmuxTests/CmuxWebViewKeyEquivalentTests.swift b/cmuxTests/CmuxWebViewKeyEquivalentTests.swift index 01406fd2..40fde753 100644 --- a/cmuxTests/CmuxWebViewKeyEquivalentTests.swift +++ b/cmuxTests/CmuxWebViewKeyEquivalentTests.swift @@ -2522,12 +2522,32 @@ final class BrowserDeveloperToolsVisibilityPersistenceTests: XCTestCase { } private final class FakeInspector: NSObject { + enum HideBehavior { + case unsupported + case noEffect + case hides + } + private(set) var attachCount = 0 private(set) var showCount = 0 + private(set) var hideCount = 0 private(set) var closeCount = 0 + private let hideBehavior: HideBehavior private var visible = false private var attached = false + init(hideBehavior: HideBehavior = .unsupported) { + self.hideBehavior = hideBehavior + super.init() + } + + override func responds(to aSelector: Selector!) -> Bool { + guard NSStringFromSelector(aSelector) == "hide" else { + return super.responds(to: aSelector) + } + return hideBehavior != .unsupported + } + @objc func isVisible() -> Bool { visible } @@ -2547,6 +2567,12 @@ final class BrowserDeveloperToolsVisibilityPersistenceTests: XCTestCase { visible = true } + @objc func hide() { + hideCount += 1 + guard hideBehavior == .hides else { return } + visible = false + } + @objc func close() { closeCount += 1 visible = false @@ -2559,9 +2585,11 @@ final class BrowserDeveloperToolsVisibilityPersistenceTests: XCTestCase { installCmuxUnitTestInspectorOverride() } - private func makePanelWithInspector() -> (BrowserPanel, FakeInspector) { + private func makePanelWithInspector( + hideBehavior: FakeInspector.HideBehavior = .unsupported + ) -> (BrowserPanel, FakeInspector) { let panel = BrowserPanel(workspaceId: UUID()) - let inspector = FakeInspector() + let inspector = FakeInspector(hideBehavior: hideBehavior) panel.webView.cmuxSetUnitTestInspector(inspector) return (panel, inspector) } @@ -2671,6 +2699,19 @@ final class BrowserDeveloperToolsVisibilityPersistenceTests: XCTestCase { XCTAssertFalse(panel.hasPendingDeveloperToolsRefreshAfterAttach()) } + func testToggleDeveloperToolsFallsBackToCloseWhenHideDoesNotConcealInspector() { + let (panel, inspector) = makePanelWithInspector(hideBehavior: .noEffect) + + XCTAssertTrue(panel.showDeveloperTools()) + XCTAssertTrue(panel.isDeveloperToolsVisible()) + + XCTAssertTrue(panel.toggleDeveloperTools()) + + XCTAssertEqual(inspector.hideCount, 1) + XCTAssertEqual(inspector.closeCount, 1) + XCTAssertFalse(panel.isDeveloperToolsVisible()) + } + func testTransientHideAttachmentPreserveFollowsDeveloperToolsIntent() { let (panel, _) = makePanelWithInspector()