feat: prioritize word starts and app acronyms in search
This commit is contained in:
@@ -2,16 +2,51 @@ import ConjureKit
|
||||
import Foundation
|
||||
import Testing
|
||||
|
||||
@Test func searchRanksExactPrefixSubstringAndFuzzyMatches() {
|
||||
let names = ["Caramel", "My cl Tool", "Cloud", "Cold", "CL", "Unrelated"]
|
||||
@Test func searchRanksExactPrefixWordPrefixInitialsSubstringAndFuzzyMatches() {
|
||||
let names = ["Logic", "Agc Utility", "Great Console", "Google Chrome", "Tool GC Helper", "GCompiler", "GC", "Unrelated"]
|
||||
let applications = names.map(application)
|
||||
|
||||
#expect(ApplicationSearch.results(for: "cl", in: applications).map(\.name) == [
|
||||
"CL", "Cloud", "My cl Tool", "Cold", "Caramel",
|
||||
#expect(ApplicationSearch.results(for: "gc", in: applications).map(\.name) == [
|
||||
"GC", "GCompiler", "Tool GC Helper", "Google Chrome", "Great Console", "Agc Utility", "Logic",
|
||||
])
|
||||
#expect(ApplicationSearch.results(for: "zq", in: applications).isEmpty)
|
||||
}
|
||||
|
||||
@Test func wordPrefixesIncludePartialPhrasesWithoutPromotingInteriorSubstrings() {
|
||||
let applications = ["ADisk Utility", "Open Disk Utility", "Disk Utility"].map(application)
|
||||
|
||||
#expect(ApplicationSearch.results(for: "disk u", in: applications).map(\.name) == [
|
||||
"Disk Utility", "Open Disk Utility", "ADisk Utility",
|
||||
])
|
||||
}
|
||||
|
||||
@Test func wordStartsHandlePunctuationDigitsAndAccentFolding() {
|
||||
let cases = [
|
||||
("ss", "System_Settings", "Mississippi"),
|
||||
("2m", "Audio 2 MIDI", "A2M Tools"),
|
||||
(" \n ÉN \t ", "Éditeur Numérique", "Aen Utility"),
|
||||
("sys", "★ System Settings", "Asystem"),
|
||||
]
|
||||
for (query, name, interiorMatch) in cases {
|
||||
let applications = [interiorMatch, name].map(application)
|
||||
#expect(ApplicationSearch.results(for: query, in: applications).map(\.name) == [
|
||||
name, interiorMatch,
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
@Test func wordInitialsMatchInOrderAndCanSkipWords() {
|
||||
let applications = ["Vocal", "Avoid Chords", "Voice Control", "Visual Studio Code"].map(application)
|
||||
|
||||
#expect(ApplicationSearch.results(for: "vc", in: applications).map(\.name) == [
|
||||
"Visual Studio Code", "Voice Control", "Vocal", "Avoid Chords",
|
||||
])
|
||||
#expect(ApplicationSearch.results(for: "vsc", in: applications).map(\.name) == [
|
||||
"Visual Studio Code",
|
||||
])
|
||||
#expect(ApplicationSearch.results(for: "cv", in: applications).isEmpty)
|
||||
}
|
||||
|
||||
@Test func searchFoldsAccentsAndTrimsWhitespace() {
|
||||
let applications = ["Decafé", "Caféteria", "Café", "Camera"].map(application)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user