on xenial help sign in
Refactor tst_PhysicalKeysMapper.qml
0d003deDaniel d'Andrada
qml/Components/PhysicalKeysMapper.qml+3−3
@@ -41,6 +41,8 @@ Item {
41 signal volumeUpTriggered;
41 signal volumeUpTriggered;
42 signal screenshotTriggered;
42 signal screenshotTriggered;
43
43
44+ property int powerKeyLongPressTime: 2000
45+
44 QtObject {
46 QtObject {
45 id: d
47 id: d
46
48
@@ -51,12 +53,10 @@ Item {
51
53
52 Timer {
54 Timer {
53 id: powerKeyLongPressTimer
55 id: powerKeyLongPressTimer
54−
56+ interval: root.powerKeyLongPressTime
55− interval: 2000
56 onTriggered: root.powerKeyLongPressed();
57 onTriggered: root.powerKeyLongPressed();
57 }
58 }
58
59
59−
60 function onKeyPressed(event) {
60 function onKeyPressed(event) {
61 if ((event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff)
61 if ((event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff)
62 && !event.isAutoRepeat) {
62 && !event.isAutoRepeat) {
tests/qmltests/Components/tst_PhysicalKeysMapper.qml+42−30
@@ -21,6 +21,8 @@ import "../../../qml/Components"
21TestCase {
21TestCase {
22 name: "PhysicalKeysMapper"
22 name: "PhysicalKeysMapper"
23
23
24+ property var physicalKeysMapper: loader.item
25+
24 Loader {
26 Loader {
25 // Using a Loader here to make sure mapper state is coherent
27 // Using a Loader here to make sure mapper state is coherent
26 // regardless of unmatched KeyPress and KeyRelease events
28 // regardless of unmatched KeyPress and KeyRelease events
@@ -31,25 +33,25 @@ TestCase {
31
33
32 SignalSpy {
34 SignalSpy {
33 id: powerSpy
35 id: powerSpy
34− target: loader.item
36+ target: physicalKeysMapper
35 signalName: "powerKeyLongPressed"
37 signalName: "powerKeyLongPressed"
36 }
38 }
37
39
38 SignalSpy {
40 SignalSpy {
39 id: volumeDownSpy
41 id: volumeDownSpy
40− target: loader.item
42+ target: physicalKeysMapper
41 signalName: "volumeDownTriggered"
43 signalName: "volumeDownTriggered"
42 }
44 }
43
45
44 SignalSpy {
46 SignalSpy {
45 id: volumeUpSpy
47 id: volumeUpSpy
46− target: loader.item
48+ target: physicalKeysMapper
47 signalName: "volumeUpTriggered"
49 signalName: "volumeUpTriggered"
48 }
50 }
49
51
50 SignalSpy {
52 SignalSpy {
51 id: screenshotSpy
53 id: screenshotSpy
52− target: loader.item
54+ target: physicalKeysMapper
53 signalName: "screenshotTriggered"
55 signalName: "screenshotTriggered"
54 }
56 }
55
57
@@ -66,54 +68,64 @@ TestCase {
66 screenshotSpy.clear();
68 screenshotSpy.clear();
67 }
69 }
68
70
69− function test_LongPressPowerButton() {
71+ function test_powerKeyLongPressed() {
70− loader.item.onKeyPressed({ key: Qt.Key_PowerDown });
72+ physicalKeysMapper.powerKeyLongPressTime = 500;
71
73
72− expectFailContinue("", "Power signal should not be emitted within a second");
74+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_PowerDown, isAutoRepeat: false });
73− powerSpy.wait(1000);
75+
76+ for (var i = 0; i < 3; ++i) {
77+ wait(10);
78+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_PowerDown, isAutoRepeat: true});
79+ }
80+
81+ // powerKeyLongPressed should not have been emitted yet.
74− powerSpy.clear();
82+ compare(powerSpy.count, 0);
75
83
84+ for (var i = 0; i < 10; ++i) {
85+ wait(50);
76− loader.item.onKeyPressed({ key: Qt.Key_PowerDown, isAutoRepeat: true });
86+ physicalKeysMapper.onKeyPressed({ key: Qt.Key_PowerDown, isAutoRepeat: true});
87+ }
88+
77− powerSpy.wait(1500);
89+ compare(powerSpy.count, 1);
78 }
90 }
79
91
80− function test_ScreenshotButtons_data() {
92+ function test_screenshotButtons_data() {
81 return [
93 return [
82 { tag: "UpFirst", first: Qt.Key_VolumeUp, second: Qt.Key_VolumeDown },
94 { tag: "UpFirst", first: Qt.Key_VolumeUp, second: Qt.Key_VolumeDown },
83 { tag: "DownFirst", first: Qt.Key_VolumeDown, second: Qt.Key_VolumeUp },
95 { tag: "DownFirst", first: Qt.Key_VolumeDown, second: Qt.Key_VolumeUp },
84 ];
96 ];
85 }
97 }
86
98
87− function test_ScreenshotButtons(data) {
99+ function test_screenshotButtons(data) {
88− loader.item.onKeyPressed({ key: data.first });
100+ physicalKeysMapper.onKeyPressed({ key: data.first });
89− loader.item.onKeyPressed({ key: data.second });
101+ physicalKeysMapper.onKeyPressed({ key: data.second });
90 screenshotSpy.wait();
102 screenshotSpy.wait();
91− loader.item.onKeyReleased({ key: data.first });
103+ physicalKeysMapper.onKeyReleased({ key: data.first });
92− loader.item.onKeyReleased({ key: data.second });
104+ physicalKeysMapper.onKeyReleased({ key: data.second });
93− expectFailContinue("", "VolumeUp signal should not fire");
105+
106+ wait(100);
94− volumeUpSpy.wait(100);
107+ compare(volumeUpSpy.count, 0);
95− expectFailContinue("", "VolumeDown signal should not fire");
96− volumeDownSpy.wait(100);
108+ compare(volumeDownSpy.count, 0);
97 }
109 }
98
110
99− function test_VolumeButton_data() {
111+ function test_volumeButton_data() {
100 return [
112 return [
101 { tag: "Down", key: Qt.Key_VolumeDown, spy: volumeDownSpy },
113 { tag: "Down", key: Qt.Key_VolumeDown, spy: volumeDownSpy },
102 { tag: "Up", key: Qt.Key_VolumeUp, spy: volumeUpSpy },
114 { tag: "Up", key: Qt.Key_VolumeUp, spy: volumeUpSpy },
103 ];
115 ];
104 }
116 }
105
117
106− function test_VolumeButton(data) {
118+ function test_volumeButton(data) {
107− loader.item.onKeyPressed({ key: data.key });
119+ physicalKeysMapper.onKeyPressed({ key: data.key });
108− expectFailContinue("", "Signal should not fire on press");
120+
109− data.spy.wait(100);
121+ wait(100);
110− data.spy.clear();
122+ compare(data.spy.count, 0);
111
123
112− loader.item.onKeyReleased({ key: data.key });
124+ physicalKeysMapper.onKeyReleased({ key: data.key });
113 data.spy.wait();
125 data.spy.wait();
114
126
115− loader.item.onKeyPressed({ key: data.key });
127+ physicalKeysMapper.onKeyPressed({ key: data.key });
116− loader.item.onKeyPressed({ key: data.key, isAutoRepeat: true });
128+ physicalKeysMapper.onKeyPressed({ key: data.key, isAutoRepeat: true });
117 data.spy.wait();
129 data.spy.wait();
118 }
130 }
119}
131}