~diegosarmentero/unity8/app-preview

« back to all changes in this revision

Viewing changes to tests/plugins/Unity/Indicators/menucontentactivatortest.cpp

  • Committer: Diego Sarmentero
  • Date: 2013-07-22 23:43:12 UTC
  • mfrom: (121.2.6 unity8)
  • Revision ID: diego.sarmentero@gmail.com-20130722234312-a6uvi5pk4n7os96b
merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 */
 
19
 
 
20
#include "menucontentactivator.h"
 
21
#include "paths.h"
 
22
 
 
23
#include <QtTest>
 
24
#include <QDebug>
 
25
 
 
26
class FakeTimer : public UnityIndicators::AbstractTimer
 
27
{
 
28
    Q_OBJECT
 
29
public:
 
30
    FakeTimer(QObject *parent = 0)
 
31
        : UnityIndicators::AbstractTimer(parent)
 
32
    {}
 
33
 
 
34
    virtual int interval() const { return m_duration; }
 
35
    virtual void setInterval(int msecs) { m_duration = msecs; }
 
36
 
 
37
    void emitTimeout() {
 
38
        if (isRunning()) {
 
39
            Q_EMIT timeout();
 
40
        }
 
41
    }
 
42
private:
 
43
    int m_duration;
 
44
};
 
45
 
 
46
 
 
47
class MenuConentActivatorTest : public QObject
 
48
{
 
49
    Q_OBJECT
 
50
private 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
    }
 
61
 
 
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();
 
72
 
 
73
        QCOMPARE(activator.isMenuContentActive(4), false);
 
74
        QCOMPARE(activator.isMenuContentActive(5), true); // always active at base index.
 
75
        QCOMPARE(activator.isMenuContentActive(6), false);
 
76
 
 
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);
 
82
 
 
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);
 
89
 
 
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);
 
97
 
 
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);
 
106
 
 
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);
 
116
 
 
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);
 
127
 
 
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);
 
139
 
 
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);
 
152
 
 
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
    }
 
167
 
 
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);
 
177
 
 
178
        connect(&activator, &MenuContentActivator::deltaChanged,
 
179
                this, &MenuConentActivatorTest::onDeltaChange);
 
180
        activator.restart();
 
181
 
 
182
        QCOMPARE(m_deltas, QList<int>()); // empty
 
183
        QCOMPARE(getIndexList(&activator), QList<int>()); // empty
 
184
 
 
185
        m_fakeTimeSource->emitTimeout();
 
186
        QCOMPARE(m_deltas, QList<int>() << 1);
 
187
        QCOMPARE(getIndexList(&activator), QList<int>() << 4);
 
188
 
 
189
        m_fakeTimeSource->emitTimeout();
 
190
        QCOMPARE(m_deltas, QList<int>() << 1 << -1);
 
191
        QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2);
 
192
 
 
193
        m_fakeTimeSource->emitTimeout();
 
194
        QCOMPARE(m_deltas, QList<int>() << 1 << -1 << 2);
 
195
        QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2 << 5);
 
196
 
 
197
        m_fakeTimeSource->emitTimeout();
 
198
        QCOMPARE(m_deltas, QList<int>() << 1 << -1 << 2 << -2);
 
199
        QCOMPARE(getIndexList(&activator), QList<int>() << 4 << 2 << 5 << 1);
 
200
 
 
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);
 
204
 
 
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);
 
208
 
 
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);
 
212
 
 
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);
 
216
 
 
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
    }
 
221
 
 
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();
 
233
 
 
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);
 
241
 
 
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);
 
250
 
 
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);
 
260
 
 
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);
 
270
 
 
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
    }
 
282
 
 
283
    void onDeltaChange(int delta)
 
284
    {
 
285
        m_deltas << delta;
 
286
    }
 
287
 
 
288
private:
 
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
    }
 
297
 
 
298
    FakeTimer* m_fakeTimeSource;
 
299
    QList<int> m_deltas;
 
300
};
 
301
 
 
302
QTEST_MAIN(MenuConentActivatorTest)
 
303
#include "menucontentactivatortest.moc"