Files
conjure/Tests/ConjureKitTests/EmojiBorderTests.swift
T

44 lines
2.1 KiB
Swift

import AppKit
import Testing
@testable import Conjure
@Test @MainActor func emojiBordersFollowSelectionAndHover() throws {
_ = NSApplication.shared
let suite = "EmojiBorders.\(UUID().uuidString)"
let defaults = UserDefaults(suiteName: suite)!
defer { defaults.removePersistentDomain(forName: suite) }
let picker = EmojiPickerController(defaults: defaults)
picker.input = { "face" }
let window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: 750, height: 400),
styleMask: [.borderless], backing: .buffered, defer: false)
window.contentView = picker.view
picker.view.layoutSubtreeIfNeeded()
let scroll = try #require(picker.view.subviews.compactMap { $0 as? NSScrollView }.first)
let grid = try #require(scroll.documentView as? NSCollectionView)
let first = try #require(grid.item(at: IndexPath(item: 0, section: 0))?.view as? NSButton)
let second = try #require(grid.item(at: IndexPath(item: 1, section: 0))?.view as? NSButton)
let enter = try #require(NSEvent.enterExitEvent(with: .mouseEntered, location: .zero,
modifierFlags: [], timestamp: 0, windowNumber: window.windowNumber,
context: nil, eventNumber: 0, trackingNumber: 0, userData: nil))
let exit = try #require(NSEvent.enterExitEvent(with: .mouseExited, location: .zero,
modifierFlags: [], timestamp: 0, windowNumber: window.windowNumber,
context: nil, eventNumber: 0, trackingNumber: 0, userData: nil))
first.mouseExited(with: exit)
second.mouseExited(with: exit)
#expect(first.layer?.borderWidth == 0.5)
#expect(second.layer?.borderWidth == 0)
second.mouseEntered(with: enter)
#expect(second.layer?.borderWidth == 0.5)
picker.moveSelection(by: 1)
#expect(first.layer?.borderWidth == 0)
second.mouseExited(with: exit)
#expect(second.layer?.borderWidth == 0.5)
picker.moveSelection(by: -1)
#expect(second.layer?.borderWidth == 0)
first.mouseEntered(with: enter)
picker.moveSelection(by: 1)
#expect(first.layer?.borderWidth == 0.5)
first.mouseExited(with: exit)
#expect(first.layer?.borderWidth == 0)
}