Add Arabic dialect test fixtures
This commit is contained in:
@@ -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.text, "\(preservedSpelling) \u{0628}\u{064E}\u{0651}")
|
||||||
XCTAssertEqual(result.notes, [.preservedSpellingsProtected(count: 1)])
|
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
@@ -71,7 +71,7 @@ requirement is missing and blocks implementation, record it in
|
|||||||
- [x] Support diacritics/harakat/tanween processing.
|
- [x] Support diacritics/harakat/tanween processing.
|
||||||
- [x] Preserve intentional spelling/dialect choices where possible.
|
- [x] Preserve intentional spelling/dialect choices where possible.
|
||||||
- [x] Allow user to compare/edit processed Arabic before Suno handoff.
|
- [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
|
## Phase 6 --- Instrument Selector & Catalog
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user