macro: add unit tests for serialize/deserialize
parent
cd5383135a
commit
f645c6163f
|
|
@ -24,6 +24,9 @@ class BasicAction:
|
|||
self, self.tag, act[0]
|
||||
))
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.tag == other.tag
|
||||
|
||||
|
||||
class ActionText(BasicAction):
|
||||
|
||||
|
|
@ -43,6 +46,9 @@ class ActionText(BasicAction):
|
|||
super().restore(act)
|
||||
self.text = act[1]
|
||||
|
||||
def __eq__(self, other):
|
||||
return super().__eq__(other) and self.text == other.text
|
||||
|
||||
|
||||
class ActionSequence(BasicAction):
|
||||
|
||||
|
|
@ -77,6 +83,9 @@ class ActionSequence(BasicAction):
|
|||
for qmk_id in act[1:]:
|
||||
self.sequence.append(Keycode.find_by_qmk_id(qmk_id))
|
||||
|
||||
def __eq__(self, other):
|
||||
return super().__eq__(other) and self.sequence == other.sequence
|
||||
|
||||
|
||||
class ActionDown(ActionSequence):
|
||||
|
||||
|
|
@ -122,3 +131,6 @@ class ActionDelay(BasicAction):
|
|||
def restore(self, act):
|
||||
super().restore(act)
|
||||
self.delay = act[1]
|
||||
|
||||
def __eq__(self, other):
|
||||
return super().__eq__(other) and self.delay == other.delay
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
import unittest
|
||||
|
||||
from keyboard_comm import DummyKeyboard
|
||||
from keycodes import Keycode
|
||||
from macro_action import ActionTap, ActionDown, ActionText, ActionDelay
|
||||
from macro_key import KeyDown, KeyTap, KeyUp, KeyString
|
||||
from macro_optimizer import remove_repeats, replace_with_tap, replace_with_string
|
||||
|
||||
|
|
@ -27,3 +29,57 @@ class TestMacro(unittest.TestCase):
|
|||
|
||||
def test_replace_string(self):
|
||||
self.assertEqual(replace_with_string([KeyTap(KC_A), KeyTap(KC_B)]), [KeyString("ab")])
|
||||
|
||||
def test_serialize_v1(self):
|
||||
kb = DummyKeyboard(None)
|
||||
kb.vial_protocol = 1
|
||||
data = kb.macro_serialize([ActionText("Hello"), ActionTap([KC_A, KC_B, KC_C]), ActionText("World"),
|
||||
ActionDown([KC_C, KC_B, KC_A])])
|
||||
self.assertEqual(data, b"Hello\x01\x04\x01\x05\x01\x06World\x02\x06\x02\x05\x02\x04")
|
||||
|
||||
def test_deserialize_v1(self):
|
||||
kb = DummyKeyboard(None)
|
||||
kb.vial_protocol = 1
|
||||
macro = kb.macro_deserialize(b"Hello\x01\x04\x01\x05\x01\x06World\x02\x06\x02\x05\x02\x04")
|
||||
self.assertEqual(macro, [ActionText("Hello"), ActionTap([KC_A, KC_B, KC_C]), ActionText("World"),
|
||||
ActionDown([KC_C, KC_B, KC_A])])
|
||||
|
||||
def test_serialize_v2(self):
|
||||
kb = DummyKeyboard(None)
|
||||
kb.vial_protocol = 2
|
||||
data = kb.macro_serialize([ActionText("Hello"), ActionTap([KC_A, KC_B, KC_C]), ActionText("World"),
|
||||
ActionDown([KC_C, KC_B, KC_A]), ActionDelay(1000)])
|
||||
self.assertEqual(data, b"Hello\x01\x01\x04\x01\x01\x05\x01\x01\x06World\x01\x02\x06\x01\x02\x05\x01\x02\x04"
|
||||
b"\x01\x04\xEC\x04")
|
||||
data = kb.macro_serialize([ActionText("Hello"), ActionTap([KC_A, KC_B, KC_C]), ActionText("World"),
|
||||
ActionDown([KC_C, KC_B, KC_A]), ActionDelay(0)])
|
||||
self.assertEqual(data, b"Hello\x01\x01\x04\x01\x01\x05\x01\x01\x06World\x01\x02\x06\x01\x02\x05\x01\x02\x04"
|
||||
b"\x01\x04\x01\x01")
|
||||
data = kb.macro_serialize([ActionText("Hello"), ActionTap([KC_A, KC_B, KC_C]), ActionText("World"),
|
||||
ActionDown([KC_C, KC_B, KC_A]), ActionDelay(1)])
|
||||
self.assertEqual(data, b"Hello\x01\x01\x04\x01\x01\x05\x01\x01\x06World\x01\x02\x06\x01\x02\x05\x01\x02\x04"
|
||||
b"\x01\x04\x02\x01")
|
||||
data = kb.macro_serialize([ActionText("Hello"), ActionTap([KC_A, KC_B, KC_C]), ActionText("World"),
|
||||
ActionDown([KC_C, KC_B, KC_A]), ActionDelay(256)])
|
||||
self.assertEqual(data, b"Hello\x01\x01\x04\x01\x01\x05\x01\x01\x06World\x01\x02\x06\x01\x02\x05\x01\x02\x04"
|
||||
b"\x01\x04\x02\x02")
|
||||
|
||||
def test_deserialize_v2(self):
|
||||
kb = DummyKeyboard(None)
|
||||
kb.vial_protocol = 2
|
||||
macro = kb.macro_deserialize(b"Hello\x01\x01\x04\x01\x01\x05\x01\x01\x06World\x01\x02\x06\x01\x02\x05"
|
||||
b"\x01\x02\x04\x01\x04\xEC\x04")
|
||||
self.assertEqual(macro, [ActionText("Hello"), ActionTap([KC_A, KC_B, KC_C]), ActionText("World"),
|
||||
ActionDown([KC_C, KC_B, KC_A]), ActionDelay(1000)])
|
||||
macro = kb.macro_deserialize(b"Hello\x01\x01\x04\x01\x01\x05\x01\x01\x06World\x01\x02\x06\x01\x02\x05"
|
||||
b"\x01\x02\x04\x01\x04\x01\x01")
|
||||
self.assertEqual(macro, [ActionText("Hello"), ActionTap([KC_A, KC_B, KC_C]), ActionText("World"),
|
||||
ActionDown([KC_C, KC_B, KC_A]), ActionDelay(0)])
|
||||
macro = kb.macro_deserialize(b"Hello\x01\x01\x04\x01\x01\x05\x01\x01\x06World\x01\x02\x06\x01\x02\x05"
|
||||
b"\x01\x02\x04\x01\x04\x02\x01")
|
||||
self.assertEqual(macro, [ActionText("Hello"), ActionTap([KC_A, KC_B, KC_C]), ActionText("World"),
|
||||
ActionDown([KC_C, KC_B, KC_A]), ActionDelay(1)])
|
||||
macro = kb.macro_deserialize(b"Hello\x01\x01\x04\x01\x01\x05\x01\x01\x06World\x01\x02\x06\x01\x02\x05"
|
||||
b"\x01\x02\x04\x01\x04\x02\x02")
|
||||
self.assertEqual(macro, [ActionText("Hello"), ActionTap([KC_A, KC_B, KC_C]), ActionText("World"),
|
||||
ActionDown([KC_C, KC_B, KC_A]), ActionDelay(256)])
|
||||
|
|
|
|||
Loading…
Reference in New Issue