1
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2
# Copyright 2012 Canonical
3
# Author: Thomi Richards
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.
9
from testscenarios import TestWithScenarios
10
from testtools import TestCase
11
from testtools.matchers import raises, Equals
13
from autopilot.keybindings import _translate_compiz_keystroke_string as translate_func
15
class KeyTranslateArgumentTests(TestWithScenarios, TestCase):
16
"""Tests that the compizconfig keycode translation routes work as advertised."""
19
('bool', {'input': True}),
20
('int', {'input': 42}),
21
('float', {'input': 0.321}),
22
('none', {'input': None}),
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))
30
class TranslationTests(TestWithScenarios, TestCase):
31
"""Test that we get the result we expect, with the given input."""
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')),
64
def test_translation(self):
65
self.assertThat(translate_func(self.input), Equals(self.expected))