85 lines
3.2 KiB
Swift
85 lines
3.2 KiB
Swift
import XCTest
|
|
import MacToolsPluginKit
|
|
@testable import MenuBarHiddenPlugin
|
|
|
|
@MainActor
|
|
final class MenuBarHiddenStoreTests: XCTestCase {
|
|
|
|
func testEnabledDefaultsToFalse() {
|
|
let store = MenuBarHiddenStore(storage: MenuBarHiddenMemoryStorage())
|
|
XCTAssertFalse(store.isEnabled)
|
|
}
|
|
|
|
func testAlwaysHiddenItemStableKeysDefaultToEmpty() {
|
|
let store = MenuBarHiddenStore(storage: MenuBarHiddenMemoryStorage())
|
|
|
|
XCTAssertTrue(store.alwaysHiddenItemStableKeys.isEmpty)
|
|
}
|
|
|
|
func testVisibleHiddenLayoutDefaultsToMissingUntilRecorded() {
|
|
let store = MenuBarHiddenStore(storage: MenuBarHiddenMemoryStorage())
|
|
|
|
XCTAssertFalse(store.hasVisibleHiddenLayout)
|
|
XCTAssertTrue(store.visibleItemStableKeys.isEmpty)
|
|
XCTAssertTrue(store.hiddenItemStableKeys.isEmpty)
|
|
}
|
|
|
|
func testVisibleHiddenLayoutPersistsStableKeysInOrderWithoutDuplicates() {
|
|
let storage = MenuBarHiddenMemoryStorage()
|
|
let store = MenuBarHiddenStore(storage: storage)
|
|
|
|
store.recordVisibleHiddenLayout(
|
|
visibleKeys: ["com.example.a:Item", "com.example.a:Item", ""],
|
|
hiddenKeys: ["com.example.b:Item", "com.example.a:Item", "com.example.c:Item"]
|
|
)
|
|
|
|
XCTAssertTrue(store.hasVisibleHiddenLayout)
|
|
XCTAssertEqual(storage.stringArray(forKey: "visible-item-stable-keys"), [
|
|
"com.example.a:Item",
|
|
])
|
|
XCTAssertEqual(storage.stringArray(forKey: "hidden-item-stable-keys"), [
|
|
"com.example.b:Item",
|
|
"com.example.c:Item",
|
|
])
|
|
XCTAssertEqual(MenuBarHiddenStore(storage: storage).visibleItemStableKeys, [
|
|
"com.example.a:Item",
|
|
])
|
|
XCTAssertEqual(MenuBarHiddenStore(storage: storage).hiddenItemStableKeys, [
|
|
"com.example.b:Item",
|
|
"com.example.c:Item",
|
|
])
|
|
}
|
|
|
|
func testAlwaysHiddenItemStableKeysPersistSortedWithoutDuplicates() {
|
|
let storage = MenuBarHiddenMemoryStorage()
|
|
let store = MenuBarHiddenStore(storage: storage)
|
|
let first = MenuBarItemTag(namespace: "com.example.b", title: "Item", windowID: nil, instanceIndex: 0)
|
|
let second = MenuBarItemTag(namespace: "com.example.a", title: "Item", windowID: nil, instanceIndex: 1)
|
|
|
|
store.recordAlwaysHiddenItem(first)
|
|
store.recordAlwaysHiddenItem(second)
|
|
store.recordAlwaysHiddenItem(first)
|
|
|
|
XCTAssertEqual(storage.stringArray(forKey: "always-hidden-item-stable-keys"), [
|
|
"com.example.a:Item:1",
|
|
"com.example.b:Item",
|
|
])
|
|
XCTAssertEqual(MenuBarHiddenStore(storage: storage).alwaysHiddenItemStableKeys, [
|
|
"com.example.a:Item:1",
|
|
"com.example.b:Item",
|
|
])
|
|
}
|
|
|
|
func testRemovingLastAlwaysHiddenItemClearsStorage() {
|
|
let storage = MenuBarHiddenMemoryStorage()
|
|
let store = MenuBarHiddenStore(storage: storage)
|
|
let tag = MenuBarItemTag(namespace: "com.example.app", title: "Item", windowID: nil, instanceIndex: 0)
|
|
|
|
store.recordAlwaysHiddenItem(tag)
|
|
store.removeAlwaysHiddenItem(tag)
|
|
|
|
XCTAssertTrue(store.alwaysHiddenItemStableKeys.isEmpty)
|
|
XCTAssertNil(storage.stringArray(forKey: "always-hidden-item-stable-keys"))
|
|
}
|
|
}
|