Beispiel #1
0
    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())
Beispiel #2
0
    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()
Beispiel #3
0
 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())
Beispiel #4
0
 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())
Beispiel #5
0
 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)
Beispiel #6
0
    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())
Beispiel #7
0
 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)
Beispiel #8
0
 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())
Beispiel #9
0
 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())
Beispiel #10
0
 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())
Beispiel #11
0
 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())
Beispiel #12
0
 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())
Beispiel #13
0
    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())
Beispiel #14
0
    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())
Beispiel #15
0
 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)