1 /*
2 SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
3
4 SPDX-License-Identifier: LGPL-3.0-or-later
5 */
6
7 #include "mediaplaylisttest.h"
8 #include "mediaplaylisttestconfig.h"
9
10 #include "mediaplaylist.h"
11 #include "databaseinterface.h"
12 #include "trackslistener.h"
13
14 #include "config-upnp-qt.h"
15
16 #include <QtTest>
17 #include <QUrl>
18 #include <QTime>
19 #include <QTemporaryFile>
20 #include <QAbstractItemModelTester>
21
MediaPlayListTest(QObject * parent)22 MediaPlayListTest::MediaPlayListTest(QObject *parent) : QObject(parent)
23 {
24 }
25
initTestCase()26 void MediaPlayListTest::initTestCase()
27 {
28 qRegisterMetaType<QHash<QString,QUrl>>("QHash<QString,QUrl>");
29 qRegisterMetaType<QVector<qlonglong>>("QVector<qlonglong>");
30 qRegisterMetaType<QHash<qlonglong,int>>("QHash<qlonglong,int>");
31 qRegisterMetaType<ElisaUtils::PlayListEntryType>("PlayListEntryType");
32 }
33
simpleInitialCase()34 void MediaPlayListTest::simpleInitialCase()
35 {
36 MediaPlayList myPlayList;
37 QAbstractItemModelTester testModel(&myPlayList);
38 DatabaseInterface myDatabaseContent;
39 TracksListener myListener(&myDatabaseContent);
40
41 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
42 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
43 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
44 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
45 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
46 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
47 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
48 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
49 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
50 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
51
52 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
53 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
54 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
55 QCOMPARE(rowsRemovedSpy.count(), 0);
56 QCOMPARE(rowsMovedSpy.count(), 0);
57 QCOMPARE(rowsInsertedSpy.count(), 0);
58 QCOMPARE(dataChangedSpy.count(), 0);
59 QCOMPARE(newTrackByNameInListSpy.count(), 0);
60 QCOMPARE(newEntryInListSpy.count(), 0);
61
62 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
63
64 connect(&myListener, &TracksListener::trackHasChanged,
65 &myPlayList, &MediaPlayList::trackChanged,
66 Qt::QueuedConnection);
67 connect(&myListener, &TracksListener::tracksListAdded,
68 &myPlayList, &MediaPlayList::tracksListAdded,
69 Qt::QueuedConnection);
70 connect(&myPlayList, &MediaPlayList::newEntryInList,
71 &myListener, &TracksListener::newEntryInList,
72 Qt::QueuedConnection);
73 connect(&myPlayList, &MediaPlayList::newUrlInList,
74 &myListener, &TracksListener::newUrlInList,
75 Qt::QueuedConnection);
76 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
77 &myListener, &TracksListener::trackByNameInList,
78 Qt::QueuedConnection);
79 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
80 &myListener, &TracksListener::tracksAdded);
81
82 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
83
84 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
85 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
86 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
87 QCOMPARE(rowsRemovedSpy.count(), 0);
88 QCOMPARE(rowsMovedSpy.count(), 0);
89 QCOMPARE(rowsInsertedSpy.count(), 0);
90 QCOMPARE(dataChangedSpy.count(), 0);
91 QCOMPARE(newTrackByNameInListSpy.count(), 0);
92 QCOMPARE(newEntryInListSpy.count(), 0);
93
94 auto newTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), QStringLiteral("album2"), 6, 1);
95 auto newTrackData = myDatabaseContent.trackDataFromDatabaseId(newTrackID);
96 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, newTrackID}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
97
98 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
99 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
100 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
101 QCOMPARE(rowsRemovedSpy.count(), 0);
102 QCOMPARE(rowsMovedSpy.count(), 0);
103 QCOMPARE(rowsInsertedSpy.count(), 1);
104 QCOMPARE(dataChangedSpy.count(), 0);
105 QCOMPARE(newTrackByNameInListSpy.count(), 0);
106 QCOMPARE(newEntryInListSpy.count(), 1);
107
108 QCOMPARE(dataChangedSpy.wait(), true);
109
110 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
111 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
112 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
113 QCOMPARE(rowsRemovedSpy.count(), 0);
114 QCOMPARE(rowsMovedSpy.count(), 0);
115 QCOMPARE(rowsInsertedSpy.count(), 1);
116 QCOMPARE(dataChangedSpy.count(), 1);
117 QCOMPARE(newTrackByNameInListSpy.count(), 0);
118 QCOMPARE(newEntryInListSpy.count(), 1);
119 }
120
enqueueAlbumCase()121 void MediaPlayListTest::enqueueAlbumCase()
122 {
123 MediaPlayList myPlayList;
124 QAbstractItemModelTester testModel(&myPlayList);
125 DatabaseInterface myDatabaseContent;
126 TracksListener myListener(&myDatabaseContent);
127
128 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
129 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
130 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
131 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
132 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
133 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
134 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
135 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
136 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
137 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
138
139 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
140 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
141 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
142 QCOMPARE(rowsRemovedSpy.count(), 0);
143 QCOMPARE(rowsMovedSpy.count(), 0);
144 QCOMPARE(rowsInsertedSpy.count(), 0);
145 QCOMPARE(dataChangedSpy.count(), 0);
146 QCOMPARE(newTrackByNameInListSpy.count(), 0);
147 QCOMPARE(newEntryInListSpy.count(), 0);
148
149 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
150
151 connect(&myListener, &TracksListener::trackHasChanged,
152 &myPlayList, &MediaPlayList::trackChanged,
153 Qt::QueuedConnection);
154 connect(&myListener, &TracksListener::tracksListAdded,
155 &myPlayList, &MediaPlayList::tracksListAdded,
156 Qt::QueuedConnection);
157 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
158 &myListener, &TracksListener::trackByNameInList,
159 Qt::QueuedConnection);
160 connect(&myPlayList, &MediaPlayList::newEntryInList,
161 &myListener, &TracksListener::newEntryInList,
162 Qt::QueuedConnection);
163 connect(&myPlayList, &MediaPlayList::newUrlInList,
164 &myListener, &TracksListener::newUrlInList,
165 Qt::QueuedConnection);
166 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
167 &myListener, &TracksListener::tracksAdded);
168
169 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
170
171 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
172 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
173 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
174 QCOMPARE(rowsRemovedSpy.count(), 0);
175 QCOMPARE(rowsMovedSpy.count(), 0);
176 QCOMPARE(rowsInsertedSpy.count(), 0);
177 QCOMPARE(dataChangedSpy.count(), 0);
178 QCOMPARE(newTrackByNameInListSpy.count(), 0);
179 QCOMPARE(newEntryInListSpy.count(), 0);
180
181 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}},
182 QStringLiteral("album2"), {}});
183
184 QVERIFY(rowsAboutToBeRemovedSpy.wait());
185
186 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
187 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
188 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
189 QCOMPARE(rowsRemovedSpy.count(), 1);
190 QCOMPARE(rowsMovedSpy.count(), 0);
191 QCOMPARE(rowsInsertedSpy.count(), 2);
192 QCOMPARE(dataChangedSpy.count(), 0);
193 QCOMPARE(newTrackByNameInListSpy.count(), 0);
194 QCOMPARE(newEntryInListSpy.count(), 1);
195
196 QCOMPARE(myPlayList.rowCount(), 6);
197
198 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
199 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
200 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
201 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
202 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
203 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
204 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
205 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
206 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
207 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
208 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
209 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
210 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
211 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
212 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
213 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
214 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
215 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
216 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
217 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
218 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
219 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
220 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
221 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
222 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
223 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
224 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8);
225 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
226 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5"));
227 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
228 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
229 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5);
230 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
231 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9);
232 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
233 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6"));
234 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
235 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2"));
236 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6);
237 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
238 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10);
239 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
240 }
241
enqueueArtistCase()242 void MediaPlayListTest::enqueueArtistCase()
243 {
244 MediaPlayList myPlayList;
245 QAbstractItemModelTester testModel(&myPlayList);
246 DatabaseInterface myDatabaseContent;
247 TracksListener myListener(&myDatabaseContent);
248
249 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
250 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
251 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
252 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
253 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
254 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
255 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
256 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
257 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
258 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
259
260 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
261 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
262 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
263 QCOMPARE(rowsRemovedSpy.count(), 0);
264 QCOMPARE(rowsMovedSpy.count(), 0);
265 QCOMPARE(rowsInsertedSpy.count(), 0);
266 QCOMPARE(dataChangedSpy.count(), 0);
267 QCOMPARE(newTrackByNameInListSpy.count(), 0);
268 QCOMPARE(newEntryInListSpy.count(), 0);
269
270 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
271
272 connect(&myListener, &TracksListener::trackHasChanged,
273 &myPlayList, &MediaPlayList::trackChanged,
274 Qt::QueuedConnection);
275 connect(&myListener, &TracksListener::tracksListAdded,
276 &myPlayList, &MediaPlayList::tracksListAdded,
277 Qt::QueuedConnection);
278 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
279 &myListener, &TracksListener::trackByNameInList,
280 Qt::QueuedConnection);
281 connect(&myPlayList, &MediaPlayList::newEntryInList,
282 &myListener, &TracksListener::newEntryInList,
283 Qt::QueuedConnection);
284 connect(&myPlayList, &MediaPlayList::newUrlInList,
285 &myListener, &TracksListener::newUrlInList,
286 Qt::QueuedConnection);
287 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
288 &myListener, &TracksListener::tracksAdded);
289
290 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
291
292 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
293 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
294 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
295 QCOMPARE(rowsRemovedSpy.count(), 0);
296 QCOMPARE(rowsMovedSpy.count(), 0);
297 QCOMPARE(rowsInsertedSpy.count(), 0);
298 QCOMPARE(dataChangedSpy.count(), 0);
299 QCOMPARE(newTrackByNameInListSpy.count(), 0);
300 QCOMPARE(newEntryInListSpy.count(), 0);
301
302 myPlayList.enqueueOneEntry({{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist1"), {}});
303
304 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
305 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
306 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
307 QCOMPARE(rowsRemovedSpy.count(), 0);
308 QCOMPARE(rowsMovedSpy.count(), 0);
309 QCOMPARE(rowsInsertedSpy.count(), 1);
310 QCOMPARE(dataChangedSpy.count(), 0);
311 QCOMPARE(newTrackByNameInListSpy.count(), 0);
312 QCOMPARE(newEntryInListSpy.count(), 1);
313
314 QCOMPARE(myPlayList.rowCount(), 1);
315
316 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true);
317
318 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
319 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
320 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
321 QCOMPARE(rowsRemovedSpy.count(), 1);
322 QCOMPARE(rowsMovedSpy.count(), 0);
323 QCOMPARE(rowsInsertedSpy.count(), 2);
324 QCOMPARE(dataChangedSpy.count(), 0);
325 QCOMPARE(newTrackByNameInListSpy.count(), 0);
326 QCOMPARE(newEntryInListSpy.count(), 1);
327
328 QCOMPARE(myPlayList.rowCount(), 6);
329
330 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
331 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
332 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
333 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
334 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
335 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1);
336 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumIdRole).toULongLong(), 1);
337 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
338 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
339 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
340 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
341 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
342 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
343 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
344 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
345 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
346 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
347 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
348 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
349 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
350 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
351 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
352 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
353 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
354 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
355 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
356 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
357 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
358 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
359 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
360 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
361 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
362 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
363 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8);
364 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
365 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5"));
366 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
367 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
368 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 5);
369 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
370 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9);
371 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
372 }
373
enqueueTrackByUrl()374 void MediaPlayListTest::enqueueTrackByUrl()
375 {
376 MediaPlayList myPlayList;
377 QAbstractItemModelTester testModel(&myPlayList);
378 DatabaseInterface myDatabaseContent;
379 TracksListener myListener(&myDatabaseContent);
380
381 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
382 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
383 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
384 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
385 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
386 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
387 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
388 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
389 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
390 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
391
392 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
393 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
394 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
395 QCOMPARE(rowsRemovedSpy.count(), 0);
396 QCOMPARE(rowsMovedSpy.count(), 0);
397 QCOMPARE(rowsInsertedSpy.count(), 0);
398 QCOMPARE(dataChangedSpy.count(), 0);
399 QCOMPARE(newTrackByNameInListSpy.count(), 0);
400 QCOMPARE(newEntryInListSpy.count(), 0);
401 QCOMPARE(newUrlInListSpy.count(), 0);
402
403 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
404
405 connect(&myListener, &TracksListener::trackHasChanged,
406 &myPlayList, &MediaPlayList::trackChanged,
407 Qt::QueuedConnection);
408 connect(&myListener, &TracksListener::tracksListAdded,
409 &myPlayList, &MediaPlayList::tracksListAdded,
410 Qt::QueuedConnection);
411 connect(&myPlayList, &MediaPlayList::newEntryInList,
412 &myListener, &TracksListener::newEntryInList,
413 Qt::QueuedConnection);
414 connect(&myPlayList, &MediaPlayList::newUrlInList,
415 &myListener, &TracksListener::newUrlInList,
416 Qt::QueuedConnection);
417 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
418 &myListener, &TracksListener::trackByNameInList,
419 Qt::QueuedConnection);
420 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
421 &myListener, &TracksListener::tracksAdded);
422
423 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
424
425 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
426 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
427 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
428 QCOMPARE(rowsRemovedSpy.count(), 0);
429 QCOMPARE(rowsMovedSpy.count(), 0);
430 QCOMPARE(rowsInsertedSpy.count(), 0);
431 QCOMPARE(dataChangedSpy.count(), 0);
432 QCOMPARE(newTrackByNameInListSpy.count(), 0);
433 QCOMPARE(newEntryInListSpy.count(), 0);
434 QCOMPARE(newUrlInListSpy.count(), 0);
435
436 auto newTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), QStringLiteral("album2"), 6, 1);
437 auto trackData = myDatabaseContent.trackDataFromDatabaseId(newTrackID);
438 myPlayList.enqueueFilesList({{{}, {}, trackData.resourceURI()}});
439
440 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
441 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
442 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
443 QCOMPARE(rowsRemovedSpy.count(), 0);
444 QCOMPARE(rowsMovedSpy.count(), 0);
445 QCOMPARE(rowsInsertedSpy.count(), 1);
446 QCOMPARE(dataChangedSpy.count(), 0);
447 QCOMPARE(newTrackByNameInListSpy.count(), 0);
448 QCOMPARE(newEntryInListSpy.count(), 0);
449 QCOMPARE(newUrlInListSpy.count(), 1);
450
451 QCOMPARE(dataChangedSpy.wait(), true);
452
453 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
454 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
455 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
456 QCOMPARE(rowsRemovedSpy.count(), 0);
457 QCOMPARE(rowsMovedSpy.count(), 0);
458 QCOMPARE(rowsInsertedSpy.count(), 1);
459 QCOMPARE(dataChangedSpy.count(), 1);
460 QCOMPARE(newTrackByNameInListSpy.count(), 0);
461 QCOMPARE(newEntryInListSpy.count(), 0);
462 QCOMPARE(newUrlInListSpy.count(), 1);
463 }
464
enqueueTracksByUrl()465 void MediaPlayListTest::enqueueTracksByUrl()
466 {
467 MediaPlayList myPlayList;
468 QAbstractItemModelTester testModel(&myPlayList);
469 DatabaseInterface myDatabaseContent;
470 TracksListener myListener(&myDatabaseContent);
471
472 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
473 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
474 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
475 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
476 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
477 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
478 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
479 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
480 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
481 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
482
483 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
484 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
485 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
486 QCOMPARE(rowsRemovedSpy.count(), 0);
487 QCOMPARE(rowsMovedSpy.count(), 0);
488 QCOMPARE(rowsInsertedSpy.count(), 0);
489 QCOMPARE(dataChangedSpy.count(), 0);
490 QCOMPARE(newTrackByNameInListSpy.count(), 0);
491 QCOMPARE(newEntryInListSpy.count(), 0);
492 QCOMPARE(newUrlInListSpy.count(), 0);
493
494 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
495
496 connect(&myListener, &TracksListener::trackHasChanged,
497 &myPlayList, &MediaPlayList::trackChanged,
498 Qt::QueuedConnection);
499 connect(&myListener, &TracksListener::tracksListAdded,
500 &myPlayList, &MediaPlayList::tracksListAdded,
501 Qt::QueuedConnection);
502 connect(&myPlayList, &MediaPlayList::newEntryInList,
503 &myListener, &TracksListener::newEntryInList,
504 Qt::QueuedConnection);
505 connect(&myPlayList, &MediaPlayList::newUrlInList,
506 &myListener, &TracksListener::newUrlInList,
507 Qt::QueuedConnection);
508 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
509 &myListener, &TracksListener::trackByNameInList,
510 Qt::QueuedConnection);
511 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
512 &myListener, &TracksListener::tracksAdded);
513
514 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
515
516 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
517 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
518 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
519 QCOMPARE(rowsRemovedSpy.count(), 0);
520 QCOMPARE(rowsMovedSpy.count(), 0);
521 QCOMPARE(rowsInsertedSpy.count(), 0);
522 QCOMPARE(dataChangedSpy.count(), 0);
523 QCOMPARE(newTrackByNameInListSpy.count(), 0);
524 QCOMPARE(newEntryInListSpy.count(), 0);
525 QCOMPARE(newUrlInListSpy.count(), 0);
526
527 auto firstNewTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), QStringLiteral("album2"), 6, 1);
528 auto firstTrackData = myDatabaseContent.trackDataFromDatabaseId(firstNewTrackID);
529 auto secondNewTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1);
530 auto secondTrackData = myDatabaseContent.trackDataFromDatabaseId(secondNewTrackID);
531 myPlayList.enqueueFilesList({{{}, {}, firstTrackData.resourceURI()}, {{}, {}, secondTrackData.resourceURI()}});
532
533 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
534 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
535 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
536 QCOMPARE(rowsRemovedSpy.count(), 0);
537 QCOMPARE(rowsMovedSpy.count(), 0);
538 QCOMPARE(rowsInsertedSpy.count(), 1);
539 QCOMPARE(dataChangedSpy.count(), 0);
540 QCOMPARE(newTrackByNameInListSpy.count(), 0);
541 QCOMPARE(newEntryInListSpy.count(), 0);
542 QCOMPARE(newUrlInListSpy.count(), 2);
543
544 QCOMPARE(dataChangedSpy.wait(), true);
545
546 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
547 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
548 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
549 QCOMPARE(rowsRemovedSpy.count(), 0);
550 QCOMPARE(rowsMovedSpy.count(), 0);
551 QCOMPARE(rowsInsertedSpy.count(), 1);
552 QCOMPARE(dataChangedSpy.count(), 2);
553 QCOMPARE(newTrackByNameInListSpy.count(), 0);
554 QCOMPARE(newEntryInListSpy.count(), 0);
555 QCOMPARE(newUrlInListSpy.count(), 2);
556 }
557
enqueueFiles()558 void MediaPlayListTest::enqueueFiles()
559 {
560 MediaPlayList myPlayList;
561 QAbstractItemModelTester testModel(&myPlayList);
562 DatabaseInterface myDatabaseContent;
563 TracksListener myListener(&myDatabaseContent);
564
565 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
566 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
567 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
568 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
569 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
570 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
571 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
572 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
573 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
574 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
575
576 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
577 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
578 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
579 QCOMPARE(rowsRemovedSpy.count(), 0);
580 QCOMPARE(rowsMovedSpy.count(), 0);
581 QCOMPARE(rowsInsertedSpy.count(), 0);
582 QCOMPARE(dataChangedSpy.count(), 0);
583 QCOMPARE(newTrackByNameInListSpy.count(), 0);
584 QCOMPARE(newEntryInListSpy.count(), 0);
585 QCOMPARE(newUrlInListSpy.count(), 0);
586
587 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
588
589 connect(&myListener, &TracksListener::trackHasChanged,
590 &myPlayList, &MediaPlayList::trackChanged,
591 Qt::QueuedConnection);
592 connect(&myListener, &TracksListener::tracksListAdded,
593 &myPlayList, &MediaPlayList::tracksListAdded,
594 Qt::QueuedConnection);
595 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
596 &myListener, &TracksListener::trackByNameInList,
597 Qt::QueuedConnection);
598 connect(&myPlayList, &MediaPlayList::newEntryInList,
599 &myListener, &TracksListener::newEntryInList,
600 Qt::QueuedConnection);
601 connect(&myPlayList, &MediaPlayList::newUrlInList,
602 &myListener, &TracksListener::newUrlInList,
603 Qt::QueuedConnection);
604 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
605 &myListener, &TracksListener::tracksAdded);
606
607 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
608
609 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
610 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
611 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
612 QCOMPARE(rowsRemovedSpy.count(), 0);
613 QCOMPARE(rowsMovedSpy.count(), 0);
614 QCOMPARE(rowsInsertedSpy.count(), 0);
615 QCOMPARE(dataChangedSpy.count(), 0);
616 QCOMPARE(newTrackByNameInListSpy.count(), 0);
617 QCOMPARE(newEntryInListSpy.count(), 0);
618 QCOMPARE(newUrlInListSpy.count(), 0);
619
620 myPlayList.enqueueFilesList({{{}, {}, QUrl::fromLocalFile(QStringLiteral("/$1"))}, {{}, {}, QUrl::fromLocalFile(QStringLiteral("/$2"))}});
621
622 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
623 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
624 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
625 QCOMPARE(rowsRemovedSpy.count(), 0);
626 QCOMPARE(rowsMovedSpy.count(), 0);
627 QCOMPARE(rowsInsertedSpy.count(), 1);
628 QCOMPARE(dataChangedSpy.count(), 0);
629 QCOMPARE(newTrackByNameInListSpy.count(), 0);
630 QCOMPARE(newEntryInListSpy.count(), 0);
631 QCOMPARE(newUrlInListSpy.count(), 2);
632
633 QCOMPARE(myPlayList.rowCount(), 2);
634
635 QCOMPARE(dataChangedSpy.wait(300), true);
636
637 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
638 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
639 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
640 QCOMPARE(rowsRemovedSpy.count(), 0);
641 QCOMPARE(rowsMovedSpy.count(), 0);
642 QCOMPARE(rowsInsertedSpy.count(), 1);
643 QCOMPARE(dataChangedSpy.count(), 2);
644 QCOMPARE(newTrackByNameInListSpy.count(), 0);
645 QCOMPARE(newEntryInListSpy.count(), 0);
646 QCOMPARE(newUrlInListSpy.count(), 2);
647
648 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
649 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
650 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
651 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
652 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
653 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1);
654 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
655 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
656 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2"));
657 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
658 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 2);
659 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 2);
660 }
661
enqueueSampleFiles()662 void MediaPlayListTest::enqueueSampleFiles()
663 {
664 MediaPlayList myPlayList;
665 QAbstractItemModelTester testModel(&myPlayList);
666 DatabaseInterface myDatabaseContent;
667 TracksListener myListener(&myDatabaseContent);
668
669 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
670 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
671 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
672 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
673 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
674 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
675 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
676 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
677 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
678 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
679
680 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
681 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
682 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
683 QCOMPARE(rowsRemovedSpy.count(), 0);
684 QCOMPARE(rowsMovedSpy.count(), 0);
685 QCOMPARE(rowsInsertedSpy.count(), 0);
686 QCOMPARE(dataChangedSpy.count(), 0);
687 QCOMPARE(newTrackByNameInListSpy.count(), 0);
688 QCOMPARE(newEntryInListSpy.count(), 0);
689 QCOMPARE(newUrlInListSpy.count(), 0);
690
691 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
692
693 connect(&myListener, &TracksListener::trackHasChanged,
694 &myPlayList, &MediaPlayList::trackChanged,
695 Qt::QueuedConnection);
696 connect(&myListener, &TracksListener::tracksListAdded,
697 &myPlayList, &MediaPlayList::tracksListAdded,
698 Qt::QueuedConnection);
699 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
700 &myListener, &TracksListener::trackByNameInList,
701 Qt::QueuedConnection);
702 connect(&myPlayList, &MediaPlayList::newEntryInList,
703 &myListener, &TracksListener::newEntryInList,
704 Qt::QueuedConnection);
705 connect(&myPlayList, &MediaPlayList::newUrlInList,
706 &myListener, &TracksListener::newUrlInList,
707 Qt::QueuedConnection);
708 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
709 &myListener, &TracksListener::tracksAdded);
710
711 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
712
713 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
714 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
715 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
716 QCOMPARE(rowsRemovedSpy.count(), 0);
717 QCOMPARE(rowsMovedSpy.count(), 0);
718 QCOMPARE(rowsInsertedSpy.count(), 0);
719 QCOMPARE(dataChangedSpy.count(), 0);
720 QCOMPARE(newTrackByNameInListSpy.count(), 0);
721 QCOMPARE(newEntryInListSpy.count(), 0);
722 QCOMPARE(newUrlInListSpy.count(), 0);
723
724 myPlayList.enqueueFilesList({{{}, {}, QUrl::fromLocalFile(QStringLiteral(MEDIAPLAYLIST_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/test.ogg"))},
725 {{}, {}, QUrl::fromLocalFile(QStringLiteral(MEDIAPLAYLIST_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/test2.ogg"))}});
726
727 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
728 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
729 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
730 QCOMPARE(rowsRemovedSpy.count(), 0);
731 QCOMPARE(rowsMovedSpy.count(), 0);
732 QCOMPARE(rowsInsertedSpy.count(), 1);
733 QCOMPARE(dataChangedSpy.count(), 0);
734 QCOMPARE(newTrackByNameInListSpy.count(), 0);
735 QCOMPARE(newEntryInListSpy.count(), 0);
736 QCOMPARE(newUrlInListSpy.count(), 2);
737
738 QCOMPARE(myPlayList.rowCount(), 2);
739
740 while (dataChangedSpy.count() < 2) {
741 QCOMPARE(dataChangedSpy.wait(), true);
742 }
743
744 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
745 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
746 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
747 QCOMPARE(rowsRemovedSpy.count(), 0);
748 QCOMPARE(rowsMovedSpy.count(), 0);
749 QCOMPARE(rowsInsertedSpy.count(), 1);
750 QCOMPARE(dataChangedSpy.count(), 2);
751 QCOMPARE(newTrackByNameInListSpy.count(), 0);
752 QCOMPARE(newEntryInListSpy.count(), 0);
753 QCOMPARE(newUrlInListSpy.count(), 2);
754
755 #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND
756 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("Title"));
757 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("Test"));
758 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("Artist"));
759 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
760 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
761 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1000);
762 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("Title2"));
763 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("Test2"));
764 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("Artist2"));
765 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
766 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
767 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1000);
768 #else
769 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("test.ogg"));
770 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral(""));
771 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral(""));
772 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), -1);
773 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), -1);
774 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 0);
775 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("test2.ogg"));
776 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral(""));
777 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral(""));
778 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), -1);
779 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), -1);
780 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 0);
781 #endif
782 }
783
enqueueEmpty()784 void MediaPlayListTest::enqueueEmpty()
785 {
786 MediaPlayList myPlayList;
787 QAbstractItemModelTester testModel(&myPlayList);
788 DatabaseInterface myDatabaseContent;
789 TracksListener myListener(&myDatabaseContent);
790
791 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
792 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
793 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
794 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
795 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
796 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
797 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
798 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
799 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
800 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
801
802 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
803 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
804 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
805 QCOMPARE(rowsRemovedSpy.count(), 0);
806 QCOMPARE(rowsMovedSpy.count(), 0);
807 QCOMPARE(rowsInsertedSpy.count(), 0);
808 QCOMPARE(dataChangedSpy.count(), 0);
809 QCOMPARE(newTrackByNameInListSpy.count(), 0);
810 QCOMPARE(newEntryInListSpy.count(), 0);
811
812 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
813
814 connect(&myListener, &TracksListener::trackHasChanged,
815 &myPlayList, &MediaPlayList::trackChanged,
816 Qt::QueuedConnection);
817 connect(&myListener, &TracksListener::tracksListAdded,
818 &myPlayList, &MediaPlayList::tracksListAdded,
819 Qt::QueuedConnection);
820 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
821 &myListener, &TracksListener::trackByNameInList,
822 Qt::QueuedConnection);
823 connect(&myPlayList, &MediaPlayList::newEntryInList,
824 &myListener, &TracksListener::newEntryInList,
825 Qt::QueuedConnection);
826 connect(&myPlayList, &MediaPlayList::newUrlInList,
827 &myListener, &TracksListener::newUrlInList,
828 Qt::QueuedConnection);
829 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
830 &myListener, &TracksListener::tracksAdded);
831
832 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
833
834 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
835 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
836 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
837 QCOMPARE(rowsRemovedSpy.count(), 0);
838 QCOMPARE(rowsMovedSpy.count(), 0);
839 QCOMPARE(rowsInsertedSpy.count(), 0);
840 QCOMPARE(dataChangedSpy.count(), 0);
841 QCOMPARE(newTrackByNameInListSpy.count(), 0);
842 QCOMPARE(newEntryInListSpy.count(), 0);
843
844 myPlayList.enqueueOneEntry(DataTypes::EntryData{});
845
846 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
847 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
848 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
849 QCOMPARE(rowsRemovedSpy.count(), 0);
850 QCOMPARE(rowsMovedSpy.count(), 0);
851 QCOMPARE(rowsInsertedSpy.count(), 0);
852 QCOMPARE(dataChangedSpy.count(), 0);
853 QCOMPARE(newTrackByNameInListSpy.count(), 0);
854 QCOMPARE(newEntryInListSpy.count(), 0);
855
856 myPlayList.enqueueOneEntry(DataTypes::EntryData{});
857
858 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
859 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
860 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
861 QCOMPARE(rowsRemovedSpy.count(), 0);
862 QCOMPARE(rowsMovedSpy.count(), 0);
863 QCOMPARE(rowsInsertedSpy.count(), 0);
864 QCOMPARE(dataChangedSpy.count(), 0);
865 QCOMPARE(newTrackByNameInListSpy.count(), 0);
866 QCOMPARE(newEntryInListSpy.count(), 0);
867
868 myPlayList.enqueueOneEntry(DataTypes::EntryData{});
869
870 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
871 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
872 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
873 QCOMPARE(rowsRemovedSpy.count(), 0);
874 QCOMPARE(rowsMovedSpy.count(), 0);
875 QCOMPARE(rowsInsertedSpy.count(), 0);
876 QCOMPARE(dataChangedSpy.count(), 0);
877 QCOMPARE(newTrackByNameInListSpy.count(), 0);
878 QCOMPARE(newEntryInListSpy.count(), 0);
879
880 myPlayList.enqueueOneEntry(DataTypes::EntryData{});
881
882 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
883 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
884 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
885 QCOMPARE(rowsRemovedSpy.count(), 0);
886 QCOMPARE(rowsMovedSpy.count(), 0);
887 QCOMPARE(rowsInsertedSpy.count(), 0);
888 QCOMPARE(dataChangedSpy.count(), 0);
889 QCOMPARE(newTrackByNameInListSpy.count(), 0);
890 QCOMPARE(newEntryInListSpy.count(), 0);
891
892 myPlayList.enqueueOneEntry(DataTypes::EntryData{});
893
894 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
895 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
896 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
897 QCOMPARE(rowsRemovedSpy.count(), 0);
898 QCOMPARE(rowsMovedSpy.count(), 0);
899 QCOMPARE(rowsInsertedSpy.count(), 0);
900 QCOMPARE(dataChangedSpy.count(), 0);
901 QCOMPARE(newTrackByNameInListSpy.count(), 0);
902 QCOMPARE(newEntryInListSpy.count(), 0);
903 }
904
removeFirstTrackOfAlbum()905 void MediaPlayListTest::removeFirstTrackOfAlbum()
906 {
907 MediaPlayList myPlayList;
908 QAbstractItemModelTester testModel(&myPlayList);
909 DatabaseInterface myDatabaseContent;
910 TracksListener myListener(&myDatabaseContent);
911
912 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
913 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
914 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
915 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
916 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
917 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
918 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
919 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
920 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
921 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
922
923 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
924 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
925 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
926 QCOMPARE(rowsRemovedSpy.count(), 0);
927 QCOMPARE(rowsMovedSpy.count(), 0);
928 QCOMPARE(rowsInsertedSpy.count(), 0);
929 QCOMPARE(dataChangedSpy.count(), 0);
930 QCOMPARE(newTrackByNameInListSpy.count(), 0);
931 QCOMPARE(newEntryInListSpy.count(), 0);
932
933 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
934
935 connect(&myListener, &TracksListener::trackHasChanged,
936 &myPlayList, &MediaPlayList::trackChanged,
937 Qt::QueuedConnection);
938 connect(&myListener, &TracksListener::tracksListAdded,
939 &myPlayList, &MediaPlayList::tracksListAdded,
940 Qt::QueuedConnection);
941 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
942 &myListener, &TracksListener::trackByNameInList,
943 Qt::QueuedConnection);
944 connect(&myPlayList, &MediaPlayList::newEntryInList,
945 &myListener, &TracksListener::newEntryInList,
946 Qt::QueuedConnection);
947 connect(&myPlayList, &MediaPlayList::newUrlInList,
948 &myListener, &TracksListener::newUrlInList,
949 Qt::QueuedConnection);
950 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
951 &myListener, &TracksListener::tracksAdded);
952
953 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
954
955 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
956 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
957 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
958 QCOMPARE(rowsRemovedSpy.count(), 0);
959 QCOMPARE(rowsMovedSpy.count(), 0);
960 QCOMPARE(rowsInsertedSpy.count(), 0);
961 QCOMPARE(dataChangedSpy.count(), 0);
962 QCOMPARE(newTrackByNameInListSpy.count(), 0);
963 QCOMPARE(newEntryInListSpy.count(), 0);
964
965 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}},
966 QStringLiteral("album2"), {}});
967
968 QVERIFY(rowsAboutToBeRemovedSpy.wait());
969
970 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
971 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
972 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
973 QCOMPARE(rowsRemovedSpy.count(), 1);
974 QCOMPARE(rowsMovedSpy.count(), 0);
975 QCOMPARE(rowsInsertedSpy.count(), 2);
976 QCOMPARE(dataChangedSpy.count(), 0);
977 QCOMPARE(newTrackByNameInListSpy.count(), 0);
978 QCOMPARE(newEntryInListSpy.count(), 1);
979
980 myPlayList.removeRows(0, 1);
981
982 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2);
983 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
984 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
985 QCOMPARE(rowsRemovedSpy.count(), 2);
986 QCOMPARE(rowsMovedSpy.count(), 0);
987 QCOMPARE(rowsInsertedSpy.count(), 2);
988 QCOMPARE(dataChangedSpy.count(), 0);
989 QCOMPARE(newTrackByNameInListSpy.count(), 0);
990 QCOMPARE(newEntryInListSpy.count(), 1);
991 }
992
testTrackBeenRemoved()993 void MediaPlayListTest::testTrackBeenRemoved()
994 {
995 MediaPlayList myPlayList;
996 QAbstractItemModelTester testModel(&myPlayList);
997 DatabaseInterface myDatabaseContent;
998 TracksListener myListener(&myDatabaseContent);
999
1000 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
1001 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
1002 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
1003 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
1004 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
1005 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
1006 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
1007 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
1008 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
1009 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
1010
1011 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1012 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1013 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1014 QCOMPARE(rowsRemovedSpy.count(), 0);
1015 QCOMPARE(rowsMovedSpy.count(), 0);
1016 QCOMPARE(rowsInsertedSpy.count(), 0);
1017 QCOMPARE(dataChangedSpy.count(), 0);
1018 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1019 QCOMPARE(newEntryInListSpy.count(), 0);
1020
1021 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1022
1023 connect(&myListener, &TracksListener::trackHasChanged,
1024 &myPlayList, &MediaPlayList::trackChanged,
1025 Qt::QueuedConnection);
1026 connect(&myListener, &TracksListener::tracksListAdded,
1027 &myPlayList, &MediaPlayList::tracksListAdded,
1028 Qt::QueuedConnection);
1029 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
1030 &myListener, &TracksListener::trackByNameInList,
1031 Qt::QueuedConnection);
1032 connect(&myPlayList, &MediaPlayList::newEntryInList,
1033 &myListener, &TracksListener::newEntryInList,
1034 Qt::QueuedConnection);
1035 connect(&myPlayList, &MediaPlayList::newUrlInList,
1036 &myListener, &TracksListener::newUrlInList,
1037 Qt::QueuedConnection);
1038 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1039 &myListener, &TracksListener::tracksAdded);
1040
1041 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1042
1043 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1044 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1045 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1046 QCOMPARE(rowsRemovedSpy.count(), 0);
1047 QCOMPARE(rowsMovedSpy.count(), 0);
1048 QCOMPARE(rowsInsertedSpy.count(), 0);
1049 QCOMPARE(dataChangedSpy.count(), 0);
1050 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1051 QCOMPARE(newEntryInListSpy.count(), 0);
1052
1053 myPlayList.enqueueOneEntry(DataTypes::EntryData{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist1"), {}});
1054
1055 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1056 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1057 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1058 QCOMPARE(rowsRemovedSpy.count(), 0);
1059 QCOMPARE(rowsMovedSpy.count(), 0);
1060 QCOMPARE(rowsInsertedSpy.count(), 1);
1061 QCOMPARE(dataChangedSpy.count(), 0);
1062 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1063 QCOMPARE(newEntryInListSpy.count(), 1);
1064
1065 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true);
1066
1067 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
1068 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1069 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1070 QCOMPARE(rowsRemovedSpy.count(), 1);
1071 QCOMPARE(rowsMovedSpy.count(), 0);
1072 QCOMPARE(rowsInsertedSpy.count(), 2);
1073 QCOMPARE(dataChangedSpy.count(), 0);
1074 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1075 QCOMPARE(newEntryInListSpy.count(), 1);
1076
1077 QCOMPARE(myPlayList.rowCount(), 6);
1078
1079 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1080 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
1081 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1082 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
1083 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
1084 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
1085 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1086 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1087 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
1088 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1089 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
1090 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
1091 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
1092 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1093 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1094 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2"));
1095 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1096 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
1097 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
1098 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2);
1099 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1100 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1101 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3"));
1102 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1103 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
1104 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
1105 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3);
1106 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1107 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1108 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4"));
1109 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1110 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
1111 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
1112 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4);
1113 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1114 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1115 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5"));
1116 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1117 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
1118 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
1119 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 5);
1120 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1121
1122 auto removedTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"),
1123 QStringLiteral("album2"), 2, 1);
1124
1125 QCOMPARE(removedTrackId != 0, true);
1126
1127 auto removedTrack = myDatabaseContent.trackDataFromDatabaseId(removedTrackId);
1128
1129 QVERIFY(!removedTrack.isEmpty());
1130
1131 myPlayList.trackRemoved(removedTrack[DataTypes::DatabaseIdRole].toULongLong());
1132
1133 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
1134 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1135 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1136 QCOMPARE(rowsRemovedSpy.count(), 1);
1137 QCOMPARE(rowsMovedSpy.count(), 0);
1138 QCOMPARE(rowsInsertedSpy.count(), 2);
1139 QCOMPARE(dataChangedSpy.count(), 1);
1140 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1141 QCOMPARE(newEntryInListSpy.count(), 1);
1142
1143 QCOMPARE(myPlayList.rowCount(), 6);
1144
1145 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1146 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
1147 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1148 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
1149 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
1150 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
1151 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1152 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1153 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
1154 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1155 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
1156 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
1157 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
1158 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1159 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false);
1160 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2"));
1161 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1162 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
1163 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
1164 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), -1);
1165 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 0);
1166 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1167 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3"));
1168 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1169 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
1170 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
1171 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3);
1172 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1173 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1174 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4"));
1175 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1176 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
1177 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
1178 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4);
1179 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1180 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1181 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5"));
1182 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1183 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
1184 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
1185 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 5);
1186 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1187 }
1188
testSetData()1189 void MediaPlayListTest::testSetData()
1190 {
1191 MediaPlayList myPlayList;
1192 QAbstractItemModelTester testModel(&myPlayList);
1193 DatabaseInterface myDatabaseContent;
1194 TracksListener myListener(&myDatabaseContent);
1195
1196 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
1197 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
1198 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
1199 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
1200 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
1201 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
1202 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
1203 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
1204 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
1205 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
1206
1207 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1208 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1209 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1210 QCOMPARE(rowsRemovedSpy.count(), 0);
1211 QCOMPARE(rowsMovedSpy.count(), 0);
1212 QCOMPARE(rowsInsertedSpy.count(), 0);
1213 QCOMPARE(dataChangedSpy.count(), 0);
1214 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1215 QCOMPARE(newEntryInListSpy.count(), 0);
1216
1217 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1218
1219 connect(&myListener, &TracksListener::trackHasChanged,
1220 &myPlayList, &MediaPlayList::trackChanged,
1221 Qt::QueuedConnection);
1222 connect(&myListener, &TracksListener::tracksListAdded,
1223 &myPlayList, &MediaPlayList::tracksListAdded,
1224 Qt::QueuedConnection);
1225 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
1226 &myListener, &TracksListener::trackByNameInList,
1227 Qt::QueuedConnection);
1228 connect(&myPlayList, &MediaPlayList::newEntryInList,
1229 &myListener, &TracksListener::newEntryInList,
1230 Qt::QueuedConnection);
1231 connect(&myPlayList, &MediaPlayList::newUrlInList,
1232 &myListener, &TracksListener::newUrlInList,
1233 Qt::QueuedConnection);
1234 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1235 &myListener, &TracksListener::tracksAdded);
1236
1237 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1238
1239 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1240 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1241 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1242 QCOMPARE(rowsRemovedSpy.count(), 0);
1243 QCOMPARE(rowsMovedSpy.count(), 0);
1244 QCOMPARE(rowsInsertedSpy.count(), 0);
1245 QCOMPARE(dataChangedSpy.count(), 0);
1246 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1247 QCOMPARE(newEntryInListSpy.count(), 0);
1248
1249 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"),
1250 QStringLiteral("album3"), 1, 1);
1251 myPlayList.enqueueOneEntry(DataTypes::EntryData{{{DataTypes::DatabaseIdRole, firstTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1252
1253 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1254 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1255 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1256 QCOMPARE(rowsRemovedSpy.count(), 0);
1257 QCOMPARE(rowsMovedSpy.count(), 0);
1258 QCOMPARE(rowsInsertedSpy.count(), 1);
1259 QCOMPARE(dataChangedSpy.count(), 0);
1260 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1261 QCOMPARE(newEntryInListSpy.count(), 1);
1262
1263 QCOMPARE(dataChangedSpy.wait(), true);
1264
1265 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1266 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1267 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1268 QCOMPARE(rowsRemovedSpy.count(), 0);
1269 QCOMPARE(rowsMovedSpy.count(), 0);
1270 QCOMPARE(rowsInsertedSpy.count(), 1);
1271 QCOMPARE(dataChangedSpy.count(), 1);
1272 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1273 QCOMPARE(newEntryInListSpy.count(), 1);
1274
1275 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1276
1277 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"),
1278 QStringLiteral("album1"), 1, 1);
1279 myPlayList.enqueueOneEntry(DataTypes::EntryData{{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1280
1281 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1282 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1283 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1284 QCOMPARE(rowsRemovedSpy.count(), 0);
1285 QCOMPARE(rowsMovedSpy.count(), 0);
1286 QCOMPARE(rowsInsertedSpy.count(), 2);
1287 QCOMPARE(dataChangedSpy.count(), 1);
1288 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1289 QCOMPARE(newEntryInListSpy.count(), 2);
1290
1291 QCOMPARE(dataChangedSpy.wait(), true);
1292
1293 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1294 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1295 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1296 QCOMPARE(rowsRemovedSpy.count(), 0);
1297 QCOMPARE(rowsMovedSpy.count(), 0);
1298 QCOMPARE(rowsInsertedSpy.count(), 2);
1299 QCOMPARE(dataChangedSpy.count(), 2);
1300 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1301 QCOMPARE(newEntryInListSpy.count(), 2);
1302
1303 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1304 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1305
1306 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"),
1307 QStringLiteral("album3"), 2, 1);
1308 myPlayList.enqueueOneEntry(DataTypes::EntryData{{{DataTypes::DatabaseIdRole, thirdTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1309
1310 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1311 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1312 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1313 QCOMPARE(rowsRemovedSpy.count(), 0);
1314 QCOMPARE(rowsMovedSpy.count(), 0);
1315 QCOMPARE(rowsInsertedSpy.count(), 3);
1316 QCOMPARE(dataChangedSpy.count(), 2);
1317 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1318 QCOMPARE(newEntryInListSpy.count(), 3);
1319
1320 QCOMPARE(dataChangedSpy.wait(), true);
1321
1322 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1323 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1324 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1325 QCOMPARE(rowsRemovedSpy.count(), 0);
1326 QCOMPARE(rowsMovedSpy.count(), 0);
1327 QCOMPARE(rowsInsertedSpy.count(), 3);
1328 QCOMPARE(dataChangedSpy.count(), 3);
1329 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1330 QCOMPARE(newEntryInListSpy.count(), 3);
1331
1332 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1333 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1334 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1335
1336 QCOMPARE(myPlayList.setData(myPlayList.index(2, 0), true, MediaPlayList::ColumnsRoles::IsPlayingRole), true);
1337
1338 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1339 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1340 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1341 QCOMPARE(rowsRemovedSpy.count(), 0);
1342 QCOMPARE(rowsMovedSpy.count(), 0);
1343 QCOMPARE(rowsInsertedSpy.count(), 3);
1344 QCOMPARE(dataChangedSpy.count(), 4);
1345 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1346 QCOMPARE(newEntryInListSpy.count(), 3);
1347
1348 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1349 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1350 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), true);
1351
1352 QCOMPARE(myPlayList.setData(myPlayList.index(2, 0), true, MediaPlayList::ColumnsRoles::SecondaryTextRole), false);
1353
1354 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1355 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1356 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1357 QCOMPARE(rowsRemovedSpy.count(), 0);
1358 QCOMPARE(rowsMovedSpy.count(), 0);
1359 QCOMPARE(rowsInsertedSpy.count(), 3);
1360 QCOMPARE(dataChangedSpy.count(), 4);
1361 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1362 QCOMPARE(newEntryInListSpy.count(), 3);
1363
1364 QCOMPARE(myPlayList.setData(myPlayList.index(4, 0), true, MediaPlayList::ColumnsRoles::TitleRole), false);
1365
1366 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1367 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1368 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1369 QCOMPARE(rowsRemovedSpy.count(), 0);
1370 QCOMPARE(rowsMovedSpy.count(), 0);
1371 QCOMPARE(rowsInsertedSpy.count(), 3);
1372 QCOMPARE(dataChangedSpy.count(), 4);
1373 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1374 QCOMPARE(newEntryInListSpy.count(), 3);
1375
1376 QCOMPARE(myPlayList.setData({}, true, MediaPlayList::ColumnsRoles::TitleRole), false);
1377
1378 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1379 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1380 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1381 QCOMPARE(rowsRemovedSpy.count(), 0);
1382 QCOMPARE(rowsMovedSpy.count(), 0);
1383 QCOMPARE(rowsInsertedSpy.count(), 3);
1384 QCOMPARE(dataChangedSpy.count(), 4);
1385 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1386 QCOMPARE(newEntryInListSpy.count(), 3);
1387 }
1388
testHasHeader()1389 void MediaPlayListTest::testHasHeader()
1390 {
1391 MediaPlayList myPlayList;
1392 QAbstractItemModelTester testModel(&myPlayList);
1393 DatabaseInterface myDatabaseContent;
1394 TracksListener myListener(&myDatabaseContent);
1395
1396 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
1397 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
1398 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
1399 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
1400 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
1401 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
1402 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
1403 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
1404 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
1405 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
1406
1407 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1408 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1409 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1410 QCOMPARE(rowsRemovedSpy.count(), 0);
1411 QCOMPARE(rowsMovedSpy.count(), 0);
1412 QCOMPARE(rowsInsertedSpy.count(), 0);
1413 QCOMPARE(dataChangedSpy.count(), 0);
1414 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1415 QCOMPARE(newEntryInListSpy.count(), 0);
1416
1417 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1418
1419 connect(&myListener, &TracksListener::trackHasChanged,
1420 &myPlayList, &MediaPlayList::trackChanged,
1421 Qt::QueuedConnection);
1422 connect(&myListener, &TracksListener::tracksListAdded,
1423 &myPlayList, &MediaPlayList::tracksListAdded,
1424 Qt::QueuedConnection);
1425 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
1426 &myListener, &TracksListener::trackByNameInList,
1427 Qt::QueuedConnection);
1428 connect(&myPlayList, &MediaPlayList::newEntryInList,
1429 &myListener, &TracksListener::newEntryInList,
1430 Qt::QueuedConnection);
1431 connect(&myPlayList, &MediaPlayList::newUrlInList,
1432 &myListener, &TracksListener::newUrlInList,
1433 Qt::QueuedConnection);
1434 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1435 &myListener, &TracksListener::tracksAdded);
1436
1437 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1438
1439 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1440 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1441 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1442 QCOMPARE(rowsRemovedSpy.count(), 0);
1443 QCOMPARE(rowsMovedSpy.count(), 0);
1444 QCOMPARE(rowsInsertedSpy.count(), 0);
1445 QCOMPARE(dataChangedSpy.count(), 0);
1446 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1447 QCOMPARE(newEntryInListSpy.count(), 0);
1448
1449 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
1450 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, firstTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1451
1452 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1453 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1454 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1455 QCOMPARE(rowsRemovedSpy.count(), 0);
1456 QCOMPARE(rowsMovedSpy.count(), 0);
1457 QCOMPARE(rowsInsertedSpy.count(), 1);
1458 QCOMPARE(dataChangedSpy.count(), 0);
1459 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1460 QCOMPARE(newEntryInListSpy.count(), 1);
1461
1462 QCOMPARE(dataChangedSpy.wait(), true);
1463
1464 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1465 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1466 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1467 QCOMPARE(rowsRemovedSpy.count(), 0);
1468 QCOMPARE(rowsMovedSpy.count(), 0);
1469 QCOMPARE(rowsInsertedSpy.count(), 1);
1470 QCOMPARE(dataChangedSpy.count(), 1);
1471 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1472 QCOMPARE(newEntryInListSpy.count(), 1);
1473
1474 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1);
1475 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1476
1477 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1478 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1479 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1480 QCOMPARE(rowsRemovedSpy.count(), 0);
1481 QCOMPARE(rowsMovedSpy.count(), 0);
1482 QCOMPARE(rowsInsertedSpy.count(), 2);
1483 QCOMPARE(dataChangedSpy.count(), 1);
1484 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1485 QCOMPARE(newEntryInListSpy.count(), 2);
1486
1487 QCOMPARE(dataChangedSpy.wait(), true);
1488
1489 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1490 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1491 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1492 QCOMPARE(rowsRemovedSpy.count(), 0);
1493 QCOMPARE(rowsMovedSpy.count(), 0);
1494 QCOMPARE(rowsInsertedSpy.count(), 2);
1495 QCOMPARE(dataChangedSpy.count(), 2);
1496 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1497 QCOMPARE(newEntryInListSpy.count(), 2);
1498
1499 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
1500 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, thirdTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1501
1502 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1503 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1504 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1505 QCOMPARE(rowsRemovedSpy.count(), 0);
1506 QCOMPARE(rowsMovedSpy.count(), 0);
1507 QCOMPARE(rowsInsertedSpy.count(), 3);
1508 QCOMPARE(dataChangedSpy.count(), 2);
1509 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1510 QCOMPARE(newEntryInListSpy.count(), 3);
1511
1512 QCOMPARE(dataChangedSpy.wait(), true);
1513
1514 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1515 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1516 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1517 QCOMPARE(rowsRemovedSpy.count(), 0);
1518 QCOMPARE(rowsMovedSpy.count(), 0);
1519 QCOMPARE(rowsInsertedSpy.count(), 3);
1520 QCOMPARE(dataChangedSpy.count(), 3);
1521 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1522 QCOMPARE(newEntryInListSpy.count(), 3);
1523
1524 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
1525 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, fourthTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1526
1527 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1528 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1529 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
1530 QCOMPARE(rowsRemovedSpy.count(), 0);
1531 QCOMPARE(rowsMovedSpy.count(), 0);
1532 QCOMPARE(rowsInsertedSpy.count(), 4);
1533 QCOMPARE(dataChangedSpy.count(), 3);
1534 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1535 QCOMPARE(newEntryInListSpy.count(), 4);
1536
1537 QCOMPARE(dataChangedSpy.wait(), true);
1538
1539 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1540 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1541 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
1542 QCOMPARE(rowsRemovedSpy.count(), 0);
1543 QCOMPARE(rowsMovedSpy.count(), 0);
1544 QCOMPARE(rowsInsertedSpy.count(), 4);
1545 QCOMPARE(dataChangedSpy.count(), 4);
1546 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1547 QCOMPARE(newEntryInListSpy.count(), 4);
1548
1549 myPlayList.removeRows(2, 1);
1550
1551 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
1552 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1553 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
1554 QCOMPARE(rowsRemovedSpy.count(), 1);
1555 QCOMPARE(rowsMovedSpy.count(), 0);
1556 QCOMPARE(rowsInsertedSpy.count(), 4);
1557 QCOMPARE(dataChangedSpy.count(), 4);
1558 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1559 QCOMPARE(newEntryInListSpy.count(), 4);
1560 }
1561
testHasHeaderWithRemove()1562 void MediaPlayListTest::testHasHeaderWithRemove()
1563 {
1564 MediaPlayList myPlayList;
1565 QAbstractItemModelTester testModel(&myPlayList);
1566 DatabaseInterface myDatabaseContent;
1567 TracksListener myListener(&myDatabaseContent);
1568
1569 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
1570 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
1571 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
1572 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
1573 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
1574 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
1575 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
1576 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
1577 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
1578 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
1579
1580 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1581 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1582 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1583 QCOMPARE(rowsRemovedSpy.count(), 0);
1584 QCOMPARE(rowsMovedSpy.count(), 0);
1585 QCOMPARE(rowsInsertedSpy.count(), 0);
1586 QCOMPARE(dataChangedSpy.count(), 0);
1587 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1588 QCOMPARE(newEntryInListSpy.count(), 0);
1589
1590 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1591
1592 connect(&myListener, &TracksListener::trackHasChanged,
1593 &myPlayList, &MediaPlayList::trackChanged,
1594 Qt::QueuedConnection);
1595 connect(&myListener, &TracksListener::tracksListAdded,
1596 &myPlayList, &MediaPlayList::tracksListAdded,
1597 Qt::QueuedConnection);
1598 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
1599 &myListener, &TracksListener::trackByNameInList,
1600 Qt::QueuedConnection);
1601 connect(&myPlayList, &MediaPlayList::newEntryInList,
1602 &myListener, &TracksListener::newEntryInList,
1603 Qt::QueuedConnection);
1604 connect(&myPlayList, &MediaPlayList::newUrlInList,
1605 &myListener, &TracksListener::newUrlInList,
1606 Qt::QueuedConnection);
1607 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1608 &myListener, &TracksListener::tracksAdded);
1609
1610 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1611
1612 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1613 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1614 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1615 QCOMPARE(rowsRemovedSpy.count(), 0);
1616 QCOMPARE(rowsMovedSpy.count(), 0);
1617 QCOMPARE(rowsInsertedSpy.count(), 0);
1618 QCOMPARE(dataChangedSpy.count(), 0);
1619 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1620 QCOMPARE(newEntryInListSpy.count(), 0);
1621
1622 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
1623 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, firstTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1624
1625 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1626 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1627 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1628 QCOMPARE(rowsRemovedSpy.count(), 0);
1629 QCOMPARE(rowsMovedSpy.count(), 0);
1630 QCOMPARE(rowsInsertedSpy.count(), 1);
1631 QCOMPARE(dataChangedSpy.count(), 0);
1632 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1633 QCOMPARE(newEntryInListSpy.count(), 1);
1634
1635 QCOMPARE(dataChangedSpy.wait(), true);
1636
1637 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1638 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1639 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1640 QCOMPARE(rowsRemovedSpy.count(), 0);
1641 QCOMPARE(rowsMovedSpy.count(), 0);
1642 QCOMPARE(rowsInsertedSpy.count(), 1);
1643 QCOMPARE(dataChangedSpy.count(), 1);
1644 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1645 QCOMPARE(newEntryInListSpy.count(), 1);
1646
1647 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
1648 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1649
1650 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1651 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1652 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1653 QCOMPARE(rowsRemovedSpy.count(), 0);
1654 QCOMPARE(rowsMovedSpy.count(), 0);
1655 QCOMPARE(rowsInsertedSpy.count(), 2);
1656 QCOMPARE(dataChangedSpy.count(), 1);
1657 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1658 QCOMPARE(newEntryInListSpy.count(), 2);
1659
1660 QCOMPARE(dataChangedSpy.wait(), true);
1661
1662 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1663 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1664 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1665 QCOMPARE(rowsRemovedSpy.count(), 0);
1666 QCOMPARE(rowsMovedSpy.count(), 0);
1667 QCOMPARE(rowsInsertedSpy.count(), 2);
1668 QCOMPARE(dataChangedSpy.count(), 2);
1669 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1670 QCOMPARE(newEntryInListSpy.count(), 2);
1671
1672 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1);
1673 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, thirdTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1674
1675 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1676 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1677 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1678 QCOMPARE(rowsRemovedSpy.count(), 0);
1679 QCOMPARE(rowsMovedSpy.count(), 0);
1680 QCOMPARE(rowsInsertedSpy.count(), 3);
1681 QCOMPARE(dataChangedSpy.count(), 2);
1682 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1683 QCOMPARE(newEntryInListSpy.count(), 3);
1684
1685 QCOMPARE(dataChangedSpy.wait(), true);
1686
1687 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1688 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1689 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1690 QCOMPARE(rowsRemovedSpy.count(), 0);
1691 QCOMPARE(rowsMovedSpy.count(), 0);
1692 QCOMPARE(rowsInsertedSpy.count(), 3);
1693 QCOMPARE(dataChangedSpy.count(), 3);
1694 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1695 QCOMPARE(newEntryInListSpy.count(), 3);
1696
1697 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
1698 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, fourthTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1699
1700 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1701 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1702 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
1703 QCOMPARE(rowsRemovedSpy.count(), 0);
1704 QCOMPARE(rowsMovedSpy.count(), 0);
1705 QCOMPARE(rowsInsertedSpy.count(), 4);
1706 QCOMPARE(dataChangedSpy.count(), 3);
1707 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1708 QCOMPARE(newEntryInListSpy.count(), 4);
1709
1710 QCOMPARE(dataChangedSpy.wait(), true);
1711
1712 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1713 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1714 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
1715 QCOMPARE(rowsRemovedSpy.count(), 0);
1716 QCOMPARE(rowsMovedSpy.count(), 0);
1717 QCOMPARE(rowsInsertedSpy.count(), 4);
1718 QCOMPARE(dataChangedSpy.count(), 4);
1719 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1720 QCOMPARE(newEntryInListSpy.count(), 4);
1721
1722 myPlayList.removeRows(2, 1);
1723
1724 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
1725 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1726 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
1727 QCOMPARE(rowsRemovedSpy.count(), 1);
1728 QCOMPARE(rowsMovedSpy.count(), 0);
1729 QCOMPARE(rowsInsertedSpy.count(), 4);
1730 QCOMPARE(dataChangedSpy.count(), 4);
1731 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1732 QCOMPARE(newEntryInListSpy.count(), 4);
1733
1734 myPlayList.removeRows(0, 1);
1735
1736 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2);
1737 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1738 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
1739 QCOMPARE(rowsRemovedSpy.count(), 2);
1740 QCOMPARE(rowsMovedSpy.count(), 0);
1741 QCOMPARE(rowsInsertedSpy.count(), 4);
1742 QCOMPARE(dataChangedSpy.count(), 4);
1743 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1744 QCOMPARE(newEntryInListSpy.count(), 4);
1745 }
1746
testHasHeaderWithRestore()1747 void MediaPlayListTest::testHasHeaderWithRestore()
1748 {
1749 MediaPlayList myPlayList;
1750 QAbstractItemModelTester testModel(&myPlayList);
1751 DatabaseInterface myDatabaseContent;
1752 TracksListener myListener(&myDatabaseContent);
1753
1754 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
1755 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
1756 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
1757 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
1758 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
1759 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
1760 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
1761 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
1762 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
1763 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
1764
1765 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1766 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1767 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1768 QCOMPARE(rowsRemovedSpy.count(), 0);
1769 QCOMPARE(rowsMovedSpy.count(), 0);
1770 QCOMPARE(rowsInsertedSpy.count(), 0);
1771 QCOMPARE(dataChangedSpy.count(), 0);
1772 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1773 QCOMPARE(newEntryInListSpy.count(), 0);
1774
1775 myDatabaseContent.init(QStringLiteral("testDbDirectContentHeaderWithRestore"));
1776
1777 connect(&myListener, &TracksListener::trackHasChanged,
1778 &myPlayList, &MediaPlayList::trackChanged,
1779 Qt::QueuedConnection);
1780 connect(&myListener, &TracksListener::tracksListAdded,
1781 &myPlayList, &MediaPlayList::tracksListAdded,
1782 Qt::QueuedConnection);
1783 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
1784 &myListener, &TracksListener::trackByNameInList,
1785 Qt::QueuedConnection);
1786 connect(&myPlayList, &MediaPlayList::newEntryInList,
1787 &myListener, &TracksListener::newEntryInList,
1788 Qt::QueuedConnection);
1789 connect(&myPlayList, &MediaPlayList::newUrlInList,
1790 &myListener, &TracksListener::newUrlInList,
1791 Qt::QueuedConnection);
1792 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1793 &myListener, &TracksListener::tracksAdded);
1794
1795 myPlayList.enqueueRestoredEntries(
1796 QVariantList({QStringList({{},QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), QStringLiteral("1"), QStringLiteral("1"),{}}),
1797 QStringList({{},QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), QStringLiteral("1"), QStringLiteral("1"),{}}),
1798 QStringList({{},QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), QStringLiteral("2"), QStringLiteral("1"),{}}),
1799 QStringList({{},QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), QStringLiteral("3"), QStringLiteral("1"),{}})
1800 }));
1801
1802 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1803 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1804 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1805 QCOMPARE(rowsRemovedSpy.count(), 0);
1806 QCOMPARE(rowsMovedSpy.count(), 0);
1807 QCOMPARE(rowsInsertedSpy.count(), 1);
1808 QCOMPARE(dataChangedSpy.count(), 0);
1809 QCOMPARE(newTrackByNameInListSpy.count(), 4);
1810 QCOMPARE(newEntryInListSpy.count(), 0);
1811
1812 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1813
1814 while (dataChangedSpy.count() < 4) {
1815 QCOMPARE(dataChangedSpy.wait(), true);
1816 }
1817
1818 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1819 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1820 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1821 QCOMPARE(rowsRemovedSpy.count(), 0);
1822 QCOMPARE(rowsMovedSpy.count(), 0);
1823 QCOMPARE(rowsInsertedSpy.count(), 1);
1824 QCOMPARE(dataChangedSpy.count(), 4);
1825 QCOMPARE(newTrackByNameInListSpy.count(), 4);
1826 QCOMPARE(newEntryInListSpy.count(), 0);
1827
1828 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
1829 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
1830 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
1831 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
1832 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
1833 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
1834 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
1835 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
1836 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
1837 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
1838 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
1839 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1);
1840 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
1841 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
1842 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
1843 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
1844 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
1845 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
1846 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
1847 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
1848 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
1849 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
1850 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
1851 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
1852 }
1853
testHasHeaderMoveFirst()1854 void MediaPlayListTest::testHasHeaderMoveFirst()
1855 {
1856 MediaPlayList myPlayList;
1857 QAbstractItemModelTester testModel(&myPlayList);
1858
1859 DatabaseInterface myDatabaseContent;
1860 TracksListener myListener(&myDatabaseContent);
1861
1862 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
1863 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
1864 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
1865 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
1866 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
1867 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
1868 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
1869 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
1870 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
1871 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
1872
1873 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1874 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1875 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1876 QCOMPARE(rowsRemovedSpy.count(), 0);
1877 QCOMPARE(rowsMovedSpy.count(), 0);
1878 QCOMPARE(rowsInsertedSpy.count(), 0);
1879 QCOMPARE(dataChangedSpy.count(), 0);
1880 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1881 QCOMPARE(newEntryInListSpy.count(), 0);
1882
1883 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1884
1885 connect(&myListener, &TracksListener::trackHasChanged,
1886 &myPlayList, &MediaPlayList::trackChanged,
1887 Qt::QueuedConnection);
1888 connect(&myListener, &TracksListener::tracksListAdded,
1889 &myPlayList, &MediaPlayList::tracksListAdded,
1890 Qt::QueuedConnection);
1891 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
1892 &myListener, &TracksListener::trackByNameInList,
1893 Qt::QueuedConnection);
1894 connect(&myPlayList, &MediaPlayList::newEntryInList,
1895 &myListener, &TracksListener::newEntryInList,
1896 Qt::QueuedConnection);
1897 connect(&myPlayList, &MediaPlayList::newUrlInList,
1898 &myListener, &TracksListener::newUrlInList,
1899 Qt::QueuedConnection);
1900 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1901 &myListener, &TracksListener::tracksAdded);
1902
1903 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1904
1905 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1906 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1907 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
1908 QCOMPARE(rowsRemovedSpy.count(), 0);
1909 QCOMPARE(rowsMovedSpy.count(), 0);
1910 QCOMPARE(rowsInsertedSpy.count(), 0);
1911 QCOMPARE(dataChangedSpy.count(), 0);
1912 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1913 QCOMPARE(newEntryInListSpy.count(), 0);
1914
1915 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
1916 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, firstTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1917
1918 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1919 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1920 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1921 QCOMPARE(rowsRemovedSpy.count(), 0);
1922 QCOMPARE(rowsMovedSpy.count(), 0);
1923 QCOMPARE(rowsInsertedSpy.count(), 1);
1924 QCOMPARE(dataChangedSpy.count(), 0);
1925 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1926 QCOMPARE(newEntryInListSpy.count(), 1);
1927
1928 QCOMPARE(dataChangedSpy.wait(), true);
1929
1930 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1931 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1932 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
1933 QCOMPARE(rowsRemovedSpy.count(), 0);
1934 QCOMPARE(rowsMovedSpy.count(), 0);
1935 QCOMPARE(rowsInsertedSpy.count(), 1);
1936 QCOMPARE(dataChangedSpy.count(), 1);
1937 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1938 QCOMPARE(newEntryInListSpy.count(), 1);
1939
1940 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
1941 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1942
1943 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1944 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1945 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1946 QCOMPARE(rowsRemovedSpy.count(), 0);
1947 QCOMPARE(rowsMovedSpy.count(), 0);
1948 QCOMPARE(rowsInsertedSpy.count(), 2);
1949 QCOMPARE(dataChangedSpy.count(), 1);
1950 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1951 QCOMPARE(newEntryInListSpy.count(), 2);
1952
1953 QCOMPARE(dataChangedSpy.wait(), true);
1954
1955 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1956 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1957 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1958 QCOMPARE(rowsRemovedSpy.count(), 0);
1959 QCOMPARE(rowsMovedSpy.count(), 0);
1960 QCOMPARE(rowsInsertedSpy.count(), 2);
1961 QCOMPARE(dataChangedSpy.count(), 2);
1962 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1963 QCOMPARE(newEntryInListSpy.count(), 2);
1964
1965 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
1966 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, thirdTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1967
1968 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1969 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1970 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1971 QCOMPARE(rowsRemovedSpy.count(), 0);
1972 QCOMPARE(rowsMovedSpy.count(), 0);
1973 QCOMPARE(rowsInsertedSpy.count(), 3);
1974 QCOMPARE(dataChangedSpy.count(), 2);
1975 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1976 QCOMPARE(newEntryInListSpy.count(), 3);
1977
1978 QCOMPARE(dataChangedSpy.wait(), true);
1979
1980 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1981 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1982 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
1983 QCOMPARE(rowsRemovedSpy.count(), 0);
1984 QCOMPARE(rowsMovedSpy.count(), 0);
1985 QCOMPARE(rowsInsertedSpy.count(), 3);
1986 QCOMPARE(dataChangedSpy.count(), 3);
1987 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1988 QCOMPARE(newEntryInListSpy.count(), 3);
1989
1990 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1);
1991 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, fourthTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
1992
1993 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
1994 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1995 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
1996 QCOMPARE(rowsRemovedSpy.count(), 0);
1997 QCOMPARE(rowsMovedSpy.count(), 0);
1998 QCOMPARE(rowsInsertedSpy.count(), 4);
1999 QCOMPARE(dataChangedSpy.count(), 3);
2000 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2001 QCOMPARE(newEntryInListSpy.count(), 4);
2002
2003 QCOMPARE(dataChangedSpy.wait(), true);
2004
2005 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2006 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2007 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2008 QCOMPARE(rowsRemovedSpy.count(), 0);
2009 QCOMPARE(rowsMovedSpy.count(), 0);
2010 QCOMPARE(rowsInsertedSpy.count(), 4);
2011 QCOMPARE(dataChangedSpy.count(), 4);
2012 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2013 QCOMPARE(newEntryInListSpy.count(), 4);
2014
2015 myPlayList.moveRows({}, 0, 1, {}, 3);
2016
2017 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2018 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
2019 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2020 QCOMPARE(rowsRemovedSpy.count(), 0);
2021 QCOMPARE(rowsMovedSpy.count(), 1);
2022 QCOMPARE(rowsInsertedSpy.count(), 4);
2023 QCOMPARE(dataChangedSpy.count(), 4);
2024 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2025 QCOMPARE(newEntryInListSpy.count(), 4);
2026 }
2027
testHasHeaderMoveAnother()2028 void MediaPlayListTest::testHasHeaderMoveAnother()
2029 {
2030 MediaPlayList myPlayList;
2031 QAbstractItemModelTester testModel(&myPlayList);
2032 DatabaseInterface myDatabaseContent;
2033 TracksListener myListener(&myDatabaseContent);
2034
2035 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
2036 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
2037 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
2038 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
2039 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
2040 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
2041 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
2042 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
2043 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
2044 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
2045
2046 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2047 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2048 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2049 QCOMPARE(rowsRemovedSpy.count(), 0);
2050 QCOMPARE(rowsMovedSpy.count(), 0);
2051 QCOMPARE(rowsInsertedSpy.count(), 0);
2052 QCOMPARE(dataChangedSpy.count(), 0);
2053 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2054 QCOMPARE(newEntryInListSpy.count(), 0);
2055
2056 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
2057
2058 connect(&myListener, &TracksListener::trackHasChanged,
2059 &myPlayList, &MediaPlayList::trackChanged,
2060 Qt::QueuedConnection);
2061 connect(&myListener, &TracksListener::tracksListAdded,
2062 &myPlayList, &MediaPlayList::tracksListAdded,
2063 Qt::QueuedConnection);
2064 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2065 &myListener, &TracksListener::trackByNameInList,
2066 Qt::QueuedConnection);
2067 connect(&myPlayList, &MediaPlayList::newEntryInList,
2068 &myListener, &TracksListener::newEntryInList,
2069 Qt::QueuedConnection);
2070 connect(&myPlayList, &MediaPlayList::newUrlInList,
2071 &myListener, &TracksListener::newUrlInList,
2072 Qt::QueuedConnection);
2073 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2074 &myListener, &TracksListener::tracksAdded);
2075
2076 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2077
2078 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2079 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2080 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2081 QCOMPARE(rowsRemovedSpy.count(), 0);
2082 QCOMPARE(rowsMovedSpy.count(), 0);
2083 QCOMPARE(rowsInsertedSpy.count(), 0);
2084 QCOMPARE(dataChangedSpy.count(), 0);
2085 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2086 QCOMPARE(newEntryInListSpy.count(), 0);
2087
2088 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
2089 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, firstTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2090
2091 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2092 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2093 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2094 QCOMPARE(rowsRemovedSpy.count(), 0);
2095 QCOMPARE(rowsMovedSpy.count(), 0);
2096 QCOMPARE(rowsInsertedSpy.count(), 1);
2097 QCOMPARE(dataChangedSpy.count(), 0);
2098 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2099 QCOMPARE(newEntryInListSpy.count(), 1);
2100
2101 QCOMPARE(dataChangedSpy.wait(), true);
2102
2103 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2104 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2105 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2106 QCOMPARE(rowsRemovedSpy.count(), 0);
2107 QCOMPARE(rowsMovedSpy.count(), 0);
2108 QCOMPARE(rowsInsertedSpy.count(), 1);
2109 QCOMPARE(dataChangedSpy.count(), 1);
2110 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2111 QCOMPARE(newEntryInListSpy.count(), 1);
2112
2113 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
2114 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2115
2116 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2117 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2118 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2119 QCOMPARE(rowsRemovedSpy.count(), 0);
2120 QCOMPARE(rowsMovedSpy.count(), 0);
2121 QCOMPARE(rowsInsertedSpy.count(), 2);
2122 QCOMPARE(dataChangedSpy.count(), 1);
2123 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2124 QCOMPARE(newEntryInListSpy.count(), 2);
2125
2126 QCOMPARE(dataChangedSpy.wait(), true);
2127
2128 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2129 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2130 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2131 QCOMPARE(rowsRemovedSpy.count(), 0);
2132 QCOMPARE(rowsMovedSpy.count(), 0);
2133 QCOMPARE(rowsInsertedSpy.count(), 2);
2134 QCOMPARE(dataChangedSpy.count(), 2);
2135 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2136 QCOMPARE(newEntryInListSpy.count(), 2);
2137
2138 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
2139 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, thirdTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2140
2141 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2142 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2143 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
2144 QCOMPARE(rowsRemovedSpy.count(), 0);
2145 QCOMPARE(rowsMovedSpy.count(), 0);
2146 QCOMPARE(rowsInsertedSpy.count(), 3);
2147 QCOMPARE(dataChangedSpy.count(), 2);
2148 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2149 QCOMPARE(newEntryInListSpy.count(), 3);
2150
2151 QCOMPARE(dataChangedSpy.wait(), true);
2152
2153 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2154 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2155 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
2156 QCOMPARE(rowsRemovedSpy.count(), 0);
2157 QCOMPARE(rowsMovedSpy.count(), 0);
2158 QCOMPARE(rowsInsertedSpy.count(), 3);
2159 QCOMPARE(dataChangedSpy.count(), 3);
2160 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2161 QCOMPARE(newEntryInListSpy.count(), 3);
2162
2163 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1);
2164 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, fourthTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2165
2166 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2167 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2168 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2169 QCOMPARE(rowsRemovedSpy.count(), 0);
2170 QCOMPARE(rowsMovedSpy.count(), 0);
2171 QCOMPARE(rowsInsertedSpy.count(), 4);
2172 QCOMPARE(dataChangedSpy.count(), 3);
2173 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2174 QCOMPARE(newEntryInListSpy.count(), 4);
2175
2176 QCOMPARE(dataChangedSpy.wait(), true);
2177
2178 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2179 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2180 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2181 QCOMPARE(rowsRemovedSpy.count(), 0);
2182 QCOMPARE(rowsMovedSpy.count(), 0);
2183 QCOMPARE(rowsInsertedSpy.count(), 4);
2184 QCOMPARE(dataChangedSpy.count(), 4);
2185 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2186 QCOMPARE(newEntryInListSpy.count(), 4);
2187
2188 myPlayList.moveRows({}, 3, 1, {}, 0);
2189
2190 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2191 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
2192 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2193 QCOMPARE(rowsRemovedSpy.count(), 0);
2194 QCOMPARE(rowsMovedSpy.count(), 1);
2195 QCOMPARE(rowsInsertedSpy.count(), 4);
2196 QCOMPARE(dataChangedSpy.count(), 4);
2197 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2198 QCOMPARE(newEntryInListSpy.count(), 4);
2199 }
2200
restoreMultipleIdenticalTracks()2201 void MediaPlayListTest::restoreMultipleIdenticalTracks()
2202 {
2203 MediaPlayList myPlayList;
2204 QAbstractItemModelTester testModel(&myPlayList);
2205 DatabaseInterface myDatabaseContent;
2206 TracksListener myListener(&myDatabaseContent);
2207
2208 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
2209 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
2210 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
2211 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
2212 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
2213 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
2214 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
2215 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
2216 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
2217 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
2218
2219 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2220 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2221 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2222 QCOMPARE(rowsRemovedSpy.count(), 0);
2223 QCOMPARE(rowsMovedSpy.count(), 0);
2224 QCOMPARE(rowsInsertedSpy.count(), 0);
2225 QCOMPARE(dataChangedSpy.count(), 0);
2226 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2227 QCOMPARE(newEntryInListSpy.count(), 0);
2228
2229 myDatabaseContent.init(QStringLiteral("testDbDirectContentHeaderWithRestore"));
2230
2231 connect(&myListener, &TracksListener::trackHasChanged,
2232 &myPlayList, &MediaPlayList::trackChanged,
2233 Qt::QueuedConnection);
2234 connect(&myListener, &TracksListener::tracksListAdded,
2235 &myPlayList, &MediaPlayList::tracksListAdded,
2236 Qt::QueuedConnection);
2237 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2238 &myListener, &TracksListener::trackByNameInList,
2239 Qt::QueuedConnection);
2240 connect(&myPlayList, &MediaPlayList::newEntryInList,
2241 &myListener, &TracksListener::newEntryInList,
2242 Qt::QueuedConnection);
2243 connect(&myPlayList, &MediaPlayList::newUrlInList,
2244 &myListener, &TracksListener::newUrlInList,
2245 Qt::QueuedConnection);
2246 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2247 &myListener, &TracksListener::tracksAdded);
2248
2249 myPlayList.enqueueRestoredEntries(
2250 QVariantList({QStringList({{},QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), QStringLiteral("3"), QStringLiteral("3"),{}}),
2251 QStringList({{},QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), QStringLiteral("3"), QStringLiteral("3"),{}}),
2252 QStringList({{},QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), QStringLiteral("3"), QStringLiteral("3"),{}}),
2253 QStringList({{},QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), QStringLiteral("3"), QStringLiteral("3"),{}})
2254 }));
2255
2256 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2257 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2258 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2259 QCOMPARE(rowsRemovedSpy.count(), 0);
2260 QCOMPARE(rowsMovedSpy.count(), 0);
2261 QCOMPARE(rowsInsertedSpy.count(), 1);
2262 QCOMPARE(dataChangedSpy.count(), 0);
2263 QCOMPARE(newTrackByNameInListSpy.count(), 4);
2264 QCOMPARE(newEntryInListSpy.count(), 0);
2265
2266 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2267
2268 QCOMPARE(dataChangedSpy.wait(), true);
2269
2270 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2271 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2272 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2273 QCOMPARE(rowsRemovedSpy.count(), 0);
2274 QCOMPARE(rowsMovedSpy.count(), 0);
2275 QCOMPARE(rowsInsertedSpy.count(), 1);
2276 QCOMPARE(dataChangedSpy.count(), 4);
2277 QCOMPARE(newTrackByNameInListSpy.count(), 4);
2278 QCOMPARE(newEntryInListSpy.count(), 0);
2279
2280 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
2281 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
2282 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist3"));
2283 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
2284 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 3);
2285 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 3);
2286 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
2287 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
2288 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist3"));
2289 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
2290 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 3);
2291 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 3);
2292 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
2293 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
2294 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist3"));
2295 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
2296 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 3);
2297 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 3);
2298 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
2299 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
2300 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist3"));
2301 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
2302 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 3);
2303 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 3);
2304 }
2305
restoreTrackWithoutAlbum()2306 void MediaPlayListTest::restoreTrackWithoutAlbum()
2307 {
2308 QTemporaryFile databaseFile;
2309 databaseFile.open();
2310
2311 qDebug() << "restoreTrackWithoutAlbum" << databaseFile.fileName();
2312
2313 MediaPlayList myPlayList;
2314 QAbstractItemModelTester testModel(&myPlayList);
2315 DatabaseInterface myDatabaseContent;
2316 TracksListener myListener(&myDatabaseContent);
2317
2318 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
2319 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
2320 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
2321 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
2322 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
2323 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
2324 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
2325 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
2326 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
2327 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
2328
2329 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2330 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2331 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2332 QCOMPARE(rowsRemovedSpy.count(), 0);
2333 QCOMPARE(rowsMovedSpy.count(), 0);
2334 QCOMPARE(rowsInsertedSpy.count(), 0);
2335 QCOMPARE(dataChangedSpy.count(), 0);
2336 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2337 QCOMPARE(newEntryInListSpy.count(), 0);
2338
2339 myDatabaseContent.init(QStringLiteral("restoreTrackWithoutAlbum"), databaseFile.fileName());
2340
2341 connect(&myListener, &TracksListener::trackHasChanged,
2342 &myPlayList, &MediaPlayList::trackChanged,
2343 Qt::QueuedConnection);
2344 connect(&myListener, &TracksListener::tracksListAdded,
2345 &myPlayList, &MediaPlayList::tracksListAdded,
2346 Qt::QueuedConnection);
2347 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2348 &myListener, &TracksListener::trackByNameInList,
2349 Qt::QueuedConnection);
2350 connect(&myPlayList, &MediaPlayList::newEntryInList,
2351 &myListener, &TracksListener::newEntryInList,
2352 Qt::QueuedConnection);
2353 connect(&myPlayList, &MediaPlayList::newUrlInList,
2354 &myListener, &TracksListener::newUrlInList,
2355 Qt::QueuedConnection);
2356 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2357 &myListener, &TracksListener::tracksAdded);
2358
2359 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2360
2361 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2362 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2363 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2364 QCOMPARE(rowsRemovedSpy.count(), 0);
2365 QCOMPARE(rowsMovedSpy.count(), 0);
2366 QCOMPARE(rowsInsertedSpy.count(), 0);
2367 QCOMPARE(dataChangedSpy.count(), 0);
2368 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2369 QCOMPARE(newEntryInListSpy.count(), 0);
2370
2371 auto newTrack = DataTypes::TrackDataType{};
2372
2373 newTrack[DataTypes::IdRole] = QStringLiteral("$29");
2374 newTrack[DataTypes::ParentIdRole] = QStringLiteral("0");
2375 newTrack[DataTypes::TitleRole] = QStringLiteral("track19");
2376 newTrack[DataTypes::ArtistRole] = QStringLiteral("artist2");
2377 newTrack[DataTypes::DurationRole] = QTime::fromMSecsSinceStartOfDay(29);
2378 newTrack[DataTypes::ResourceRole] = QUrl::fromLocalFile(QStringLiteral("/$29"));
2379 newTrack[DataTypes::FileModificationTime] = QDateTime::fromMSecsSinceEpoch(29);
2380 newTrack[DataTypes::ImageUrlRole] = QUrl::fromLocalFile(QStringLiteral("withoutAlbum"));
2381 newTrack[DataTypes::RatingRole] = 9;
2382 newTrack[DataTypes::IsSingleDiscAlbumRole] = true;
2383 newTrack[DataTypes::GenreRole] = QStringLiteral("genre1");
2384 newTrack[DataTypes::ComposerRole] = QStringLiteral("composer1");
2385 newTrack[DataTypes::LyricistRole] = QStringLiteral("lyricist1");
2386 newTrack[DataTypes::HasEmbeddedCover] = false;
2387 newTrack[DataTypes::ElementTypeRole] = ElisaUtils::Track;
2388
2389 myDatabaseContent.insertTracksList({newTrack}, mNewCovers);
2390
2391 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2392 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2393 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2394 QCOMPARE(rowsRemovedSpy.count(), 0);
2395 QCOMPARE(rowsMovedSpy.count(), 0);
2396 QCOMPARE(rowsInsertedSpy.count(), 0);
2397 QCOMPARE(dataChangedSpy.count(), 0);
2398 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2399 QCOMPARE(newEntryInListSpy.count(), 0);
2400
2401 myPlayList.enqueueRestoredEntries(QVariantList({QStringList({QStringLiteral("0"), QStringLiteral("track19"), QStringLiteral("artist2"), {}, {}, {}, QString::number(ElisaUtils::PlayListEntryType::Unknown)})}));
2402
2403 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2404 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2405 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2406 QCOMPARE(rowsRemovedSpy.count(), 0);
2407 QCOMPARE(rowsMovedSpy.count(), 0);
2408 QCOMPARE(rowsInsertedSpy.count(), 1);
2409 QCOMPARE(dataChangedSpy.count(), 0);
2410 QCOMPARE(newTrackByNameInListSpy.count(), 1);
2411 QCOMPARE(newEntryInListSpy.count(), 0);
2412
2413 QCOMPARE(dataChangedSpy.wait(), true);
2414
2415 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2416 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2417 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2418 QCOMPARE(rowsRemovedSpy.count(), 0);
2419 QCOMPARE(rowsMovedSpy.count(), 0);
2420 QCOMPARE(rowsInsertedSpy.count(), 1);
2421 QCOMPARE(dataChangedSpy.count(), 1);
2422 QCOMPARE(newTrackByNameInListSpy.count(), 1);
2423 QCOMPARE(newEntryInListSpy.count(), 0);
2424
2425 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track19"));
2426 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumRole).toString(), QString());
2427 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2"));
2428 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 0);
2429 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 0);
2430 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 29);
2431 }
2432
restoreLocalTrack()2433 void MediaPlayListTest::restoreLocalTrack()
2434 {
2435 QTemporaryFile databaseFile;
2436 databaseFile.open();
2437
2438 qDebug() << "restoreLocalTrack" << databaseFile.fileName();
2439
2440 MediaPlayList myPlayList;
2441 QAbstractItemModelTester testModel(&myPlayList);
2442 DatabaseInterface myDatabaseContent;
2443 TracksListener myListener(&myDatabaseContent);
2444
2445 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
2446 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
2447 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
2448 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
2449 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
2450 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
2451 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
2452 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
2453 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
2454 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
2455
2456 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2457 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2458 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2459 QCOMPARE(rowsRemovedSpy.count(), 0);
2460 QCOMPARE(rowsMovedSpy.count(), 0);
2461 QCOMPARE(rowsInsertedSpy.count(), 0);
2462 QCOMPARE(dataChangedSpy.count(), 0);
2463 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2464 QCOMPARE(newEntryInListSpy.count(), 0);
2465
2466 myDatabaseContent.init(QStringLiteral("restoreTrackWithoutAlbum"), databaseFile.fileName());
2467
2468 connect(&myListener, &TracksListener::trackHasChanged,
2469 &myPlayList, &MediaPlayList::trackChanged,
2470 Qt::QueuedConnection);
2471 connect(&myListener, &TracksListener::tracksListAdded,
2472 &myPlayList, &MediaPlayList::tracksListAdded,
2473 Qt::QueuedConnection);
2474 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2475 &myListener, &TracksListener::trackByNameInList,
2476 Qt::QueuedConnection);
2477 connect(&myPlayList, &MediaPlayList::newEntryInList,
2478 &myListener, &TracksListener::newEntryInList,
2479 Qt::QueuedConnection);
2480 connect(&myPlayList, &MediaPlayList::newUrlInList,
2481 &myListener, &TracksListener::newUrlInList,
2482 Qt::QueuedConnection);
2483 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2484 &myListener, &TracksListener::tracksAdded);
2485
2486 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2487
2488 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2489 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2490 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2491 QCOMPARE(rowsRemovedSpy.count(), 0);
2492 QCOMPARE(rowsMovedSpy.count(), 0);
2493 QCOMPARE(rowsInsertedSpy.count(), 0);
2494 QCOMPARE(dataChangedSpy.count(), 0);
2495 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2496 QCOMPARE(newEntryInListSpy.count(), 0);
2497
2498 myPlayList.enqueueRestoredEntries(QVariantList({QStringList({{},
2499 QStringLiteral("Title"),
2500 QStringLiteral("Artist"),
2501 QStringLiteral("Test"),
2502 {},
2503 {},
2504 QString::number(ElisaUtils::PlayListEntryType::Unknown),
2505 QUrl::fromLocalFile(QStringLiteral(MEDIAPLAYLIST_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/test.ogg")).toString()})}));
2506
2507 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2508 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2509 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2510 QCOMPARE(rowsRemovedSpy.count(), 0);
2511 QCOMPARE(rowsMovedSpy.count(), 0);
2512 QCOMPARE(rowsInsertedSpy.count(), 1);
2513 QCOMPARE(dataChangedSpy.count(), 0);
2514 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2515 QCOMPARE(newEntryInListSpy.count(), 1);
2516
2517 QCOMPARE(dataChangedSpy.wait(), true);
2518
2519 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2520 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2521 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2522 QCOMPARE(rowsRemovedSpy.count(), 0);
2523 QCOMPARE(rowsMovedSpy.count(), 0);
2524 QCOMPARE(rowsInsertedSpy.count(), 1);
2525 QCOMPARE(dataChangedSpy.count(), 1);
2526 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2527 QCOMPARE(newEntryInListSpy.count(), 1);
2528
2529 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("Title"));
2530 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("Test"));
2531 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("Artist"));
2532 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
2533 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2534 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1000);
2535 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::IsValidRole).toBool(), true);
2536 }
2537
testHasHeaderAlbumWithSameTitle()2538 void MediaPlayListTest::testHasHeaderAlbumWithSameTitle()
2539 {
2540 MediaPlayList myPlayList;
2541 QAbstractItemModelTester testModel(&myPlayList);
2542 DatabaseInterface myDatabaseContent;
2543 TracksListener myListener(&myDatabaseContent);
2544
2545 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
2546 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
2547 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
2548 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
2549 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
2550 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
2551 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
2552 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
2553 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
2554 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
2555
2556 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2557 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2558 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2559 QCOMPARE(rowsRemovedSpy.count(), 0);
2560 QCOMPARE(rowsMovedSpy.count(), 0);
2561 QCOMPARE(rowsInsertedSpy.count(), 0);
2562 QCOMPARE(dataChangedSpy.count(), 0);
2563 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2564 QCOMPARE(newEntryInListSpy.count(), 0);
2565
2566 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
2567
2568 connect(&myListener, &TracksListener::trackHasChanged,
2569 &myPlayList, &MediaPlayList::trackChanged,
2570 Qt::QueuedConnection);
2571 connect(&myListener, &TracksListener::tracksListAdded,
2572 &myPlayList, &MediaPlayList::tracksListAdded,
2573 Qt::QueuedConnection);
2574 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2575 &myListener, &TracksListener::trackByNameInList,
2576 Qt::QueuedConnection);
2577 connect(&myPlayList, &MediaPlayList::newEntryInList,
2578 &myListener, &TracksListener::newEntryInList,
2579 Qt::QueuedConnection);
2580 connect(&myPlayList, &MediaPlayList::newUrlInList,
2581 &myListener, &TracksListener::newUrlInList,
2582 Qt::QueuedConnection);
2583 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2584 &myListener, &TracksListener::tracksAdded);
2585
2586 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2587
2588 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2589 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2590 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2591 QCOMPARE(rowsRemovedSpy.count(), 0);
2592 QCOMPARE(rowsMovedSpy.count(), 0);
2593 QCOMPARE(rowsInsertedSpy.count(), 0);
2594 QCOMPARE(dataChangedSpy.count(), 0);
2595 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2596 QCOMPARE(newEntryInListSpy.count(), 0);
2597
2598 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"),
2599 QStringLiteral("album3"), 1, 1);
2600 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, firstTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2601
2602 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2603 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2604 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2605 QCOMPARE(rowsRemovedSpy.count(), 0);
2606 QCOMPARE(rowsMovedSpy.count(), 0);
2607 QCOMPARE(rowsInsertedSpy.count(), 1);
2608 QCOMPARE(dataChangedSpy.count(), 0);
2609 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2610 QCOMPARE(newEntryInListSpy.count(), 1);
2611
2612 QCOMPARE(dataChangedSpy.wait(), true);
2613
2614 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2615 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2616 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2617 QCOMPARE(rowsRemovedSpy.count(), 0);
2618 QCOMPARE(rowsMovedSpy.count(), 0);
2619 QCOMPARE(rowsInsertedSpy.count(), 1);
2620 QCOMPARE(dataChangedSpy.count(), 1);
2621 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2622 QCOMPARE(newEntryInListSpy.count(), 1);
2623
2624 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"),
2625 QStringLiteral("album1"), 1, 1);
2626 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2627
2628 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2629 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2630 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2631 QCOMPARE(rowsRemovedSpy.count(), 0);
2632 QCOMPARE(rowsMovedSpy.count(), 0);
2633 QCOMPARE(rowsInsertedSpy.count(), 2);
2634 QCOMPARE(dataChangedSpy.count(), 1);
2635 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2636 QCOMPARE(newEntryInListSpy.count(), 2);
2637
2638 QCOMPARE(dataChangedSpy.wait(), true);
2639
2640 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2641 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2642 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2643 QCOMPARE(rowsRemovedSpy.count(), 0);
2644 QCOMPARE(rowsMovedSpy.count(), 0);
2645 QCOMPARE(rowsInsertedSpy.count(), 2);
2646 QCOMPARE(dataChangedSpy.count(), 2);
2647 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2648 QCOMPARE(newEntryInListSpy.count(), 2);
2649
2650 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"),
2651 QStringLiteral("album3"), 2, 1);
2652 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, thirdTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2653
2654 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2655 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2656 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
2657 QCOMPARE(rowsRemovedSpy.count(), 0);
2658 QCOMPARE(rowsMovedSpy.count(), 0);
2659 QCOMPARE(rowsInsertedSpy.count(), 3);
2660 QCOMPARE(dataChangedSpy.count(), 2);
2661 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2662 QCOMPARE(newEntryInListSpy.count(), 3);
2663
2664 QCOMPARE(dataChangedSpy.wait(), true);
2665
2666 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2667 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2668 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
2669 QCOMPARE(rowsRemovedSpy.count(), 0);
2670 QCOMPARE(rowsMovedSpy.count(), 0);
2671 QCOMPARE(rowsInsertedSpy.count(), 3);
2672 QCOMPARE(dataChangedSpy.count(), 3);
2673 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2674 QCOMPARE(newEntryInListSpy.count(), 3);
2675
2676 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"),
2677 QStringLiteral("album3"), 3, 1);
2678 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, fourthTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2679
2680 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2681 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2682 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2683 QCOMPARE(rowsRemovedSpy.count(), 0);
2684 QCOMPARE(rowsMovedSpy.count(), 0);
2685 QCOMPARE(rowsInsertedSpy.count(), 4);
2686 QCOMPARE(dataChangedSpy.count(), 3);
2687 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2688 QCOMPARE(newEntryInListSpy.count(), 4);
2689
2690 QCOMPARE(dataChangedSpy.wait(), true);
2691
2692 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2693 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2694 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2695 QCOMPARE(rowsRemovedSpy.count(), 0);
2696 QCOMPARE(rowsMovedSpy.count(), 0);
2697 QCOMPARE(rowsInsertedSpy.count(), 4);
2698 QCOMPARE(dataChangedSpy.count(), 4);
2699 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2700 QCOMPARE(newEntryInListSpy.count(), 4);
2701
2702 auto fithTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track9"), QStringLiteral("artist2"),
2703 QStringLiteral("album3"), 9, 1);
2704 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, fithTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2705
2706 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2707 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2708 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 5);
2709 QCOMPARE(rowsRemovedSpy.count(), 0);
2710 QCOMPARE(rowsMovedSpy.count(), 0);
2711 QCOMPARE(rowsInsertedSpy.count(), 5);
2712 QCOMPARE(dataChangedSpy.count(), 4);
2713 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2714 QCOMPARE(newEntryInListSpy.count(), 5);
2715
2716 QCOMPARE(dataChangedSpy.wait(), true);
2717
2718 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2719 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2720 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 5);
2721 QCOMPARE(rowsRemovedSpy.count(), 0);
2722 QCOMPARE(rowsMovedSpy.count(), 0);
2723 QCOMPARE(rowsInsertedSpy.count(), 5);
2724 QCOMPARE(dataChangedSpy.count(), 5);
2725 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2726 QCOMPARE(newEntryInListSpy.count(), 5);
2727
2728 auto sixthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist7"),
2729 QStringLiteral("album3"), 1, 1);
2730 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, sixthTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2731
2732 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2733 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2734 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 6);
2735 QCOMPARE(rowsRemovedSpy.count(), 0);
2736 QCOMPARE(rowsMovedSpy.count(), 0);
2737 QCOMPARE(rowsInsertedSpy.count(), 6);
2738 QCOMPARE(dataChangedSpy.count(), 5);
2739 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2740 QCOMPARE(newEntryInListSpy.count(), 6);
2741
2742 QCOMPARE(dataChangedSpy.wait(), true);
2743
2744 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2745 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2746 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 6);
2747 QCOMPARE(rowsRemovedSpy.count(), 0);
2748 QCOMPARE(rowsMovedSpy.count(), 0);
2749 QCOMPARE(rowsInsertedSpy.count(), 6);
2750 QCOMPARE(dataChangedSpy.count(), 6);
2751 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2752 QCOMPARE(newEntryInListSpy.count(), 6);
2753 }
2754
testHasHeaderMoveFirstLikeQml()2755 void MediaPlayListTest::testHasHeaderMoveFirstLikeQml()
2756 {
2757 MediaPlayList myPlayList;
2758 QAbstractItemModelTester testModel(&myPlayList);
2759 DatabaseInterface myDatabaseContent;
2760 TracksListener myListener(&myDatabaseContent);
2761
2762 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
2763 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
2764 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
2765 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
2766 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
2767 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
2768 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
2769 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
2770 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
2771 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
2772
2773 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2774 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2775 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2776 QCOMPARE(rowsRemovedSpy.count(), 0);
2777 QCOMPARE(rowsMovedSpy.count(), 0);
2778 QCOMPARE(rowsInsertedSpy.count(), 0);
2779 QCOMPARE(dataChangedSpy.count(), 0);
2780 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2781 QCOMPARE(newEntryInListSpy.count(), 0);
2782
2783 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
2784
2785 connect(&myListener, &TracksListener::trackHasChanged,
2786 &myPlayList, &MediaPlayList::trackChanged,
2787 Qt::QueuedConnection);
2788 connect(&myListener, &TracksListener::tracksListAdded,
2789 &myPlayList, &MediaPlayList::tracksListAdded,
2790 Qt::QueuedConnection);
2791 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2792 &myListener, &TracksListener::trackByNameInList,
2793 Qt::QueuedConnection);
2794 connect(&myPlayList, &MediaPlayList::newEntryInList,
2795 &myListener, &TracksListener::newEntryInList,
2796 Qt::QueuedConnection);
2797 connect(&myPlayList, &MediaPlayList::newUrlInList,
2798 &myListener, &TracksListener::newUrlInList,
2799 Qt::QueuedConnection);
2800 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2801 &myListener, &TracksListener::tracksAdded);
2802
2803 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2804
2805 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2806 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2807 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2808 QCOMPARE(rowsRemovedSpy.count(), 0);
2809 QCOMPARE(rowsMovedSpy.count(), 0);
2810 QCOMPARE(rowsInsertedSpy.count(), 0);
2811 QCOMPARE(dataChangedSpy.count(), 0);
2812 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2813 QCOMPARE(newEntryInListSpy.count(), 0);
2814
2815 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
2816 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, firstTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2817
2818 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2819 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2820 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2821 QCOMPARE(rowsRemovedSpy.count(), 0);
2822 QCOMPARE(rowsMovedSpy.count(), 0);
2823 QCOMPARE(rowsInsertedSpy.count(), 1);
2824 QCOMPARE(dataChangedSpy.count(), 0);
2825 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2826 QCOMPARE(newEntryInListSpy.count(), 1);
2827
2828 QCOMPARE(dataChangedSpy.wait(), true);
2829
2830 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2831 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2832 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2833 QCOMPARE(rowsRemovedSpy.count(), 0);
2834 QCOMPARE(rowsMovedSpy.count(), 0);
2835 QCOMPARE(rowsInsertedSpy.count(), 1);
2836 QCOMPARE(dataChangedSpy.count(), 1);
2837 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2838 QCOMPARE(newEntryInListSpy.count(), 1);
2839
2840 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
2841 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2842
2843 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2844 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2845 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2846 QCOMPARE(rowsRemovedSpy.count(), 0);
2847 QCOMPARE(rowsMovedSpy.count(), 0);
2848 QCOMPARE(rowsInsertedSpy.count(), 2);
2849 QCOMPARE(dataChangedSpy.count(), 1);
2850 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2851 QCOMPARE(newEntryInListSpy.count(), 2);
2852
2853 QCOMPARE(dataChangedSpy.wait(), true);
2854
2855 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2856 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2857 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2858 QCOMPARE(rowsRemovedSpy.count(), 0);
2859 QCOMPARE(rowsMovedSpy.count(), 0);
2860 QCOMPARE(rowsInsertedSpy.count(), 2);
2861 QCOMPARE(dataChangedSpy.count(), 2);
2862 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2863 QCOMPARE(newEntryInListSpy.count(), 2);
2864
2865 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
2866 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, thirdTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2867
2868 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2869 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2870 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
2871 QCOMPARE(rowsRemovedSpy.count(), 0);
2872 QCOMPARE(rowsMovedSpy.count(), 0);
2873 QCOMPARE(rowsInsertedSpy.count(), 3);
2874 QCOMPARE(dataChangedSpy.count(), 2);
2875 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2876 QCOMPARE(newEntryInListSpy.count(), 3);
2877
2878 QCOMPARE(dataChangedSpy.wait(), true);
2879
2880 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2881 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2882 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
2883 QCOMPARE(rowsRemovedSpy.count(), 0);
2884 QCOMPARE(rowsMovedSpy.count(), 0);
2885 QCOMPARE(rowsInsertedSpy.count(), 3);
2886 QCOMPARE(dataChangedSpy.count(), 3);
2887 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2888 QCOMPARE(newEntryInListSpy.count(), 3);
2889
2890 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1);
2891 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, fourthTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2892
2893 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2894 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2895 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2896 QCOMPARE(rowsRemovedSpy.count(), 0);
2897 QCOMPARE(rowsMovedSpy.count(), 0);
2898 QCOMPARE(rowsInsertedSpy.count(), 4);
2899 QCOMPARE(dataChangedSpy.count(), 3);
2900 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2901 QCOMPARE(newEntryInListSpy.count(), 4);
2902
2903 QCOMPARE(dataChangedSpy.wait(), true);
2904
2905 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2906 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2907 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2908 QCOMPARE(rowsRemovedSpy.count(), 0);
2909 QCOMPARE(rowsMovedSpy.count(), 0);
2910 QCOMPARE(rowsInsertedSpy.count(), 4);
2911 QCOMPARE(dataChangedSpy.count(), 4);
2912 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2913 QCOMPARE(newEntryInListSpy.count(), 4);
2914
2915 myPlayList.moveRows({}, 0, 1, {}, 3);
2916
2917 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2918 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
2919 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2920 QCOMPARE(rowsRemovedSpy.count(), 0);
2921 QCOMPARE(rowsMovedSpy.count(), 1);
2922 QCOMPARE(rowsInsertedSpy.count(), 4);
2923 QCOMPARE(dataChangedSpy.count(), 4);
2924 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2925 QCOMPARE(newEntryInListSpy.count(), 4);
2926 }
2927
crashOnEnqueue()2928 void MediaPlayListTest::crashOnEnqueue()
2929 {
2930 MediaPlayList myPlayList;
2931 QAbstractItemModelTester testModel(&myPlayList);
2932 DatabaseInterface myDatabaseContent;
2933 TracksListener myListener(&myDatabaseContent);
2934 CrashEnqueuePlayList myCrash(&myPlayList);
2935
2936 connect(&myPlayList, &MediaPlayList::rowsInserted, &myCrash, &CrashEnqueuePlayList::crashMediaPlayList);
2937
2938 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
2939 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
2940 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
2941 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
2942 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
2943 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
2944 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
2945 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
2946 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
2947 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
2948
2949 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2950 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2951 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2952 QCOMPARE(rowsRemovedSpy.count(), 0);
2953 QCOMPARE(rowsMovedSpy.count(), 0);
2954 QCOMPARE(rowsInsertedSpy.count(), 0);
2955 QCOMPARE(dataChangedSpy.count(), 0);
2956 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2957 QCOMPARE(newEntryInListSpy.count(), 0);
2958
2959 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
2960
2961 connect(&myListener, &TracksListener::trackHasChanged,
2962 &myPlayList, &MediaPlayList::trackChanged,
2963 Qt::QueuedConnection);
2964 connect(&myListener, &TracksListener::tracksListAdded,
2965 &myPlayList, &MediaPlayList::tracksListAdded,
2966 Qt::QueuedConnection);
2967 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2968 &myListener, &TracksListener::trackByNameInList,
2969 Qt::QueuedConnection);
2970 connect(&myPlayList, &MediaPlayList::newEntryInList,
2971 &myListener, &TracksListener::newEntryInList,
2972 Qt::QueuedConnection);
2973 connect(&myPlayList, &MediaPlayList::newUrlInList,
2974 &myListener, &TracksListener::newUrlInList,
2975 Qt::QueuedConnection);
2976 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2977 &myListener, &TracksListener::tracksAdded);
2978
2979 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2980
2981 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2982 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2983 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2984 QCOMPARE(rowsRemovedSpy.count(), 0);
2985 QCOMPARE(rowsMovedSpy.count(), 0);
2986 QCOMPARE(rowsInsertedSpy.count(), 0);
2987 QCOMPARE(dataChangedSpy.count(), 0);
2988 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2989 QCOMPARE(newEntryInListSpy.count(), 0);
2990
2991 auto newTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"),
2992 QStringLiteral("album2"), 6, 1);
2993 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, newTrackID}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
2994
2995 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2996 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2997 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
2998 QCOMPARE(rowsRemovedSpy.count(), 0);
2999 QCOMPARE(rowsMovedSpy.count(), 0);
3000 QCOMPARE(rowsInsertedSpy.count(), 1);
3001 QCOMPARE(dataChangedSpy.count(), 0);
3002 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3003 QCOMPARE(newEntryInListSpy.count(), 1);
3004
3005 QCOMPARE(dataChangedSpy.wait(), true);
3006
3007 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3008 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3009 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
3010 QCOMPARE(rowsRemovedSpy.count(), 0);
3011 QCOMPARE(rowsMovedSpy.count(), 0);
3012 QCOMPARE(rowsInsertedSpy.count(), 1);
3013 QCOMPARE(dataChangedSpy.count(), 1);
3014 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3015 QCOMPARE(newEntryInListSpy.count(), 1);
3016 }
3017
testHasHeaderMoveAnotherLikeQml()3018 void MediaPlayListTest::testHasHeaderMoveAnotherLikeQml()
3019 {
3020 MediaPlayList myPlayList;
3021 QAbstractItemModelTester testModel(&myPlayList);
3022 DatabaseInterface myDatabaseContent;
3023 TracksListener myListener(&myDatabaseContent);
3024
3025 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
3026 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
3027 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
3028 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
3029 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
3030 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
3031 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
3032 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
3033 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
3034 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
3035
3036 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3037 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3038 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
3039 QCOMPARE(rowsRemovedSpy.count(), 0);
3040 QCOMPARE(rowsMovedSpy.count(), 0);
3041 QCOMPARE(rowsInsertedSpy.count(), 0);
3042 QCOMPARE(dataChangedSpy.count(), 0);
3043 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3044 QCOMPARE(newEntryInListSpy.count(), 0);
3045
3046 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3047
3048 connect(&myListener, &TracksListener::trackHasChanged,
3049 &myPlayList, &MediaPlayList::trackChanged,
3050 Qt::QueuedConnection);
3051 connect(&myListener, &TracksListener::tracksListAdded,
3052 &myPlayList, &MediaPlayList::tracksListAdded,
3053 Qt::QueuedConnection);
3054 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3055 &myListener, &TracksListener::trackByNameInList,
3056 Qt::QueuedConnection);
3057 connect(&myPlayList, &MediaPlayList::newEntryInList,
3058 &myListener, &TracksListener::newEntryInList,
3059 Qt::QueuedConnection);
3060 connect(&myPlayList, &MediaPlayList::newUrlInList,
3061 &myListener, &TracksListener::newUrlInList,
3062 Qt::QueuedConnection);
3063 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3064 &myListener, &TracksListener::tracksAdded);
3065
3066 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3067
3068 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3069 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3070 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
3071 QCOMPARE(rowsRemovedSpy.count(), 0);
3072 QCOMPARE(rowsMovedSpy.count(), 0);
3073 QCOMPARE(rowsInsertedSpy.count(), 0);
3074 QCOMPARE(dataChangedSpy.count(), 0);
3075 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3076 QCOMPARE(newEntryInListSpy.count(), 0);
3077
3078 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
3079 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, firstTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
3080
3081 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3082 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3083 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
3084 QCOMPARE(rowsRemovedSpy.count(), 0);
3085 QCOMPARE(rowsMovedSpy.count(), 0);
3086 QCOMPARE(rowsInsertedSpy.count(), 1);
3087 QCOMPARE(dataChangedSpy.count(), 0);
3088 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3089 QCOMPARE(newEntryInListSpy.count(), 1);
3090
3091 QCOMPARE(dataChangedSpy.wait(), true);
3092
3093 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3094 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3095 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
3096 QCOMPARE(rowsRemovedSpy.count(), 0);
3097 QCOMPARE(rowsMovedSpy.count(), 0);
3098 QCOMPARE(rowsInsertedSpy.count(), 1);
3099 QCOMPARE(dataChangedSpy.count(), 1);
3100 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3101 QCOMPARE(newEntryInListSpy.count(), 1);
3102
3103 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
3104 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
3105
3106 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3107 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3108 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
3109 QCOMPARE(rowsRemovedSpy.count(), 0);
3110 QCOMPARE(rowsMovedSpy.count(), 0);
3111 QCOMPARE(rowsInsertedSpy.count(), 2);
3112 QCOMPARE(dataChangedSpy.count(), 1);
3113 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3114 QCOMPARE(newEntryInListSpy.count(), 2);
3115
3116 QCOMPARE(dataChangedSpy.wait(), true);
3117
3118 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3119 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3120 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
3121 QCOMPARE(rowsRemovedSpy.count(), 0);
3122 QCOMPARE(rowsMovedSpy.count(), 0);
3123 QCOMPARE(rowsInsertedSpy.count(), 2);
3124 QCOMPARE(dataChangedSpy.count(), 2);
3125 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3126 QCOMPARE(newEntryInListSpy.count(), 2);
3127
3128 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
3129 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, thirdTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
3130
3131 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3132 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3133 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
3134 QCOMPARE(rowsRemovedSpy.count(), 0);
3135 QCOMPARE(rowsMovedSpy.count(), 0);
3136 QCOMPARE(rowsInsertedSpy.count(), 3);
3137 QCOMPARE(dataChangedSpy.count(), 2);
3138 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3139 QCOMPARE(newEntryInListSpy.count(), 3);
3140
3141 QCOMPARE(dataChangedSpy.wait(), true);
3142
3143 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3144 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3145 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
3146 QCOMPARE(rowsRemovedSpy.count(), 0);
3147 QCOMPARE(rowsMovedSpy.count(), 0);
3148 QCOMPARE(rowsInsertedSpy.count(), 3);
3149 QCOMPARE(dataChangedSpy.count(), 3);
3150 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3151 QCOMPARE(newEntryInListSpy.count(), 3);
3152
3153 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1);
3154 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, fourthTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
3155
3156 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3157 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3158 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
3159 QCOMPARE(rowsRemovedSpy.count(), 0);
3160 QCOMPARE(rowsMovedSpy.count(), 0);
3161 QCOMPARE(rowsInsertedSpy.count(), 4);
3162 QCOMPARE(dataChangedSpy.count(), 3);
3163 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3164 QCOMPARE(newEntryInListSpy.count(), 4);
3165
3166 QCOMPARE(dataChangedSpy.wait(), true);
3167
3168 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3169 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3170 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
3171 QCOMPARE(rowsRemovedSpy.count(), 0);
3172 QCOMPARE(rowsMovedSpy.count(), 0);
3173 QCOMPARE(rowsInsertedSpy.count(), 4);
3174 QCOMPARE(dataChangedSpy.count(), 4);
3175 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3176 QCOMPARE(newEntryInListSpy.count(), 4);
3177
3178 myPlayList.moveRows({}, 3, 1, {}, 0);
3179
3180 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3181 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
3182 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
3183 QCOMPARE(rowsRemovedSpy.count(), 0);
3184 QCOMPARE(rowsMovedSpy.count(), 1);
3185 QCOMPARE(rowsInsertedSpy.count(), 4);
3186 QCOMPARE(dataChangedSpy.count(), 4);
3187 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3188 QCOMPARE(newEntryInListSpy.count(), 4);
3189 }
3190
testHasHeaderYetAnotherMoveLikeQml()3191 void MediaPlayListTest::testHasHeaderYetAnotherMoveLikeQml()
3192 {
3193 MediaPlayList myPlayList;
3194 QAbstractItemModelTester testModel(&myPlayList);
3195 DatabaseInterface myDatabaseContent;
3196 TracksListener myListener(&myDatabaseContent);
3197
3198 QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
3199 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
3200 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
3201 QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
3202 QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
3203 QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
3204 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged);
3205 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
3206 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
3207 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
3208
3209 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3210 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3211 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
3212 QCOMPARE(rowsRemovedSpy.count(), 0);
3213 QCOMPARE(rowsMovedSpy.count(), 0);
3214 QCOMPARE(rowsInsertedSpy.count(), 0);
3215 QCOMPARE(dataChangedSpy.count(), 0);
3216 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3217 QCOMPARE(newEntryInListSpy.count(), 0);
3218
3219 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3220
3221 connect(&myListener, &TracksListener::trackHasChanged,
3222 &myPlayList, &MediaPlayList::trackChanged,
3223 Qt::QueuedConnection);
3224 connect(&myListener, &TracksListener::tracksListAdded,
3225 &myPlayList, &MediaPlayList::tracksListAdded,
3226 Qt::QueuedConnection);
3227 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3228 &myListener, &TracksListener::trackByNameInList,
3229 Qt::QueuedConnection);
3230 connect(&myPlayList, &MediaPlayList::newEntryInList,
3231 &myListener, &TracksListener::newEntryInList,
3232 Qt::QueuedConnection);
3233 connect(&myPlayList, &MediaPlayList::newUrlInList,
3234 &myListener, &TracksListener::newUrlInList,
3235 Qt::QueuedConnection);
3236 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3237 &myListener, &TracksListener::tracksAdded);
3238
3239 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3240
3241 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3242 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3243 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
3244 QCOMPARE(rowsRemovedSpy.count(), 0);
3245 QCOMPARE(rowsMovedSpy.count(), 0);
3246 QCOMPARE(rowsInsertedSpy.count(), 0);
3247 QCOMPARE(dataChangedSpy.count(), 0);
3248 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3249 QCOMPARE(newEntryInListSpy.count(), 0);
3250
3251 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
3252 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, firstTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
3253
3254 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3255 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3256 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
3257 QCOMPARE(rowsRemovedSpy.count(), 0);
3258 QCOMPARE(rowsMovedSpy.count(), 0);
3259 QCOMPARE(rowsInsertedSpy.count(), 1);
3260 QCOMPARE(dataChangedSpy.count(), 0);
3261 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3262 QCOMPARE(newEntryInListSpy.count(), 1);
3263
3264 QCOMPARE(dataChangedSpy.wait(), true);
3265
3266 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3267 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3268 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
3269 QCOMPARE(rowsRemovedSpy.count(), 0);
3270 QCOMPARE(rowsMovedSpy.count(), 0);
3271 QCOMPARE(rowsInsertedSpy.count(), 1);
3272 QCOMPARE(dataChangedSpy.count(), 1);
3273 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3274 QCOMPARE(newEntryInListSpy.count(), 1);
3275
3276 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
3277 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
3278
3279 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3280 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3281 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
3282 QCOMPARE(rowsRemovedSpy.count(), 0);
3283 QCOMPARE(rowsMovedSpy.count(), 0);
3284 QCOMPARE(rowsInsertedSpy.count(), 2);
3285 QCOMPARE(dataChangedSpy.count(), 1);
3286 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3287 QCOMPARE(newEntryInListSpy.count(), 2);
3288
3289 QCOMPARE(dataChangedSpy.wait(), true);
3290
3291 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3292 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3293 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
3294 QCOMPARE(rowsRemovedSpy.count(), 0);
3295 QCOMPARE(rowsMovedSpy.count(), 0);
3296 QCOMPARE(rowsInsertedSpy.count(), 2);
3297 QCOMPARE(dataChangedSpy.count(), 2);
3298 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3299 QCOMPARE(newEntryInListSpy.count(), 2);
3300
3301 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1);
3302 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, thirdTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
3303
3304 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3305 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3306 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
3307 QCOMPARE(rowsRemovedSpy.count(), 0);
3308 QCOMPARE(rowsMovedSpy.count(), 0);
3309 QCOMPARE(rowsInsertedSpy.count(), 3);
3310 QCOMPARE(dataChangedSpy.count(), 2);
3311 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3312 QCOMPARE(newEntryInListSpy.count(), 3);
3313
3314 QCOMPARE(dataChangedSpy.wait(), true);
3315
3316 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3317 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3318 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
3319 QCOMPARE(rowsRemovedSpy.count(), 0);
3320 QCOMPARE(rowsMovedSpy.count(), 0);
3321 QCOMPARE(rowsInsertedSpy.count(), 3);
3322 QCOMPARE(dataChangedSpy.count(), 3);
3323 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3324 QCOMPARE(newEntryInListSpy.count(), 3);
3325
3326 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1);
3327 myPlayList.enqueueOneEntry({{{DataTypes::DatabaseIdRole, fourthTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}});
3328
3329 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3330 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3331 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
3332 QCOMPARE(rowsRemovedSpy.count(), 0);
3333 QCOMPARE(rowsMovedSpy.count(), 0);
3334 QCOMPARE(rowsInsertedSpy.count(), 4);
3335 QCOMPARE(dataChangedSpy.count(), 3);
3336 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3337 QCOMPARE(newEntryInListSpy.count(), 4);
3338
3339 QCOMPARE(dataChangedSpy.wait(), true);
3340
3341 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3342 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3343 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
3344 QCOMPARE(rowsRemovedSpy.count(), 0);
3345 QCOMPARE(rowsMovedSpy.count(), 0);
3346 QCOMPARE(rowsInsertedSpy.count(), 4);
3347 QCOMPARE(dataChangedSpy.count(), 4);
3348 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3349 QCOMPARE(newEntryInListSpy.count(), 4);
3350
3351 myPlayList.moveRows({}, 0, 1, {}, 2);
3352
3353 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3354 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
3355 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
3356 QCOMPARE(rowsRemovedSpy.count(), 0);
3357 QCOMPARE(rowsMovedSpy.count(), 1);
3358 QCOMPARE(rowsInsertedSpy.count(), 4);
3359 QCOMPARE(dataChangedSpy.count(), 4);
3360 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3361 QCOMPARE(newEntryInListSpy.count(), 4);
3362
3363 myPlayList.moveRows({}, 2, 1, {}, 0);
3364
3365 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3366 QCOMPARE(rowsAboutToBeMovedSpy.count(), 2);
3367 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
3368 QCOMPARE(rowsRemovedSpy.count(), 0);
3369 QCOMPARE(rowsMovedSpy.count(), 2);
3370 QCOMPARE(rowsInsertedSpy.count(), 4);
3371 QCOMPARE(dataChangedSpy.count(), 4);
3372 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3373 QCOMPARE(newEntryInListSpy.count(), 4);
3374 }
3375
CrashEnqueuePlayList(MediaPlayList * list,QObject * parent)3376 CrashEnqueuePlayList::CrashEnqueuePlayList(MediaPlayList *list, QObject *parent) : QObject(parent), mList(list)
3377 {
3378 }
3379
crashMediaPlayList()3380 void CrashEnqueuePlayList::crashMediaPlayList()
3381 {
3382 mList->data(mList->index(0, 0), MediaPlayList::ResourceRole);
3383 }
3384
3385 QTEST_GUILESS_MAIN(MediaPlayListTest)
3386
3387 #include "moc_mediaplaylisttest.cpp"
3388