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] ) }