~veebers/autopilot/fix_1178014

2 by Thomi Richards
Imported code from unity.
1
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2
# Copyright 2012 Canonical
3
# Author: Thomi Richards
4
#
5
# This program is free software: you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License version 3, as published
7
# by the Free Software Foundation.
8
9
from testscenarios import TestWithScenarios
10
from testtools import TestCase
11
from testtools.matchers import raises, Equals
12
13
from autopilot.keybindings import _translate_compiz_keystroke_string as translate_func
14
15
class KeyTranslateArgumentTests(TestWithScenarios, TestCase):
16
    """Tests that the compizconfig keycode translation routes work as advertised."""
17
18
    scenarios = [
19
        ('bool', {'input': True}),
20
        ('int', {'input': 42}),
21
        ('float', {'input': 0.321}),
22
        ('none', {'input': None}),
23
    ]
24
25
    def test_requires_string_instance(self):
26
        """Function must raise TypeError unless given an instance of basestring."""
27
        self.assertThat(lambda: translate_func(self.input), raises(TypeError))
28
29
30
class TranslationTests(TestWithScenarios, TestCase):
31
    """Test that we get the result we expect, with the given input."""
32
33
    scenarios = [
34
        ('empty string', dict(input='', expected='')),
35
        ('single simpe letter', dict(input='a', expected='a')),
36
        ('trailing space', dict(input='d   ', expected='d')),
37
        ('only whitespace', dict(input='\t\n   ', expected='')),
38
        ('special key: Ctrl', dict(input='<Control>', expected='Ctrl')),
39
        ('special key: Primary', dict(input='<Primary>', expected='Ctrl')),
40
        ('special key: Alt', dict(input='<Alt>', expected='Alt')),
41
        ('special key: Shift', dict(input='<Shift>', expected='Shift')),
42
        ('direction key up', dict(input='Up', expected='Up')),
43
        ('direction key down', dict(input='Down', expected='Down')),
44
        ('direction key left', dict(input='Left', expected='Left')),
45
        ('direction key right', dict(input='Right', expected='Right')),
46
        ('Ctrl+a', dict(input='<Control>a', expected='Ctrl+a')),
47
        ('Primary+a', dict(input='<Control>a', expected='Ctrl+a')),
48
        ('Shift+s', dict(input='<Shift>s', expected='Shift+s')),
49
        ('Alt+d', dict(input='<Alt>d', expected='Alt+d')),
50
        ('Super+w', dict(input='<Super>w', expected='Super+w')),
51
        ('Ctrl+Up', dict(input='<Control>Up', expected='Ctrl+Up')),
52
        ('Primary+Down', dict(input='<Control>Down', expected='Ctrl+Down')),
53
        ('Alt+Left', dict(input='<Alt>Left', expected='Alt+Left')),
54
        ('Shift+F3', dict(input='<Shift>F3', expected='Shift+F3')),
55
        ('duplicate keys Ctrl+Ctrl', dict(input='<Control><Control>', expected='Ctrl')),
56
        ('duplicate keys Ctrl+Primary', dict(input='<Control><Primary>', expected='Ctrl')),
57
        ('duplicate keys Ctrl+Primary', dict(input='<Primary><Control>', expected='Ctrl')),
58
        ('duplicate keys Alt+Alt', dict(input='<Alt><Alt>', expected='Alt')),
59
        ('duplicate keys Ctrl+Primary+left', dict(input='<Control><Primary>Left', expected='Ctrl+Left')),
60
        ('first key wins', dict(input='<Control><Alt>Down<Alt>', expected='Ctrl+Alt+Down')),
61
        ('Getting silly now', dict(input='<Control><Primary><Shift><Shift><Alt>Left', expected='Ctrl+Shift+Alt+Left')),
62
    ]
63
64
    def test_translation(self):
65
        self.assertThat(translate_func(self.input), Equals(self.expected))
66
67