mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-20 19:33:08 +09:00
87 lines
2.2 KiB
Swift
87 lines
2.2 KiB
Swift
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
import Foundation
|
|
@testable import Client
|
|
import WebKit
|
|
|
|
import XCTest
|
|
|
|
class TabEventHandlerTests: XCTestCase {
|
|
|
|
func testEventDelivery() {
|
|
let tab = Tab(configuration: WKWebViewConfiguration())
|
|
let handler = DummyHandler()
|
|
|
|
XCTAssertNil(handler.isFocused)
|
|
|
|
TabEvent.post(.didGainFocus, for: tab)
|
|
XCTAssertTrue(handler.isFocused!)
|
|
|
|
TabEvent.post(.didLoseFocus, for: tab)
|
|
XCTAssertFalse(handler.isFocused!)
|
|
}
|
|
|
|
func testUnregistration() {
|
|
let tab = Tab(configuration: WKWebViewConfiguration())
|
|
let handler = DummyHandler()
|
|
|
|
XCTAssertNil(handler.isFocused)
|
|
|
|
TabEvent.post(.didGainFocus, for: tab)
|
|
XCTAssertTrue(handler.isFocused!)
|
|
|
|
handler.doUnregister()
|
|
TabEvent.post(.didLoseFocus, for: tab)
|
|
// The event didn't reach us, so we should still be focused.
|
|
XCTAssertTrue(handler.isFocused!)
|
|
}
|
|
|
|
func testOnlyRegisteredForEvents() {
|
|
let tab = Tab(configuration: WKWebViewConfiguration())
|
|
let handler = DummyHandler()
|
|
handler.doUnregister()
|
|
|
|
let tabObservers = handler.registerFor(.didGainFocus)
|
|
|
|
XCTAssertNil(handler.isFocused)
|
|
|
|
TabEvent.post(.didGainFocus, for: tab)
|
|
XCTAssertTrue(handler.isFocused!)
|
|
|
|
TabEvent.post(.didLoseFocus, for: tab)
|
|
XCTAssertTrue(handler.isFocused!)
|
|
|
|
handler.unregister(tabObservers)
|
|
}
|
|
}
|
|
|
|
|
|
class DummyHandler: TabEventHandler {
|
|
var tabObservers: TabObservers!
|
|
|
|
// This is not how this should be written in production — the handler shouldn't be keeping track
|
|
// of individual tab state.
|
|
var isFocused: Bool? = nil
|
|
|
|
init() {
|
|
tabObservers = registerFor(.didGainFocus, .didLoseFocus)
|
|
}
|
|
|
|
deinit {
|
|
doUnregister()
|
|
}
|
|
|
|
fileprivate func doUnregister() {
|
|
unregister(tabObservers)
|
|
}
|
|
|
|
func tabDidGainFocus(_ tab: Tab) {
|
|
isFocused = true
|
|
}
|
|
|
|
func tabDidLoseFocus(_ tab: Tab) {
|
|
isFocused = false
|
|
}
|
|
}
|