42
46
void readPhotoMetadata();
43
47
void readVideoMetadata();
44
48
void enableContentLoadFilter();
53
MediaSource* wait_for_media();
48
54
MediaTable *m_mediaTable;
49
MediaObjectFactory *m_factory;
55
MediaObjectFactoryWorker *m_factory;
50
56
Resource *m_resource;
57
QSignalSpy *m_spyMediaObjectCreated;
53
60
void tst_MediaObjectFactory::init()
55
62
m_mediaTable = new MediaTable(0, 0);
56
m_factory = new MediaObjectFactory(true, 0);
63
m_factory = new MediaObjectFactoryWorker(0);
57
64
m_factory->setMediaTable(m_mediaTable);
65
m_spyMediaObjectCreated = new QSignalSpy(m_factory, SIGNAL(mediaObjectCreated(MediaSource*)));
60
68
void tst_MediaObjectFactory::cleanup()
68
76
void tst_MediaObjectFactory::create()
71
MediaSource *media = m_factory->create(QFileInfo("no_valid_file"), true, 0);
72
QCOMPARE(media, (MediaSource*)0);
79
m_factory->create("no_valid_file");
80
QCOMPARE(wait_for_media(), (MediaSource*)0);
75
media = m_factory->create(QFileInfo("/some/photo.jpg"), true, 0);
76
Photo *photo = qobject_cast<Photo*>(media);
83
m_factory->create("/some/photo.jpg");
84
Photo *photo = qobject_cast<Photo*>(wait_for_media());
77
85
QVERIFY(photo != 0);
78
86
QCOMPARE(photo->id(), (qint64)0);
79
87
QCOMPARE(photo->exposureDateTime(), QDateTime(QDate(2013, 01, 01), QTime(11, 11, 11)));
80
88
QCOMPARE(photo->orientation(), BOTTOM_LEFT_ORIGIN);
82
90
// another new file
83
media = m_factory->create(QFileInfo("/some/other_photo.jpg"), true, 0);
84
photo = qobject_cast<Photo*>(media);
91
m_factory->create("/some/other_photo.jpg");
92
photo = qobject_cast<Photo*>(wait_for_media());
85
93
QVERIFY(photo != 0);
86
94
QCOMPARE(photo->id(), (qint64)1);
88
96
// existing from DB
89
media = m_factory->create(QFileInfo("/some/photo.jpg"), true, 0);
90
photo = qobject_cast<Photo*>(media);
97
m_factory->create("/some/photo.jpg");
98
photo = qobject_cast<Photo*>(wait_for_media());
91
99
QVERIFY(photo != 0);
92
100
QCOMPARE(photo->id(), (qint64)0);
94
102
// update DB from file
95
103
setOrientationOfFirstRow(TOP_RIGHT_ORIGIN); // change the DB
97
media = m_factory->create(QFileInfo("/some/photo.jpg"), true, 0);
98
photo = qobject_cast<Photo*>(media);
105
m_factory->create("/some/photo.jpg");
106
photo = qobject_cast<Photo*>(wait_for_media());
99
107
QVERIFY(photo != 0);
100
108
QCOMPARE(photo->id(), (qint64)0);
101
109
QCOMPARE(photo->orientation(), TOP_RIGHT_ORIGIN);
104
bool isDesktop = true;
105
m_resource = new Resource(true, "", 0);
112
m_resource = new Resource(true, "");
106
113
m_resource->setVideoDirectories(QStringList("/video_path/"));
108
115
// ... at desktop
109
media = m_factory->create(QFileInfo("/not_video_path/video.ogv"), isDesktop, m_resource);
110
Video *video = qobject_cast<Video*>(media);
116
m_factory->create("/not_video_path/video.ogv");
117
Video *video = qobject_cast<Video*>(wait_for_media());
111
118
QVERIFY(video != 0);
112
media = m_factory->create(QFileInfo("/video_path/video.ogv"), isDesktop, m_resource);
113
video = qobject_cast<Video*>(media);
119
m_factory->create("/video_path/video.ogv");
120
video = qobject_cast<Video*>(wait_for_media());
114
121
QVERIFY(video != 0);
117
media = m_factory->create(QFileInfo("/not_video_path/video.ogv"), !isDesktop, m_resource);
118
video = qobject_cast<Video*>(media);
120
media = m_factory->create(QFileInfo("/video_path/video.ogv"), !isDesktop, m_resource);
121
video = qobject_cast<Video*>(media);
124
m_factory->create("/not_video_path/video.ogv");
125
video = qobject_cast<Video*>(wait_for_media());
127
m_factory->create("/video_path/video.ogv");
128
video = qobject_cast<Video*>(wait_for_media());
122
129
QVERIFY(video != 0);
159
166
void tst_MediaObjectFactory::enableContentLoadFilter()
161
MediaSource *media = m_factory->create(QFileInfo("/some/photo.jpg"), true, 0);
168
m_factory->create("/some/photo.jpg");
169
QVERIFY(wait_for_media() != (MediaSource*)0);
164
171
m_factory->enableContentLoadFilter(MediaSource::Video);
166
media = m_factory->create(QFileInfo("/some/photo.jpg"), true, 0);
173
m_factory->create("/some/photo.jpg");
174
QCOMPARE(wait_for_media(), (MediaSource*)0);
170
void tst_MediaObjectFactory::addMedia()
177
void tst_MediaObjectFactory::addPhoto()
179
QTemporaryDir *tmpDir = new QTemporaryDir();
180
QDir *dir = new QDir(tmpDir->path());
181
dir->mkpath("sample");
183
// Create sample image
184
QImage *sampleImage = new QImage(400, 600, QImage::Format_RGB32);
185
sampleImage->fill(QColor(Qt::red));
186
sampleImage->save(tmpDir->path() + "/sample/sample.jpg", "JPG");
173
QString filename("/some/photo.jpg");
189
QString filename(tmpDir->path() + "/sample/sample.jpg");
174
190
QSize size(320, 200);
175
191
QDateTime timestamp(QDate(2013, 02, 03), QTime(12, 12, 12));
176
192
QDateTime exposureTime(QDate(2013, 03, 04), QTime(1, 2, 3));
178
194
qint64 filesize = 2048;
180
196
m_factory->addMedia(id, filename, size, timestamp,
181
exposureTime, originalOrientation,
197
exposureTime, originalOrientation, filesize);
184
QCOMPARE(m_factory->m_mediasFromDB.size(), 1);
199
QCOMPARE(m_factory->m_mediaFromDB.size(), 1);
185
201
QSet<DataObject*>::iterator it;
186
it = m_factory->m_mediasFromDB.begin();
202
it = m_factory->m_mediaFromDB.begin();
187
203
DataObject *obj = *it;
188
204
Photo *photo = qobject_cast<Photo*>(obj);
189
205
QVERIFY(photo != 0);
190
207
QCOMPARE(photo->id(), id);
191
208
QCOMPARE(photo->path().toLocalFile(), filename);
192
209
QCOMPARE(photo->size(), size);
195
212
QCOMPARE(photo->orientation(), originalOrientation);
215
void tst_MediaObjectFactory::addVideo()
217
QTemporaryDir *tmpDir = new QTemporaryDir();
218
QDir *dir = new QDir(tmpDir->path());
219
dir->mkpath("sample");
221
// Create sample video
222
QFile file(tmpDir->path() + "/sample/sample.mp4");
223
file.open(QIODevice::ReadWrite);
227
QString filename(tmpDir->path() + "/sample/sample.mp4");
228
QSize size(320, 200);
229
QDateTime timestamp(QDate(2013, 02, 03), QTime(12, 12, 12));
230
QDateTime exposureTime(QDate(2013, 03, 04), QTime(1, 2, 3));
231
Orientation originalOrientation(BOTTOM_RIGHT_ORIGIN);
232
qint64 filesize = 2048;
234
m_factory->addMedia(id, filename, size, timestamp,
235
exposureTime, originalOrientation, filesize);
237
QCOMPARE(m_factory->m_mediaFromDB.size(), 1);
239
QSet<DataObject*>::iterator it;
240
it = m_factory->m_mediaFromDB.begin();
241
DataObject *obj = *it;
242
Video *video = qobject_cast<Video*>(obj);
245
QCOMPARE(video->id(), id);
246
QCOMPARE(video->path().toLocalFile(), filename);
247
QCOMPARE(video->size(), size);
249
exposureTime.setTimeSpec(Qt::UTC);
250
QCOMPARE(video->exposureDateTime(), exposureTime.toLocalTime());
253
MediaSource* tst_MediaObjectFactory::wait_for_media()
255
if (m_spyMediaObjectCreated->isEmpty())
258
if (m_spyMediaObjectCreated->count() != 1)
261
QList<QVariant> args = m_spyMediaObjectCreated->takeFirst();
262
return args.at(0).value<MediaSource*>();;
198
265
QTEST_MAIN(tst_MediaObjectFactory);
200
267
#include "tst_mediaobjectfactory.moc"