File indexing completed on 2024-04-21 05:51:41

0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 // SPDX-FileCopyrightText: 2007 Dominik Seichter <domseichter@web.de>
0003 
0004 #include "tokentest.h"
0005 
0006 #include "batchrenamer.h"
0007 #include "krenamefile.h"
0008 
0009 #include <QtTest>
0010 
0011 QTEST_MAIN(TokenTest)
0012 Q_DECLARE_METATYPE(QLatin1String)
0013 
0014 void TokenTest::initTestCase()
0015 {
0016     qRegisterMetaType<QLatin1String>();
0017 }
0018 
0019 void TokenTest::testTokens_data()
0020 {
0021     QTest::addColumn<QLatin1String>("token");
0022     QTest::addColumn<QString>("filename");
0023     QTest::addColumn<QString>("expected");
0024 
0025     // Testing the basic KRename tokens
0026     QString filename(" Test File name ");
0027     QString directory1("krename");
0028     QString directory2("home");
0029 
0030     QTest::newRow("$ Test")
0031         << QLatin1String("$") << filename << filename;
0032     QTest::newRow("& Test")
0033         << QLatin1String("&") << filename << filename.toUpper();
0034     QTest::newRow("% Test")
0035         << QLatin1String("%") << filename << filename.toLower();
0036     QTest::newRow("* Test")
0037         << QLatin1String("*") << filename << " Test File Name ";
0038     QTest::newRow("# Test")
0039         << QLatin1String("#") << filename << QString::number(0);
0040     QTest::newRow("## Test")
0041         << QLatin1String("##") << filename << QString::number(0).asprintf("%02i", 0);
0042     QTest::newRow("### Test")
0043         << QLatin1String("###") << filename << QString().asprintf("%03i", 0);
0044     QTest::newRow("#### Test")
0045         << QLatin1String("####") << filename << QString().asprintf("%04i", 0);
0046     QTest::newRow("##### Test")
0047         << QLatin1String("#####") << filename << QString().asprintf("%05i", 0);
0048     QTest::newRow("#{100;2} Test")
0049         << QLatin1String("#{100;2}") << filename << QString::number(100);
0050     QTest::newRow("####{100;2} Test")
0051         << QLatin1String("####{100;2}") << filename
0052         << QString().asprintf("%04i", 100);
0053     QTest::newRow("####{2;2}## Test")
0054         << QLatin1String("####{2;2}##") << filename
0055         << QString().asprintf("%04i", 2) + QString().asprintf("%02i", 0);
0056 
0057     QTest::newRow("[1] Test")
0058         << QLatin1String("[1]") << filename << QString(filename[0]);
0059     QTest::newRow("[2] Test")
0060         << QLatin1String("[2]") << filename << QString(filename[1]);
0061     QTest::newRow("[3] Test")
0062         << QLatin1String("[3]") << filename << QString(filename[2]);
0063     QTest::newRow("[&4] Test")
0064         << QLatin1String("[&4]") << filename << QString(filename[3].toUpper());
0065     QTest::newRow("[$4] Test")
0066         << QLatin1String("[$4]") << filename << QString(filename[3]);
0067     QTest::newRow("[%4] Test")
0068         << QLatin1String("[%4]") << filename << QString(filename[3].toLower());
0069     QTest::newRow("[*4] Test")
0070         << QLatin1String("[*4]") << filename << QString(filename[3].toUpper());
0071     QTest::newRow("[4-] Test")
0072         << QLatin1String("[4-]") << filename
0073         << filename.right(filename.length() - 3);
0074     QTest::newRow("[&4-] Test")
0075         << QLatin1String("[&4-]") << filename
0076         << filename.right(filename.length() - 3).toUpper();
0077     QTest::newRow("[$4-] Test")
0078         << QLatin1String("[$4-]") << filename
0079         << filename.right(filename.length() - 3);
0080     QTest::newRow("[%4-] Test")
0081         << QLatin1String("[%4-]") << filename
0082         << filename.right(filename.length() - 3).toLower();
0083     QTest::newRow("[*4-] Test")
0084         << QLatin1String("[*4-]") << filename
0085         << "St File Name ";
0086     QTest::newRow("[4-] Test")
0087         << QLatin1String("[4-]") << filename
0088         << filename.right(filename.length() - 3);
0089     QTest::newRow("[&4-[length]] Test")
0090         << QLatin1String("[&4-[length]]") << filename
0091         << filename.right(filename.length() - 3).toUpper();
0092     QTest::newRow("[$4-[length]] Test")
0093         << QLatin1String("[$4-[length]]") << filename
0094         << filename.right(filename.length() - 3);
0095     QTest::newRow("[%4-[length]] Test")
0096         << QLatin1String("[%4-[length]]") << filename
0097         << filename.right(filename.length() - 3).toLower();
0098     QTest::newRow("[*4-[length]] Test")
0099         << QLatin1String("[*4-[length]]") << filename << "St File Name ";
0100     QTest::newRow("[trimmed;[4-]] Test")
0101         << QLatin1String("[trimmed;[4-]]") << filename
0102         << filename.right(filename.length() - 3).trimmed();
0103     QTest::newRow("[trimmed] Test")
0104         << QLatin1String("[trimmed]") << filename << filename.trimmed();
0105     QTest::newRow("[length] Test")
0106         << QLatin1String("[length]")
0107         << filename << QString::number(filename.length());
0108     QTest::newRow("[length-0] Test")
0109         << QLatin1String("[length-0]")
0110         << filename << QString::number(filename.length());
0111     QTest::newRow("[length-1] Test")
0112         << QLatin1String("[length-1]") << filename
0113         << QString::number(filename.length() - 1);
0114     QTest::newRow("[length-2] Test")
0115         << QLatin1String("[length-2]") << filename
0116         << QString::number(filename.length() - 2);
0117     QTest::newRow("[#length] Test")
0118         << QLatin1String("[#length]") << filename
0119         << QString::number(filename.length());
0120     QTest::newRow("[#length-0] Test")
0121         << QLatin1String("[#length-0]") << filename
0122         << QString::number(filename.length());
0123     QTest::newRow("[#length-1] Test")
0124         << QLatin1String("[#length-1]") << filename
0125         << QString::number(filename.length() - 1);
0126     QTest::newRow("[#length-2] Test")
0127         << QLatin1String("[#length-2]") << filename
0128         << QString::number(filename.length() - 2);
0129     QTest::newRow("[####length] Test")
0130         << QLatin1String("[####length]")
0131         << filename << QString().asprintf("%04i", filename.length());
0132     QTest::newRow("[####length-0] Test")
0133         << QLatin1String("[####length-0]") << filename
0134         << QString().asprintf("%04i", filename.length());
0135     QTest::newRow("[####length-1] Test")
0136         << QLatin1String("[####length-1]") << filename
0137         << QString().asprintf("%04i", filename.length() - 1);
0138     QTest::newRow("[####length-2] Test")
0139         << QLatin1String("[####length-2]") << filename
0140         << QString().asprintf("%04i", filename.length() - 2);
0141     QTest::newRow("[6-9] Test")
0142         << QLatin1String("[6-9]") << filename << filename.mid(5, 4);
0143     QTest::newRow("[&6-9] Test")
0144         << QLatin1String("[&6-9]") << filename << filename.mid(5, 4).toUpper();
0145     QTest::newRow("[$6-9] Test")
0146         << QLatin1String("[$6-9]") << filename << filename.mid(5, 4);
0147     QTest::newRow("[%6-9] Test")
0148         << QLatin1String("[%6-9]") << filename << filename.mid(5, 4).toLower();
0149     QTest::newRow("[*6-9] Test")
0150         << QLatin1String("[*6-9]") << filename << filename.mid(5, 4);
0151     QTest::newRow("[trimmed;[6-9]] Test")
0152         << QLatin1String("[trimmed;[6-9]]") << filename
0153         << filename.mid(5, 4).trimmed();
0154     QTest::newRow("[6;4] Test")
0155         << QLatin1String("[6;4]") << filename << filename.mid(5, 4);
0156     QTest::newRow("[&6;4] Test")
0157         << QLatin1String("[&6;4]") << filename << filename.mid(5, 4).toUpper();
0158     QTest::newRow("[$6;4] Test")
0159         << QLatin1String("[$6;4]") << filename << filename.mid(5, 4);
0160     QTest::newRow("[%6;4] Test")
0161         << QLatin1String("[%6;4]") << filename << filename.mid(5, 4).toLower();
0162     QTest::newRow("[*6;4] Test")
0163         << QLatin1String("[*6;4]") << filename << filename.mid(5, 4);
0164     QTest::newRow("[1;1{[length]}] Test")
0165         << QLatin1String("[1;1{[length]}]") << filename <<  "1";
0166     QTest::newRow("[trimmed;[6;4]] Test")
0167         << QLatin1String("[trimmed;[6;4]]") << filename
0168         << filename.mid(5, 4).trimmed();
0169     QTest::newRow("[trimmed; Hallo ] Test")
0170         << QLatin1String("[trimmed; Hallo ]") << filename << "Hallo";
0171     QTest::newRow("[dirname] Test")
0172         << QLatin1String("[dirname]") << filename << directory1;
0173     QTest::newRow("[&dirname] Test")
0174         << QLatin1String("[&dirname]") << filename << directory1.toUpper();
0175     QTest::newRow("[$dirname] Test")
0176         << QLatin1String("[$dirname]") << filename << directory1;
0177     QTest::newRow("[%dirname] Test")
0178         << QLatin1String("[%dirname]") << filename << directory1.toLower();
0179     // Don't change the capitalisation below just to match the app name style,
0180     // it'll break the test
0181     QTest::newRow("[*dirname] Test")
0182         << QLatin1String("[*dirname]") << filename << "Krename";
0183     QTest::newRow("[trimmed;[dirname]] Test")
0184         << QLatin1String("[trimmed;[dirname]]") << filename << directory1;
0185     QTest::newRow("[dirname.] Test")
0186         << QLatin1String("[dirname.]") << filename << directory2;
0187     QTest::newRow("[&dirname.] Test")
0188         << QLatin1String("[&dirname.]") << filename << directory2.toUpper();
0189     QTest::newRow("[$dirname.] Test")
0190         << QLatin1String("[$dirname.]") << filename << directory2;
0191     QTest::newRow("[%dirname.] Test")
0192         << QLatin1String("[%dirname.]") << filename << directory2.toLower();
0193     QTest::newRow("[*dirname.] Test")
0194         << QLatin1String("[*dirname.]") << filename << "Home";
0195     QTest::newRow("[trimmed;[dirname.]] Test")
0196         << QLatin1String("[trimmed;[dirname.]]") << filename  << directory2;
0197     QTest::newRow("[dirname..] Test")
0198         << QLatin1String("[dirname..]") << filename << "";
0199     QTest::newRow("[&dirname..] Test")
0200         << QLatin1String("[&dirname..]") << filename << "";
0201     QTest::newRow("[$dirname..] Test")
0202         << QLatin1String("[$dirname..]") << filename << "";
0203     QTest::newRow("[%dirname..] Test")
0204         << QLatin1String("[%dirname..]") << filename << "";
0205     QTest::newRow("[*dirname..] Test")
0206         << QLatin1String("[*dirname..]") << filename << "";
0207     // TODO: This test has strange effects that only occur if [dirname..] is an empty QString
0208     //QTest::newRow("[trimmed;[dirname..]] Test")
0209     //    << QLatin1String("[trimmed;[dirname..]]") << filename << filename.trimmed();
0210     QTest::newRow("Complex Test1")
0211         << QLatin1String("&[2-5]") << filename << filename.toUpper() + "Test";
0212     QTest::newRow("Complex Test2")
0213         << QLatin1String("%[2-5]") << filename << filename.toLower() + "Test";
0214     QTest::newRow("Complex Test3")
0215         << QLatin1String("$[2-5]") << filename << filename + "Test";
0216     QTest::newRow("Complex Test4")
0217         << QLatin1String("*[2-5]") << filename << " Test File Name Test";
0218     QTest::newRow("Complex Test5")
0219         << QLatin1String("[trimmed][2-5]") << filename
0220         << filename.trimmed() + "Test";
0221     QTest::newRow("Complex Test6")
0222         << QLatin1String("[&2-5]\\&[length-2]\\&[1;1{Hallo}]") << filename
0223         << "TEST&14&H";
0224 
0225     // Testing all special characters in KRename
0226     QTest::newRow("\\/ Test") << QLatin1String("\\/") << filename << "%2f";   // this is displayed as a slash,
0227     // unix filenames are not allowed
0228     // to contain a slash
0229     QTest::newRow("\\[ Test") << QLatin1String("\\[") << filename << "[";
0230     QTest::newRow("\\] Test") << QLatin1String("\\]") << filename << "]";
0231     QTest::newRow("\\$ Test") << QLatin1String("\\$") << filename << "$";
0232     QTest::newRow("\\* Test") << QLatin1String("\\*") << filename << "*";
0233     QTest::newRow("\\\\ Test") << QLatin1String("\\\\") << filename << "\\";
0234     QTest::newRow("\\& Test") << QLatin1String("\\&") << filename  << "&";
0235     QTest::newRow("\\% Test") << QLatin1String("\\%") << filename << "%";
0236     QTest::newRow("\\# Test") << QLatin1String("\\#") << filename << "#";
0237 
0238     // Testing filenames with special characters
0239     QString specialname("Test %1 File");
0240     QTest::newRow("File [ Test") << QLatin1String("$") << specialname.arg("[") << specialname.arg("[");
0241     QTest::newRow("File ] Test") << QLatin1String("$") << specialname.arg("]") << specialname.arg("]");
0242     QTest::newRow("File $ Test") << QLatin1String("$") << specialname.arg("$") << specialname.arg("$");
0243     QTest::newRow("File * Test") << QLatin1String("$") << specialname.arg("*") << specialname.arg("*");
0244     QTest::newRow("File \\ Test") << QLatin1String("$") << specialname.arg("\\") << specialname.arg("\\");
0245     QTest::newRow("File & Test") << QLatin1String("$") << specialname.arg("&") << specialname.arg("&");
0246     QTest::newRow("File % Test") << QLatin1String("$") << specialname.arg("%") << specialname.arg("%");
0247     // TODO: figure out why this fails, it works if I create the file manually and rename it via the GUI
0248     //QTest::newRow("File # Test") << QLatin1String("$") << specialname.arg("#") << specialname.arg("#");
0249 
0250     // Testing system functions
0251     QTest::newRow("Date Test")
0252         << QLatin1String("[date]") << filename
0253         << QDateTime::currentDateTime().toString("dd-MM-yyyy");
0254     QTest::newRow("dd-MM-yyyy Date Test")
0255         << QLatin1String("[date;dd-MM-yyyy]") << filename
0256         << QDateTime::currentDateTime().toString("dd-MM-yyyy");
0257     QTest::newRow("dd:MM:yyyy Date Test")
0258         << QLatin1String("[date;dd:MM:yyyy]") << filename
0259         << QDateTime::currentDateTime().toString("dd:MM:yyyy");
0260     QTest::newRow("yy.mm.dd Date Test")
0261         << QLatin1String("[date;yy.mm.dd]") << filename
0262         << QDateTime::currentDateTime().toString("yy.mm.dd");
0263     QTest::newRow("d Date Test")
0264         << QLatin1String("[date;d]") << filename
0265         << QDateTime::currentDateTime().toString("d");
0266     QTest::newRow("dd Date Test")
0267         << QLatin1String("[date;dd]") << filename
0268         << QDateTime::currentDateTime().toString("dd");
0269     QTest::newRow("ddd Date Test")
0270         << QLatin1String("[date;ddd]") << filename
0271         << QDateTime::currentDateTime().toString("ddd");
0272     QTest::newRow("dddd Date Test")
0273         << QLatin1String("[date;dddd]") << filename
0274         << QDateTime::currentDateTime().toString("dddd");
0275     QTest::newRow("M Date Test")
0276         << QLatin1String("[date;M]") << filename
0277         << QDateTime::currentDateTime().toString("M");
0278     QTest::newRow("MM Date Test")
0279         << QLatin1String("[date;MM]") << filename
0280         << QDateTime::currentDateTime().toString("MM");
0281     QTest::newRow("MMM Date Test")
0282         << QLatin1String("[date;MMM]") << filename
0283         << QDateTime::currentDateTime().toString("MMM");
0284     QTest::newRow("MMMM Date Test")
0285         << QLatin1String("[date;MMMM]") << filename
0286         << QDateTime::currentDateTime().toString("MMMM");
0287     QTest::newRow("yy Date Test")
0288         << QLatin1String("[date;yy]") << filename
0289         << QDateTime::currentDateTime().toString("yy");
0290     QTest::newRow("yyyy Date Test")
0291         << QLatin1String("[date;yyyy]") << filename
0292         << QDateTime::currentDateTime().toString("yyyy");
0293 
0294     QTest::newRow("h Date Test")
0295         << QLatin1String("[date;h]") << filename
0296         << QDateTime::currentDateTime().toString("h");
0297     QTest::newRow("hh Date Test")
0298         << QLatin1String("[date;hh]") << filename
0299         << QDateTime::currentDateTime().toString("hh");
0300     QTest::newRow("m Date Test")
0301         << QLatin1String("[date;m]") << filename
0302         << QDateTime::currentDateTime().toString("m");
0303     QTest::newRow("mm Date Test")
0304         << QLatin1String("[date;mm]") << filename
0305         << QDateTime::currentDateTime().toString("mm");
0306     QTest::newRow("s Date Test")
0307         << QLatin1String("[date;s]") << filename
0308         << QDateTime::currentDateTime().toString("s");
0309     QTest::newRow("ss Date Test")
0310         << QLatin1String("[date;ss]") << filename
0311         << QDateTime::currentDateTime().toString("ss");
0312     // Current computers are to slow to compare two milliseconds as the instruction is longer than
0313     // a millisecond.
0314     //QTest::newRow("z Date Test")
0315     //    << QLatin1String("[date;z]") << filename
0316     //    << QDateTime::currentDateTime().toString( "z");
0317     //QTest::newRow("zzz Date Test")
0318     //    << QLatin1String("[date;zzz]") << filename
0319     //    << QDateTime::currentDateTime().toString( "zzz");
0320     QTest::newRow("ap Date Test")
0321         << QLatin1String("[date;ap]") << filename
0322         << QDateTime::currentDateTime().toString("ap");
0323     QTest::newRow("AP Date Test")
0324         << QLatin1String("[date;AP]") << filename
0325         << QDateTime::currentDateTime().toString("AP");
0326     QTest::newRow("Day Test")
0327         << QLatin1String("[day]") << filename
0328         << QDateTime::currentDateTime().toString("dd");
0329     QTest::newRow("Month Test")
0330         << QLatin1String("[month]") << filename
0331         << QDateTime::currentDateTime().toString("MM");
0332     QTest::newRow("Year Test")
0333         << QLatin1String("[year]") << filename
0334         << QDateTime::currentDateTime().toString("yyyy");
0335     QTest::newRow("Hour Test")
0336         << QLatin1String("[hour]") << filename
0337         << QDateTime::currentDateTime().toString("hh");
0338     QTest::newRow("Minute Test")
0339         << QLatin1String("[minute]") << filename
0340         << QDateTime::currentDateTime().toString("mm");
0341     QTest::newRow("Second Test")
0342         << QLatin1String("[second]") << filename
0343         << QDateTime::currentDateTime().toString("ss");
0344     QTest::newRow("Time Test")
0345         << QLatin1String("[time]") << filename
0346         << QDateTime::currentDateTime().toString("hh-mm-ss");
0347 
0348     // Regression tests
0349     // Caused an infinite loop
0350     QTest::newRow("[1-2 [4-] Test")
0351         << QLatin1String("[1-2 [4-]") << filename
0352         << ' ' + filename.right(filename.length() - 3);
0353     QTest::newRow("###{329;13")
0354         << QLatin1String("###{329;13") << filename << "329";
0355     QTest::newRow("ABC {1")
0356         << QLatin1String("ABC {1") << filename << "ABC {1";
0357 
0358     // Brackets appeared as \[ in the final result
0359     QTest::newRow("1##-[$6-] Test")
0360         << QLatin1String("1##-[$6-]") << "1-07 Take Flight (Wings) [Pocketman]"
0361         << "100-Take Flight (Wings) [Pocketman]";
0362 }
0363 
0364 void TokenTest::testTokens()
0365 {
0366     QFETCH(QLatin1String, token);
0367     QFETCH(QString, filename);
0368     QFETCH(QString, expected);
0369 
0370     QString directory("/home/krename/");
0371     KRenameFile::List list;
0372     KRenameFile file(QUrl(directory + filename), filename.isEmpty(), eSplitMode_FirstDot, 1);
0373 
0374     list.push_back(file);
0375 
0376     BatchRenamer b;
0377     b.setFilenameTemplate(token);
0378     b.setFiles(&list);
0379     b.processFilenames();
0380 
0381     QCOMPARE(list[0].dstFilename(), expected);
0382 }
0383 
0384 void TokenTest::testReplacing_data()
0385 {
0386     QTest::addColumn<QLatin1String>("token");
0387     QTest::addColumn<QString>("filename");
0388     QTest::addColumn<QString>("expected");
0389     QTest::addColumn<QString>("replace");
0390     QTest::addColumn<QString>("with");
0391     QTest::addColumn<bool>("regularExpression");
0392 
0393     QTest::newRow("Replace: Spaces")
0394         << QLatin1String("$") << "Filename with spaces"
0395         << "Filename_with_spaces" << " " << "_" << false;
0396     QTest::newRow("Replace: Nothing")
0397         << QLatin1String("$") << "Filename" << "Filename" << " " << "_"
0398         << false;
0399     QTest::newRow("Replace: Word")
0400         << QLatin1String("$") << "Filename with spaces"
0401         << "Filename HAS spaces" << "with" << "HAS" << false;
0402     QTest::newRow("Replace: $")
0403         << QLatin1String("$") << "Filename with $ and spaces"
0404         << "Filename with ! and spaces" << "$" << "!" << false;
0405     QTest::newRow("Replace: &")
0406         << QLatin1String("$") << "Filename with & and spaces"
0407         << "Filename with ! and spaces" << "&" << "!" << false;
0408     QTest::newRow("Replace: %")
0409         << QLatin1String("$") << "Filename with % and spaces"
0410         << "Filename with ! and spaces" << "%" << "!" << false;
0411     QTest::newRow("Replace: *")
0412         << QLatin1String("$") << "Filename with * and spaces"
0413         << "Filename with ! and spaces" << "*" << "!" << false;
0414     QTest::newRow("Replace: [")
0415         << QLatin1String("$") << "Filename with [ and spaces"
0416         << "Filename with ! and spaces" << "[" << "!" << false;
0417     QTest::newRow("Replace: ]")
0418         << QLatin1String("$") << "Filename with ] and spaces"
0419         << "Filename with ! and spaces" << "]" << "!" << false;
0420     // TODO: figure out why this fails, it works if I create the file manually and rename it via the GUI
0421     //QTest::newRow("File # Test") << QLatin1String("$") << specialname.arg("#") << specialname.arg("#");
0422     /*QTest::newRow("Replace: #")
0423         << QLatin1String("$") << QStringLiteral("Filename with # and spaces")
0424         << QStringLiteral("Filename with ! and spaces") << "#" << "!" << false;*/
0425     QTest::newRow("Replace: to $")
0426         << QLatin1String("$") << "Filename with spaces"
0427         << "Filename $ spaces" << "with" << "$" << false;
0428     QTest::newRow("Replace: to &")
0429         << QLatin1String("$") << "Filename with spaces"
0430         << "Filename & spaces" << "with" << "&" << false;
0431     QTest::newRow("Replace: to %")
0432         << QLatin1String("$") << "Filename with spaces"
0433         << "Filename % spaces" << "with" << "%" << false;
0434     QTest::newRow("Replace: to *")
0435         << QLatin1String("$") << "Filename with spaces"
0436         << "Filename * spaces" << "with" << "*" << false;
0437     QTest::newRow("Replace: to [")
0438         << QLatin1String("$") << "Filename with spaces"
0439         << "Filename [ spaces" << "with" << "[" << false;
0440     QTest::newRow("Replace: to ]")
0441         << QLatin1String("$") << "Filename with spaces"
0442         << "Filename ] spaces" << "with" << "]" << false;
0443     QTest::newRow("Replace: to #")
0444         << QLatin1String("$") << "Filename with spaces"
0445         << "Filename # spaces" << "with" << "#" << false;
0446 
0447     QTest::newRow("RegExp: ?")
0448         << QLatin1String("$") << "Filename"
0449         << "AAAAAAAAA" << "[a-zA-z]?" << "A" << true;
0450     QTest::newRow("RegExp: {1}")
0451         << QLatin1String("$") << "Filename"
0452         << "AAAAAAAA" << "[a-zA-z]{1}"  << "A" << true;
0453     QTest::newRow("RegExp: +")
0454         << QLatin1String("$") << "Filename"
0455         << "A" << "[a-zA-z]+" << "A" << true;
0456     QTest::newRow("RegExp: \\d")
0457         << QLatin1String("$") << "Filename 123"
0458         << "Filename NumberNumberNumber" << "\\d"  << "Number" << true;
0459     QTest::newRow("RegExp: \\d+")
0460         << QLatin1String("$") << "Filename 123"
0461         << "Filename Number" << "\\d+" << "Number" << true;
0462     QTest::newRow("RegExp: Match")
0463         << QLatin1String("$") << "Filename 123"
0464         << "MATCHING" << "[a-zA-z]* \\d{3}" << "MATCHING" << true;
0465 }
0466 
0467 void TokenTest::testReplacing()
0468 {
0469     QFETCH(QLatin1String, token);
0470     QFETCH(QString, filename);
0471     QFETCH(QString, expected);
0472     QFETCH(QString, replace);
0473     QFETCH(QString, with);
0474     QFETCH(bool, regularExpression);
0475 
0476     QString directory("/home/krename/");
0477     KRenameFile::List list;
0478     KRenameFile file(QUrl(directory + filename), filename.isEmpty(), eSplitMode_FirstDot, 1);
0479     list.push_back(file);
0480 
0481     QList<TReplaceItem> replaceList;
0482 
0483     TReplaceItem strings;
0484     strings.find = replace;
0485     strings.replace = with;
0486     strings.reg = regularExpression;
0487 
0488     replaceList.append(strings);
0489 
0490     BatchRenamer b;
0491     b.setFilenameTemplate(token);
0492     b.setFiles(&list);
0493     b.setReplaceList(replaceList);
0494     b.processFilenames();
0495 
0496     QCOMPARE(list[0].dstFilename(), expected);
0497 }
0498 
0499 #include "moc_tokentest.cpp"