def test_parse(self): ex = Expression() self.assertEqual(ex.parse("a"), (["sequence" ,["literal", ["button", "a"]]], "")) self.assertEqual(ex.parse("ab"), (["sequence" ,["literal", ["button", "a"]], ["sequence", ["literal", ["button", "b"]]]], "")) self.assertEqual(ex.parse("a*b"), (["sequence" ,["literal", ["button", "a"]], ["sequence", ["literal", ["wild", "*"]], ["sequence", ["literal", ["button", "b"]]]]], "")) self.assertEqual(ex.parse("<Enter>a"), (["sequence" ,["literal", ["button", "<Enter>"]], ["sequence", ["literal", ["button", "a"]]]], ""))
def test_compile(self): ex = Expression() btn_a = ex.button(30) btn_b = ex.button(48) btn_enter = ex.button(28) btn_wild = ex.wild(28) key = lambda code, state: KeyEvent(InputEvent(0, 0, 0, code, state)) keys = [key(code,state) for code in [28,30,46,48] for state in [0,1,2]] keysets = [list(i) for i in permutations(keys, 3)] matches = { "a": btn_a, "<Enter>": btn_enter, "ab": ex.sequence(btn_a, btn_b), "a*b": ex.sequence(btn_a, ex.sequence(btn_wild, btn_b)) } for line, expected in matches.items(): result_expected = map(expected, keysets) result_actual = map(ex.compile(ex.parse(line)[0]), keysets) data = [(e, a, keysets[i], ex.parse(line))\ for i, (a, e) in enumerate(zip(result_actual, result_expected))\ if a[0] != e[0] or a[2] != e[2] ] self.assertEquals(data, [])