1
/* ============================================================
3
* This file is a part of digiKam project
4
* http://www.digikam.org
7
* Description : a test for the AdvancedRename utility
9
* Copyright (C) 2009-2010 by Andi Clemens <andi dot clemens at gmx dot net>
11
* This program is free software; you can redistribute it
12
* and/or modify it under the terms of the GNU General
13
* Public License as published by the Free Software Foundation;
14
* either version 2, or (at your option)
17
* This program is distributed in the hope that it will be useful,
18
* but WITHOUT ANY WARRANTY; without even the implied warranty of
19
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
* GNU General Public License for more details.
22
* ============================================================ */
24
#include "advancedrenametest.moc"
33
#include <qtest_kde.h>
35
using namespace Digikam;
37
QTEST_KDEMAIN(AdvancedRenameWidgetTest, GUI)
39
const QString fileName("advancedrename_testimage.jpg");
40
const QString filePath(KDESRCDIR+fileName);
42
void AdvancedRenameWidgetTest::testFileNameToken()
44
QList<ParseSettings> files;
47
ps.fileUrl = KUrl(filePath);
49
AdvancedRenameManager manager(files);
50
manager.parseFiles("[file]");
52
QString parsed = manager.newName(filePath);
53
QCOMPARE(parsed, fileName);
56
void AdvancedRenameWidgetTest::testFileExtensionToken_data()
58
QTest::addColumn<QString>("parseString");
59
QTest::addColumn<QString>("result");
61
QTest::newRow(fileName.toAscii()) << QString("[ext]") << QString("jpg.jpg");
62
QTest::newRow("[ext]_lala_####") << QString("[ext]_lala_####") << QString("jpg_lala_0001.jpg");
63
QTest::newRow("[ext]_lala_####[ext]") << QString("[ext]_lala_####[ext]") << QString("jpg_lala_0001jpg.jpg");
64
QTest::newRow("[ext]_lala_####.[ext]") << QString("[ext]_lala_####.[ext]") << QString("jpg_lala_0001.jpg");
65
QTest::newRow("[ext]_lala_####.[ext]{upper}") << QString("[ext]_lala_####.[ext]{upper}") << QString("jpg_lala_0001.JPG");
66
QTest::newRow("[ext]_lala_####[ext]{upper}") << QString("[ext]_lala_####[ext]{upper}") << QString("jpg_lala_0001JPG.jpg");
69
void AdvancedRenameWidgetTest::testFileExtensionToken()
71
QFETCH(QString, parseString);
72
QFETCH(QString, result);
74
QList<ParseSettings> files;
77
ps.fileUrl = KUrl(filePath);
79
AdvancedRenameManager manager(files);
80
manager.parseFiles(parseString);
82
QString parsed = manager.newName(filePath);
83
QCOMPARE(parsed, result);
86
void AdvancedRenameWidgetTest::testFileOwnerToken()
88
ParseSettings settings;
89
DefaultRenameParser parser;
91
settings.fileUrl = KUrl(KDESRCDIR"/test.png");
92
settings.parseString = "[user]";
94
QFileInfo fi(settings.fileUrl.toLocalFile());
96
QVERIFY(fi.isReadable());
98
QString userName = fi.owner();
99
QVERIFY(!userName.isEmpty());
101
QString result = userName + ".png";
102
QString parsed = parser.parse(settings);
104
QCOMPARE(parsed, result);
107
void AdvancedRenameWidgetTest::testFileGroupToken()
109
ParseSettings settings;
110
DefaultRenameParser parser;
112
settings.fileUrl = KUrl(KDESRCDIR"/test.png");
113
settings.parseString = "[group]";
115
QFileInfo fi(settings.fileUrl.toLocalFile());
116
QVERIFY(fi.exists());
117
QVERIFY(fi.isReadable());
119
QString groupName = fi.group();
120
QVERIFY(!groupName.isEmpty());
122
QString result = groupName + ".png";
123
QString parsed = parser.parse(settings);
125
QCOMPARE(parsed, result);
128
void AdvancedRenameWidgetTest::testDirectoryNameToken_data()
130
QTest::addColumn<QString>("parseString");
131
QTest::addColumn<QString>("result");
133
QTest::newRow("[dir]") << QString("[dir]") << QString("tests.jpg");
134
QTest::newRow("[dir.]") << QString("[dir.]") << QString("digikam.jpg");
135
QTest::newRow("[dir.]_[dir]") << QString("[dir.]_[dir]") << QString("digikam_tests.jpg");
136
QTest::newRow("[dir.......]") << QString("[dir.......]") << fileName;
139
void AdvancedRenameWidgetTest::testDirectoryNameToken()
141
QFETCH(QString, parseString);
142
QFETCH(QString, result);
144
QList<ParseSettings> files;
147
ps.fileUrl = KUrl(filePath);
149
AdvancedRenameManager manager(files);
150
manager.parseFiles(parseString);
152
QString parsed = manager.newName(filePath);
153
QCOMPARE(parsed, result);
156
void AdvancedRenameWidgetTest::testNumberToken_data()
158
QTest::addColumn<QString>("parseString");
159
QTest::addColumn<QString>("result");
161
QTest::newRow("#") << QString("#") << QString("1.jpg");
162
QTest::newRow("####[2,3]") << QString("####[2,3]") << QString("0002.jpg");
163
QTest::newRow("####[2,3]_bla_## ###") << QString("####[2,3]_bla_## ###") << QString("0002_bla_01 001.jpg");
164
QTest::newRow("####[2,3]_bla_## ###") << QString("####[2,3]_bla_## ###") << QString("0002_bla_01 001.jpg");
165
QTest::newRow("####[2,3]_bla_## ###") << QString("####[2,3]_bla_## ###") << QString("0002_bla_01 001.jpg");
166
QTest::newRow("###[100]_bla") << QString("###[100]_bla") << QString("100_bla.jpg");
167
QTest::newRow("###[e,1,100]_bla") << QString("###[e,1,100]_bla") << QString("001_bla.jpg");
170
void AdvancedRenameWidgetTest::testNumberToken()
172
QFETCH(QString, parseString);
173
QFETCH(QString, result);
175
QList<ParseSettings> files;
178
ps.fileUrl = KUrl(filePath);
180
AdvancedRenameManager manager(files);
181
manager.parseFiles(parseString);
183
QString parsed = manager.newName(filePath);
184
QCOMPARE(parsed, result);
187
void AdvancedRenameWidgetTest::testFirstLetterOfEachWordUppercaseModifier()
189
QList<ParseSettings> files;
192
ps.fileUrl = KUrl(filePath);
194
AdvancedRenameManager manager(files);
195
manager.parseFiles("[file]{firstupper}");
197
QString parsed = manager.newName(filePath);
198
QCOMPARE(parsed, QString("Advancedrename_Testimage.jpg"));
201
void AdvancedRenameWidgetTest::testChainedModifiers_data()
203
QTest::addColumn<QString>("parseString");
204
QTest::addColumn<QString>("result");
206
QTest::newRow("[file]*{upper}") << QString("[file]{firstupper}{upper}") << QString("ADVANCEDRENAME_TESTIMAGE.jpg");
207
QTest::newRow("[file]{range:3,}*") << QString("[file]{range:3,}{firstupper}") << QString("Vancedrename_Testimage.jpg");
209
QTest::newRow("[file]{range:3,}{replace:\"name\",\"age\"}{firstupper}")
210
<< QString("[file]{range:3,}{replace:\"name\",\"age\"}{firstupper}")
211
<< QString("Vancedreage_Testimage.jpg");
214
void AdvancedRenameWidgetTest::testChainedModifiers()
216
QFETCH(QString, parseString);
217
QFETCH(QString, result);
219
QList<ParseSettings> files;
222
ps.fileUrl = KUrl(filePath);
224
AdvancedRenameManager manager(files);
225
manager.parseFiles(parseString);
227
QString parsed = manager.newName(filePath);
228
QCOMPARE(parsed, result);
231
void AdvancedRenameWidgetTest::testUppercaseModifier()
233
ParseSettings settings;
234
DefaultRenameParser parser;
236
settings.fileUrl = filePath;
237
settings.parseString = "[file]{upper}";
239
QString parsed = parser.parse(settings);
240
QFileInfo fi(filePath);
241
QCOMPARE(parsed, fi.baseName().toUpper() + "." + fi.suffix());
244
//void AdvancedRenameWidgetTest::testUniqueModifier()
246
// ParseSettings settings;
247
// DefaultRenameParser parser;
249
// settings.fileUrl = filePath;
250
// settings.cameraName = QString("Nikon D50");
251
// settings.parseString = QString("[file]{unique}_T[date:hhmmss]{unique}_[cam]{unique}");
253
//#define DIGITS_STR(VALUE, DIGITS) QString("%1").arg(VALUE, DIGITS, 10, QChar('0'))
255
// QStringList validResults;
256
// validResults << QString("advancedrename_testimage_T100012_Nikon D50.jpg");
257
// validResults << QString("advancedrename_testimage_%1_T100012_%2_Nikon D50_%3.jpg")
258
// .arg(DIGITS_STR(1, 1)).arg(DIGITS_STR(1, 1)).arg(DIGITS_STR(1, 1));
259
// validResults << QString("advancedrename_testimage_%1_T214536_Nikon D50_%2.jpg")
260
// .arg(DIGITS_STR(2, 1)).arg(DIGITS_STR(2, 1));
261
// validResults << QString("advancedrename_testimage_%1_T214536_%2_Nikon D50_%3.jpg")
262
// .arg(DIGITS_STR(3, 1)).arg(DIGITS_STR(1, 1)).arg(DIGITS_STR(3, 1));
263
// validResults << QString("advancedrename_testimage_%1_T214536_%2_Nikon D50_%3.jpg")
264
// .arg(DIGITS_STR(4, 1)).arg(DIGITS_STR(2, 1)).arg(DIGITS_STR(4, 1));
267
// t1.setHMS(10, 00, 12);
270
// t2.setHMS(21, 45, 36);
272
// QDateTime date = QDateTime::currentDateTime();
274
// settings.dateTime = date;
276
// QStringList results;
277
// results << parser.parse(settings);
278
// results << parser.parse(settings);
280
// settings.dateTime = date;
281
// results << parser.parse(settings);
282
// results << parser.parse(settings);
283
// results << parser.parse(settings);
285
// QCOMPARE(results, validResults);
287
// // --------------------------------------------------------
289
// settings.parseString = QString("[file]{unique:2}_T[date:hhmmss]{unique}_[cam]{unique:4}");
291
// validResults.clear();
294
// settings.dateTime = date;
295
// validResults << QString("advancedrename_testimage_T100012_Nikon D50.jpg");
296
// validResults << QString("advancedrename_testimage_%1_T100012_%2_Nikon D50_%3.jpg")
297
// .arg(DIGITS_STR(1, 2)).arg(DIGITS_STR(1, 1)).arg(DIGITS_STR(1, 4));
298
// validResults << QString("advancedrename_testimage_%1_T214536_Nikon D50_%2.jpg")
299
// .arg(DIGITS_STR(2, 2)).arg(DIGITS_STR(2, 4));
300
// validResults << QString("advancedrename_testimage_%1_T214536_%2_Nikon D50_%3.jpg")
301
// .arg(DIGITS_STR(3, 2)).arg(DIGITS_STR(1, 1)).arg(DIGITS_STR(3, 4));
302
// validResults << QString("advancedrename_testimage_%1_T214536_%2_Nikon D50_%3.jpg")
303
// .arg(DIGITS_STR(4, 2)).arg(DIGITS_STR(2, 1)).arg(DIGITS_STR(4, 4));
305
// results << parser.parse(settings);
306
// results << parser.parse(settings);
308
// settings.dateTime = date;
309
// results << parser.parse(settings);
310
// results << parser.parse(settings);
311
// results << parser.parse(settings);
313
// QCOMPARE(results, validResults);
318
void AdvancedRenameWidgetTest::testReplaceModifier_data()
320
QTest::addColumn<QString>("parseString");
321
QTest::addColumn<QString>("result");
323
QTest::newRow("[file]{replace:\"adv\",\"AAA\"}")
324
<< QString("[file]{replace:\"adv\",\"AAA\"}") << QString("AAAancedrename_testimage.jpg");
326
QTest::newRow("[file]{replace:\"Adv\",\"AAA\"}")
327
<< QString("[file]{replace:\"Adv\",\"AAA\"}") << QString("advancedrename_testimage.jpg");
329
QTest::newRow("[file]{replace:\"Adv\",\"AAA\",i}")
330
<< QString("[file]{replace:\"Adv\",\"AAA\",i}") << QString("AAAancedrename_testimage.jpg");
332
QTest::newRow("[file]{replace:\"Adv\",\"AAA\",ri}")
333
<< QString("[file]{replace:\"Adv\",\"AAA\",ri}") << QString("AAAancedrename_testimage.jpg");
335
QTest::newRow("[file]{replace:\"Adv\",\"AAA\",ir}")
336
<< QString("[file]{replace:\"Adv\",\"AAA\",ir}") << QString("AAAancedrename_testimage.jpg");
338
QTest::newRow("[file]{replace:\"a.v\",\"AAA\"}")
339
<< QString("[file]{replace:\"a.v\",\"AAA\"}") << QString("advancedrename_testimage.jpg");
341
QTest::newRow("[file]{replace:\"a.v\",\"AAA\",r}")
342
<< QString("[file]{replace:\"a.v\",\"AAA\",r}") << QString("AAAancedrename_testimage.jpg");
345
void AdvancedRenameWidgetTest::testReplaceModifier()
347
QFETCH(QString, parseString);
348
QFETCH(QString, result);
350
QList<ParseSettings> files;
353
ps.fileUrl = KUrl(filePath);
355
AdvancedRenameManager manager(files);
356
manager.parseFiles(parseString);
358
QString parsed = manager.newName(filePath);
359
QCOMPARE(parsed, result);
362
void AdvancedRenameWidgetTest::testRangeModifier_data()
364
QTest::addColumn<QString>("parseString");
365
QTest::addColumn<QString>("result");
367
QDateTime curdate = QDateTime::currentDateTime();
369
QTest::newRow("[file]{range:1}") << QString("[file]{range:1}") << QString("a.jpg");
370
QTest::newRow("[file]{range:3}") << QString("[file]{range:3}") << QString("v.jpg");
371
QTest::newRow("[file]{range:1,3}") << QString("[file]{range:1,3}") << QString("adv.jpg");
372
QTest::newRow("[file]{range:3,}") << QString("[file]{range:3,}") << QString("vancedrename_testimage.jpg");
375
void AdvancedRenameWidgetTest::testRangeModifier()
377
QFETCH(QString, parseString);
378
QFETCH(QString, result);
380
QList<ParseSettings> files;
383
ps.fileUrl = KUrl(filePath);
385
AdvancedRenameManager manager(files);
386
manager.parseFiles(parseString);
388
QString parsed = manager.newName(filePath);
389
QCOMPARE(parsed, result);
392
void AdvancedRenameWidgetTest::testDefaultValueModifier_data()
394
QTest::addColumn<QString>("parseString");
395
QTest::addColumn<QString>("result");
397
QDateTime curdate = QDateTime::currentDateTime();
399
QTest::newRow("[meta:Iptc.Application2.Keywords]_[file]") << QString("[meta:Iptc.Application2.Keywords]{default:\"Unknown\"}_[file]")
400
<< QString("Colca Canyon_advancedrename_testimage.jpg");
402
QTest::newRow("[meta:Exif.GPSInfo.GPSAltitude]_[file]") << QString("[meta:Exif.GPSInfo.GPSAltitude]{default:\"Unknown\"}_[file]")
403
<< QString("Unknown_advancedrename_testimage.jpg");
406
void AdvancedRenameWidgetTest::testDefaultValueModifier()
408
QFETCH(QString, parseString);
409
QFETCH(QString, result);
411
QList<ParseSettings> files;
414
ps.fileUrl = KUrl(filePath);
416
AdvancedRenameManager manager(files);
417
manager.parseFiles(parseString);
419
QString parsed = manager.newName(filePath);
420
QCOMPARE(parsed, result);
423
void AdvancedRenameWidgetTest::testLowercaseModifier()
425
ParseSettings settings;
426
DefaultRenameParser parser;
428
settings.fileUrl = filePath;
429
settings.parseString = "[file]{lower}";
431
QString parsed = parser.parse(settings);
432
QCOMPARE(parsed, fileName.toLower());
435
void AdvancedRenameWidgetTest::testEmptyParseString()
437
ParseSettings settings;
438
DefaultRenameParser parser;
440
settings.fileUrl = filePath;
442
// test for empty parser string
443
settings.parseString.clear();
444
QString parsed = parser.parse(settings);
445
QCOMPARE(parsed, fileName);
447
settings.parseString = QString(" ");
448
parsed = parser.parse(settings);
449
QCOMPARE(parsed, fileName);