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.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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user