diff --git a/MarkEditMac/Modules/Sources/QuickSearchCore/Results/ContentSearchResult.swift b/MarkEditMac/Modules/Sources/QuickSearchCore/Results/ContentSearchResult.swift index 9c2adb95d..e754e27e4 100644 --- a/MarkEditMac/Modules/Sources/QuickSearchCore/Results/ContentSearchResult.swift +++ b/MarkEditMac/Modules/Sources/QuickSearchCore/Results/ContentSearchResult.swift @@ -140,7 +140,7 @@ package enum QuickSearchResult: Sendable { let prefixActions = actions.filter(\.isPrefixMatch).map(Self.menuAction) let otherActions = actions.filter { !$0.isExactMatch && !$0.isPrefixMatch }.map(Self.menuAction) - return exactFiles + exactActions + prefixFiles + prefixActions - + headings.map(Self.heading) + content + recentFiles + bookmarkedFiles + otherActions + return headings.map(Self.heading) + content + + exactFiles + exactActions + prefixFiles + prefixActions + recentFiles + bookmarkedFiles + otherActions } } diff --git a/MarkEditMac/Modules/Tests/QuickSearchMenuTests.swift b/MarkEditMac/Modules/Tests/QuickSearchMenuTests.swift index e8c671929..b3b73c013 100644 --- a/MarkEditMac/Modules/Tests/QuickSearchMenuTests.swift +++ b/MarkEditMac/Modules/Tests/QuickSearchMenuTests.swift @@ -113,7 +113,7 @@ final class QuickSearchMenuTests: XCTestCase { let fileID = "file:\(file.absoluteString)" let cases: [(String, QuickSearchFilter, [String])] = [ - ("new tab", .all, [fileID, "menu:0.0", "menu:1.0", "menu:1.1", "heading:1", "line:2"]), + ("new tab", .all, ["heading:1", "line:2", fileID, "menu:0.0", "menu:1.0", "menu:1.1"]), ("", .all, [fileID, "heading:1"]), ("", .menuActions, actions.map(\.id)), ("nwt", .menuActions, actions.map(\.id)), @@ -215,7 +215,7 @@ final class QuickSearchMenuTests: XCTestCase { menuActions: actions ) - XCTAssertEqual(results.map(\.id), ["menu:1.0", "menu:1.1", "line:1", "menu:0.0"]) + XCTAssertEqual(results.map(\.id), ["line:1", "menu:1.0", "menu:1.1", "menu:0.0"]) let matches = try MenuActionSearchResult.search("help", actions: actions) XCTAssertEqual(matches.map(\.isExactMatch), [true, false, false]) diff --git a/MarkEditMac/Modules/Tests/QuickSearchResultTests.swift b/MarkEditMac/Modules/Tests/QuickSearchResultTests.swift index ea4042e7a..e6ed2dce3 100644 --- a/MarkEditMac/Modules/Tests/QuickSearchResultTests.swift +++ b/MarkEditMac/Modules/Tests/QuickSearchResultTests.swift @@ -8,7 +8,7 @@ import XCTest @testable import QuickSearchCore final class QuickSearchResultTests: XCTestCase { - func testAllPromotesDirectPrefixesWithoutPromotingMenuNamesOrWeakMatches() throws { + func testAllRanksHeadingsThenContentBeforeGlobalMatches() throws { let recent = URL(filePath: "/Notes/Release Plan.md") let exact = URL(filePath: "/Notes/Plan.md") let prefix = URL(filePath: "/Archive/Planning.md") @@ -32,9 +32,11 @@ final class QuickSearchResultTests: XCTestCase { menuActions: actions ) - let expected = [ - "file:\(exact.absoluteString)", "menu:0.0", "file:\(prefix.absoluteString)", "menu:0.1", "heading:101", - ] + (1...100).map { "line:\($0)" } + ["file:\(recent.absoluteString)", "menu:2.0", "menu:1.0"] + let expected = ["heading:101"] + (1...100).map { "line:\($0)" } + [ + "file:\(exact.absoluteString)", "menu:0.0", "file:\(prefix.absoluteString)", "menu:0.1", + "file:\(recent.absoluteString)", "menu:2.0", "menu:1.0", + ] + XCTAssertEqual(results.map(\.id), expected) XCTAssertEqual(Set(results.map(\.id)).count, results.count) } @@ -303,7 +305,7 @@ extension QuickSearchResultTests { let cases: [(String, QuickSearchFilter, [String])] = [ ("plan", .all, [ - recentIDs[0], bookmarkIDs[1], "menu:0.0", bookmarkIDs[2], "heading:1", "line:2", recentIDs[1], + "heading:1", "line:2", recentIDs[0], bookmarkIDs[1], "menu:0.0", bookmarkIDs[2], recentIDs[1], ]), ("plan", .recents, recentIDs), ("plan", .bookmarks, bookmarkIDs), diff --git a/MarkEditMac/Modules/Tests/QuickSearchTests.swift b/MarkEditMac/Modules/Tests/QuickSearchTests.swift index d9ee38e5a..853b8a711 100644 --- a/MarkEditMac/Modules/Tests/QuickSearchTests.swift +++ b/MarkEditMac/Modules/Tests/QuickSearchTests.swift @@ -215,7 +215,7 @@ extension QuickSearchTests { return try XCTUnwrap(cell.subviews.compactMap { $0 as? NSTextField }.first).stringValue } - XCTAssertEqual(titles, ["Plan.md", "Release Plan", "Project Planning", "A plan for launch."]) + XCTAssertEqual(titles, ["Release Plan", "Project Planning", "A plan for launch.", "Plan.md"]) try await search("pp", count: 1) let submit = #selector(NSResponder.insertNewline(_:)) snapshot = .init( @@ -379,7 +379,6 @@ extension QuickSearchTests { try await waitUntil { table.numberOfRows == 2 } XCTAssertFalse(results.isHidden) XCTAssertEqual(table.selectedRow, 0) - XCTAssertTrue(view.control(field, textView: NSTextView(), doCommandBy: #selector(NSResponder.moveDown(_:)))) return view } @@ -391,7 +390,7 @@ extension QuickSearchTests { let table: NSTableView = try XCTUnwrap(firstView.firstDescendant()) try await waitUntil { - let cell = table.view(atColumn: 0, row: 1, makeIfNecessary: true) + let cell = table.view(atColumn: 0, row: 0, makeIfNecessary: true) return cell?.subviews.compactMap { $0 as? NSTextField }.last?.stringValue == "Untitled:4" && controller.window?.isActivatingResult == false } @@ -400,7 +399,7 @@ extension QuickSearchTests { XCTAssertEqual(controller.window?.isVisible, true) XCTAssertTrue(navigatedLines.isEmpty) - XCTAssertTrue(firstView.control(NSControl(), textView: NSTextView(), doCommandBy: #selector(NSResponder.moveDown(_:)))) + XCTAssertEqual(table.selectedRow, 0) XCTAssertTrue(firstView.control(NSControl(), textView: NSTextView(), doCommandBy: submit)) try await waitUntil { !navigatedLines.isEmpty } XCTAssertEqual(navigatedLines, [4])