Speed up unit tests
This commit is contained in:
		| @@ -23,6 +23,8 @@ def code2name(code): | |||||||
|  |  | ||||||
|  |  | ||||||
| class KeyboardTest: | class KeyboardTest: | ||||||
|  |     loop_delay_ms = 2 | ||||||
|  |  | ||||||
|     def __init__( |     def __init__( | ||||||
|         self, |         self, | ||||||
|         modules, |         modules, | ||||||
| @@ -128,4 +130,4 @@ class KeyboardTest: | |||||||
|  |  | ||||||
|     def do_main_loop(self): |     def do_main_loop(self): | ||||||
|         self.keyboard._main_loop() |         self.keyboard._main_loop() | ||||||
|         time.sleep(0.002) |         time.sleep(self.loop_delay_ms / 1000) | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ from tests.keyboard_test import KeyboardTest | |||||||
| class TestCapsWord(unittest.TestCase): | class TestCapsWord(unittest.TestCase): | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         self.kb = KeyboardTest( |         self.kb = KeyboardTest( | ||||||
|             [CapsWord()], |             [CapsWord(timeout=2 * KeyboardTest.loop_delay_ms)], | ||||||
|             [ |             [ | ||||||
|                 [KC.CW, KC.A, KC.Z, KC.N1, KC.N0, KC.SPC], |                 [KC.CW, KC.A, KC.Z, KC.N1, KC.N0, KC.SPC], | ||||||
|             ], |             ], | ||||||
|   | |||||||
| @@ -1,28 +1,36 @@ | |||||||
| import unittest | import unittest | ||||||
|  |  | ||||||
| from kmk.keys import KC | from kmk.keys import KC | ||||||
| from kmk.modules.combos import Chord, Combos, Sequence | from kmk.modules.combos import Chord, Combo, Combos, Sequence | ||||||
| from kmk.modules.layers import Layers | from kmk.modules.layers import Layers | ||||||
| from tests.keyboard_test import KeyboardTest | from tests.keyboard_test import KeyboardTest | ||||||
|  |  | ||||||
|  |  | ||||||
| class TestCombo(unittest.TestCase): | class TestCombo(unittest.TestCase): | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|  |         self.t_within = 2 * KeyboardTest.loop_delay_ms | ||||||
|  |         self.t_after = 7 * KeyboardTest.loop_delay_ms | ||||||
|  |         timeout = (self.t_after + self.t_within) // 2 | ||||||
|  |  | ||||||
|  |         # overide default timeouts | ||||||
|  |         Combo.timeout = timeout | ||||||
|  |         Sequence.timeout = timeout | ||||||
|  |  | ||||||
|         combos = Combos() |         combos = Combos() | ||||||
|         layers = Layers() |         layers = Layers() | ||||||
|         KCMO = KC.MO(1) |         KCMO = KC.MO(1) | ||||||
|         combos.combos = [ |         combos.combos = [ | ||||||
|             Chord((KC.A, KC.B, KC.C), KC.Y), |             Chord((KC.A, KC.B, KC.C), KC.Y), | ||||||
|             Chord((KC.A, KC.B), KC.X), |             Chord((KC.A, KC.B), KC.X), | ||||||
|             Chord((KC.C, KC.D), KC.Z, timeout=80), |             Chord((KC.C, KC.D), KC.Z, timeout=2 * timeout), | ||||||
|             Chord((KC.C, KCMO), KC.Z), |             Chord((KC.C, KCMO), KC.Z), | ||||||
|             Chord((KC.F, KC.G), KC.Z, timeout=130), |             Chord((KC.F, KC.G), KC.Z, timeout=3 * timeout), | ||||||
|             Sequence((KC.N1, KC.N2, KC.N3), KC.Y, timeout=50), |             Sequence((KC.N1, KC.N2, KC.N3), KC.Y), | ||||||
|             Sequence((KC.N1, KC.N2), KC.X, timeout=50), |             Sequence((KC.N1, KC.N2), KC.X), | ||||||
|             Sequence((KC.N3, KC.N4), KC.Z, timeout=100), |             Sequence((KC.N3, KC.N4), KC.Z, timeout=2 * timeout), | ||||||
|             Sequence((KC.N1, KC.N1, KC.N1), KC.W, timeout=50), |             Sequence((KC.N1, KC.N1, KC.N1), KC.W), | ||||||
|             Sequence((KC.N3, KC.N2, KC.N1), KC.Y, timeout=50, fast_reset=False), |             Sequence((KC.N3, KC.N2, KC.N1), KC.Y, fast_reset=False), | ||||||
|             Sequence((KC.LEADER, KC.N1), KC.V, timeout=50), |             Sequence((KC.LEADER, KC.N1), KC.V), | ||||||
|         ] |         ] | ||||||
|         self.keyboard = KeyboardTest( |         self.keyboard = KeyboardTest( | ||||||
|             [combos, layers], |             [combos, layers], | ||||||
| @@ -33,9 +41,6 @@ class TestCombo(unittest.TestCase): | |||||||
|             debug_enabled=False, |             debug_enabled=False, | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|         self.t_within = 40 |  | ||||||
|         self.t_after = 60 |  | ||||||
|  |  | ||||||
|     def test_chord(self): |     def test_chord(self): | ||||||
|         keyboard = self.keyboard |         keyboard = self.keyboard | ||||||
|         t_within = self.t_within |         t_within = self.t_within | ||||||
|   | |||||||
| @@ -10,20 +10,37 @@ class TestHoldTap(unittest.TestCase): | |||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         KC.clear() |         KC.clear() | ||||||
| 
 | 
 | ||||||
|  |         self.t_within = 2 * KeyboardTest.loop_delay_ms | ||||||
|  |         self.t_after = 5 * KeyboardTest.loop_delay_ms | ||||||
|  |         tap_time = (self.t_after + self.t_within) // 2 | ||||||
|  | 
 | ||||||
|  |         # overide default timeouts | ||||||
|  |         HoldTap.tap_time = tap_time | ||||||
|  | 
 | ||||||
|     def test_holdtap(self): |     def test_holdtap(self): | ||||||
|  |         t_within = self.t_within | ||||||
|  |         t_after = self.t_after | ||||||
|  | 
 | ||||||
|         keyboard = KeyboardTest( |         keyboard = KeyboardTest( | ||||||
|             [Layers(), HoldTap()], |             [Layers(), HoldTap()], | ||||||
|             [ |             [ | ||||||
|                 [KC.HT(KC.A, KC.LCTL), KC.LT(1, KC.B), KC.C, KC.D], |                 [ | ||||||
|  |                     KC.HT(KC.A, KC.LCTL), | ||||||
|  |                     KC.LT(1, KC.B), | ||||||
|  |                     KC.C, | ||||||
|  |                     KC.D, | ||||||
|  |                 ], | ||||||
|                 [KC.N1, KC.N2, KC.N3, KC.N4], |                 [KC.N1, KC.N2, KC.N3, KC.N4], | ||||||
|             ], |             ], | ||||||
|             debug_enabled=False, |             debug_enabled=False, | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test('HT tap behaviour', [(0, True), 100, (0, False)], [{KC.A}, {}]) |         keyboard.test( | ||||||
|  |             'HT tap behaviour', [(0, True), t_within, (0, False)], [{KC.A}, {}] | ||||||
|  |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'HT hold behaviour', [(0, True), 350, (0, False)], [{KC.LCTL}, {}] |             'HT hold behaviour', [(0, True), t_after, (0, False)], [{KC.LCTL}, {}] | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         # TODO test multiple mods being held |         # TODO test multiple mods being held | ||||||
| @@ -31,74 +48,74 @@ class TestHoldTap(unittest.TestCase): | |||||||
|         # HT |         # HT | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'HT within tap time sequential -> tap behavior', |             'HT within tap time sequential -> tap behavior', | ||||||
|             [(0, True), 100, (0, False), (3, True), (3, False)], |             [(0, True), t_within, (0, False), (3, True), (3, False)], | ||||||
|             [{KC.A}, {}, {KC.D}, {}], |             [{KC.A}, {}, {KC.D}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'HT within tap time rolling -> hold behavior', |             'HT within tap time rolling -> hold behavior', | ||||||
|             [(0, True), 100, (3, True), 250, (0, False), (3, False)], |             [(0, True), t_within, (3, True), t_after, (0, False), (3, False)], | ||||||
|             [{KC.LCTL}, {KC.LCTL, KC.D}, {KC.D}, {}], |             [{KC.LCTL}, {KC.LCTL, KC.D}, {KC.D}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'HT within tap time nested -> hold behavior', |             'HT within tap time nested -> hold behavior', | ||||||
|             [(0, True), 100, (3, True), (3, False), 250, (0, False)], |             [(0, True), t_within, (3, True), (3, False), t_after, (0, False)], | ||||||
|             [{KC.LCTL}, {KC.LCTL, KC.D}, {KC.LCTL}, {}], |             [{KC.LCTL}, {KC.LCTL, KC.D}, {KC.LCTL}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'HT after tap time sequential -> hold behavior', |             'HT after tap time sequential -> hold behavior', | ||||||
|             [(0, True), 350, (0, False), (3, True), (3, False)], |             [(0, True), t_after, (0, False), (3, True), (3, False)], | ||||||
|             [{KC.LCTL}, {}, {KC.D}, {}], |             [{KC.LCTL}, {}, {KC.D}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'HT after tap time rolling -> hold behavior', |             'HT after tap time rolling -> hold behavior', | ||||||
|             [(0, True), 350, (3, True), (0, False), (3, False)], |             [(0, True), t_after, (3, True), (0, False), (3, False)], | ||||||
|             [{KC.LCTL}, {KC.LCTL, KC.D}, {KC.D}, {}], |             [{KC.LCTL}, {KC.LCTL, KC.D}, {KC.D}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'HT after tap time nested -> hold behavior', |             'HT after tap time nested -> hold behavior', | ||||||
|             [(0, True), 350, (3, True), (3, False), (0, False)], |             [(0, True), t_after, (3, True), (3, False), (0, False)], | ||||||
|             [{KC.LCTL}, {KC.LCTL, KC.D}, {KC.LCTL}, {}], |             [{KC.LCTL}, {KC.LCTL, KC.D}, {KC.LCTL}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         # LT |         # LT | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'LT within tap time sequential -> tap behavior', |             'LT within tap time sequential -> tap behavior', | ||||||
|             [(1, True), 100, (1, False), (3, True), (3, False)], |             [(1, True), t_within, (1, False), (3, True), (3, False)], | ||||||
|             [{KC.B}, {}, {KC.D}, {}], |             [{KC.B}, {}, {KC.D}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'LT within tap time rolling -> tap behavior', |             'LT within tap time rolling -> tap behavior', | ||||||
|             [(1, True), 100, (3, True), 250, (1, False), (3, False)], |             [(1, True), t_within, (3, True), t_after, (1, False), (3, False)], | ||||||
|             [{KC.B}, {KC.B, KC.D}, {KC.D}, {}], |             [{KC.B}, {KC.B, KC.D}, {KC.D}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'LT within tap time nested -> tap behavior', |             'LT within tap time nested -> tap behavior', | ||||||
|             [(1, True), 100, (3, True), (3, False), 250, (1, False)], |             [(1, True), t_within, (3, True), (3, False), t_after, (1, False)], | ||||||
|             [{KC.B}, {KC.B, KC.D}, {KC.B}, {}], |             [{KC.B}, {KC.B, KC.D}, {KC.B}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'LT after tap time sequential -> hold behavior', |             'LT after tap time sequential -> hold behavior', | ||||||
|             [(1, True), 350, (1, False), (3, True), (3, False)], |             [(1, True), t_after, (1, False), (3, True), (3, False)], | ||||||
|             [{KC.D}, {}], |             [{KC.D}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'LT after tap time rolling -> hold behavior', |             'LT after tap time rolling -> hold behavior', | ||||||
|             [(1, True), 350, (3, True), (1, False), (3, False)], |             [(1, True), t_after, (3, True), (1, False), (3, False)], | ||||||
|             [{KC.N4}, {}], |             [{KC.N4}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'LT after tap time nested -> hold behavior', |             'LT after tap time nested -> hold behavior', | ||||||
|             [(1, True), 350, (3, True), (3, False), (1, False)], |             [(1, True), t_after, (3, True), (3, False), (1, False)], | ||||||
|             [{KC.N4}, {}], |             [{KC.N4}, {}], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
| @@ -106,9 +123,9 @@ class TestHoldTap(unittest.TestCase): | |||||||
|             'LT after tap time nested -> hold behavior', |             'LT after tap time nested -> hold behavior', | ||||||
|             [ |             [ | ||||||
|                 (0, True), |                 (0, True), | ||||||
|                 350, |                 t_after, | ||||||
|                 (1, True), |                 (1, True), | ||||||
|                 350, |                 t_after, | ||||||
|                 (3, True), |                 (3, True), | ||||||
|                 (3, False), |                 (3, False), | ||||||
|                 (1, False), |                 (1, False), | ||||||
| @@ -118,26 +135,25 @@ class TestHoldTap(unittest.TestCase): | |||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|     def test_holdtap_chain(self): |     def test_holdtap_chain(self): | ||||||
|  |         t_after = self.t_after | ||||||
|  | 
 | ||||||
|         keyboard = KeyboardTest( |         keyboard = KeyboardTest( | ||||||
|             [HoldTap()], |             [HoldTap()], | ||||||
|             [ |             [ | ||||||
|                 [ |                 [ | ||||||
|                     KC.N0, |                     KC.N0, | ||||||
|                     KC.HT(KC.N1, KC.LCTL, tap_time=50), |                     KC.HT(KC.N1, KC.LCTL), | ||||||
|                     KC.HT(KC.N2, KC.LSFT, tap_interrupted=True, tap_time=50), |                     KC.HT(KC.N2, KC.LSFT, tap_interrupted=True), | ||||||
|                     KC.HT( |                     KC.HT( | ||||||
|                         KC.N3, |                         KC.N3, | ||||||
|                         KC.LALT, |                         KC.LALT, | ||||||
|                         prefer_hold=False, |                         prefer_hold=False, | ||||||
|                         tap_interrupted=True, |                         tap_interrupted=True, | ||||||
|                         tap_time=50, |  | ||||||
|                     ), |                     ), | ||||||
|                 ], |                 ], | ||||||
|             ], |             ], | ||||||
|             debug_enabled=False, |             debug_enabled=False, | ||||||
|         ) |         ) | ||||||
|         # t_within = 40 |  | ||||||
|         t_after = 60 |  | ||||||
| 
 | 
 | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'chained 0', |             'chained 0', | ||||||
| @@ -275,21 +291,21 @@ class TestHoldTap(unittest.TestCase): | |||||||
|         # TODO test TT |         # TODO test TT | ||||||
| 
 | 
 | ||||||
|     def test_holdtap_repeat(self): |     def test_holdtap_repeat(self): | ||||||
|  |         t_within = self.t_within | ||||||
|  |         t_after = self.t_after | ||||||
|  | 
 | ||||||
|         keyboard = KeyboardTest( |         keyboard = KeyboardTest( | ||||||
|             [HoldTap()], |             [HoldTap()], | ||||||
|             [ |             [ | ||||||
|                 [ |                 [ | ||||||
|                     KC.HT(KC.A, KC.B, repeat=HoldTapRepeat.ALL, tap_time=50), |                     KC.HT(KC.A, KC.B, repeat=HoldTapRepeat.ALL), | ||||||
|                     KC.HT(KC.A, KC.B, repeat=HoldTapRepeat.TAP, tap_time=50), |                     KC.HT(KC.A, KC.B, repeat=HoldTapRepeat.TAP), | ||||||
|                     KC.HT(KC.A, KC.B, repeat=HoldTapRepeat.HOLD, tap_time=50), |                     KC.HT(KC.A, KC.B, repeat=HoldTapRepeat.HOLD), | ||||||
|                 ] |                 ] | ||||||
|             ], |             ], | ||||||
|             debug_enabled=False, |             debug_enabled=False, | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         t_within = 40 |  | ||||||
|         t_after = 60 |  | ||||||
| 
 |  | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'repeat tap', |             'repeat tap', | ||||||
|             [ |             [ | ||||||
| @@ -6,25 +6,30 @@ from kmk.modules.oneshot import OneShot | |||||||
| from tests.keyboard_test import KeyboardTest | from tests.keyboard_test import KeyboardTest | ||||||
|  |  | ||||||
|  |  | ||||||
| class TestHoldTap(unittest.TestCase): | class TestOneshot(unittest.TestCase): | ||||||
|     def test_oneshot(self): |     def test_oneshot(self): | ||||||
|  |         t_within = 2 * KeyboardTest.loop_delay_ms | ||||||
|  |         t_after = 7 * KeyboardTest.loop_delay_ms | ||||||
|  |         timeout = (t_after + t_within) // 2 | ||||||
|  |  | ||||||
|  |         # overide default timeouts | ||||||
|  |         OneShot.tap_time = timeout | ||||||
|  |  | ||||||
|         keyboard = KeyboardTest( |         keyboard = KeyboardTest( | ||||||
|             [Layers(), OneShot()], |             [Layers(), OneShot()], | ||||||
|             [ |             [ | ||||||
|                 [ |                 [ | ||||||
|                     KC.OS(KC.MO(1), tap_time=50), |                     KC.OS(KC.MO(1)), | ||||||
|                     KC.MO(1), |                     KC.MO(1), | ||||||
|                     KC.C, |                     KC.C, | ||||||
|                     KC.D, |                     KC.D, | ||||||
|                     KC.OS(KC.E, tap_time=50), |                     KC.OS(KC.E), | ||||||
|                     KC.OS(KC.F, tap_time=50), |                     KC.OS(KC.F), | ||||||
|                 ], |                 ], | ||||||
|                 [KC.N0, KC.N1, KC.N2, KC.N3, KC.OS(KC.LSFT, tap_time=50), KC.TRNS], |                 [KC.N0, KC.N1, KC.N2, KC.N3, KC.OS(KC.LSFT), KC.TRNS], | ||||||
|             ], |             ], | ||||||
|             debug_enabled=False, |             debug_enabled=False, | ||||||
|         ) |         ) | ||||||
|         t_within = 40 |  | ||||||
|         t_after = 60 |  | ||||||
|  |  | ||||||
|         keyboard.test( |         keyboard.test( | ||||||
|             'OS timed out', |             'OS timed out', | ||||||
|   | |||||||
| @@ -37,11 +37,8 @@ class TestStickyMod(unittest.TestCase): | |||||||
|             [ |             [ | ||||||
|                 (4, True), |                 (4, True), | ||||||
|                 (4, False), |                 (4, False), | ||||||
|                 100, |  | ||||||
|                 (4, True), |                 (4, True), | ||||||
|                 200, |  | ||||||
|                 (4, False), |                 (4, False), | ||||||
|                 100, |  | ||||||
|                 (1, True), |                 (1, True), | ||||||
|                 (1, False), |                 (1, False), | ||||||
|             ], |             ], | ||||||
| @@ -61,26 +58,19 @@ class TestStickyMod(unittest.TestCase): | |||||||
|                 (1, True), |                 (1, True), | ||||||
|                 (1, False), |                 (1, False), | ||||||
|                 (2, True), |                 (2, True), | ||||||
|                 200, |  | ||||||
|                 (0, True), |                 (0, True), | ||||||
|                 50, |  | ||||||
|                 (0, False), |                 (0, False), | ||||||
|                 50, |  | ||||||
|                 (0, True), |                 (0, True), | ||||||
|                 50, |  | ||||||
|                 (0, False), |                 (0, False), | ||||||
|                 (1, True), |                 (1, True), | ||||||
|                 (1, False), |                 (1, False), | ||||||
|                 50, |  | ||||||
|                 (1, True), |                 (1, True), | ||||||
|                 (1, False), |                 (1, False), | ||||||
|                 (0, True), |                 (0, True), | ||||||
|                 50, |  | ||||||
|                 (0, False), |                 (0, False), | ||||||
|                 (3, True), |                 (3, True), | ||||||
|                 (3, False), |                 (3, False), | ||||||
|                 (2, False), |                 (2, False), | ||||||
|                 100, |  | ||||||
|                 (4, True), |                 (4, True), | ||||||
|                 (4, False), |                 (4, False), | ||||||
|                 (1, True), |                 (1, True), | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ from tests.keyboard_test import KeyboardTest | |||||||
|  |  | ||||||
| class TestStringSubstitution(unittest.TestCase): | class TestStringSubstitution(unittest.TestCase): | ||||||
|     def setUp(self) -> None: |     def setUp(self) -> None: | ||||||
|  |         self.delay = KeyboardTest.loop_delay_ms | ||||||
|         self.symbols = '`-=[]\\;\',./~!@#$%^&*()_+{}|:\"<>?' |         self.symbols = '`-=[]\\;\',./~!@#$%^&*()_+{}|:\"<>?' | ||||||
|         self.everything = ALL_NUMBERS + ALL_ALPHAS + ALL_ALPHAS.lower() + self.symbols |         self.everything = ALL_NUMBERS + ALL_ALPHAS + ALL_ALPHAS.lower() + self.symbols | ||||||
|         self.test_dictionary = { |         self.test_dictionary = { | ||||||
| @@ -46,21 +47,21 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|         # that results in a corresponding match, as that key is never sent |         # that results in a corresponding match, as that key is never sent | ||||||
|         self.keyboard.test( |         self.keyboard.test( | ||||||
|             'multi-character key, single-character value', |             'multi-character key, single-character value', | ||||||
|             [(0, True), (0, False), (0, True), (0, False), 50], |             [(0, True), (0, False), (0, True), (0, False), self.delay], | ||||||
|             [{KC.A}, {}, {KC.BACKSPACE}, {}, {KC.B}, {}], |             [{KC.A}, {}, {KC.BACKSPACE}, {}, {KC.B}, {}], | ||||||
|         ) |         ) | ||||||
|         # note: the pressed key is never sent here, as the event is |         # note: the pressed key is never sent here, as the event is | ||||||
|         # intercepted and the replacement is sent instead |         # intercepted and the replacement is sent instead | ||||||
|         self.keyboard.test( |         self.keyboard.test( | ||||||
|             'multi-character value, single-character key', |             'multi-character value, single-character key', | ||||||
|             [(1, True), (1, False), 50], |             [(1, True), (1, False), self.delay], | ||||||
|             [{KC.A}, {}, {KC.A}, {}], |             [{KC.A}, {}, {KC.A}, {}], | ||||||
|         ) |         ) | ||||||
|         # modifiers are force-released if there's a match, |         # modifiers are force-released if there's a match, | ||||||
|         # so the keyup event for them isn't sent |         # so the keyup event for them isn't sent | ||||||
|         self.keyboard.test( |         self.keyboard.test( | ||||||
|             'shifted alphanumeric or symbol in key and/or value', |             'shifted alphanumeric or symbol in key and/or value', | ||||||
|             [(3, True), (2, True), (2, False), (3, False), 50], |             [(3, True), (2, True), (2, False), (3, False), self.delay], | ||||||
|             [{KC.LSHIFT}, {KC.LSHIFT, KC.N2}, {}], |             [{KC.LSHIFT}, {KC.LSHIFT, KC.N2}, {}], | ||||||
|         ) |         ) | ||||||
|         self.keyboard.test( |         self.keyboard.test( | ||||||
| @@ -74,7 +75,7 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|                 (5, False), |                 (5, False), | ||||||
|                 (5, True), |                 (5, True), | ||||||
|                 (5, False), |                 (5, False), | ||||||
|                 10, |                 self.delay, | ||||||
|             ], |             ], | ||||||
|             [ |             [ | ||||||
|                 {KC.D}, |                 {KC.D}, | ||||||
| @@ -93,7 +94,7 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|         ) |         ) | ||||||
|         self.keyboard.test( |         self.keyboard.test( | ||||||
|             'the presence of non-shift modifiers prevents a multi-character match', |             'the presence of non-shift modifiers prevents a multi-character match', | ||||||
|             [(4, True), (0, True), (0, False), (0, True), (0, False), (4, False), 50], |             [(4, True), (0, True), (0, False), (0, True), (0, False), (4, False)], | ||||||
|             [ |             [ | ||||||
|                 {KC.LCTRL}, |                 {KC.LCTRL}, | ||||||
|                 {KC.LCTRL, KC.A}, |                 {KC.LCTRL, KC.A}, | ||||||
| @@ -105,7 +106,7 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|         ) |         ) | ||||||
|         self.keyboard.test( |         self.keyboard.test( | ||||||
|             'the presence of non-shift modifiers prevents a single-character match', |             'the presence of non-shift modifiers prevents a single-character match', | ||||||
|             [(4, True), (1, True), (1, False), (4, False), 50], |             [(4, True), (1, True), (1, False), (4, False)], | ||||||
|             [ |             [ | ||||||
|                 {KC.LCTRL}, |                 {KC.LCTRL}, | ||||||
|                 {KC.LCTRL, KC.B}, |                 {KC.LCTRL, KC.B}, | ||||||
| @@ -115,7 +116,7 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|         ) |         ) | ||||||
|         self.keyboard.test( |         self.keyboard.test( | ||||||
|             'the presence of non-shift modifiers resets current potential matches', |             'the presence of non-shift modifiers resets current potential matches', | ||||||
|             [(0, True), (0, False), (4, True), (0, True), (0, False), (4, False), 50], |             [(0, True), (0, False), (4, True), (0, True), (0, False), (4, False)], | ||||||
|             [ |             [ | ||||||
|                 {KC.A}, |                 {KC.A}, | ||||||
|                 {}, |                 {}, | ||||||
| @@ -128,7 +129,15 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|  |  | ||||||
|         self.keyboard.test( |         self.keyboard.test( | ||||||
|             'match found and replaced when there are preceding characters', |             'match found and replaced when there are preceding characters', | ||||||
|             [(5, True), (5, False), (0, True), (0, False), (0, True), (0, False), 50], |             [ | ||||||
|  |                 (5, True), | ||||||
|  |                 (5, False), | ||||||
|  |                 (0, True), | ||||||
|  |                 (0, False), | ||||||
|  |                 (0, True), | ||||||
|  |                 (0, False), | ||||||
|  |                 self.delay, | ||||||
|  |             ], | ||||||
|             [ |             [ | ||||||
|                 {KC.C}, |                 {KC.C}, | ||||||
|                 {}, |                 {}, | ||||||
| @@ -142,7 +151,15 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|         ) |         ) | ||||||
|         self.keyboard.test( |         self.keyboard.test( | ||||||
|             'match found and replaced when there are trailing characters, and the trailing characters are sent', |             'match found and replaced when there are trailing characters, and the trailing characters are sent', | ||||||
|             [(0, True), (0, False), (0, True), (0, False), (5, True), (5, False), 50], |             [ | ||||||
|  |                 (0, True), | ||||||
|  |                 (0, False), | ||||||
|  |                 (0, True), | ||||||
|  |                 (0, False), | ||||||
|  |                 (5, True), | ||||||
|  |                 (5, False), | ||||||
|  |                 self.delay, | ||||||
|  |             ], | ||||||
|             [ |             [ | ||||||
|                 {KC.A}, |                 {KC.A}, | ||||||
|                 {}, |                 {}, | ||||||
| @@ -156,7 +173,7 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|         ) |         ) | ||||||
|         self.keyboard.test( |         self.keyboard.test( | ||||||
|             'no match', |             'no match', | ||||||
|             [(0, True), (0, False), (2, True), (2, False), 50], |             [(0, True), (0, False), (2, True), (2, False)], | ||||||
|             [ |             [ | ||||||
|                 {KC.A}, |                 {KC.A}, | ||||||
|                 {}, |                 {}, | ||||||
| @@ -183,7 +200,7 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|                 (6, False), |                 (6, False), | ||||||
|                 (0, True), |                 (0, True), | ||||||
|                 (0, False), |                 (0, False), | ||||||
|                 50, |                 10 * self.delay, | ||||||
|             ], |             ], | ||||||
|             [ |             [ | ||||||
|                 {KC.D}, |                 {KC.D}, | ||||||
| @@ -241,7 +258,7 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|                 # send the unreachable match "cccc" after matching "ccc" |                 # send the unreachable match "cccc" after matching "ccc" | ||||||
|                 (5, True), |                 (5, True), | ||||||
|                 (5, False), |                 (5, False), | ||||||
|                 10, |                 self.delay, | ||||||
|             ], |             ], | ||||||
|             [ |             [ | ||||||
|                 {KC.C}, |                 {KC.C}, | ||||||
| @@ -272,7 +289,7 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|                 (0, True), |                 (0, True), | ||||||
|                 (0, False), |                 (0, False), | ||||||
|                 (7, False), |                 (7, False), | ||||||
|                 10, |                 self.delay, | ||||||
|             ], |             ], | ||||||
|             [ |             [ | ||||||
|                 {KC.RSHIFT}, |                 {KC.RSHIFT}, | ||||||
| @@ -303,7 +320,6 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|                 (0, False), |                 (0, False), | ||||||
|                 (4, False), |                 (4, False), | ||||||
|                 (8, False), |                 (8, False), | ||||||
|                 10, |  | ||||||
|             ], |             ], | ||||||
|             [ |             [ | ||||||
|                 {KC.RALT}, |                 {KC.RALT}, | ||||||
| @@ -325,7 +341,6 @@ class TestStringSubstitution(unittest.TestCase): | |||||||
|                 (1, False), |                 (1, False), | ||||||
|                 (3, False), |                 (3, False), | ||||||
|                 (8, False), |                 (8, False), | ||||||
|                 10, |  | ||||||
|             ], |             ], | ||||||
|             [ |             [ | ||||||
|                 {KC.RALT}, |                 {KC.RALT}, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user