import AppKit import ConjureKit import Testing @testable import Conjure @Test @MainActor func emojiDownNavigationFollowsRenderedColumns() throws { _ = NSApplication.shared let suite = "EmojiGrid.\(UUID().uuidString)" let defaults = UserDefaults(suiteName: suite)! let pasteboard = NSPasteboard.withUniqueName() defer { defaults.removePersistentDomain(forName: suite); pasteboard.releaseGlobally() } let picker = EmojiPickerController(defaults: defaults, pasteboard: pasteboard) 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 layout = try #require(grid.collectionViewLayout) let first = try #require(layout.layoutAttributesForItem(at: IndexPath(item: 0, section: 0))) let nextRow = try #require((1.. first.frame.minY }) #expect(picker.handle(#selector(NSResponder.moveDown(_:)))) picker.copySelection() #expect(pasteboard.string(forType: .string) == EmojiCatalog.all[nextRow].value) print("Emoji grid: \(nextRow) columns at 750 points; down navigation follows the rendered row.") } @Test @MainActor func emojiNavigationCrossesFavoritesRecentAndCategorySections() throws { _ = NSApplication.shared let suite = "EmojiSections.\(UUID().uuidString)" let defaults = UserDefaults(suiteName: suite)! let pasteboard = NSPasteboard.withUniqueName() defer { defaults.removePersistentDomain(forName: suite); pasteboard.releaseGlobally() } defaults.set(["👩‍💻", "🙏"], forKey: "favoriteEmoji") defaults.set(["🚀", "👩‍💻", "😀"], forKey: "recentEmoji") let picker = EmojiPickerController(defaults: defaults, pasteboard: pasteboard) 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) #expect(grid.numberOfItems(inSection: 0) == 2) #expect(grid.numberOfItems(inSection: 1) == 2) #expect((0..