Add Arabic pronunciation processing
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import MusicAssistantCore
|
||||
import XCTest
|
||||
|
||||
final class ArabicPronunciationProcessorTests: XCTestCase {
|
||||
private let processor = ArabicPronunciationProcessor()
|
||||
|
||||
func testDisabledProcessingLeavesLyricsUntouched() {
|
||||
let lyrics = "\u{0645}\u{0651}\u{064E}\u{0631}\u{062D}\u{064E}\u{0628}\u{064B}\u{0627}"
|
||||
|
||||
let result = processor.process(
|
||||
lyrics: lyrics,
|
||||
settings: ArabicPronunciationSettings(isEnabled: false)
|
||||
)
|
||||
|
||||
XCTAssertEqual(result.text, lyrics)
|
||||
XCTAssertEqual(result.notes, [.processingDisabled])
|
||||
}
|
||||
|
||||
func testProcessingNormalizesSuppliedDiacritics() {
|
||||
let lyrics = "\u{0645}\u{0651}\u{064E}\u{0631}\u{062D}\u{064E}\u{0628}\u{064B}\u{0627}"
|
||||
|
||||
let result = processor.process(
|
||||
lyrics: lyrics,
|
||||
settings: ArabicPronunciationSettings(
|
||||
isEnabled: true,
|
||||
diacritizationPolicy: .pronunciationTargeted
|
||||
)
|
||||
)
|
||||
|
||||
XCTAssertEqual(
|
||||
result.text,
|
||||
"\u{0645}\u{064E}\u{0651}\u{0631}\u{062D}\u{064E}\u{0628}\u{064B}\u{0627}"
|
||||
)
|
||||
XCTAssertTrue(result.notes.isEmpty)
|
||||
}
|
||||
|
||||
func testRemovingTanweenKeepsOtherDiacritics() {
|
||||
let result = processor.process(
|
||||
lyrics: "\u{0634}\u{064F}\u{0643}\u{0652}\u{0631}\u{064B}\u{0627}",
|
||||
settings: ArabicPronunciationSettings(
|
||||
isEnabled: true,
|
||||
tanweenPolicy: .removeWhenUnwanted
|
||||
)
|
||||
)
|
||||
|
||||
XCTAssertEqual(result.text, "\u{0634}\u{064F}\u{0643}\u{0652}\u{0631}\u{0627}")
|
||||
}
|
||||
|
||||
func testFullTashkeelDoesNotInventMissingMarks() {
|
||||
let lyrics = "\u{0645}\u{0631}\u{062D}\u{0628}\u{0627}"
|
||||
|
||||
let result = processor.process(
|
||||
lyrics: lyrics,
|
||||
settings: ArabicPronunciationSettings(
|
||||
isEnabled: true,
|
||||
diacritizationPolicy: .fullTashkeel,
|
||||
tanweenPolicy: .addWhenPronunciationRequires
|
||||
)
|
||||
)
|
||||
|
||||
XCTAssertEqual(result.text, lyrics)
|
||||
XCTAssertEqual(
|
||||
result.notes,
|
||||
[.fullTashkeelNeedsReview, .tanweenAdditionNeedsReview]
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user