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) }