Add Arabic dialect test fixtures

This commit is contained in:
diyaa
2026-09-13 23:22:49 +02:00
parent 6a99266e75
commit 9a0dd452bd
3 changed files with 88 additions and 1 deletions
@@ -0,0 +1,65 @@
import MusicAssistantCore
struct ArabicLyricsFixture {
let dialectName: String
let lyrics: String
let settings: ArabicPronunciationSettings
let expectedLyrics: String
let expectedNotes: [ArabicPronunciationProcessingNote]
}
enum ArabicLyricsFixtures {
static let all: [ArabicLyricsFixture] = [
levantine,
egyptian,
gulf,
maghrebi
]
private static let levantine = ArabicLyricsFixture(
dialectName: "Levantine Arabic",
lyrics: "\u{0634}\u{064F}\u{0648} \u{0628}\u{064E}\u{062F}\u{0651}\u{064E}\u{0643}",
settings: ArabicPronunciationSettings(
isEnabled: true,
diacritizationPolicy: .pronunciationTargeted,
tanweenPolicy: .preserveUserInput,
preservedSpellings: ["\u{0634}\u{064F}\u{0648}"]
),
expectedLyrics: "\u{0634}\u{064F}\u{0648} \u{0628}\u{064E}\u{062F}\u{064E}\u{0651}\u{0643}",
expectedNotes: [.preservedSpellingsProtected(count: 1)]
)
private static let egyptian = ArabicLyricsFixture(
dialectName: "Egyptian Arabic",
lyrics: "\u{0625}\u{0650}\u{0632}\u{0651}\u{064E}\u{0627}\u{064A}\u{064E}\u{0643}",
settings: ArabicPronunciationSettings(
isEnabled: true,
diacritizationPolicy: .pronunciationTargeted
),
expectedLyrics: "\u{0625}\u{0650}\u{0632}\u{064E}\u{0651}\u{0627}\u{064A}\u{064E}\u{0643}",
expectedNotes: []
)
private static let gulf = ArabicLyricsFixture(
dialectName: "Gulf Arabic",
lyrics: "\u{0648}\u{064E}\u{064A}\u{0652}\u{0646}\u{064E}\u{0643} \u{0634}\u{064F}\u{0643}\u{0652}\u{0631}\u{064B}\u{0627}",
settings: ArabicPronunciationSettings(
isEnabled: true,
diacritizationPolicy: .pronunciationTargeted,
tanweenPolicy: .removeWhenUnwanted
),
expectedLyrics: "\u{0648}\u{064E}\u{064A}\u{0652}\u{0646}\u{064E}\u{0643} \u{0634}\u{064F}\u{0643}\u{0652}\u{0631}\u{0627}",
expectedNotes: []
)
private static let maghrebi = ArabicLyricsFixture(
dialectName: "Maghrebi Arabic",
lyrics: "\u{0634}\u{0646}\u{0648} \u{0628}\u{063A}\u{064A}\u{062A}\u{064A}",
settings: ArabicPronunciationSettings(
isEnabled: true,
diacritizationPolicy: .fullTashkeel
),
expectedLyrics: "\u{0634}\u{0646}\u{0648} \u{0628}\u{063A}\u{064A}\u{062A}\u{064A}",
expectedNotes: [.fullTashkeelNeedsReview]
)
}
@@ -103,4 +103,26 @@ final class ArabicPronunciationProcessorTests: XCTestCase {
XCTAssertEqual(result.text, "\(preservedSpelling) \u{0628}\u{064E}\u{0651}")
XCTAssertEqual(result.notes, [.preservedSpellingsProtected(count: 1)])
}
func testArabicDialectFixturesCoverExpectedProcessingBehavior() {
XCTAssertEqual(ArabicLyricsFixtures.all.count, 4)
XCTAssertEqual(
Set(ArabicLyricsFixtures.all.map(\.dialectName)).count,
ArabicLyricsFixtures.all.count
)
for fixture in ArabicLyricsFixtures.all {
let result = processor.process(
lyrics: fixture.lyrics,
settings: fixture.settings
)
XCTAssertEqual(
result.text.unicodeScalars.map(\.value),
fixture.expectedLyrics.unicodeScalars.map(\.value),
fixture.dialectName
)
XCTAssertEqual(result.notes, fixture.expectedNotes, fixture.dialectName)
}
}
}
+1 -1
View File
@@ -71,7 +71,7 @@ requirement is missing and blocks implementation, record it in
- [x] Support diacritics/harakat/tanween processing.
- [x] Preserve intentional spelling/dialect choices where possible.
- [x] Allow user to compare/edit processed Arabic before Suno handoff.
- [ ] Add Arabic test fixtures covering multiple dialects.
- [x] Add Arabic test fixtures covering multiple dialects.
## Phase 6 --- Instrument Selector & Catalog