Skip to content

Commit ac701dc

Browse files
committed
test(XKB): Add extra mapping test
1 parent 286dfb9 commit ac701dc

File tree

2 files changed

+50
-15
lines changed

2 files changed

+50
-15
lines changed

tests/test_serializer_xkb.py

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
from textwrap import dedent
2+
from typing import Dict
23

34
from kalamine import KeyboardLayout
45
from kalamine.generators.xkb import xkb_table
56

67
from .util import get_layout_dict
78

89

9-
def load_layout(filename: str) -> KeyboardLayout:
10-
return KeyboardLayout(get_layout_dict(filename))
10+
def load_layout(
11+
filename: str, extraMapping: Dict[str, Dict[str, str]]
12+
) -> KeyboardLayout:
13+
return KeyboardLayout(get_layout_dict(filename, extraMapping))
1114

1215

1316
def split(multiline_str: str):
1417
return dedent(multiline_str).lstrip().rstrip().splitlines()
1518

1619

1720
def test_ansi():
18-
layout = load_layout("ansi")
21+
layout = load_layout("ansi", {})
1922

2023
expected = split(
2124
"""
@@ -91,8 +94,6 @@ def test_ansi():
9194

9295

9396
def test_intl():
94-
layout = load_layout("intl")
95-
9697
expected = split(
9798
"""
9899
// Digits
@@ -158,17 +159,46 @@ def test_intl():
158159
"""
159160
)
160161

161-
xkbcomp = xkb_table(layout, xkbcomp=True)
162-
assert len(xkbcomp) == len(expected)
163-
assert xkbcomp == expected
162+
extraMapping = {
163+
# NOTE: redefine level
164+
"ae01": {"shift": "?"},
165+
# NOTE: test case variants and ODK alias
166+
"menu": {"base": "a", "sHiFt": "A", "1dk": "æ", "ODk_shiFt": "Æ"},
167+
# NOTE: clone level
168+
"esc": {"base": "(ae11)"},
169+
# NOTE: clone key
170+
"i172": "(lsgt)",
171+
}
172+
173+
extraSymbols = [
174+
"",
175+
"// System",
176+
"key <ESC> {[ minus , VoidSymbol , VoidSymbol , VoidSymbol ]}; // -",
177+
"key <MENU> {[ a , A , ae , AE ]}; // a A æ Æ",
178+
"",
179+
"// Miscellaneous",
180+
"key <I172> {[ backslash , bar , VoidSymbol , VoidSymbol ]}; // \\ |",
181+
]
182+
183+
extraExpected = expected + extraSymbols
184+
extraExpected[1] = (
185+
"key <AE01> {[ 1 , question , VoidSymbol , VoidSymbol ]}; // 1 ?"
186+
)
164187

165-
xkbpatch = xkb_table(layout, xkbcomp=False)
166-
assert len(xkbpatch) == len(expected)
167-
assert xkbpatch == expected
188+
for mapping, expectedʹ in (({}, expected), (extraMapping, extraExpected)):
189+
layout = load_layout("intl", mapping)
190+
191+
xkbcomp = xkb_table(layout, xkbcomp=True)
192+
assert len(xkbcomp) == len(expectedʹ)
193+
assert xkbcomp == expectedʹ
194+
195+
xkbpatch = xkb_table(layout, xkbcomp=False)
196+
assert len(xkbpatch) == len(expectedʹ)
197+
assert xkbpatch == expectedʹ
168198

169199

170200
def test_prog():
171-
layout = load_layout("prog")
201+
layout = load_layout("prog", {})
172202

173203
expected = split(
174204
"""

tests/util.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
"""Some util functions for tests."""
22

33
from pathlib import Path
4-
from typing import Dict
4+
from typing import Dict, Optional
55

66
import tomli
77

88

9-
def get_layout_dict(filename: str) -> Dict:
9+
def get_layout_dict(
10+
filename: str, extraMapping: Optional[Dict[str, Dict[str, str]]] = None
11+
) -> Dict:
1012
"""Return the layout directory path."""
1113

1214
file_path = Path(__file__).parent.parent / f"layouts/{filename}.toml"
1315
with file_path.open(mode="rb") as file:
14-
return tomli.load(file)
16+
layout = tomli.load(file)
17+
if extraMapping:
18+
layout.update({"mapping": extraMapping})
19+
return layout

0 commit comments

Comments
 (0)