Add unit tests
This commit is contained in:
parent
22eac5c508
commit
6cbef9355d
0
test/__init__.py
Normal file
0
test/__init__.py
Normal file
138
test/data/fr-t-k0-android.xml
Normal file
138
test/data/fr-t-k0-android.xml
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE keyboard SYSTEM "../dtd/ldmlKeyboard.dtd">
|
||||||
|
<keyboard locale="fr-t-k0-android">
|
||||||
|
<version platform="4.4" number="$Revision: 11914 $"/>
|
||||||
|
<names>
|
||||||
|
<name value="French"/>
|
||||||
|
</names>
|
||||||
|
<keyMap>
|
||||||
|
<map iso="D01" to="a" longPress="à â % æ á ä ã å ā ª"/> <!-- Q -->
|
||||||
|
<map iso="D02" to="z"/> <!-- W -->
|
||||||
|
<map iso="D03" to="e" longPress="é è ê ë % ę ė ē"/>
|
||||||
|
<map iso="D04" to="r"/>
|
||||||
|
<map iso="D05" to="t"/>
|
||||||
|
<map iso="D06" to="y" longPress="% ÿ"/>
|
||||||
|
<map iso="D07" to="u" longPress="ù û % ü ú ū"/>
|
||||||
|
<map iso="D08" to="i" longPress="î % ï ì í į ī"/>
|
||||||
|
<map iso="D09" to="o" longPress="ô œ % ö ò ó õ ø ō º"/>
|
||||||
|
<map iso="D10" to="p"/>
|
||||||
|
<map iso="C01" to="q"/> <!-- A -->
|
||||||
|
<map iso="C02" to="s"/>
|
||||||
|
<map iso="C03" to="d"/>
|
||||||
|
<map iso="C04" to="f"/>
|
||||||
|
<map iso="C05" to="g"/>
|
||||||
|
<map iso="C06" to="h"/>
|
||||||
|
<map iso="C07" to="j"/>
|
||||||
|
<map iso="C08" to="k"/>
|
||||||
|
<map iso="C09" to="l"/>
|
||||||
|
<map iso="C10" to="m"/> <!-- ; -->
|
||||||
|
<map iso="B01" to="w"/> <!-- Z -->
|
||||||
|
<map iso="B02" to="x"/>
|
||||||
|
<map iso="B03" to="c" longPress="ç ć č"/>
|
||||||
|
<map iso="B04" to="v"/>
|
||||||
|
<map iso="B05" to="b"/>
|
||||||
|
<map iso="B06" to="n"/>
|
||||||
|
<map iso="B07" to="'" longPress="‘ ’ ‹ ›"/> <!-- M -->
|
||||||
|
<map iso="A02" to=","/> <!-- (key to left of space) -->
|
||||||
|
<map iso="A03" to=" "/> <!-- space -->
|
||||||
|
<map iso="A04" to="." longPress="# ! , ? - : ' @"/> <!-- (key to right of space) -->
|
||||||
|
</keyMap>
|
||||||
|
<keyMap modifiers="shift caps">
|
||||||
|
<map iso="D01" to="A" longPress="À Â % Æ Á Ä Ã Å Ā ª"/> <!-- Q -->
|
||||||
|
<map iso="D02" to="Z"/> <!-- W -->
|
||||||
|
<map iso="D03" to="E" longPress="É È Ê Ë % Ę Ė Ē"/>
|
||||||
|
<map iso="D04" to="R"/>
|
||||||
|
<map iso="D05" to="T"/>
|
||||||
|
<map iso="D06" to="Y" longPress="% Ÿ"/>
|
||||||
|
<map iso="D07" to="U" longPress="Ù Û % Ü Ú Ū"/>
|
||||||
|
<map iso="D08" to="I" longPress="Î % Ï Ì Í Į Ī"/>
|
||||||
|
<map iso="D09" to="O" longPress="Ô Œ % Ö Ò Ó Õ Ø Ō º"/>
|
||||||
|
<map iso="D10" to="P"/>
|
||||||
|
<map iso="C01" to="Q"/> <!-- A -->
|
||||||
|
<map iso="C02" to="S"/>
|
||||||
|
<map iso="C03" to="D"/>
|
||||||
|
<map iso="C04" to="F"/>
|
||||||
|
<map iso="C05" to="G"/>
|
||||||
|
<map iso="C06" to="H"/>
|
||||||
|
<map iso="C07" to="J"/>
|
||||||
|
<map iso="C08" to="K"/>
|
||||||
|
<map iso="C09" to="L"/>
|
||||||
|
<map iso="C10" to="M"/> <!-- ; -->
|
||||||
|
<map iso="B01" to="W"/> <!-- Z -->
|
||||||
|
<map iso="B02" to="X"/>
|
||||||
|
<map iso="B03" to="C" longPress="Ç Ć Č"/>
|
||||||
|
<map iso="B04" to="V"/>
|
||||||
|
<map iso="B05" to="B"/>
|
||||||
|
<map iso="B06" to="N"/>
|
||||||
|
<map iso="B07" to="'" longPress="‘ ’ ‹ ›"/> <!-- M -->
|
||||||
|
<map iso="A02" to=","/> <!-- (key to left of space) -->
|
||||||
|
<map iso="A03" to=" "/> <!-- space -->
|
||||||
|
<map iso="A04" to="." longPress="# ! , ? - : ' @"/> <!-- (key to right of space) -->
|
||||||
|
</keyMap>
|
||||||
|
<keyMap modifiers="opt">
|
||||||
|
<map iso="D01" to="1" longPress="¹ ½ ⅓ ¼ ⅛"/> <!-- Q base=a -->
|
||||||
|
<map iso="D02" to="2" longPress="² ⅔"/> <!-- W base=z -->
|
||||||
|
<map iso="D03" to="3" longPress="³ ¾ ⅜"/> <!-- E -->
|
||||||
|
<map iso="D04" to="4" longPress="⁴"/> <!-- R -->
|
||||||
|
<map iso="D05" to="5" longPress="⅝"/> <!-- T -->
|
||||||
|
<map iso="D06" to="6"/> <!-- Y -->
|
||||||
|
<map iso="D07" to="7" longPress="⅞"/> <!-- U -->
|
||||||
|
<map iso="D08" to="8"/> <!-- I -->
|
||||||
|
<map iso="D09" to="9"/> <!-- O -->
|
||||||
|
<map iso="D10" to="0" longPress="ⁿ ∅"/> <!-- P -->
|
||||||
|
<map iso="C01" to="@"/> <!-- A base=q -->
|
||||||
|
<map iso="C02" to="#"/> <!-- S -->
|
||||||
|
<map iso="C03" to="€" longPress="¢ £ $ ¥ ₱"/> <!-- D -->
|
||||||
|
<map iso="C04" to="%" longPress="‰"/> <!-- F -->
|
||||||
|
<map iso="C05" to="&"/> <!-- G -->
|
||||||
|
<map iso="C06" to="-" longPress="_ – — ·"/> <!-- H -->
|
||||||
|
<map iso="C07" to="+" longPress="±"/> <!-- J -->
|
||||||
|
<map iso="C08" to="(" longPress="< { ["/> <!-- K -->
|
||||||
|
<map iso="C09" to=")" longPress="> } ]"/> <!-- L -->
|
||||||
|
<map iso="B01" to="*" longPress="† ‡ ★"/> <!-- Z base=w -->
|
||||||
|
<map iso="B02" to="\u{22}" longPress="“ ” « »"/> <!-- X to= " -->
|
||||||
|
<map iso="B03" to="'" longPress="‘ ’ ‹ ›"/> <!-- C -->
|
||||||
|
<map iso="B04" to=":"/> <!-- V -->
|
||||||
|
<map iso="B05" to=";"/> <!-- B -->
|
||||||
|
<map iso="B06" to="!" longPress="¡"/> <!-- N -->
|
||||||
|
<map iso="B07" to="?" longPress="¿"/> <!-- M base=' -->
|
||||||
|
<map iso="A00" to="_"/> <!-- (3 keys to left of space) -->
|
||||||
|
<map iso="A01" to="/"/> <!-- (2 keys to left of space) -->
|
||||||
|
<map iso="A02" to=" "/> <!-- (key to left of space) base=, -->
|
||||||
|
<map iso="A03" to=","/> <!-- space -->
|
||||||
|
<map iso="A04" to="." longPress="…"/> <!-- (key to right of space) -->
|
||||||
|
</keyMap>
|
||||||
|
<keyMap modifiers="opt+shift">
|
||||||
|
<map iso="D01" to="~"/> <!-- Q base=a -->
|
||||||
|
<map iso="D02" to="`"/> <!-- W base=z -->
|
||||||
|
<map iso="D03" to="|"/> <!-- E -->
|
||||||
|
<map iso="D04" to="•" longPress="♪ ♥ ♠ ♦ ♣"/> <!-- R -->
|
||||||
|
<map iso="D05" to="√"/> <!-- T -->
|
||||||
|
<map iso="D06" to="Π" longPress="π"/> <!-- Y -->
|
||||||
|
<map iso="D07" to="÷"/> <!-- U -->
|
||||||
|
<map iso="D08" to="×"/> <!-- I -->
|
||||||
|
<map iso="D09" to="¶" longPress="§"/> <!-- O -->
|
||||||
|
<map iso="D10" to="∆"/> <!-- P -->
|
||||||
|
<map iso="C01" to="£"/> <!-- A base=q -->
|
||||||
|
<map iso="C02" to="¥"/> <!-- S -->
|
||||||
|
<map iso="C03" to="$" longPress="¢"/> <!-- D -->
|
||||||
|
<map iso="C04" to="¢"/> <!-- F -->
|
||||||
|
<map iso="C05" to="^" longPress="↑ ↓ ← →"/> <!-- G -->
|
||||||
|
<map iso="C06" to="°" longPress="′ ″"/> <!-- H -->
|
||||||
|
<map iso="C07" to="=" longPress="≠ ≈ ∞"/> <!-- J -->
|
||||||
|
<map iso="C08" to="{"/> <!-- K -->
|
||||||
|
<map iso="C09" to="}"/> <!-- L -->
|
||||||
|
<map iso="B01" to="\"/> <!-- Z base=w -->
|
||||||
|
<map iso="B02" to="©"/> <!-- X -->
|
||||||
|
<map iso="B03" to="®"/> <!-- C -->
|
||||||
|
<map iso="B04" to="™"/> <!-- V -->
|
||||||
|
<map iso="B05" to="℅"/> <!-- B -->
|
||||||
|
<map iso="B06" to="["/> <!-- N -->
|
||||||
|
<map iso="B07" to="]"/> <!-- M base=' -->
|
||||||
|
<map iso="A00" to="<" longPress="‹ ≤ «"/> <!-- (3 keys to left of space) -->
|
||||||
|
<map iso="A01" to=">" longPress="› ≥ »"/> <!-- (2 keys to left of space) -->
|
||||||
|
<map iso="A02" to=" "/> <!-- (key to left of space) base=, -->
|
||||||
|
<map iso="A03" to=","/> <!-- space -->
|
||||||
|
<map iso="A04" to="." longPress="…"/> <!-- (key to right of space) -->
|
||||||
|
</keyMap>
|
||||||
|
</keyboard>
|
614
test/data/fr.json
Normal file
614
test/data/fr.json
Normal file
@ -0,0 +1,614 @@
|
|||||||
|
{
|
||||||
|
"levels": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"mode": "default",
|
||||||
|
"rows": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"a",
|
||||||
|
"à",
|
||||||
|
"â",
|
||||||
|
"%",
|
||||||
|
"æ",
|
||||||
|
"á",
|
||||||
|
"ä",
|
||||||
|
"ã",
|
||||||
|
"å",
|
||||||
|
"ā",
|
||||||
|
"ª"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"z"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"e",
|
||||||
|
"é",
|
||||||
|
"è",
|
||||||
|
"ê",
|
||||||
|
"ë",
|
||||||
|
"%",
|
||||||
|
"ę",
|
||||||
|
"ė",
|
||||||
|
"ē"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"r"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"t"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"y",
|
||||||
|
"%",
|
||||||
|
"ÿ"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"u",
|
||||||
|
"ù",
|
||||||
|
"û",
|
||||||
|
"%",
|
||||||
|
"ü",
|
||||||
|
"ú",
|
||||||
|
"ū"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"i",
|
||||||
|
"î",
|
||||||
|
"%",
|
||||||
|
"ï",
|
||||||
|
"ì",
|
||||||
|
"í",
|
||||||
|
"į",
|
||||||
|
"ī"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"o",
|
||||||
|
"ô",
|
||||||
|
"œ",
|
||||||
|
"%",
|
||||||
|
"ö",
|
||||||
|
"ò",
|
||||||
|
"ó",
|
||||||
|
"õ",
|
||||||
|
"ø",
|
||||||
|
"ō",
|
||||||
|
"º"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"p"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"q"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"s"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"d"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"f"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"g"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"h"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"j"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"k"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"l"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"m"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"w"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"x"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"c",
|
||||||
|
"ç",
|
||||||
|
"ć",
|
||||||
|
"č"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"b"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"n"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"'",
|
||||||
|
"‘",
|
||||||
|
"’",
|
||||||
|
"‹",
|
||||||
|
"›"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
","
|
||||||
|
],
|
||||||
|
[
|
||||||
|
" "
|
||||||
|
],
|
||||||
|
[
|
||||||
|
".",
|
||||||
|
"#",
|
||||||
|
"!",
|
||||||
|
",",
|
||||||
|
"?",
|
||||||
|
"-",
|
||||||
|
":",
|
||||||
|
"'",
|
||||||
|
"@"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"mode": "latched",
|
||||||
|
"rows": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"A",
|
||||||
|
"À",
|
||||||
|
"Â",
|
||||||
|
"%",
|
||||||
|
"Æ",
|
||||||
|
"Á",
|
||||||
|
"Ä",
|
||||||
|
"Ã",
|
||||||
|
"Å",
|
||||||
|
"Ā",
|
||||||
|
"ª"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Z"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"E",
|
||||||
|
"É",
|
||||||
|
"È",
|
||||||
|
"Ê",
|
||||||
|
"Ë",
|
||||||
|
"%",
|
||||||
|
"Ę",
|
||||||
|
"Ė",
|
||||||
|
"Ē"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"R"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"T"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Y",
|
||||||
|
"%",
|
||||||
|
"Ÿ"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"U",
|
||||||
|
"Ù",
|
||||||
|
"Û",
|
||||||
|
"%",
|
||||||
|
"Ü",
|
||||||
|
"Ú",
|
||||||
|
"Ū"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"I",
|
||||||
|
"Î",
|
||||||
|
"%",
|
||||||
|
"Ï",
|
||||||
|
"Ì",
|
||||||
|
"Í",
|
||||||
|
"Į",
|
||||||
|
"Ī"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"O",
|
||||||
|
"Ô",
|
||||||
|
"Œ",
|
||||||
|
"%",
|
||||||
|
"Ö",
|
||||||
|
"Ò",
|
||||||
|
"Ó",
|
||||||
|
"Õ",
|
||||||
|
"Ø",
|
||||||
|
"Ō",
|
||||||
|
"º"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"P"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"Q"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"S"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"D"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"F"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"G"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"H"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"J"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"K"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"L"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"M"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"W"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"X"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"C",
|
||||||
|
"Ç",
|
||||||
|
"Ć",
|
||||||
|
"Č"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"V"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"B"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"N"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"'",
|
||||||
|
"‘",
|
||||||
|
"’",
|
||||||
|
"‹",
|
||||||
|
"›"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
","
|
||||||
|
],
|
||||||
|
[
|
||||||
|
" "
|
||||||
|
],
|
||||||
|
[
|
||||||
|
".",
|
||||||
|
"#",
|
||||||
|
"!",
|
||||||
|
",",
|
||||||
|
"?",
|
||||||
|
"-",
|
||||||
|
":",
|
||||||
|
"'",
|
||||||
|
"@"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 3,
|
||||||
|
"mode": "locked",
|
||||||
|
"rows": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"1",
|
||||||
|
"¹",
|
||||||
|
"½",
|
||||||
|
"⅓",
|
||||||
|
"¼",
|
||||||
|
"⅛"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"2",
|
||||||
|
"²",
|
||||||
|
"⅔"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"3",
|
||||||
|
"³",
|
||||||
|
"¾",
|
||||||
|
"⅜"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"4",
|
||||||
|
"⁴"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"5",
|
||||||
|
"⅝"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"6"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"7",
|
||||||
|
"⅞"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"8"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"9"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"0",
|
||||||
|
"ⁿ",
|
||||||
|
"∅"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"@"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"#"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"€",
|
||||||
|
"¢",
|
||||||
|
"£",
|
||||||
|
"$",
|
||||||
|
"¥",
|
||||||
|
"₱"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"%",
|
||||||
|
"‰"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"&"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"-",
|
||||||
|
"_",
|
||||||
|
"–",
|
||||||
|
"—",
|
||||||
|
"·"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"+",
|
||||||
|
"±"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"(",
|
||||||
|
"<",
|
||||||
|
"{",
|
||||||
|
"["
|
||||||
|
],
|
||||||
|
[
|
||||||
|
")",
|
||||||
|
">",
|
||||||
|
"}",
|
||||||
|
"]"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"*",
|
||||||
|
"†",
|
||||||
|
"‡",
|
||||||
|
"★"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"\"",
|
||||||
|
"“",
|
||||||
|
"”",
|
||||||
|
"«",
|
||||||
|
"»"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"'",
|
||||||
|
"‘",
|
||||||
|
"’",
|
||||||
|
"‹",
|
||||||
|
"›"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
":"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
";"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"!",
|
||||||
|
"¡"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"?",
|
||||||
|
"¿"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"_"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"/"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
" "
|
||||||
|
],
|
||||||
|
[
|
||||||
|
","
|
||||||
|
],
|
||||||
|
[
|
||||||
|
".",
|
||||||
|
"…"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 4,
|
||||||
|
"mode": "locked",
|
||||||
|
"rows": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"~"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"`"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"|"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"•",
|
||||||
|
"♪",
|
||||||
|
"♥",
|
||||||
|
"♠",
|
||||||
|
"♦",
|
||||||
|
"♣"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"√"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Π",
|
||||||
|
"π"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"÷"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"×"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"¶",
|
||||||
|
"§"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"∆"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"£"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"¥"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"$",
|
||||||
|
"¢"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"¢"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"^",
|
||||||
|
"↑",
|
||||||
|
"↓",
|
||||||
|
"←",
|
||||||
|
"→"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"°",
|
||||||
|
"′",
|
||||||
|
"″"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"=",
|
||||||
|
"≠",
|
||||||
|
"≈",
|
||||||
|
"∞"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"{"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"}"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"\\"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"©"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"®"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"™"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"℅"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"["
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"]"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"<",
|
||||||
|
"‹",
|
||||||
|
"≤",
|
||||||
|
"«"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
">",
|
||||||
|
"›",
|
||||||
|
"≥",
|
||||||
|
"»"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
" "
|
||||||
|
],
|
||||||
|
[
|
||||||
|
","
|
||||||
|
],
|
||||||
|
[
|
||||||
|
".",
|
||||||
|
"…"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"locale": "fr",
|
||||||
|
"name": "French"
|
||||||
|
}
|
149
test/test_cldr2json.py
Executable file
149
test/test_cldr2json.py
Executable file
@ -0,0 +1,149 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import json
|
||||||
|
import tempfile
|
||||||
|
import unittest
|
||||||
|
import xml.etree.ElementTree
|
||||||
|
|
||||||
|
import cldr2json
|
||||||
|
|
||||||
|
|
||||||
|
class TestParseSingleKey(unittest.TestCase):
|
||||||
|
def test_ascii(self):
|
||||||
|
self.assertEqual(cldr2json.parse_single_key("a"), "a")
|
||||||
|
|
||||||
|
def test_nonascii(self):
|
||||||
|
self.assertEqual(cldr2json.parse_single_key("Æ"), "Æ")
|
||||||
|
|
||||||
|
def test_twochars(self):
|
||||||
|
self.assertEqual(cldr2json.parse_single_key("ԵՒ"), "ԵՒ")
|
||||||
|
|
||||||
|
def test_decode(self):
|
||||||
|
self.assertEqual(cldr2json.parse_single_key("\\u{200D}"), "\u200d")
|
||||||
|
|
||||||
|
def test_decode_threechars(self):
|
||||||
|
self.assertEqual(cldr2json.parse_single_key("ज\\u{94D}ञ"), "ज\u094Dञ")
|
||||||
|
|
||||||
|
|
||||||
|
class TestParseRow(unittest.TestCase):
|
||||||
|
def test_parse_row(self):
|
||||||
|
xml_string = """
|
||||||
|
<keyMap>
|
||||||
|
<map iso="D01" to="a" longPress="à â % æ á ä ã å ā ª"/> <!-- Q -->
|
||||||
|
<map iso="D02" to="z"/> <!-- W -->
|
||||||
|
<map iso="D03" to="e" longPress="é è ê ë % ę ė ē"/>
|
||||||
|
<map iso="D04" to="r"/>
|
||||||
|
<map iso="D05" to="t"/>
|
||||||
|
<map iso="D06" to="y" longPress="% ÿ"/>
|
||||||
|
<map iso="D07" to="u" longPress="ù û % ü ú ū"/>
|
||||||
|
<map iso="D08" to="i" longPress="î % ï ì í į ī"/>
|
||||||
|
<map iso="D09" to="o" longPress="ô œ % ö ò ó õ ø ō º"/>
|
||||||
|
<map iso="D10" to="p"/>
|
||||||
|
<map iso="C01" to="q"/> <!-- A -->
|
||||||
|
<map iso="C02" to="s"/>
|
||||||
|
<map iso="C03" to="d"/>
|
||||||
|
<map iso="C04" to="f"/>
|
||||||
|
<map iso="C05" to="g"/>
|
||||||
|
<map iso="C06" to="h"/>
|
||||||
|
<map iso="C07" to="j"/>
|
||||||
|
<map iso="C08" to="k"/>
|
||||||
|
<map iso="C09" to="l"/>
|
||||||
|
<map iso="C10" to="m"/> <!-- ; -->
|
||||||
|
<map iso="B01" to="w"/> <!-- Z -->
|
||||||
|
<map iso="B02" to="x"/>
|
||||||
|
<map iso="B03" to="c" longPress="ç ć č"/>
|
||||||
|
<map iso="B04" to="v"/>
|
||||||
|
<map iso="B05" to="b"/>
|
||||||
|
<map iso="B06" to="n"/>
|
||||||
|
<map iso="B07" to="'" longPress="‘ ’ ‹ ›"/> <!-- M -->
|
||||||
|
<map iso="A02" to=","/> <!-- (key to left of space) -->
|
||||||
|
<map iso="A03" to=" "/> <!-- space -->
|
||||||
|
<map iso="A04" to="." longPress="# ! , ? - : ' @"/> <!-- (key to right of space) -->
|
||||||
|
</keyMap>
|
||||||
|
"""
|
||||||
|
xml_tree = xml.etree.ElementTree.XML(xml_string)
|
||||||
|
json = [[
|
||||||
|
['a', 'à', 'â', '%', 'æ', 'á', 'ä', 'ã', 'å', 'ā', 'ª'],
|
||||||
|
['z'],
|
||||||
|
['e', 'é', 'è', 'ê', 'ë', '%', 'ę', 'ė', 'ē'],
|
||||||
|
['r'],
|
||||||
|
['t'],
|
||||||
|
['y', '%', 'ÿ'],
|
||||||
|
['u', 'ù', 'û', '%', 'ü', 'ú', 'ū'],
|
||||||
|
['i', 'î', '%', 'ï', 'ì', 'í', 'į', 'ī'],
|
||||||
|
['o', 'ô', 'œ', '%', 'ö', 'ò', 'ó', 'õ', 'ø', 'ō', 'º'],
|
||||||
|
['p']
|
||||||
|
], [
|
||||||
|
['q'],
|
||||||
|
['s'],
|
||||||
|
['d'],
|
||||||
|
['f'],
|
||||||
|
['g'],
|
||||||
|
['h'],
|
||||||
|
['j'],
|
||||||
|
['k'],
|
||||||
|
['l'],
|
||||||
|
['m']
|
||||||
|
], [
|
||||||
|
['w'],
|
||||||
|
['x'],
|
||||||
|
['c', 'ç', 'ć', 'č'],
|
||||||
|
['v'],
|
||||||
|
['b'],
|
||||||
|
['n'],
|
||||||
|
["'", '‘', '’', '‹', '›']
|
||||||
|
], [
|
||||||
|
[','],
|
||||||
|
[' '],
|
||||||
|
['.', '#', '!', ',', '?', '-', ':', "'", '@']
|
||||||
|
]]
|
||||||
|
self.assertEqual(cldr2json.parse_rows(xml_tree), json)
|
||||||
|
|
||||||
|
|
||||||
|
class TestConvertXml(unittest.TestCase):
|
||||||
|
# cldr2json.convert_xml(xml):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TestConvertFile(unittest.TestCase):
|
||||||
|
def test_fr(self):
|
||||||
|
outdir = tempfile.mkdtemp()
|
||||||
|
cldr2json.convert_file("test/data/fr-t-k0-android.xml", outdir)
|
||||||
|
with open("test/data/fr.json", encoding="utf-8") as expected_json_fd:
|
||||||
|
expected_json = json.load(expected_json_fd)
|
||||||
|
with open(outdir + "/fr.json", encoding="utf-8") as actual_json_fd:
|
||||||
|
actual_json = json.load(actual_json_fd)
|
||||||
|
self.assertEqual(expected_json, actual_json)
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TestLocaleToXKB(unittest.TestCase):
|
||||||
|
def test_simple(self):
|
||||||
|
self.assertEqual(cldr2json.locale_to_xkb("fr", "French"),
|
||||||
|
"fr")
|
||||||
|
|
||||||
|
def test_fallback(self):
|
||||||
|
self.assertEqual(cldr2json.locale_to_xkb("nb", "Norwegian Bokmål"),
|
||||||
|
"no")
|
||||||
|
|
||||||
|
def test_fallback2(self):
|
||||||
|
self.assertEqual(cldr2json.locale_to_xkb("km", "Khmer"),
|
||||||
|
"kh")
|
||||||
|
|
||||||
|
def test_override(self):
|
||||||
|
self.assertEqual(cldr2json.locale_to_xkb("en-GB",
|
||||||
|
"English Great Britain"),
|
||||||
|
"uk")
|
||||||
|
|
||||||
|
|
||||||
|
class LoadXKBMapplings(unittest.TestCase):
|
||||||
|
def test_dictionnary(self):
|
||||||
|
self.assertIsInstance(cldr2json.load_xkb_mappings(), dict)
|
||||||
|
|
||||||
|
def test_mapping(self):
|
||||||
|
mapping = cldr2json.load_xkb_mappings()
|
||||||
|
self.assertEqual(mapping["French"], "fr")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
Loading…
Reference in New Issue
Block a user