66 lines
2.8 KiB
Swift
66 lines
2.8 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"])
|
|
}
|
|
|
|
func testFamilyCategoriesAndFilteringComeFromCatalogMetadata() {
|
|
let catalog = LocalInstrumentCatalog()
|
|
let pluckedStrings = catalog.instruments(matching: "", familyCategory: "Plucked strings")
|
|
|
|
XCTAssertTrue(catalog.familyCategories.contains("Plucked strings"))
|
|
XCTAssertTrue(pluckedStrings.contains { $0.id == "oud" })
|
|
XCTAssertTrue(pluckedStrings.allSatisfy { $0.familyCategory == "Plucked strings" })
|
|
XCTAssertTrue(
|
|
catalog.instruments(matching: "guitar", familyCategory: "Plucked strings")
|
|
.allSatisfy { $0.familyCategory == "Plucked strings" }
|
|
)
|
|
}
|
|
|
|
func testRegionsAndFilteringComeFromCatalogMetadata() {
|
|
let catalog = LocalInstrumentCatalog()
|
|
let middleEasternPluckedStrings = catalog.instruments(
|
|
matching: "",
|
|
familyCategory: "Plucked strings",
|
|
regionOrigin: "Middle East"
|
|
)
|
|
|
|
XCTAssertTrue(catalog.regionsOfOrigin.contains("Middle East"))
|
|
XCTAssertFalse(middleEasternPluckedStrings.isEmpty)
|
|
XCTAssertTrue(middleEasternPluckedStrings.contains { $0.id == "oud" })
|
|
XCTAssertTrue(middleEasternPluckedStrings.allSatisfy { $0.regionOrigin == "Middle East" })
|
|
XCTAssertTrue(middleEasternPluckedStrings.allSatisfy { $0.familyCategory == "Plucked strings" })
|
|
}
|
|
}
|