2
* Copyright 2013 Canonical Ltd.
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.
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.
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/>.
17
* Nick Dedekind <nick.dedekind@canonical.com>
20
#include "menucontentactivator.h"
26
class FakeTimer : public UnityIndicators::AbstractTimer
30
FakeTimer(QObject *parent = 0)
31
: UnityIndicators::AbstractTimer(parent)
34
virtual int interval() const { return m_duration; }
35
virtual void setInterval(int msecs) { m_duration = msecs; }
47
class MenuConentActivatorTest : public QObject
51
void init() // called right before each and every test function is executed
53
m_fakeTimeSource = new FakeTimer(this);
56
void cleanup() // called right after each and every test function is executed
58
delete m_fakeTimeSource;
63
* Tests the ordering of activation
65
void testContentActiveChange()
67
MenuContentActivator activator;
68
activator.setContentTimer(m_fakeTimeSource);
69
activator.setCount(10);
70
activator.setBaseIndex(5);
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);
169
* Tests the delta calculation for each timeout.
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);
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);
223
* Tests that changing the base index re-prioritizes the activation
224
* around the base index.
226
void testBaseIndexChange()
228
MenuContentActivator activator;
229
activator.setContentTimer(m_fakeTimeSource);
230
activator.setCount(12);
231
activator.setBaseIndex(5);
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);
283
void onDeltaChange(int delta)
289
QList<int> getIndexList(MenuContentActivator* activator)
292
Q_FOREACH(int delta, m_deltas) {
293
list << (activator->baseIndex() + delta);
298
FakeTimer* m_fakeTimeSource;
302
QTEST_MAIN(MenuConentActivatorTest)
303
#include "menucontentactivatortest.moc"