120 lines
5.3 KiB
Kotlin
120 lines
5.3 KiB
Kotlin
package com.marvinelsen.chinese.transliteration.api
|
|
|
|
import io.kotest.core.spec.style.ShouldSpec
|
|
import io.kotest.datatest.withData
|
|
import io.kotest.matchers.shouldBe
|
|
|
|
class PinyinSyllableTest : ShouldSpec({
|
|
context("from pinyin with tone numbers") {
|
|
withData(
|
|
nameFn = { "'${it.first}' -> ${it.second}" },
|
|
"sheng1" to PinyinSyllable("sheng", Tone.FIRST),
|
|
"zhi2" to PinyinSyllable("zhi", Tone.SECOND),
|
|
"ka3" to PinyinSyllable("ka", Tone.THIRD),
|
|
"yao4" to PinyinSyllable("yao", Tone.FORTH),
|
|
"me5" to PinyinSyllable("me", Tone.FIFTH),
|
|
"Me5" to PinyinSyllable("Me", Tone.FIFTH),
|
|
"nv3" to PinyinSyllable("nv", Tone.THIRD),
|
|
"nü3" to PinyinSyllable("nü", Tone.THIRD),
|
|
"nu:3" to PinyinSyllable("nu:", Tone.THIRD),
|
|
"r5" to PinyinSyllable("r", Tone.FIFTH),
|
|
"R5" to PinyinSyllable("R", Tone.FIFTH),
|
|
"er2" to PinyinSyllable("er", Tone.SECOND),
|
|
"Er2" to PinyinSyllable("Er", Tone.SECOND),
|
|
) { (pinyinWithNumber, expectedSyllable) ->
|
|
PinyinSyllable.fromPinyinWithToneNumber(pinyinWithNumber) shouldBe expectedSyllable
|
|
}
|
|
}
|
|
|
|
context("from zhuyin") {
|
|
withData(
|
|
nameFn = { "'${it.first}' -> ${it.second}" },
|
|
"ㄕㄥ" to PinyinSyllable("sheng", Tone.FIRST),
|
|
"ㄓˊ" to PinyinSyllable("zhi", Tone.SECOND),
|
|
"ㄎㄚˇ" to PinyinSyllable("ka", Tone.THIRD),
|
|
"ㄧㄠˋ" to PinyinSyllable("yao", Tone.FORTH),
|
|
"ㄇㄜ˙" to PinyinSyllable("me", Tone.FIFTH),
|
|
"˙ㄇㄜ" to PinyinSyllable("me", Tone.FIFTH),
|
|
"ㄋㄩˇ" to PinyinSyllable("nü", Tone.THIRD),
|
|
) { (zhuyin, expectedSyllable) ->
|
|
PinyinSyllable.fromZhuyin(zhuyin) shouldBe expectedSyllable
|
|
}
|
|
}
|
|
|
|
context("from invalid pinyin with tone numbers") {
|
|
}
|
|
|
|
context("from invalid zhuyin") {
|
|
}
|
|
|
|
context("format to zhuyin") {
|
|
withData(
|
|
nameFn = { "${it.first.format(TransliterationSystem.PINYIN_WITH_TONE_NUMBERS)} -> ${it.second}" },
|
|
PinyinSyllable("sheng", Tone.FIRST) to "ㄕㄥ",
|
|
PinyinSyllable("zhi", Tone.SECOND) to "ㄓˊ",
|
|
PinyinSyllable("ka", Tone.THIRD) to "ㄎㄚˇ",
|
|
PinyinSyllable("yao", Tone.FORTH) to "ㄧㄠˋ",
|
|
PinyinSyllable("me", Tone.FIFTH) to "˙ㄇㄜ",
|
|
PinyinSyllable("nü", Tone.THIRD) to "ㄋㄩˇ",
|
|
PinyinSyllable("nu:", Tone.THIRD) to "ㄋㄩˇ",
|
|
PinyinSyllable("nv", Tone.THIRD) to "ㄋㄩˇ",
|
|
PinyinSyllable("r", Tone.FIFTH) to "˙ㄦ",
|
|
PinyinSyllable("R", Tone.FIFTH) to "˙ㄦ",
|
|
PinyinSyllable("er", Tone.SECOND) to "ㄦˊ",
|
|
PinyinSyllable("Er", Tone.SECOND) to "ㄦˊ",
|
|
) { (syllable, expectedZhuyin) ->
|
|
syllable.format(TransliterationSystem.ZHUYIN) shouldBe expectedZhuyin
|
|
}
|
|
}
|
|
|
|
context("format to pinyin with tone numbers") {
|
|
withData(
|
|
nameFn = { "${it.first.format(TransliterationSystem.PINYIN_WITH_TONE_NUMBERS)} -> ${it.second}" },
|
|
PinyinSyllable("sheng", Tone.FIRST) to "sheng1",
|
|
PinyinSyllable("zhi", Tone.SECOND) to "zhi2",
|
|
PinyinSyllable("ka", Tone.THIRD) to "ka3",
|
|
PinyinSyllable("yao", Tone.FORTH) to "yao4",
|
|
PinyinSyllable("me", Tone.FIFTH) to "me5",
|
|
PinyinSyllable("nü", Tone.THIRD) to "nü3",
|
|
PinyinSyllable("nu:", Tone.THIRD) to "nu:3",
|
|
PinyinSyllable("nv", Tone.THIRD) to "nv3",
|
|
PinyinSyllable("r", Tone.FIFTH) to "r5",
|
|
PinyinSyllable("R", Tone.FIFTH) to "R5",
|
|
PinyinSyllable("er", Tone.SECOND) to "er2",
|
|
PinyinSyllable("Er", Tone.SECOND) to "Er2",
|
|
) { (syllable, expectedPinyinWithToneNumbers) ->
|
|
syllable.format(TransliterationSystem.PINYIN_WITH_TONE_NUMBERS) shouldBe expectedPinyinWithToneNumbers
|
|
}
|
|
}
|
|
|
|
context("format to pinyin with tone marks") {
|
|
withData(
|
|
nameFn = { "${it.first.format(TransliterationSystem.PINYIN_WITH_TONE_NUMBERS)} -> ${it.second}" },
|
|
PinyinSyllable("sheng", Tone.FIRST) to "shēng",
|
|
PinyinSyllable("zhi", Tone.SECOND) to "zhí",
|
|
PinyinSyllable("ka", Tone.THIRD) to "kǎ",
|
|
PinyinSyllable("yao", Tone.FORTH) to "yào",
|
|
PinyinSyllable("me", Tone.FIFTH) to "me",
|
|
PinyinSyllable("zhui", Tone.FIRST) to "zhuī",
|
|
PinyinSyllable("liu", Tone.FIRST) to "liū",
|
|
PinyinSyllable("nü", Tone.THIRD) to "nǚ",
|
|
PinyinSyllable("nu:", Tone.THIRD) to "nǚ",
|
|
PinyinSyllable("nv", Tone.THIRD) to "nǚ",
|
|
PinyinSyllable("r", Tone.FIFTH) to "r",
|
|
PinyinSyllable("er", Tone.SECOND) to "ér",
|
|
PinyinSyllable("Er", Tone.SECOND) to "Ér",
|
|
) { (syllable, expectedPinyinWithToneMarks) ->
|
|
syllable.format(TransliterationSystem.PINYIN_WITH_TONE_MARKS) shouldBe expectedPinyinWithToneMarks
|
|
}
|
|
}
|
|
|
|
context("format to zhuyin with invalid pinyin syllable") {
|
|
}
|
|
|
|
context("format to pinyin with tone diacritics with invalid pinyin syllable") {
|
|
}
|
|
|
|
context("format to pinyin with tone numbers with invalid pinyin syllable") {
|
|
}
|
|
})
|