on bionic help sign in
unity8/tests/plugins/Unity/Indicators/MenuContentActivatorTest.cpp
303 lines 12 kB history raw
1/*
2 * Copyright 2013 Canonical Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authors:
17 * Nick Dedekind <nick.dedekind@canonical.com>
18 */
20#include "menucontentactivator.h"
22#include <QtTest>
23#include <QDebug>
25class FakeTimer : public UnityIndicators::AbstractTimer
27 Q_OBJECT
28public:
29 FakeTimer(QObject *parent = 0)
30 : UnityIndicators::AbstractTimer(parent)
31 , m_duration(0)
32 {}
34 int interval() const override { return m_duration; }
35 void setInterval(int msecs) override { m_duration = msecs; }
37 void emitTimeout() {
38 if (isRunning()) {
39 Q_EMIT timeout();
40 }
41 }
42private:
43 int m_duration;
44};
47class MenuConentActivatorTest : public QObject
49 Q_OBJECT
50private Q_SLOTS:
51 void init() // called right before each and every test function is executed
52 {
53 m_fakeTimeSource = new FakeTimer(this);
54 m_deltas.clear();
55 }
56 void cleanup() // called right after each and every test function is executed
57 {
58 delete m_fakeTimeSource;
59 m_fakeTimeSource = 0;
60 }
62 /*
63 * Tests the ordering of activation
64 */
65 void testContentActiveChange()
66 {
67 MenuContentActivator activator;
68 activator.setContentTimer(m_fakeTimeSource);
69 activator.setCount(10);
70 activator.setBaseIndex(5);
71 activator.restart();
73 QCOMPARE(activator.isMenuContentActive(4), false);
74 QCOMPARE(activator.isMenuContentActive(5), true); // always active at base index.
75 QCOMPARE(activator.isMenuContentActive(6), false);
77 m_fakeTimeSource->emitTimeout();
78 QCOMPARE(activator.isMenuContentActive(4), false);
79 QCOMPARE(activator.isMenuContentActive(5), true);
80 QCOMPARE(activator.isMenuContentActive(6), true);
81 QCOMPARE(activator.isMenuContentActive(7), false);
83 m_fakeTimeSource->emitTimeout();
84 QCOMPARE(activator.isMenuContentActive(3), false);
85 QCOMPARE(activator.isMenuContentActive(4), true);
86 QCOMPARE(activator.isMenuContentActive(5), true);
87 QCOMPARE(activator.isMenuContentActive(6), true);
88 QCOMPARE(activator.isMenuContentActive(7), false);
90 m_fakeTimeSource->emitTimeout();
91 QCOMPARE(activator.isMenuContentActive(3), false);
92 QCOMPARE(activator.isMenuContentActive(4), true);
93 QCOMPARE(activator.isMenuContentActive(5), true);
94 QCOMPARE(activator.isMenuContentActive(6), true);
95 QCOMPARE(activator.isMenuContentActive(7), true);
96 QCOMPARE(activator.isMenuContentActive(8), false);
98 m_fakeTimeSource->emitTimeout();
99 QCOMPARE(activator.isMenuContentActive(2), false);
100 QCOMPARE(activator.isMenuContentActive(3), true);
101 QCOMPARE(activator.isMenuContentActive(4), true);
102 QCOMPARE(activator.isMenuContentActive(5), true);
103 QCOMPARE(activator.isMenuContentActive(6), true);
104 QCOMPARE(activator.isMenuContentActive(7), true);
105 QCOMPARE(activator.isMenuContentActive(8), false);
107 m_fakeTimeSource->emitTimeout();
108 QCOMPARE(activator.isMenuContentActive(2), false);
109 QCOMPARE(activator.isMenuContentActive(3), true);
110 QCOMPARE(activator.isMenuContentActive(4), true);
111 QCOMPARE(activator.isMenuContentActive(5), true);
112 QCOMPARE(activator.isMenuContentActive(6), true);
113 QCOMPARE(activator.isMenuContentActive(7), true);
114 QCOMPARE(activator.isMenuContentActive(8), true);
115 QCOMPARE(activator.isMenuContentActive(9), false);
117 m_fakeTimeSource->emitTimeout();
118 QCOMPARE(activator.isMenuContentActive(1), false);
119 QCOMPARE(activator.isMenuContentActive(2), true);
120 QCOMPARE(activator.isMenuContentActive(3), true);
121 QCOMPARE(activator.isMenuContentActive(4), true);
122 QCOMPARE(activator.isMenuContentActive(5), true);
123 QCOMPARE(activator.isMenuContentActive(6), true);
124 QCOMPARE(activator.isMenuContentActive(7), true);
125 QCOMPARE(activator.isMenuContentActive(8), true);
126 QCOMPARE(activator.isMenuContentActive(9), false);
128 m_fakeTimeSource->emitTimeout();
129 QCOMPARE(activator.isMenuContentActive(1), false);
130 QCOMPARE(activator.isMenuContentActive(2), true);
131 QCOMPARE(activator.isMenuContentActive(3), true);
132 QCOMPARE(activator.isMenuContentActive(4), true);
133 QCOMPARE(activator.isMenuContentActive(5), true);
134 QCOMPARE(activator.isMenuContentActive(6), true);
135 QCOMPARE(activator.isMenuContentActive(7), true);
136 QCOMPARE(activator.isMenuContentActive(8), true);
137 QCOMPARE(activator.isMenuContentActive(9), true);
138 QCOMPARE(activator.isMenuContentActive(10), false);
140 m_fakeTimeSource->emitTimeout();
141 QCOMPARE(activator.isMenuContentActive(0), false);
142 QCOMPARE(activator.isMenuContentActive(1), true);
143 QCOMPARE(activator.isMenuContentActive(2), true);
144 QCOMPARE(activator.isMenuContentActive(3), true);
145 QCOMPARE(activator.isMenuContentActive(4), true);
146 QCOMPARE(activator.isMenuContentActive(5), true);
147 QCOMPARE(activator.isMenuContentActive(6), true);
148 QCOMPARE(activator.isMenuContentActive(7), true);
149 QCOMPARE(activator.isMenuContentActive(8), true);
150 QCOMPARE(activator.isMenuContentActive(9), true);
151 QCOMPARE(activator.isMenuContentActive(10), false);
153 m_fakeTimeSource->emitTimeout();
154 QCOMPARE(activator.isMenuContentActive(-1), false);
155 QCOMPARE(activator.isMenuContentActive(0), true);
156 QCOMPARE(activator.isMenuContentActive(1), true);
157 QCOMPARE(activator.isMenuContentActive(2), true);
158 QCOMPARE(activator.isMenuContentActive(3), true);
159 QCOMPARE(activator.isMenuContentActive(4), true);
160 QCOMPARE(activator.isMenuContentActive(5), true);
161 QCOMPARE(activator.isMenuContentActive(6), true);
162 QCOMPARE(activator.isMenuContentActive(7), true);
163 QCOMPARE(activator.isMenuContentActive(8), true);
164 QCOMPARE(activator.isMenuContentActive(9), true);
165 QCOMPARE(activator.isMenuContentActive(10), false);
166 }
168 /*
169 * Tests the delta calculation for each timeout.
170 */
171 void testDelta()
172 {
173 MenuContentActivator activator;
174 activator.setContentTimer(m_fakeTimeSource);
175 activator.setCount(9);
176 activator.setBaseIndex(3);
178 connect(&activator, &MenuContentActivator::deltaChanged,
179 this, &MenuConentActivatorTest::onDeltaChange);
180 activator.restart();
182 QCOMPARE(m_deltas, QList<int>()); // empty
183 QCOMPARE(getIndexList(&activator), QList<int>()); // empty
185 m_fakeTimeSource->emitTimeout();
186 QCOMPARE(m_deltas, QList<int>() << 1);
187 QCOMPARE(getIndexList(&activator), QList<int>() << 4);
189 m_fakeTimeSource->emitTimeout();
190 QCOMPARE(m_deltas, QList<int>() << 1 << -1);
191 QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2);
193 m_fakeTimeSource->emitTimeout();
194 QCOMPARE(m_deltas, QList<int>() << 1 << -1 << 2);
195 QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2 << 5);
197 m_fakeTimeSource->emitTimeout();
198 QCOMPARE(m_deltas, QList<int>() << 1 << -1 << 2 << -2);
199 QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2 << 5 << 1);
201 m_fakeTimeSource->emitTimeout();
202 QCOMPARE(m_deltas, QList<int>() << 1 << -1 << 2 << -2 << 3);
203 QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2 << 5 << 1 << 6);
205 m_fakeTimeSource->emitTimeout();
206 QCOMPARE(m_deltas, QList<int>() << 1 << -1 << 2 << -2 << 3 << -3);
207 QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2 << 5 << 1 << 6 << 0);
209 m_fakeTimeSource->emitTimeout();
210 QCOMPARE(m_deltas, QList<int>() << 1 << -1 << 2 << -2 << 3 << -3 << 4);
211 QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2 << 5 << 1 << 6 << 0 << 7);
213 m_fakeTimeSource->emitTimeout();
214 QCOMPARE(m_deltas, QList<int>() << 1 << -1 << 2 << -2 << 3 << -3 << 4 << 5);
215 QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2 << 5 << 1 << 6 << 0 << 7 << 8);
217 m_fakeTimeSource->emitTimeout();
218 QCOMPARE(m_deltas, QList<int>() << 1 << -1 << 2 << -2 << 3 << -3 << 4 << 5);
219 QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2 << 5 << 1 << 6 << 0 << 7 << 8);
220 }
222 /*
223 * Tests that changing the base index re-prioritizes the activation
224 * around the base index.
225 */
226 void testBaseIndexChange()
227 {
228 MenuContentActivator activator;
229 activator.setContentTimer(m_fakeTimeSource);
230 activator.setCount(12);
231 activator.setBaseIndex(5);
232 activator.restart();
234 m_fakeTimeSource->emitTimeout();
235 m_fakeTimeSource->emitTimeout();
236 QCOMPARE(activator.isMenuContentActive(3), false);
237 QCOMPARE(activator.isMenuContentActive(4), true);
238 QCOMPARE(activator.isMenuContentActive(5), true); // always active at base index.
239 QCOMPARE(activator.isMenuContentActive(6), true);
240 QCOMPARE(activator.isMenuContentActive(7), false);
242 activator.setBaseIndex(8);
243 QCOMPARE(activator.isMenuContentActive(3), false);
244 QCOMPARE(activator.isMenuContentActive(4), true);
245 QCOMPARE(activator.isMenuContentActive(5), true);
246 QCOMPARE(activator.isMenuContentActive(6), true);
247 QCOMPARE(activator.isMenuContentActive(7), false);
248 QCOMPARE(activator.isMenuContentActive(8), true);
249 QCOMPARE(activator.isMenuContentActive(9), false);
251 m_fakeTimeSource->emitTimeout();
252 QCOMPARE(activator.isMenuContentActive(3), false);
253 QCOMPARE(activator.isMenuContentActive(4), true);
254 QCOMPARE(activator.isMenuContentActive(5), true);
255 QCOMPARE(activator.isMenuContentActive(6), true);
256 QCOMPARE(activator.isMenuContentActive(7), false);
257 QCOMPARE(activator.isMenuContentActive(8), true);
258 QCOMPARE(activator.isMenuContentActive(9), true);
259 QCOMPARE(activator.isMenuContentActive(10), false);
261 m_fakeTimeSource->emitTimeout();
262 QCOMPARE(activator.isMenuContentActive(3), false);
263 QCOMPARE(activator.isMenuContentActive(4), true);
264 QCOMPARE(activator.isMenuContentActive(5), true);
265 QCOMPARE(activator.isMenuContentActive(6), true);
266 QCOMPARE(activator.isMenuContentActive(7), true);
267 QCOMPARE(activator.isMenuContentActive(8), true);
268 QCOMPARE(activator.isMenuContentActive(9), true);
269 QCOMPARE(activator.isMenuContentActive(10), false);
271 m_fakeTimeSource->emitTimeout();
272 QCOMPARE(activator.isMenuContentActive(3), false);
273 QCOMPARE(activator.isMenuContentActive(4), true);
274 QCOMPARE(activator.isMenuContentActive(5), true);
275 QCOMPARE(activator.isMenuContentActive(6), true);
276 QCOMPARE(activator.isMenuContentActive(7), true);
277 QCOMPARE(activator.isMenuContentActive(8), true);
278 QCOMPARE(activator.isMenuContentActive(9), true);
279 QCOMPARE(activator.isMenuContentActive(10), true);
280 QCOMPARE(activator.isMenuContentActive(11), false);
281 }
283 void onDeltaChange(int delta)
284 {
285 m_deltas << delta;
286 }
288private:
289 QList<int> getIndexList(MenuContentActivator* activator)
290 {
291 QList<int> list;
292 Q_FOREACH(int delta, m_deltas) {
293 list << (activator->baseIndex() + delta);
294 }
295 return list;
296 }
298 FakeTimer* m_fakeTimeSource;
299 QList<int> m_deltas;
300};
302QTEST_GUILESS_MAIN(MenuConentActivatorTest)
303#include "MenuContentActivatorTest.moc"