38 lines
1.5 KiB
Swift
38 lines
1.5 KiB
Swift
import MusicAssistantCore
|
|
import XCTest
|
|
|
|
final class LocalInstrumentCatalogTests: XCTestCase {
|
|
func testWorldwideCatalogCoversRequiredRegionsAndInstrumentTypes() {
|
|
let catalog = LocalInstrumentCatalog()
|
|
let expectedRegions = [
|
|
"Western", "Middle East", "Africa", "South Asia", "East Asia", "Southeast Asia", "Latin America", "Modern"
|
|
]
|
|
let expectedInstrumentIDs = [
|
|
"piano", "oud", "djembe", "sitar", "erhu", "angklung", "charango", "bagpipes", "synthesizer"
|
|
]
|
|
|
|
XCTAssertGreaterThanOrEqual(catalog.items.count, 200)
|
|
XCTAssertTrue(expectedRegions.allSatisfy { region in
|
|
catalog.items.contains { $0.regionOrigin?.contains(region) == true }
|
|
})
|
|
XCTAssertTrue(expectedInstrumentIDs.allSatisfy { id in
|
|
catalog.items.contains { $0.id == id }
|
|
})
|
|
}
|
|
|
|
func testWorldwideCatalogHasUniqueStableInstrumentIDs() {
|
|
let items = LocalInstrumentCatalog.worldwideItems
|
|
|
|
XCTAssertEqual(Set(items.map(\.id)).count, items.count)
|
|
XCTAssertTrue(items.allSatisfy { !$0.name.isEmpty && !$0.familyCategory.isEmpty })
|
|
}
|
|
|
|
func testSearchMatchesNamesAliasesAndArabicSearchTerms() {
|
|
let catalog = LocalInstrumentCatalog()
|
|
|
|
XCTAssertEqual(catalog.instruments(matching: "concert flute").map(\.id), ["flute"])
|
|
XCTAssertEqual(catalog.instruments(matching: "nylon string").map(\.id), ["classical-guitar"])
|
|
XCTAssertEqual(catalog.instruments(matching: "عود").map(\.id), ["oud"])
|
|
}
|
|
}
|