예제 #1
0
class TestKeyer(unittest.TestCase):
    def setUp(self):
        self.k = Keyer(None)
        self.k.all_keys_up = lambda: False


    def test_keyUp_basic(self):
        """
        Keyer.keyUp adds the key to the buffer and sets max to the
        key's timestamp.
        """
        self.k.keyUp('A', 1000)
        self.assertEquals(self.k.maxtime, 1000)
        self.assertEquals(self.k.buffer, ['A'])


    def test_keyUp_again(self):
        """
        Keyer.keyUp appends the key to the buffer and alters maxtime
        if timestamp is greater than the old maxtime.
        """
        self.k.keyUp('A', 1000)
        self.k.keyUp('B', 1001)
        self.k.keyUp('C', 1002)
        self.assertEquals(self.k.maxtime, 1002)
        self.assertEquals(self.k.buffer, ['A', 'B', 'C'])


    def test_keyDown_basic(self):
        """
        Keyer.keyDown appends to a keyDownbuffer.
        """
        self.k.keyDown('A', 1001)
        self.k.keyDown('B', 1002)
        self.assertEquals(self.k.keyDownbuffer, ['A', 'B'])


    def test_all_keys_up(self):
        """
        Keyer.all_keys_up is True if keyDownbuffer is empty.
        """
        self.k = Keyer(None)
        self.k.keyDownbuffer = [1,2,3]
        self.assertEquals(self.k.all_keys_up(), False)
        self.k.keyDownbuffer = []
        self.assertEquals(self.k.all_keys_up(), True)


    def test_keyUp_removes_keyDown(self):
        """
        Keyer.keyUp removes the corresponding key from keyDownbuffer.
        """
        self.k.keyDownbuffer = [1,2]
        self.k.keyUp(1, 1000)
        self.assertEquals(self.k.keyDownbuffer, [2])


    def test_threshold_init(self):
        """
        Keyer.__init__ takes an argument for threshold value or uses a default.
        """
        k = Keyer(None, threshold=0)
        self.assertEquals(k.threshold, 0)
        k = Keyer(None)
        self.assertNotEquals(k.threshold, None)


    def test_gt_threshold_removes_buffer(self):
        """
        Keyer.keyUp removes everything in the buffer if timestamp is
        greater maxtime by the threshold amount. 
        """
        self.k.threshold = 1
        self.k.keyUp('A', 1000)
        self.k.keyUp('CC', 1002)
        self.assertEquals(self.k.buffer, ['CC'])


    def test_under_threshold(self):
        """
        otherwise leaves it alone.
        """
        self.k.threshold = 99
        self.k.keyUp('A', 1000)
        self.k.keyUp('CC', 1099)
        self.assertEquals(self.k.buffer, ['A', 'CC'])


    def test_keyUp_calls_decoder(self):
        """
        Keyer.keyUp calls decoder when all the keys are up and it
        clears the buffer.
        """
        calls = []
        def fake(t):
            calls.append(t)
        self.k = Keyer(fake)
        self.k.keyDown('A', 12000)
        self.k.keyDown('B', 1010101)
        self.k.keyUp('A', 10101)
        self.k.keyUp('B', 10102)
        self.assertEquals(calls, [('A','B')])
        self.assertEquals(self.k.buffer, [])