def test_time(self): # A12-15<call>13-16*a c = KeyPress.compile("A<A>12-15<call>13-16*a<a>", A=lambda: f.append('A'), a=lambda: f.append('a'), call=lambda: f.append('12-15')) f = [] key_press = KeyPress(c) self.assertEqual({12,15}, key_press.process_input('A')) self.assertEqual({12,15}, key_press.process_input(4)) self.assertEqual({12,15}, key_press.process_input(8)) self.assertEqual({13,16}, key_press.process_input(12)) self.assertEqual({13,16}, key_press.process_input(13)) self.assertEqual(set(), key_press.process_input('a')) self.assertEqual(['A', '12-15', 'a'], f) self.assertEqual("match", key_press.status()) f = [] key_press.reset() self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['A', 4, 8]) self.assertEqual(['A'], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['a']) self.assertEqual(['A'], f) self.assertEqual("failed", key_press.status()) f = [] key_press.reset() self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['A', 4, 13, 20]) self.assertEqual(['A', '12-15'], f) self.assertEqual("failed", key_press.status())
def __init__(self, inputter): self.inputter = inputter morse_maker = MorseMaker('C', 'c', 200, 500) self.morseAlphbeth = KeyPress.mkUnion( morse_maker.mkAll(lambda c: print("=== %s" % c)) + [ KeyPress.compile(".A.a<go_to_normal>", go_to_normal=lambda: self.go_normal()) ]) self.main_menu = KeyPress.mkUnion([ KeyPress.compile(".A.C.c.a<go_to_morse>", go_to_morse=lambda: self.go_morse()), KeyPress.compile(".A.a<A>", A=lambda: print("A")), KeyPress.compile(".B.b<B>", B=lambda: print("B")), ]) self.go_normal()
def test_time2(self): # Aa12-15* c = KeyPress.compile("Aa12-15*") f = [] key_press = KeyPress(c) key_press.process_inputs(['A', 'a', 4, 8, 12, 13]) self.assertEqual("match", key_press.status())
def test_star(self): # A* f = [] c = KeyPress.compile("(A<A>)*", A=lambda: f.append('A')) key_press = KeyPress(c) key_press.process_inputs(['A', 'A']) self.assertEqual(['A', 'A'], f) self.assertEqual("match", key_press.status())
def test_time3(self): c = KeyPress.compile(".C(.A100-300+a<one>|.A200-400+a<two>)*.c", one=lambda: f.append("one"), two=lambda: f.append("two")) f = [] key_press = KeyPress(c) self.assertEqual(set(), key_press.process_input('C')) self.assertEqual({100,200,300,400}, key_press.process_input('A')) self.assertEqual({200,400}, key_press.process_input(350)) self.assertEqual(set(), key_press.process_input('a')) self.assertEqual(set(), key_press.process_input('c')) self.assertEqual("match", key_press.status()) self.assertEqual(['two'], f)
def test_cat(self): f = [] c = KeyPress.compile("A<A>.a<a>", A=lambda: f.append('A'), a=lambda: f.append('a')) key_press = KeyPress(c) key_press.process_input('A') key_press.process_input(12) key_press.process_input(13) key_press.process_input('a') self.assertEqual(['A', 'a'], f) self.assertEqual("match", key_press.status())
def mkMorse(self, seq, l): s = "" i = "." for c in seq: if c == '.': s += i + self.down + "0-" + str(self.t0) + "+" + self.up if c == '-': s += i + self.down + str(self.t0) + "-1000" + "+" + self.up i = "0-500" s += str(self.t1) + "-2000<match>" return KeyPress.compile(s, match=l)
def test_star2(self): # (Aa)* f = [] c = KeyPress.compile("(A<A>a<a>)*", A=lambda: f.append('A'), a=lambda: f.append('a')) key_press = KeyPress(c) key_press.process_inputs(['A', 'a', 'A']) self.assertEqual(['A', 'a', 'A'], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['a']) self.assertEqual(['A', 'a', 'A', 'a'], f) self.assertEqual("match", key_press.status())
def test_time4(self): c = KeyPress.compile(".C100-300<one>300-500<two>500-700<three>.c", one=lambda: f.append("one"), two=lambda: f.append("two"), three=lambda: f.append("three")) f = [] key_press = KeyPress(c) self.assertEqual({100,300}, key_press.process_input('C')) self.assertEqual([], f) self.assertEqual({300,500}, key_press.process_input(200)) self.assertEqual(['one'], f) self.assertEqual({500,700}, key_press.process_input(400)) self.assertEqual(['one', 'two'], f) self.assertEqual(set(), key_press.process_input(600)) self.assertEqual(['one', 'two', 'three'], f) self.assertEqual(set(), key_press.process_input('c')) self.assertEqual("match", key_press.status())
def test_union(self): # A|a c = KeyPress.compile("A<A>|a<a>", A=lambda: f.append('A'), a=lambda: f.append('a')) f = [] key_press = KeyPress(c) key_press.process_input('A') self.assertEqual(['A'], f) self.assertEqual("match", key_press.status()) f = [] key_press.reset() key_press.process_inputs(['a']) self.assertEqual(['a'], f) self.assertEqual("match", key_press.status())
def test_composite(self): f = [] # A(bc|d)*a c = KeyPress.compile("A<A>(b<b>c<c>|d<dd>)*a<a>", A=lambda: f.append('A'), a=lambda: f.append('a'), b=lambda: f.append('b'), c=lambda: f.append('c'), dd=lambda: f.append('d')) key_press = KeyPress(c) self.assertEqual("in progress", key_press.status()) key_press.process_input('A') self.assertEqual(['A'], f) self.assertEqual("in progress", key_press.status()) key_press.process_input('b') self.assertEqual(['A', 'b'], f) self.assertEqual("in progress", key_press.status()) key_press.process_input('c') self.assertEqual(['A', 'b', 'c'], f) self.assertEqual("in progress", key_press.status()) key_press.process_input('a') self.assertEqual(['A', 'b', 'c', 'a'], f) self.assertEqual("match", key_press.status())
def test_count(self): #A{3,5} c = KeyPress.compile("A{3,5}", done=lambda: f.append('done')) f = [] key_press = KeyPress(c) key_press.process_inputs(['A']) self.assertEqual([], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['A']) self.assertEqual([], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['A']) self.assertEqual([], f) self.assertEqual("match", key_press.status()) key_press.process_inputs(['A']) self.assertEqual([], f) self.assertEqual("match", key_press.status()) key_press.process_inputs(['A']) self.assertEqual([], f) self.assertEqual("match", key_press.status()) key_press.process_inputs(['A']) self.assertEqual([], f) self.assertEqual("failed", key_press.status())
def test_zero_or_one(self): # AB?C c = KeyPress.compile("A<A>(B<B>)?C<C>", A=lambda: f.append('A'), B=lambda: f.append('B'), C=lambda: f.append('C')) f = [] key_press = KeyPress(c) key_press.process_inputs(['A']) self.assertEqual(['A'], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['B']) self.assertEqual(['A', 'B'], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['C']) self.assertEqual(['A', 'B', 'C'], f) self.assertEqual("match", key_press.status()) f = [] key_press.reset() key_press.process_inputs(['A']) self.assertEqual(['A'], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['C']) self.assertEqual(['A', 'C'], f) self.assertEqual("match", key_press.status()) f = [] key_press.reset() key_press.process_inputs(['A']) self.assertEqual(['A'], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['B']) self.assertEqual(['A', 'B'], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['B']) self.assertEqual(['A', 'B'], f) self.assertEqual("failed", key_press.status())
def test_any_order(self): #A&bc&D c = KeyPress.compile("A<A>&b<b>c<c>&D<D>", A=lambda: f.append('A'), b=lambda: f.append('b'), c=lambda: f.append('c'), D=lambda: f.append('D')) f = [] key_press = KeyPress(c) key_press.process_inputs(['A']) self.assertEqual(['A'], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['b', 'c']) self.assertEqual(['A', 'b', 'c'], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['D']) self.assertEqual(['A', 'b', 'c', 'D'], f) self.assertEqual("match", key_press.status()) f = [] key_press.reset() key_press.process_inputs(['D']) self.assertEqual(['D'], f) self.assertEqual("in progress", key_press.status()) key_press.process_inputs(['D']) self.assertEqual(['D'], f) self.assertEqual("failed", key_press.status()) #------------------ #test all combinations: f = [] key_press.reset() key_press.process_inputs(['A', 'b', 'c', 'D']) self.assertEqual("match", key_press.status()) f = [] key_press.reset() key_press.process_inputs(['A', 'D', 'b', 'c']) self.assertEqual("match", key_press.status()) f = [] key_press.reset() key_press.process_inputs(['b', 'c', 'A', 'D']) self.assertEqual("match", key_press.status()) f = [] key_press.reset() key_press.process_inputs(['b', 'c', 'D', 'A']) self.assertEqual("match", key_press.status()) f = [] key_press.reset() key_press.process_inputs(['D', 'A', 'b', 'c']) self.assertEqual("match", key_press.status()) f = [] key_press.reset() key_press.process_inputs(['D', 'b', 'c', 'A']) self.assertEqual("match", key_press.status()) #------------------ f = [] key_press.reset() key_press.process_inputs(['A', 'c', 'b', 'D']) self.assertEqual("failed", key_press.status())
def __init__(self, logger, exc_cb, inputter): self.logger = logger self.comm = Comm(5000, "buttons", {}, self.logger, exc_cb) self.inputter = inputter self.menu_linger_time = 5.0 self.main_menu = KeyPress.mkUnion([ KeyPress.compile(".A.a<match>", match=lambda: self.go_to_playlist_menu()), KeyPress.compile(".B.b<match>", match=lambda: self.multicast_play({ "artist": ["bryan adams"], "title": ["summer of 69"] })), KeyPress.compile(".C.c<match>", match=lambda: self.go_to_radio_menu()), KeyPress.compile(".D.d<match>", match=lambda: self.multicast_play({ "artist": ["volbeat"], "title": ["for evigt"] })), KeyPress.compile(".E.e<match>", match=lambda: self.apple_dock()), KeyPress.compile(".F.f<match>", match=lambda: self.go_to_podcast_menu()), KeyPress.compile(".H.h<match>", match=lambda: self.go_to_flow_menu()), ]) self.radio_menu = KeyPress.mkUnion([ KeyPress.compile(".A.a<match>", match=lambda: self.radio_channel("p1")), KeyPress.compile(".B.b<match>", match=lambda: self.radio_channel("p2")), KeyPress.compile(".C.c<match>", match=lambda: self.radio_channel("p3")), KeyPress.compile(".D.d<match>", match=lambda: self.radio_channel("24syv")), ]) self.podcast_menu = KeyPress.mkUnion([ KeyPress.compile(".A.a<match>", match=lambda: self.start_podcast("baelte")), KeyPress.compile(".B.b<match>", match=lambda: self.start_podcast("orientering")), KeyPress.compile(".C.c<match>", match=lambda: self.start_podcast("mads")), KeyPress.compile(".D.d<match>", match=lambda: self.start_podcast("d6m")), ]) self.flow_menu = KeyPress.mkUnion([ KeyPress.compile(".A.a<match>", match=lambda: self.flow({"to": ["0"]})), KeyPress.compile(".B.b<match>", match=lambda: self.flow({"prev": [1]})), KeyPress.compile(".C.c<match>", match=lambda: self.flow({"to": ["random"]})), KeyPress.compile(".D.d<match>", match=lambda: self.flow({"next": ["1"]})), KeyPress.compile(".E.e<match>", match=lambda: self.flow({"to": ["last"]})), KeyPress.compile(".H.h<match>", match=lambda: self.stop()), ]) self.playlist_menu = KeyPress.mkUnion([ KeyPress.compile( ".A.a<match>", match=lambda: self.go_to_users_playlist_menu("user_k")), KeyPress.compile( ".B.b<match>", match=lambda: self.go_to_users_playlist_menu("user_r")), KeyPress.compile( ".C.c<match>", match=lambda: self.go_to_users_playlist_menu("user_c")), KeyPress.compile( ".D.d<match>", match=lambda: self.go_to_users_playlist_menu("user_h")), KeyPress.compile( ".E.e<match>", match=lambda: self.go_to_users_playlist_menu("user_a")), KeyPress.compile( ".F.f<match>", match=lambda: self.go_to_users_playlist_menu("user_s")), ]) self.user_playlist_menu = {} self.user_playlist_menu["user_k"] = KeyPress.mkUnion([ KeyPress.compile(".A.a<match>", match=lambda: self.multicast_play({ "source": ["list"], "query": ["svensk"] })), ]) self.user_playlist_menu["user_r"] = KeyPress.mkUnion([ KeyPress.compile(".A.a<match>", match=lambda: self.multicast_play({ "source": ["list"], "query": ["metal"] })), KeyPress.compile( ".B.b<match>", match=lambda: self.multicast_play({"artist": ["metallica"]})), ]) self.user_playlist_menu["user_c"] = KeyPress.mkUnion([]) self.user_playlist_menu["user_h"] = KeyPress.mkUnion([]) self.user_playlist_menu["user_a"] = KeyPress.mkUnion([]) self.user_playlist_menu["user_s"] = KeyPress.mkUnion([]) print("==== press 'A' for playlists") print("==== press 'B' for youtube play") print("==== press 'C' for radio") print("==== press 'D' for Volbeat - For Evigt") print("==== press 'E' for Knight Rider") print("==== press 'F' for Pod cast") print("==== press 'H' for Flow control") print("==== press 'q' to quit") self.go_to_main_menu() self.inputter.click_NAD_button(3)