gnome-shell/data/cldr2json/test/test_cldr2json.py
Florian Müllner f8b4696211 data: Move cldr2json fork into subdirectory
The module was imported into the toplevel in !424, but that's at
least a bit weird:
 - it's a helper script for one particular aspect (OSK layouts)
 - it adds a README.mdwn to our own README.md, and a test/ directory
   to our tests/

Move the whole thing to a subdirectory under data/, which is more
appropriate.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1136
2020-03-27 16:44:27 +00:00

213 lines
7.0 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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="&apos;" 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):
def test_convert_xml(self):
xml_string = """<?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 -->
</keyMap>
<keyMap modifiers="shift caps">
<map iso="D01" to="A" longPress="À Â % Æ Á Ä Ã Å Ā ª"/> <!-- Q -->
</keyMap>
<keyMap modifiers="opt">
<map iso="D01" to="1" longPress="¹ ½ ⅓ ¼ ⅛"/> <!-- Q base=a -->
</keyMap>
<keyMap modifiers="opt+shift">
<map iso="D01" to="~"/> <!-- Q base=a -->
</keyMap>
</keyboard>
"""
xml_tree = xml.etree.ElementTree.XML(xml_string)
json = {
"locale": "fr",
"name": "French",
"levels": [
{
"level": "",
"mode": "default",
"rows": [
[
['a', 'à', 'â', '%', 'æ', 'á', 'ä', 'ã', 'å', 'ā', 'ª'],
]
]
},
{
"level": "shift",
"mode": "latched",
"rows": [
[
['A', 'À', 'Â', '%', 'Æ', 'Á', 'Ä', 'Ã', 'Å', 'Ā', 'ª'],
]
]
},
{
"level": "opt",
"mode": "locked",
"rows": [
[
["1", "¹", "½", "", "¼", ""],
]
]
},
{
"level": "opt+shift",
"mode": "locked",
"rows": [
[
["~"],
]
]
}
]
}
self.assertEqual(cldr2json.convert_xml(xml_tree), json)
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)
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()