krenametest.cpp (krename-4.0.9) | : | krenametest.cpp (krename-4.90.90) | ||
---|---|---|---|---|
skipping to change at line 28 | skipping to change at line 28 | |||
#include "krenametest.h" | #include "krenametest.h" | |||
#include "krenamefile.h" | #include "krenamefile.h" | |||
#include "batchrenamer.h" | #include "batchrenamer.h" | |||
#include <stdio.h> | #include <stdio.h> | |||
#include <QTextEdit> | #include <QTextEdit> | |||
#include <QVBoxLayout> | #include <QVBoxLayout> | |||
#include <kurl.h> | #include <QUrl> | |||
// Macros to simplify the test code | // Macros to simplify the test code | |||
#define PRINT_RESULT( name ) writeTestMessage(" %04i Running test: %20s = %s at line %i", \ | #define PRINT_RESULT( name ) writeTestMessage(" %04i Running test: %20s = %s at line %i", \ | |||
++m_counter, name, m_result ? "[OK | ++m_counter, name, m_result ? "[OK]" : "[FAILED]", __LINE__ ); \ | |||
]" : "[FAILED]", __LINE__ ); \ | if( !m_result ) { \ | |||
if( !m_result ) { \ | ++m_failed; \ | |||
++m_failed; \ | writeTestMessage( "<b>ERROR: %04i Test %s failed!</b>\n", m_counter, name ); | |||
writeTestMessage( "<b>ERROR: %04i Test %s faile | \ | |||
d!</b>\n", m_counter, name ); \ | } else \ | |||
} else \ | ++m_success; | |||
++m_success; | ||||
#define RUN_KRENAMEFILE_TEST( name, url, dir, file, ext, mode, dot, isDir ) \ | #define RUN_KRENAMEFILE_TEST( name, url, dir, file, ext, mode, dot, isDir ) \ | |||
m_result = testKRenameFileInternal( url, dir, file, | m_result = testKRenameFileInternal( url, dir, file, ext, mode, dot, isDir ); | |||
ext, mode, dot, isDir ); \ | \ | |||
PRINT_RESULT( name ); | PRINT_RESULT( name ); | |||
#define RUN_TOKEN_TEST( name, templ, filename, expect ) m_result = tokenTest( te mpl, filename, expect ); \ | #define RUN_TOKEN_TEST( name, templ, filename, expect ) m_result = tokenTest( te mpl, filename, expect ); \ | |||
PRINT_RESULT( name ); | PRINT_RESULT( name ); | |||
#define RUN_NUMBER_TEST( name, length, start, step, skip ) m_result = numberingT est( length, start, step, skip, 100 ); \ | #define RUN_NUMBER_TEST( name, length, start, step, skip ) m_result = numberingT est( length, start, step, skip, 100 ); \ | |||
PRINT_RESULT( name ); | PRINT_RESULT( name ); | |||
#define RUN_NUMBER_TESTS( name, start, step, skip ) m_result = numberingTest( 1, start, step, skip, 100 ); \ | #define RUN_NUMBER_TESTS( name, start, step, skip ) m_result = numberingTest( 1, start, step, skip, 100 ); \ | |||
PRINT_RESULT( name ); \ | PRINT_RESULT( name ); \ | |||
m_result = numberingTest( 2, | m_result = numberingTest( 2, start, step, skip, 100 ); \ | |||
start, step, skip, 100 ); \ | PRINT_RESULT( name ); \ | |||
PRINT_RESULT( name ); \ | m_result = numberingTest( 3, start, step, skip, 100 ); \ | |||
m_result = numberingTest( 3, | PRINT_RESULT( name ); \ | |||
start, step, skip, 100 ); \ | m_result = numberingTest( 4, start, step, skip, 100 ); \ | |||
PRINT_RESULT( name ); \ | PRINT_RESULT( name ); \ | |||
m_result = numberingTest( 4, | m_result = numberingTest( 10, start, step, skip, 100 ); \ | |||
start, step, skip, 100 ); \ | PRINT_RESULT( name ); \ | |||
PRINT_RESULT( name ); \ | ||||
m_result = numberingTest( 10 | ||||
, start, step, skip, 100 ); \ | ||||
PRINT_RESULT( name ); \ | ||||
#define RUN_REPLACE_TEST( name, token, file, expect, replace, with, regExp ) \ | #define RUN_REPLACE_TEST( name, token, file, expect, replace, with, regExp ) \ | |||
m_result = replaceTest( | m_result = replaceTest( token, file, expect, replace, with, regExp); \ | |||
token, file, expect, replace, with, regExp); \ | PRINT_RESULT( name ); | |||
PRINT_RESULT( name ); | ||||
#define RUN_KRENAME_MULTI_FILE_TEST( files, expected, expectedPaths, token, name ) \ | #define RUN_KRENAME_MULTI_FILE_TEST( files, expected, expectedPaths, token, name ) \ | |||
m_result = testMultipleFiles( files, expected, expectedPaths, token ); \ | m_result = testMultipleFiles( files, expected, expectedPaths, token ); \ | |||
PRINT_RESULT( name ); | PRINT_RESULT( name ); | |||
KRenameTest::KRenameTest() | KRenameTest::KRenameTest() | |||
: QWidget( ), | : QWidget(), | |||
m_counter( 0 ), m_verbose( false ), m_success( 0 ), m_failed( 0 ) | m_counter(0), m_verbose(false), m_success(0), m_failed(0) | |||
{ | { | |||
QVBoxLayout* layout = new QVBoxLayout( this ); | QVBoxLayout *layout = new QVBoxLayout(this); | |||
m_text = new QTextEdit( this ); | ||||
m_text->setReadOnly( true ); | ||||
m_text->setFont( QFont("Courier") ); | ||||
layout->addWidget( m_text ); | ||||
this->setWindowTitle("KRename Test"); | ||||
this->resize( 640, 480 ); | ||||
this->show(); | ||||
} | ||||
KRenameTest::~KRenameTest() | ||||
{ | ||||
} | ||||
void KRenameTest::startTest() | ||||
{ | ||||
testKRenameFile(); | ||||
testBatchRenamer(); | ||||
this->writeTestMessage( "<b>Results:</b>\n\nSuccessfull: %i Failed %i", m_su | ||||
ccess, m_failed ); | ||||
} | ||||
void KRenameTest::writeTestHeader( const QString & text ) | ||||
{ | ||||
QString str( "<b>Testing class: <i>%1</i></b>" ); | ||||
m_text->append( str.arg( text ) ); | ||||
} | ||||
void KRenameTest::writeTestMessage( const char* format, ... ) | ||||
{ | ||||
va_list args; | ||||
va_start( args, format ); | ||||
vsnprintf( m_buffer, KRenameTest::BUFFER_LENGTH, format, args ); | ||||
va_end( args ); | ||||
m_text->append( m_buffer ); | ||||
} | ||||
void KRenameTest::testKRenameFile() | ||||
{ | ||||
writeTestHeader( "KRenameFile" ); | ||||
// Test a simple filename | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt (first dot)", KUrl("file | ||||
:///home/test/simple.txt"), | ||||
"/home/test", "simple", "txt", eSplitMode_FirstDot, 0, | ||||
false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt (last dot)", KUrl("file: | ||||
///home/test/simple.txt"), | ||||
"/home/test", "simple", "txt", eSplitMode_LastDot, 0, | ||||
false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt (no extension)", KUrl("f | ||||
ile:///home/test/simple.txt"), | ||||
"/home/test", "simple.txt", "", eSplitMode_NoExtension | ||||
, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt (no extension)", KUrl("f | ||||
ile:///home/test/simple.txt"), | ||||
"/home/test", "simple.txt", "", eSplitMode_NoExtension | ||||
, 1, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt (custom dot 0)", KUrl("f | ||||
ile:///home/test/simple.txt"), | ||||
"/home/test", "simple.txt", "", eSplitMode_CustomDot, | ||||
0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt (custom dot 1)", KUrl("f | ||||
ile:///home/test/simple.txt"), | ||||
"/home/test", "simple", "txt", eSplitMode_CustomDot, 1 | ||||
, false ); | ||||
// Test a simple filename and a directory with spaces | ||||
RUN_KRENAMEFILE_TEST( "file:///home/dir with space/simple.txt (first dot)", | ||||
KUrl("file:///home/dir with space/simple.txt"), | ||||
"/home/dir with space", "simple", "txt", eSplitMode_Fi | ||||
rstDot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/dir with space/simple.txt (last dot)", K | ||||
Url("file:///home/dir with space/simple.txt"), | ||||
"/home/dir with space", "simple", "txt", eSplitMode_La | ||||
stDot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/dir with space/simple.txt (custom dot 0) | ||||
", KUrl("file:///home/dir with space/simple.txt"), | ||||
"/home/dir with space", "simple.txt", "", eSplitMode_C | ||||
ustomDot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/dir with space/simple.txt (custom dot 1) | ||||
", KUrl("file:///home/dir with space/simple.txt"), | ||||
"/home/dir with space", "simple", "txt", eSplitMode_Cu | ||||
stomDot, 1, false ); | ||||
// test a more complicated file extension | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/complicated.tar.gz (first dot)", KU | ||||
rl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated", "tar.gz", eSplitMode_Firs | ||||
tDot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/complicated.tar.gz (last dot)", KUr | ||||
l("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated.tar", "gz", eSplitMode_Last | ||||
Dot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/complicated.tar.gz (custom dot 0)", | ||||
KUrl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated.tar.gz", "", eSplitMode_Cus | ||||
tomDot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/complicated.tar.gz (custom dot 1)", | ||||
KUrl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated", "tar.gz", eSplitMode_Cust | ||||
omDot, 1, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/complicated.tar.gz (custom dot 2)", | ||||
KUrl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated.tar", "gz", eSplitMode_Cust | ||||
omDot, 2, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/complicated.tar.gz (custom dot 3)", | ||||
KUrl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated.tar.gz", "", eSplitMode_Cus | ||||
tomDot, 3, false ); | ||||
// test a directory with dot | ||||
RUN_KRENAMEFILE_TEST( "file:///home/dir.with.dot/simple.txt (first dot)", KU | ||||
rl("file:///home/dir.with.dot/simple.txt"), | ||||
"/home/dir.with.dot", "simple", "txt", eSplitMode_Firs | ||||
tDot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/dir.with.dot/simple.txt (last dot)", KUr | ||||
l("file:///home/dir.with.dot/simple.txt"), | ||||
"/home/dir.with.dot", "simple", "txt", eSplitMode_Last | ||||
Dot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/dir.with.dot/simple.txt (custom dot 0)", | ||||
KUrl("file:///home/dir.with.dot/simple.txt"), | ||||
"/home/dir.with.dot", "simple.txt", "", eSplitMode_Cus | ||||
tomDot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/dir.with.dot/simple.txt (custom dot 1)", | ||||
KUrl("file:///home/dir.with.dot/simple.txt"), | ||||
"/home/dir.with.dot", "simple", "txt", eSplitMode_Cust | ||||
omDot, 1, false ); | ||||
// test a directory which ends with a slash | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/ (first dot)", KUrl("file:///home/t | ||||
est/"), | ||||
"/home", "test", "", eSplitMode_FirstDot, 0, true ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/ (last dot)", KUrl("file:///home/te | ||||
st/"), | ||||
"/home", "test", "", eSplitMode_LastDot, 0, true ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/ (custom dot 0)", KUrl("file:///hom | ||||
e/test/"), | ||||
"/home", "test", "", eSplitMode_CustomDot, 0, true ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/ (custom dot 1)", KUrl("file:///hom | ||||
e/test/"), | ||||
"/home", "test", "", eSplitMode_CustomDot, 1, true ); | ||||
// test a directory which doesn't end with a slash | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test (first dot)", KUrl("file:///home/te | ||||
st"), | ||||
"/home", "test", "", eSplitMode_FirstDot, 0, true ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test (last dot)", KUrl("file:///home/tes | ||||
t"), | ||||
"/home", "test", "", eSplitMode_LastDot, 0, true ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test (custom dot 0)", KUrl("file:///home | ||||
/test"), | ||||
"/home", "test", "", eSplitMode_CustomDot, 0, true ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test (custom dot 1)", KUrl("file:///home | ||||
/test"), | ||||
"/home", "test", "", eSplitMode_CustomDot, 1, true ); | ||||
// test no file extension | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple (first dot)", KUrl("file:/// | ||||
home/test/simple"), | ||||
"/home/test", "simple", "", eSplitMode_FirstDot, 0, fa | ||||
lse ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple (last dot)", KUrl("file:///h | ||||
ome/test/simple"), | ||||
"/home/test", "simple", "", eSplitMode_LastDot, 0, fal | ||||
se ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple (custom dot 0)", KUrl("file: | ||||
///home/test/simple"), | ||||
"/home/test", "simple", "", eSplitMode_CustomDot, 0, f | ||||
alse ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple (custom dot 1)", KUrl("file: | ||||
///home/test/simple"), | ||||
"/home/test", "simple", "", eSplitMode_CustomDot, 1, f | ||||
alse ); | ||||
// test very long complex file extension | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt.long.ext.zip (first dot) | ||||
", KUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple", "txt.long.ext.zip", eSplitMode | ||||
_FirstDot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt.long.ext.zip (last dot)" | ||||
, KUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt.long.ext", "zip", eSplitMode | ||||
_LastDot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt.long.ext.zip (custom dot | ||||
0)", KUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt.long.ext.zip", "", eSplitMod | ||||
e_CustomDot, 0, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt.long.ext.zip (custom dot | ||||
1)", KUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple", "txt.long.ext.zip", eSplitMode | ||||
_CustomDot, 1, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt.long.ext.zip (custom dot | ||||
2)", KUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt", "long.ext.zip", eSplitMode | ||||
_CustomDot, 2, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt.long.ext.zip (custom dot | ||||
3)", KUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt.long", "ext.zip", eSplitMode | ||||
_CustomDot, 3, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt.long.ext.zip (custom dot | ||||
4)", KUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt.long.ext", "zip", eSplitMode | ||||
_CustomDot, 4, false ); | ||||
RUN_KRENAMEFILE_TEST( "file:///home/test/simple.txt.long.ext.zip (custom dot | ||||
5)", KUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt.long.ext.zip", "", eSplitMod | ||||
e_CustomDot, 5, false ); | ||||
} | ||||
bool KRenameTest::testKRenameFileInternal( const KUrl & url, const QString & dir | ||||
ectory, | ||||
const QString & filename, const QStri | ||||
ng & extension, | ||||
ESplitMode eSplitMode, int dot, bool | ||||
isDir ) | ||||
{ | ||||
// if the expected filename and extension is empty expect a directoy | ||||
//bool isDirectory = filename.isEmpty() && extension.isEmpty(); | ||||
KRenameFile file( url, isDir, eSplitMode, dot ); | ||||
if( file.srcDirectory() != directory ) | ||||
{ | ||||
writeTestMessage( "Directory=(%s) expected (%s).\n", | ||||
file.srcDirectory().toLatin1().data(), | ||||
directory.toLatin1().data() ); | ||||
return false; | ||||
} | ||||
if( file.srcFilename() != filename ) | ||||
{ | ||||
writeTestMessage( "Filename=(%s) expected (%s).\n", | ||||
file.srcFilename().toLatin1().data(), | ||||
filename.toLatin1().data() ); | ||||
return false; | ||||
} | ||||
if( file.srcExtension() != extension ) | ||||
{ | ||||
writeTestMessage( "Extension=(%s) expected (%s).\n", | ||||
file.srcExtension().toLatin1().data(), | ||||
extension.toLatin1().data() ); | ||||
return false; | ||||
} | ||||
return true; | ||||
} | ||||
void KRenameTest::testBatchRenamer() | ||||
{ | ||||
writeTestHeader( "BatchRenamer" ); | ||||
// Testing the basic KRename tokens | ||||
QString filename( " Test File name " ); | ||||
QString directory1( "krename" ); | ||||
QString directory2( "home" ); | ||||
RUN_TOKEN_TEST( "$ Test", "$", filename, filename ); | ||||
RUN_TOKEN_TEST( "& Test", "&", filename, filename.toUpper() ); | ||||
RUN_TOKEN_TEST( "% Test", "%", filename, filename.toLower() ); | ||||
RUN_TOKEN_TEST( "* Test", "*", filename, " Test File Name " ); | ||||
RUN_TOKEN_TEST( "# Test", "#", filename, QString::number( 0 ) ); | ||||
RUN_TOKEN_TEST( "## Test", "##", filename, QString().sprintf("%02i", 0 ) ); | ||||
RUN_TOKEN_TEST( "### Test", "###", filename, QString().sprintf("%03i", 0 ) ) | ||||
; | ||||
RUN_TOKEN_TEST( "#### Test", "####", filename, QString().sprintf("%04i", 0 ) | ||||
); | ||||
RUN_TOKEN_TEST( "##### Test", "#####", filename, QString().sprintf("%05i", 0 | ||||
) ); | ||||
RUN_TOKEN_TEST( "#{100;2} Test", "#{100;2}", filename, QString::number( 100 | ||||
) ); | ||||
RUN_TOKEN_TEST( "####{100;2} Test", "####{100;2}", filename, QString().sprin | ||||
tf("%04i", 100 ) ); | ||||
RUN_TOKEN_TEST( "####{2;2}## Test", "####{2;2}##", filename, | ||||
QString().sprintf("%04i", 2 ) + QString().sprintf("%02i", 0 ) | ||||
); | ||||
RUN_TOKEN_TEST( "[1] Test", "[1]", filename, QString( filename[0] ) ); | ||||
RUN_TOKEN_TEST( "[2] Test", "[2]", filename, QString( filename[1] ) ); | ||||
RUN_TOKEN_TEST( "[3] Test", "[3]", filename, QString( filename[2] ) ); | ||||
RUN_TOKEN_TEST( "[&4] Test", "[&4]", filename, QString( filename[3].toUpper( | ||||
)) ); | ||||
RUN_TOKEN_TEST( "[$4] Test", "[$4]", filename, QString( filename[3] ) ); | ||||
RUN_TOKEN_TEST( "[%4] Test", "[%4]", filename, QString( filename[3].toLower( | ||||
)) ); | ||||
RUN_TOKEN_TEST( "[*4] Test", "[*4]", filename, QString( filename[3].toUpper( | ||||
)) ); | ||||
RUN_TOKEN_TEST( "[4-] Test", "[4-]", filename, filename.right( filename.leng | ||||
th() - 3 ) ); | ||||
RUN_TOKEN_TEST( "[&4-] Test", "[&4-]", filename, filename.right( filename.le | ||||
ngth() - 3 ).toUpper() ); | ||||
RUN_TOKEN_TEST( "[$4-] Test", "[$4-]", filename, filename.right( filename.le | ||||
ngth() - 3 ) ); | ||||
RUN_TOKEN_TEST( "[%4-] Test", "[%4-]", filename, filename.right( filename.le | ||||
ngth() - 3 ).toLower() ); | ||||
RUN_TOKEN_TEST( "[*4-] Test", "[*4-]", filename, "St File Name " ); | ||||
RUN_TOKEN_TEST( "[4-] Test", "[4-]", filename, filename.right( filename.leng | ||||
th() - 3 ) ); | ||||
RUN_TOKEN_TEST( "[&4-[length]] Test", "[&4-[length]]", filename, filename.ri | ||||
ght( filename.length() - 3 ).toUpper() ); | ||||
RUN_TOKEN_TEST( "[$4-[length]] Test", "[$4-[length]]", filename, filename.ri | ||||
ght( filename.length() - 3 ) ); | ||||
RUN_TOKEN_TEST( "[%4-[length]] Test", "[%4-[length]]", filename, filename.ri | ||||
ght( filename.length() - 3 ).toLower() ); | ||||
RUN_TOKEN_TEST( "[*4-[length]] Test", "[*4-[length]]", filename, "St File Na | ||||
me " ); | ||||
RUN_TOKEN_TEST( "[trimmed;[4-]] Test", "[trimmed;[4-]]", filename, filename. | ||||
right( filename.length() - 3 ).trimmed() ); | ||||
RUN_TOKEN_TEST( "[trimmed] Test", "[trimmed]", filename, filename.trimmed() | ||||
); | ||||
RUN_TOKEN_TEST( "[length] Test", "[length]", filename, QString::number( file | ||||
name.length() ) ); | ||||
RUN_TOKEN_TEST( "[length-0] Test", "[length-0]", filename, QString::number( | ||||
filename.length() ) ); | ||||
RUN_TOKEN_TEST( "[length-1] Test", "[length-1]", filename, QString::number( | ||||
filename.length() - 1 ) ); | ||||
RUN_TOKEN_TEST( "[length-2] Test", "[length-2]", filename, QString::number( | ||||
filename.length() - 2 ) ); | ||||
RUN_TOKEN_TEST( "[#length] Test", "[#length]", filename, QString::number( fi | ||||
lename.length() ) ); | ||||
RUN_TOKEN_TEST( "[#length-0] Test", "[#length-0]", filename, QString::number | ||||
( filename.length() ) ); | ||||
RUN_TOKEN_TEST( "[#length-1] Test", "[#length-1]", filename, QString::number | ||||
( filename.length() - 1 ) ); | ||||
RUN_TOKEN_TEST( "[#length-2] Test", "[#length-2]", filename, QString::number | ||||
( filename.length() - 2 ) ); | ||||
RUN_TOKEN_TEST( "[####length] Test", "[####length]", filename, QString().spr | ||||
intf("%04i", filename.length() ) ); | ||||
RUN_TOKEN_TEST( "[####length-0] Test", "[####length-0]", filename, QString() | ||||
.sprintf("%04i", filename.length() ) ); | ||||
RUN_TOKEN_TEST( "[####length-1] Test", "[####length-1]", filename, QString() | ||||
.sprintf("%04i", filename.length() - 1) ); | ||||
RUN_TOKEN_TEST( "[####length-2] Test", "[####length-2]", filename, QString() | ||||
.sprintf("%04i", filename.length() - 2) ); | ||||
RUN_TOKEN_TEST( "[6-9] Test", "[6-9]", filename, filename.mid( 5, 4 ) ); | ||||
RUN_TOKEN_TEST( "[&6-9] Test", "[&6-9]", filename, filename.mid( 5, 4 ).toUp | ||||
per() ); | ||||
RUN_TOKEN_TEST( "[$6-9] Test", "[$6-9]", filename, filename.mid( 5, 4 ) ); | ||||
RUN_TOKEN_TEST( "[%6-9] Test", "[%6-9]", filename, filename.mid( 5, 4 ).toLo | ||||
wer() ); | ||||
RUN_TOKEN_TEST( "[*6-9] Test", "[*6-9]", filename, filename.mid( 5, 4 ) ); | ||||
RUN_TOKEN_TEST( "[trimmed;[6-9]] Test", "[trimmed;[6-9]]", filename, filenam | ||||
e.mid( 5, 4 ).trimmed() ); | ||||
RUN_TOKEN_TEST( "[6;4] Test", "[6;4]", filename, filename.mid( 5, 4 ) ); | ||||
RUN_TOKEN_TEST( "[&6;4] Test", "[&6;4]", filename, filename.mid( 5, 4 ).toUp | ||||
per() ); | ||||
RUN_TOKEN_TEST( "[$6;4] Test", "[$6;4]", filename, filename.mid( 5, 4 ) ); | ||||
RUN_TOKEN_TEST( "[%6;4] Test", "[%6;4]", filename, filename.mid( 5, 4 ).toLo | ||||
wer() ); | ||||
RUN_TOKEN_TEST( "[*6;4] Test", "[*6;4]", filename, filename.mid( 5, 4 ) ); | ||||
RUN_TOKEN_TEST( "[1;1{[length]}] Test", "[1;1{[length]}]", filename, "1" ); | ||||
RUN_TOKEN_TEST( "[trimmed;[6;4]] Test", "[trimmed;[6;4]]", filename, filenam | ||||
e.mid( 5, 4 ).trimmed() ); | ||||
RUN_TOKEN_TEST( "[trimmed; Hallo ] Test", "[trimmed; Hallo ]", filename, "Ha | ||||
llo" ); | ||||
RUN_TOKEN_TEST( "[dirname] Test", "[dirname]", filename, directory1 ); | ||||
RUN_TOKEN_TEST( "[&dirname] Test", "[&dirname]", filename, directory1.toUppe | ||||
r() ); | ||||
RUN_TOKEN_TEST( "[$dirname] Test", "[$dirname]", filename, directory1 ); | ||||
RUN_TOKEN_TEST( "[%dirname] Test", "[%dirname]", filename, directory1.toLowe | ||||
r() ); | ||||
RUN_TOKEN_TEST( "[*dirname] Test", "[*dirname]", filename, "Krename" ); | ||||
RUN_TOKEN_TEST( "[trimmed;[dirname]] Test", "[trimmed;[dirname]]", filename, | ||||
directory1 ); | ||||
RUN_TOKEN_TEST( "[dirname.] Test", "[dirname.]", filename, directory2 ); | ||||
RUN_TOKEN_TEST( "[&dirname.] Test", "[&dirname.]", filename, directory2.toUp | ||||
per() ); | ||||
RUN_TOKEN_TEST( "[$dirname.] Test", "[$dirname.]", filename, directory2 ); | ||||
RUN_TOKEN_TEST( "[%dirname.] Test", "[%dirname.]", filename, directory2.toLo | ||||
wer() ); | ||||
RUN_TOKEN_TEST( "[*dirname.] Test", "[*dirname.]", filename, "Home" ); | ||||
RUN_TOKEN_TEST( "[trimmed;[dirname.]] Test", "[trimmed;[dirname.]]", filenam | ||||
e, directory2 ); | ||||
RUN_TOKEN_TEST( "[dirname..] Test", "[dirname..]", filename, "" ); | ||||
RUN_TOKEN_TEST( "[&dirname..] Test", "[&dirname..]", filename, "" ); | ||||
RUN_TOKEN_TEST( "[$dirname..] Test", "[$dirname..]", filename, "" ); | ||||
RUN_TOKEN_TEST( "[%dirname..] Test", "[%dirname..]", filename, "" ); | ||||
RUN_TOKEN_TEST( "[*dirname..] Test", "[*dirname..]", filename, "" ); | ||||
// TODO: This test has strange effects that only occur if [dirname..] is QSt | ||||
ring::null | ||||
//RUN_TOKEN_TEST( "[trimmed;[dirname..]] Test", "[trimmed;[dirname..]]", fil | ||||
ename, filename.trimmed() ); | ||||
RUN_TOKEN_TEST( "Complex Test1", "&[2-5]", filename, filename.toUpper() + "T | ||||
est" ); | ||||
RUN_TOKEN_TEST( "Complex Test2", "%[2-5]", filename, filename.toLower() + "T | ||||
est" ); | ||||
RUN_TOKEN_TEST( "Complex Test3", "$[2-5]", filename, filename + "Test" ); | ||||
RUN_TOKEN_TEST( "Complex Test4", "*[2-5]", filename, " Test File Name Test" | ||||
); | ||||
RUN_TOKEN_TEST( "Complex Test5", "[trimmed][2-5]", filename, filename.trimme | ||||
d() + "Test" ); | ||||
RUN_TOKEN_TEST( "Complex Test6", "[&2-5]\\&[length-2]\\&[1;1{Hallo}]", filen | ||||
ame, "TEST&14&H" ); | ||||
// Testing all special Characters in KRename | ||||
RUN_TOKEN_TEST( "\\/ Test", "\\/", filename, "%2f" ); // this is displayed a | ||||
s a slash, | ||||
// unix filenames are | ||||
not allowed | ||||
// to contain a slash | ||||
RUN_TOKEN_TEST( "\\[ Test", "\\[", filename, "[" ); | ||||
RUN_TOKEN_TEST( "\\] Test", "\\]", filename, "]" ); | ||||
RUN_TOKEN_TEST( "\\$ Test", "\\$", filename, "$" ); | ||||
RUN_TOKEN_TEST( "\\* Test", "\\*", filename, "*" ); | ||||
RUN_TOKEN_TEST( "\\\\ Test", "\\\\", filename, "\\" ); | ||||
RUN_TOKEN_TEST( "\\& Test", "\\&", filename, "&" ); | ||||
RUN_TOKEN_TEST( "\\% Test", "\\%", filename, "%" ); | ||||
RUN_TOKEN_TEST( "\\# Test", "\\#", filename, "#" ); | ||||
// Testing filenames with special characters | ||||
QString specialname("Test %1 File"); | ||||
RUN_TOKEN_TEST( "File [ Test", "$", specialname.arg( "[" ), specialname.arg( | ||||
"[" ) ); | ||||
RUN_TOKEN_TEST( "File ] Test", "$", specialname.arg( "]" ), specialname.arg( | ||||
"]" ) ); | ||||
RUN_TOKEN_TEST( "File $ Test", "$", specialname.arg( "$" ), specialname.arg( | ||||
"$" ) ); | ||||
RUN_TOKEN_TEST( "File * Test", "$", specialname.arg( "*" ), specialname.arg( | ||||
"*" ) ); | ||||
RUN_TOKEN_TEST( "File \\ Test", "$", specialname.arg( "\\" ), specialname.ar | ||||
g( "\\" ) ); | ||||
RUN_TOKEN_TEST( "File & Test", "$", specialname.arg( "&" ), specialname.arg( | ||||
"&" ) ); | ||||
RUN_TOKEN_TEST( "File % Test", "$", specialname.arg( "%" ), specialname.arg( | ||||
"%" ) ); | ||||
RUN_TOKEN_TEST( "File # Test", "$", specialname.arg( "#" ), specialname.arg( | ||||
"#" ) ); | ||||
// load all plugins now | ||||
//PluginLoader::instance()->loadPlugins( false ); // file plugins are not re | ||||
quired | ||||
// Testing system functions | ||||
RUN_TOKEN_TEST( "Date Test", "[date]", filename, QDateTime::currentDateTime( | ||||
).toString( "dd-MM-yyyy") ); | ||||
RUN_TOKEN_TEST( "dd-MM-yyyy Date Test", "[date;dd-MM-yyyy]", | ||||
filename, QDateTime::currentDateTime().toString( "dd-MM-yyyy | ||||
") ); | ||||
RUN_TOKEN_TEST( "dd:MM:yyyy Date Test", "[date;dd:MM:yyyy]", | ||||
filename, QDateTime::currentDateTime().toString( "dd:MM:yyyy | ||||
") ); | ||||
RUN_TOKEN_TEST( "yy.mm.dd Date Test", "[date;yy.mm.dd]", | ||||
filename, QDateTime::currentDateTime().toString( "yy.mm.dd") | ||||
); | ||||
RUN_TOKEN_TEST( "d Date Test", "[date;d]", filename, QDateTime::currentDateT | ||||
ime().toString( "d") ); | ||||
RUN_TOKEN_TEST( "dd Date Test", "[date;dd]", filename, QDateTime::currentDat | ||||
eTime().toString( "dd") ); | ||||
RUN_TOKEN_TEST( "ddd Date Test", "[date;ddd]", filename, QDateTime::currentD | ||||
ateTime().toString( "ddd") ); | ||||
RUN_TOKEN_TEST( "dddd Date Test", "[date;dddd]", filename, QDateTime::curren | ||||
tDateTime().toString( "dddd") ); | ||||
RUN_TOKEN_TEST( "M Date Test", "[date;M]", filename, QDateTime::currentDateT | ||||
ime().toString( "M") ); | ||||
RUN_TOKEN_TEST( "MM Date Test", "[date;MM]", filename, QDateTime::currentDat | ||||
eTime().toString( "MM") ); | ||||
RUN_TOKEN_TEST( "MMM Date Test", "[date;MMM]", filename, QDateTime::currentD | ||||
ateTime().toString( "MMM") ); | ||||
RUN_TOKEN_TEST( "MMMM Date Test", "[date;MMMM]", filename, QDateTime::curren | ||||
tDateTime().toString( "MMMM") ); | ||||
RUN_TOKEN_TEST( "yy Date Test", "[date;yy]", filename, QDateTime::currentDat | ||||
eTime().toString( "yy") ); | ||||
RUN_TOKEN_TEST( "yyyy Date Test", "[date;yyyy]", filename, QDateTime::curren | ||||
tDateTime().toString( "yyyy") ); | ||||
RUN_TOKEN_TEST( "h Date Test", "[date;h]", filename, QDateTime::currentDateT | ||||
ime().toString( "h") ); | ||||
RUN_TOKEN_TEST( "hh Date Test", "[date;hh]", filename, QDateTime::currentDat | ||||
eTime().toString( "hh") ); | ||||
RUN_TOKEN_TEST( "m Date Test", "[date;m]", filename, QDateTime::currentDateT | ||||
ime().toString( "m") ); | ||||
RUN_TOKEN_TEST( "mm Date Test", "[date;mm]", filename, QDateTime::currentDat | ||||
eTime().toString( "mm") ); | ||||
RUN_TOKEN_TEST( "s Date Test", "[date;s]", filename, QDateTime::currentDateT | ||||
ime().toString( "s") ); | ||||
RUN_TOKEN_TEST( "ss Date Test", "[date;ss]", filename, QDateTime::currentDat | ||||
eTime().toString( "ss") ); | ||||
// Current computers are to slow to compare two milliseconds as the instruct | ||||
ion is longer than | ||||
// a millisecond. | ||||
// | ||||
// RUN_TOKEN_TEST( "z Date Test", "[date;z]", filename, QDateTime::currentDa | ||||
teTime().toString( "z") ); | ||||
// RUN_TOKEN_TEST( "zzz Date Test", "[date;zzz]", filename, QDateTime::curre | ||||
ntDateTime().toString( "zzz") ); | ||||
RUN_TOKEN_TEST( "ap Date Test", "[date;ap]", filename, QDateTime::currentDat | ||||
eTime().toString( "ap") ); | ||||
RUN_TOKEN_TEST( "AP Date Test", "[date;AP]", filename, QDateTime::currentDat | ||||
eTime().toString( "AP") ); | ||||
RUN_TOKEN_TEST( "Day Test", "[day]", filename, QDateTime::currentDateTime(). | ||||
toString( "dd") ); | ||||
RUN_TOKEN_TEST( "Month Test", "[month]", filename, QDateTime::currentDateTim | ||||
e().toString( "MM") ); | ||||
RUN_TOKEN_TEST( "Year Test", "[year]", filename, QDateTime::currentDateTime( | ||||
).toString( "yyyy") ); | ||||
RUN_TOKEN_TEST( "Hour Test", "[hour]", filename, QDateTime::currentDateTime( | ||||
).toString( "hh") ); | ||||
RUN_TOKEN_TEST( "Minute Test", "[minute]", filename, QDateTime::currentDateT | ||||
ime().toString( "mm") ); | ||||
RUN_TOKEN_TEST( "Second Test", "[second]", filename, QDateTime::currentDateT | ||||
ime().toString( "ss") ); | ||||
RUN_TOKEN_TEST( "Time Test", "[time]", filename, QDateTime::currentDateTime( | ||||
).toString( "hh-mm-ss") ); | ||||
// Testing numbering name, start, step, skip | ||||
RUN_NUMBER_TESTS( "Numbers 0- Step 1", 0, 1, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 1- Step 1", 1, 1, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 2- Step 1", 2, 1, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers -2- Step 1", -2, 1, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 0- Step 2", 0, 2, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 1- Step 2", 1, 2, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 2- Step 2", 2, 2, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers -2- Step 2", -2, 2, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 0- Step 7", 0, 7, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 1- Step 7", 1, 7, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 2- Step 7", 2, 7, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers -2- Step 7", -2, 7, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 0- Step -3", 0, -3, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 1- Step -3", 1, -3, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers 2- Step -3", 2, -3, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Numbers -2- Step -3", -2, -3, QList<int>() ); | ||||
RUN_NUMBER_TESTS( "Skip 0- Step 1", 0, 1, QList<int>() << 1 << 2 << 3 << 4 < | ||||
< 89); | ||||
RUN_NUMBER_TESTS( "Skip 1- Step 1", 1, 1, QList<int>() << 1 << 2 << 3 << 4 < | ||||
< 89); | ||||
RUN_NUMBER_TESTS( "Skip 2- Step 1", 2, 1, QList<int>() << 1 << 2 << 3 << 4 < | ||||
< 89); | ||||
RUN_NUMBER_TESTS( "Skip -2- Step 1", -2, 1, QList<int>() << 1 << 2 << 3 << 4 | ||||
<< 89); | ||||
RUN_NUMBER_TESTS( "Skip 10- Step 79", 10, 79, QList<int>() << 1 << 2 << 3 << | ||||
4 << 89); | ||||
RUN_NUMBER_TESTS( "Skip 10- Step -2", 10, -2, QList<int>() << 1 << 2 << 3 << | ||||
4 << 89); | ||||
RUN_NUMBER_TESTS( "Skip 10- Step -1", 10, -1, QList<int>() << 1 << 2 << 3 << | ||||
4 << 89); | ||||
// Test the find and replace feature of KRename | ||||
RUN_REPLACE_TEST( "Replace: Spaces", "$", "Filename with spaces", "Filename_ | ||||
with_spaces", " ", "_", false ); | ||||
RUN_REPLACE_TEST( "Replace: Nothing", "$", "Filename", "Filename", " ", "_", | ||||
false ); | ||||
RUN_REPLACE_TEST( "Replace: Word", "$", "Filename with spaces", "Filename HA | ||||
S spaces", "with", "HAS", false ); | ||||
RUN_REPLACE_TEST( "Replace: $", "$", "Filename with $ and spaces", "Filename | ||||
with ! and spaces", "$", "!", false ); | ||||
RUN_REPLACE_TEST( "Replace: &", "$", "Filename with & and spaces", "Filename | ||||
with ! and spaces", "&", "!", false ); | ||||
RUN_REPLACE_TEST( "Replace: %", "$", "Filename with % and spaces", "Filename | ||||
with ! and spaces", "%", "!", false ); | ||||
RUN_REPLACE_TEST( "Replace: *", "$", "Filename with * and spaces", "Filename | ||||
with ! and spaces", "*", "!", false ); | ||||
RUN_REPLACE_TEST( "Replace: [", "$", "Filename with [ and spaces", "Filename | ||||
with ! and spaces", "[", "!", false ); | ||||
RUN_REPLACE_TEST( "Replace: ]", "$", "Filename with ] and spaces", "Filename | ||||
with ! and spaces", "]", "!", false ); | ||||
RUN_REPLACE_TEST( "Replace: #", "$", "Filename with # and spaces", "Filename | ||||
with ! and spaces", "#", "!", false ); | ||||
RUN_REPLACE_TEST( "Replace: to $", "$", "Filename with spaces", "Filename $ | ||||
spaces", "with", "$", false ); | ||||
RUN_REPLACE_TEST( "Replace: to &", "$", "Filename with spaces", "Filename & | ||||
spaces", "with", "&", false ); | ||||
RUN_REPLACE_TEST( "Replace: to %", "$", "Filename with spaces", "Filename % | ||||
spaces", "with", "%", false ); | ||||
RUN_REPLACE_TEST( "Replace: to *", "$", "Filename with spaces", "Filename * | ||||
spaces", "with", "*", false ); | ||||
RUN_REPLACE_TEST( "Replace: to [", "$", "Filename with spaces", "Filename [ | ||||
spaces", "with", "[", false ); | ||||
RUN_REPLACE_TEST( "Replace: to ]", "$", "Filename with spaces", "Filename ] | ||||
spaces", "with", "]", false ); | ||||
RUN_REPLACE_TEST( "Replace: to #", "$", "Filename with spaces", "Filename # | ||||
spaces", "with", "#", false ); | ||||
RUN_REPLACE_TEST( "RegExp: ?", "$", "Filename", "AAAAAAAAA", "[a-zA-z]?", "A | ||||
", true ); | ||||
RUN_REPLACE_TEST( "RegExp: {1}", "$", "Filename", "AAAAAAAA", "[a-zA-z]{1}", | ||||
"A", true ); | ||||
RUN_REPLACE_TEST( "RegExp: +", "$", "Filename", "A", "[a-zA-z]+", "A", true | ||||
); | ||||
RUN_REPLACE_TEST( "RegExp: \\d", "$", "Filename 123", "Filename NumberNumber | ||||
Number", "\\d", "Number", true ); | ||||
RUN_REPLACE_TEST( "RegExp: \\d+", "$", "Filename 123", "Filename Number", "\ | ||||
\d+", "Number", true ); | ||||
RUN_REPLACE_TEST( "RegExp: Match", "$", "Filename 123", "MATCHING", "[a-zA-z | ||||
]* \\d{3}", "MATCHING", true ); | ||||
// TODO: | ||||
// TODO: Manual Change Test | ||||
// Regression tests | ||||
// Caused an infinite loop | ||||
RUN_TOKEN_TEST( "[1-2 [4-] Test", "[1-2 [4-]", filename, " " + filename.righ | ||||
t( filename.length() - 3 ) ); | ||||
const char* regTemplate = "###{329;13"; | ||||
RUN_TOKEN_TEST( regTemplate, regTemplate, filename, "329" ); | ||||
RUN_TOKEN_TEST( "ABC {1", "ABC {1", filename, "ABC {1" ); | ||||
// Brackets appeared as \[ in the final result | ||||
QString regressionName = "1-07 Take Flight (Wings) [Pocketman]"; | ||||
QString regressionExpect = "100-Take Flight (Wings) [Pocketman]"; | ||||
RUN_TOKEN_TEST( "1##-[$6-] Test", "1##-[$6-]", regressionName, regressionExp | ||||
ect ); | ||||
KRenameFile::List files; | ||||
QStringList expected; | ||||
QStringList expectedPaths; | ||||
files << KRenameFile( KUrl("/home/foo/bar/subdir"), true, eSplitMode_FirstDo | ||||
t, 1 ) | ||||
<< KRenameFile( KUrl("/home/foo"), true, eSplitMode_FirstDot, 1 ) | ||||
<< KRenameFile( KUrl("/home/foo/bar"), true, eSplitMode_FirstDot, 1 ) | ||||
<< KRenameFile( KUrl("/home/foo/bar/baz"), true, eSplitMode_FirstDot, | ||||
1 ); | ||||
expected << "SUBDIR" << "FOO" << "BAR" << "BAZ"; | ||||
expectedPaths << "/home/foo/bar" << "/home" << "/home/FOO" << "/home/FOO/BAR | ||||
"; | ||||
RUN_KRENAME_MULTI_FILE_TEST( files, expected, expectedPaths, | ||||
"&", "Testing a directory hirarchy" ); | ||||
} | ||||
bool KRenameTest::tokenTest( const char* token, const QString & filename, const | ||||
QString & expected) | ||||
{ | ||||
QString directory("/home/krename/"); | ||||
KRenameFile::List list; | ||||
KRenameFile file( KUrl( directory + filename ), filename.isEmpty(), eSplitMo | ||||
de_FirstDot, 1 ); | ||||
list.push_back( file ); | ||||
BatchRenamer b; | ||||
b.setFilenameTemplate( token ); | ||||
b.setFiles( &list ); | ||||
b.processFilenames(); | ||||
QString str = list[0].dstFilename(); | ||||
bool result = (str == expected); | ||||
if( m_verbose || !result ) | ||||
writeTestMessage(" ---> Expected: (%s) Got: (%s) Token: (%s)", | ||||
expected.toLatin1().data(), | ||||
str.toLatin1().data(), token ); | ||||
return result; | ||||
} | ||||
bool KRenameTest::numberingTest( int length, int start, int step, QList<int> ski | ||||
p, int num ) | ||||
{ | ||||
QString directory("/home/krename/"); | ||||
KRenameFile::List list; | ||||
QString token; | ||||
token.fill( '#', length ); | ||||
for(int i=0;i<num;i++) | ||||
{ | ||||
QString filename = "any" + QString::number( i ); | ||||
KRenameFile file( KUrl( directory + filename ), filename.isEmpty(), eSpl | ||||
itMode_FirstDot, 1 ); | ||||
list.push_back( file ); | ||||
} | ||||
BatchRenamer b; | ||||
b.setFilenameTemplate( token ); | ||||
b.setFiles( &list ); | ||||
b.setNumberStepping( step ); | ||||
b.setNumberStartIndex( start ); | ||||
b.setNumberSkipList( skip ); | ||||
b.processFilenames(); | ||||
int cur = start; | ||||
bool result = true; | ||||
QString expected; | ||||
while( skip.contains( cur ) ) | ||||
cur += step; | ||||
KRenameFile::List::ConstIterator it = list.begin(); | ||||
while( it != list.end() && result ) | ||||
{ | ||||
expected.sprintf("%0*i", length, cur ); | ||||
result = ((*it).dstFilename() == expected); | ||||
if( m_verbose || !result ) | ||||
qDebug(" ---> Expected: (%s) Got: (%s) Start: %i Step: %i Token: (%s | ||||
)", | ||||
expected.toLatin1().data(), (*it).dstFilename().toLatin1().da | ||||
ta(), start, step, token.toLatin1().data() ); | ||||
do { | m_text = new QTextEdit(this); | |||
cur += step; | m_text->setReadOnly(true); | |||
} while( skip.contains( cur ) ); | m_text->setFont(QFont("Courier")); | |||
layout->addWidget(m_text); | ||||
++it; | this->setWindowTitle("KRename Test"); | |||
this->resize(640, 480); | ||||
this->show(); | ||||
} | } | |||
return result; | KRenameTest::~KRenameTest() | |||
} | { | |||
bool KRenameTest::replaceTest( const QString & token, const QString & filename, | } | |||
const QString & expected, | ||||
const QString & replace, const QString & with, bo | void KRenameTest::startTest() | |||
ol regExp ) | { | |||
{ | testKRenameFile(); | |||
QString directory("/home/krename/"); | testBatchRenamer(); | |||
KRenameFile::List list; | ||||
KRenameFile file( KUrl( directory + filename ), filename.isEmpty(), eSplitMo | this->writeTestMessage("<b>Results:</b>\n\nSuccessful: %i Failed %i", m_ | |||
de_FirstDot, 1 ); | success, m_failed); | |||
list.push_back( file ); | } | |||
QList<TReplaceItem> replaceList; | void KRenameTest::writeTestHeader(const QString &text) | |||
{ | ||||
TReplaceItem strings; | QString str("<b>Testing class: <i>%1</i></b>"); | |||
strings.find = replace; | m_text->append(str.arg(text)); | |||
strings.replace = with; | } | |||
strings.reg = regExp; | ||||
void KRenameTest::writeTestMessage(const char *format, ...) | ||||
replaceList.append( strings ); | { | |||
va_list args; | ||||
BatchRenamer b; | ||||
b.setFilenameTemplate( token ); | va_start(args, format); | |||
b.setFiles( &list ); | vsnprintf(m_buffer, KRenameTest::BUFFER_LENGTH, format, args); | |||
b.setReplaceList( replaceList ); | va_end(args); | |||
b.processFilenames(); | ||||
m_text->append(m_buffer); | ||||
QString str = list[0].dstFilename(); | } | |||
bool result = (str == expected); | ||||
if( m_verbose || !result ) | void KRenameTest::testKRenameFile() | |||
writeTestMessage(" ---> Expected: (%s) Got: (%s) Token: (%s)", | { | |||
expected.toLatin1().data(), | writeTestHeader("KRenameFile"); | |||
str.toLatin1().data(), token.toLatin1().data() ); | ||||
// Test a simple filename | ||||
return result; | RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt (first dot)", QUrl("f | |||
ile:///home/test/simple.txt"), | ||||
} | "/home/test", "simple", "txt", eSplitMode_FirstDot, | |||
0, false); | ||||
bool KRenameTest::testMultipleFiles( KRenameFile::List & files, const QStringLis | RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt (last dot)", QUrl("fi | |||
t & expected, const QStringList & expectedPath, const QString & token ) | le:///home/test/simple.txt"), | |||
{ | "/home/test", "simple", "txt", eSplitMode_LastDot, | |||
BatchRenamer b; | 0, false); | |||
b.setFilenameTemplate( token ); | RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt (no extension)", QUrl | |||
b.setFiles( &files ); | ("file:///home/test/simple.txt"), | |||
b.processFilenames(); | "/home/test", "simple.txt", "", eSplitMode_NoExtens | |||
ion, 0, false); | ||||
bool result = true; | RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt (no extension)", QUrl | |||
for( int i = 0; i < files.count(); i++ ) | ("file:///home/test/simple.txt"), | |||
{ | "/home/test", "simple.txt", "", eSplitMode_NoExtens | |||
QString str = files[i].dstFilename(); | ion, 1, false); | |||
QString strPath = files[i].dstDirectory(); | RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt (custom dot 0)", QUrl | |||
bool strResult = (str == expected[i]); | ("file:///home/test/simple.txt"), | |||
bool pathResult = (strPath == expectedPath[i]); | "/home/test", "simple.txt", "", eSplitMode_CustomDo | |||
if( m_verbose || !strResult ) { | t, 0, false); | |||
writeTestMessage(" ---> Expected: (%s) Got: (%s) Token: (%s)", | RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt (custom dot 1)", QUrl | |||
expected[i].toLatin1().data(), | ("file:///home/test/simple.txt"), | |||
str.toLatin1().data(), token.toLatin1().data() ); | "/home/test", "simple", "txt", eSplitMode_CustomDot | |||
, 1, false); | ||||
// Test a simple filename and a directory with spaces | ||||
RUN_KRENAMEFILE_TEST("file:///home/dir with space/simple.txt (first dot) | ||||
", QUrl("file:///home/dir with space/simple.txt"), | ||||
"/home/dir with space", "simple", "txt", eSplitMode | ||||
_FirstDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/dir with space/simple.txt (last dot)" | ||||
, QUrl("file:///home/dir with space/simple.txt"), | ||||
"/home/dir with space", "simple", "txt", eSplitMode | ||||
_LastDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/dir with space/simple.txt (custom dot | ||||
0)", QUrl("file:///home/dir with space/simple.txt"), | ||||
"/home/dir with space", "simple.txt", "", eSplitMod | ||||
e_CustomDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/dir with space/simple.txt (custom dot | ||||
1)", QUrl("file:///home/dir with space/simple.txt"), | ||||
"/home/dir with space", "simple", "txt", eSplitMode | ||||
_CustomDot, 1, false); | ||||
// test a more complicated file extension | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/complicated.tar.gz (first dot)", | ||||
QUrl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated", "tar.gz", eSplitMode_F | ||||
irstDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/complicated.tar.gz (last dot)", | ||||
QUrl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated.tar", "gz", eSplitMode_L | ||||
astDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/complicated.tar.gz (custom dot 0 | ||||
)", QUrl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated.tar.gz", "", eSplitMode_ | ||||
CustomDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/complicated.tar.gz (custom dot 1 | ||||
)", QUrl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated", "tar.gz", eSplitMode_C | ||||
ustomDot, 1, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/complicated.tar.gz (custom dot 2 | ||||
)", QUrl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated.tar", "gz", eSplitMode_C | ||||
ustomDot, 2, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/complicated.tar.gz (custom dot 3 | ||||
)", QUrl("file:///home/test/complicated.tar.gz"), | ||||
"/home/test", "complicated.tar.gz", "", eSplitMode_ | ||||
CustomDot, 3, false); | ||||
// test a directory with dot | ||||
RUN_KRENAMEFILE_TEST("file:///home/dir.with.dot/simple.txt (first dot)", | ||||
QUrl("file:///home/dir.with.dot/simple.txt"), | ||||
"/home/dir.with.dot", "simple", "txt", eSplitMode_F | ||||
irstDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/dir.with.dot/simple.txt (last dot)", | ||||
QUrl("file:///home/dir.with.dot/simple.txt"), | ||||
"/home/dir.with.dot", "simple", "txt", eSplitMode_L | ||||
astDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/dir.with.dot/simple.txt (custom dot 0 | ||||
)", QUrl("file:///home/dir.with.dot/simple.txt"), | ||||
"/home/dir.with.dot", "simple.txt", "", eSplitMode_ | ||||
CustomDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/dir.with.dot/simple.txt (custom dot 1 | ||||
)", QUrl("file:///home/dir.with.dot/simple.txt"), | ||||
"/home/dir.with.dot", "simple", "txt", eSplitMode_C | ||||
ustomDot, 1, false); | ||||
// test a directory which ends with a slash | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/ (first dot)", QUrl("file:///hom | ||||
e/test/"), | ||||
"/home", "test", "", eSplitMode_FirstDot, 0, true); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/ (last dot)", QUrl("file:///home | ||||
/test/"), | ||||
"/home", "test", "", eSplitMode_LastDot, 0, true); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/ (custom dot 0)", QUrl("file:/// | ||||
home/test/"), | ||||
"/home", "test", "", eSplitMode_CustomDot, 0, true) | ||||
; | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/ (custom dot 1)", QUrl("file:/// | ||||
home/test/"), | ||||
"/home", "test", "", eSplitMode_CustomDot, 1, true) | ||||
; | ||||
// test a directory which doesn't end with a slash | ||||
RUN_KRENAMEFILE_TEST("file:///home/test (first dot)", QUrl("file:///home | ||||
/test"), | ||||
"/home", "test", "", eSplitMode_FirstDot, 0, true); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test (last dot)", QUrl("file:///home/ | ||||
test"), | ||||
"/home", "test", "", eSplitMode_LastDot, 0, true); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test (custom dot 0)", QUrl("file:///h | ||||
ome/test"), | ||||
"/home", "test", "", eSplitMode_CustomDot, 0, true) | ||||
; | ||||
RUN_KRENAMEFILE_TEST("file:///home/test (custom dot 1)", QUrl("file:///h | ||||
ome/test"), | ||||
"/home", "test", "", eSplitMode_CustomDot, 1, true) | ||||
; | ||||
// test no file extension | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple (first dot)", QUrl("file: | ||||
///home/test/simple"), | ||||
"/home/test", "simple", "", eSplitMode_FirstDot, 0, | ||||
false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple (last dot)", QUrl("file:/ | ||||
//home/test/simple"), | ||||
"/home/test", "simple", "", eSplitMode_LastDot, 0, | ||||
false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple (custom dot 0)", QUrl("fi | ||||
le:///home/test/simple"), | ||||
"/home/test", "simple", "", eSplitMode_CustomDot, 0 | ||||
, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple (custom dot 1)", QUrl("fi | ||||
le:///home/test/simple"), | ||||
"/home/test", "simple", "", eSplitMode_CustomDot, 1 | ||||
, false); | ||||
// test very long complex file extension | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt.long.ext.zip (first d | ||||
ot)", QUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple", "txt.long.ext.zip", eSplitM | ||||
ode_FirstDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt.long.ext.zip (last do | ||||
t)", QUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt.long.ext", "zip", eSplitM | ||||
ode_LastDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt.long.ext.zip (custom | ||||
dot 0)", QUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt.long.ext.zip", "", eSplit | ||||
Mode_CustomDot, 0, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt.long.ext.zip (custom | ||||
dot 1)", QUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple", "txt.long.ext.zip", eSplitM | ||||
ode_CustomDot, 1, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt.long.ext.zip (custom | ||||
dot 2)", QUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt", "long.ext.zip", eSplitM | ||||
ode_CustomDot, 2, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt.long.ext.zip (custom | ||||
dot 3)", QUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt.long", "ext.zip", eSplitM | ||||
ode_CustomDot, 3, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt.long.ext.zip (custom | ||||
dot 4)", QUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt.long.ext", "zip", eSplitM | ||||
ode_CustomDot, 4, false); | ||||
RUN_KRENAMEFILE_TEST("file:///home/test/simple.txt.long.ext.zip (custom | ||||
dot 5)", QUrl("file:///home/test/simple.txt.long.ext.zip"), | ||||
"/home/test", "simple.txt.long.ext.zip", "", eSplit | ||||
Mode_CustomDot, 5, false); | ||||
} | ||||
bool KRenameTest::testKRenameFileInternal(const QUrl &url, const QString &di | ||||
rectory, | ||||
const QString &filename, const QString &extension, | ||||
ESplitMode eSplitMode, int dot, bool isDir) | ||||
{ | ||||
// if the expected filename and extension is empty expect a directory | ||||
//bool isDirectory = filename.isEmpty() && extension.isEmpty(); | ||||
KRenameFile file(url, isDir, eSplitMode, dot); | ||||
if (file.srcDirectory() != directory) { | ||||
writeTestMessage("Directory=(%s) expected (%s).\n", | ||||
file.srcDirectory().toLatin1().data(), | ||||
directory.toLatin1().data()); | ||||
return false; | ||||
} | ||||
if (file.srcFilename() != filename) { | ||||
writeTestMessage("Filename=(%s) expected (%s).\n", | ||||
file.srcFilename().toLatin1().data(), | ||||
filename.toLatin1().data()); | ||||
return false; | ||||
} | ||||
if (file.srcExtension() != extension) { | ||||
writeTestMessage("Extension=(%s) expected (%s).\n", | ||||
file.srcExtension().toLatin1().data(), | ||||
extension.toLatin1().data()); | ||||
return false; | ||||
} | } | |||
if( m_verbose || !pathResult ) { | ||||
return true; | ||||
} | ||||
void KRenameTest::testBatchRenamer() | ||||
{ | ||||
writeTestHeader("BatchRenamer"); | ||||
// Testing the basic KRename tokens | ||||
QString filename(" Test File name "); | ||||
QString directory1("krename"); | ||||
QString directory2("home"); | ||||
RUN_TOKEN_TEST("$ Test", "$", filename, filename); | ||||
RUN_TOKEN_TEST("& Test", "&", filename, filename.toUpper()); | ||||
RUN_TOKEN_TEST("% Test", "%", filename, filename.toLower()); | ||||
RUN_TOKEN_TEST("* Test", "*", filename, " Test File Name "); | ||||
RUN_TOKEN_TEST("# Test", "#", filename, QString::number(0)); | ||||
RUN_TOKEN_TEST("## Test", "##", filename, QString().sprintf("%02i", 0)); | ||||
RUN_TOKEN_TEST("### Test", "###", filename, QString().sprintf("%03i", 0) | ||||
); | ||||
RUN_TOKEN_TEST("#### Test", "####", filename, QString().sprintf("%04i", | ||||
0)); | ||||
RUN_TOKEN_TEST("##### Test", "#####", filename, QString().sprintf("%05i" | ||||
, 0)); | ||||
RUN_TOKEN_TEST("#{100;2} Test", "#{100;2}", filename, QString::number(10 | ||||
0)); | ||||
RUN_TOKEN_TEST("####{100;2} Test", "####{100;2}", filename, QString().sp | ||||
rintf("%04i", 100)); | ||||
RUN_TOKEN_TEST("####{2;2}## Test", "####{2;2}##", filename, | ||||
QString().sprintf("%04i", 2) + QString().sprintf("%02i", | ||||
0)); | ||||
RUN_TOKEN_TEST("[1] Test", "[1]", filename, QString(filename[0])); | ||||
RUN_TOKEN_TEST("[2] Test", "[2]", filename, QString(filename[1])); | ||||
RUN_TOKEN_TEST("[3] Test", "[3]", filename, QString(filename[2])); | ||||
RUN_TOKEN_TEST("[&4] Test", "[&4]", filename, QString(filename[3].toUppe | ||||
r())); | ||||
RUN_TOKEN_TEST("[$4] Test", "[$4]", filename, QString(filename[3])); | ||||
RUN_TOKEN_TEST("[%4] Test", "[%4]", filename, QString(filename[3].toLowe | ||||
r())); | ||||
RUN_TOKEN_TEST("[*4] Test", "[*4]", filename, QString(filename[3].toUppe | ||||
r())); | ||||
RUN_TOKEN_TEST("[4-] Test", "[4-]", filename, filename.right(filename.le | ||||
ngth() - 3)); | ||||
RUN_TOKEN_TEST("[&4-] Test", "[&4-]", filename, filename.right(filename. | ||||
length() - 3).toUpper()); | ||||
RUN_TOKEN_TEST("[$4-] Test", "[$4-]", filename, filename.right(filename. | ||||
length() - 3)); | ||||
RUN_TOKEN_TEST("[%4-] Test", "[%4-]", filename, filename.right(filename. | ||||
length() - 3).toLower()); | ||||
RUN_TOKEN_TEST("[*4-] Test", "[*4-]", filename, "St File Name "); | ||||
RUN_TOKEN_TEST("[4-] Test", "[4-]", filename, filename.right(filename.le | ||||
ngth() - 3)); | ||||
RUN_TOKEN_TEST("[&4-[length]] Test", "[&4-[length]]", filename, filename | ||||
.right(filename.length() - 3).toUpper()); | ||||
RUN_TOKEN_TEST("[$4-[length]] Test", "[$4-[length]]", filename, filename | ||||
.right(filename.length() - 3)); | ||||
RUN_TOKEN_TEST("[%4-[length]] Test", "[%4-[length]]", filename, filename | ||||
.right(filename.length() - 3).toLower()); | ||||
RUN_TOKEN_TEST("[*4-[length]] Test", "[*4-[length]]", filename, "St File | ||||
Name "); | ||||
RUN_TOKEN_TEST("[trimmed;[4-]] Test", "[trimmed;[4-]]", filename, filena | ||||
me.right(filename.length() - 3).trimmed()); | ||||
RUN_TOKEN_TEST("[trimmed] Test", "[trimmed]", filename, filename.trimmed | ||||
()); | ||||
RUN_TOKEN_TEST("[length] Test", "[length]", filename, QString::number(fi | ||||
lename.length())); | ||||
RUN_TOKEN_TEST("[length-0] Test", "[length-0]", filename, QString::numbe | ||||
r(filename.length())); | ||||
RUN_TOKEN_TEST("[length-1] Test", "[length-1]", filename, QString::numbe | ||||
r(filename.length() - 1)); | ||||
RUN_TOKEN_TEST("[length-2] Test", "[length-2]", filename, QString::numbe | ||||
r(filename.length() - 2)); | ||||
RUN_TOKEN_TEST("[#length] Test", "[#length]", filename, QString::number( | ||||
filename.length())); | ||||
RUN_TOKEN_TEST("[#length-0] Test", "[#length-0]", filename, QString::num | ||||
ber(filename.length())); | ||||
RUN_TOKEN_TEST("[#length-1] Test", "[#length-1]", filename, QString::num | ||||
ber(filename.length() - 1)); | ||||
RUN_TOKEN_TEST("[#length-2] Test", "[#length-2]", filename, QString::num | ||||
ber(filename.length() - 2)); | ||||
RUN_TOKEN_TEST("[####length] Test", "[####length]", filename, QString(). | ||||
sprintf("%04i", filename.length())); | ||||
RUN_TOKEN_TEST("[####length-0] Test", "[####length-0]", filename, QStrin | ||||
g().sprintf("%04i", filename.length())); | ||||
RUN_TOKEN_TEST("[####length-1] Test", "[####length-1]", filename, QStrin | ||||
g().sprintf("%04i", filename.length() - 1)); | ||||
RUN_TOKEN_TEST("[####length-2] Test", "[####length-2]", filename, QStrin | ||||
g().sprintf("%04i", filename.length() - 2)); | ||||
RUN_TOKEN_TEST("[6-9] Test", "[6-9]", filename, filename.mid(5, 4)); | ||||
RUN_TOKEN_TEST("[&6-9] Test", "[&6-9]", filename, filename.mid(5, 4).toU | ||||
pper()); | ||||
RUN_TOKEN_TEST("[$6-9] Test", "[$6-9]", filename, filename.mid(5, 4)); | ||||
RUN_TOKEN_TEST("[%6-9] Test", "[%6-9]", filename, filename.mid(5, 4).toL | ||||
ower()); | ||||
RUN_TOKEN_TEST("[*6-9] Test", "[*6-9]", filename, filename.mid(5, 4)); | ||||
RUN_TOKEN_TEST("[trimmed;[6-9]] Test", "[trimmed;[6-9]]", filename, file | ||||
name.mid(5, 4).trimmed()); | ||||
RUN_TOKEN_TEST("[6;4] Test", "[6;4]", filename, filename.mid(5, 4)); | ||||
RUN_TOKEN_TEST("[&6;4] Test", "[&6;4]", filename, filename.mid(5, 4).toU | ||||
pper()); | ||||
RUN_TOKEN_TEST("[$6;4] Test", "[$6;4]", filename, filename.mid(5, 4)); | ||||
RUN_TOKEN_TEST("[%6;4] Test", "[%6;4]", filename, filename.mid(5, 4).toL | ||||
ower()); | ||||
RUN_TOKEN_TEST("[*6;4] Test", "[*6;4]", filename, filename.mid(5, 4)); | ||||
RUN_TOKEN_TEST("[1;1{[length]}] Test", "[1;1{[length]}]", filename, "1" | ||||
); | ||||
RUN_TOKEN_TEST("[trimmed;[6;4]] Test", "[trimmed;[6;4]]", filename, file | ||||
name.mid(5, 4).trimmed()); | ||||
RUN_TOKEN_TEST("[trimmed; Hallo ] Test", "[trimmed; Hallo ]", filename, | ||||
"Hallo"); | ||||
RUN_TOKEN_TEST("[dirname] Test", "[dirname]", filename, directory1); | ||||
RUN_TOKEN_TEST("[&dirname] Test", "[&dirname]", filename, directory1.toU | ||||
pper()); | ||||
RUN_TOKEN_TEST("[$dirname] Test", "[$dirname]", filename, directory1); | ||||
RUN_TOKEN_TEST("[%dirname] Test", "[%dirname]", filename, directory1.toL | ||||
ower()); | ||||
RUN_TOKEN_TEST("[*dirname] Test", "[*dirname]", filename, "Krename"); | ||||
RUN_TOKEN_TEST("[trimmed;[dirname]] Test", "[trimmed;[dirname]]", filena | ||||
me, directory1); | ||||
RUN_TOKEN_TEST("[dirname.] Test", "[dirname.]", filename, directory2); | ||||
RUN_TOKEN_TEST("[&dirname.] Test", "[&dirname.]", filename, directory2.t | ||||
oUpper()); | ||||
RUN_TOKEN_TEST("[$dirname.] Test", "[$dirname.]", filename, directory2); | ||||
RUN_TOKEN_TEST("[%dirname.] Test", "[%dirname.]", filename, directory2.t | ||||
oLower()); | ||||
RUN_TOKEN_TEST("[*dirname.] Test", "[*dirname.]", filename, "Home"); | ||||
RUN_TOKEN_TEST("[trimmed;[dirname.]] Test", "[trimmed;[dirname.]]", file | ||||
name, directory2); | ||||
RUN_TOKEN_TEST("[dirname..] Test", "[dirname..]", filename, ""); | ||||
RUN_TOKEN_TEST("[&dirname..] Test", "[&dirname..]", filename, ""); | ||||
RUN_TOKEN_TEST("[$dirname..] Test", "[$dirname..]", filename, ""); | ||||
RUN_TOKEN_TEST("[%dirname..] Test", "[%dirname..]", filename, ""); | ||||
RUN_TOKEN_TEST("[*dirname..] Test", "[*dirname..]", filename, ""); | ||||
// TODO: This test has strange effects that only occur if [dirname..] is | ||||
QString::null | ||||
//RUN_TOKEN_TEST( "[trimmed;[dirname..]] Test", "[trimmed;[dirname..]]", | ||||
filename, filename.trimmed() ); | ||||
RUN_TOKEN_TEST("Complex Test1", "&[2-5]", filename, filename.toUpper() + | ||||
"Test"); | ||||
RUN_TOKEN_TEST("Complex Test2", "%[2-5]", filename, filename.toLower() + | ||||
"Test"); | ||||
RUN_TOKEN_TEST("Complex Test3", "$[2-5]", filename, filename + "Test"); | ||||
RUN_TOKEN_TEST("Complex Test4", "*[2-5]", filename, " Test File Name Tes | ||||
t"); | ||||
RUN_TOKEN_TEST("Complex Test5", "[trimmed][2-5]", filename, filename.tri | ||||
mmed() + "Test"); | ||||
RUN_TOKEN_TEST("Complex Test6", "[&2-5]\\&[length-2]\\&[1;1{Hallo}]", fi | ||||
lename, "TEST&14&H"); | ||||
// Testing all special Characters in KRename | ||||
RUN_TOKEN_TEST("\\/ Test", "\\/", filename, "%2f"); // this is display | ||||
ed as a slash, | ||||
// unix filenames are not allowed | ||||
// to contain a slash | ||||
RUN_TOKEN_TEST("\\[ Test", "\\[", filename, "["); | ||||
RUN_TOKEN_TEST("\\] Test", "\\]", filename, "]"); | ||||
RUN_TOKEN_TEST("\\$ Test", "\\$", filename, "$"); | ||||
RUN_TOKEN_TEST("\\* Test", "\\*", filename, "*"); | ||||
RUN_TOKEN_TEST("\\\\ Test", "\\\\", filename, "\\"); | ||||
RUN_TOKEN_TEST("\\& Test", "\\&", filename, "&"); | ||||
RUN_TOKEN_TEST("\\% Test", "\\%", filename, "%"); | ||||
RUN_TOKEN_TEST("\\# Test", "\\#", filename, "#"); | ||||
// Testing filenames with special characters | ||||
QString specialname("Test %1 File"); | ||||
RUN_TOKEN_TEST("File [ Test", "$", specialname.arg("["), specialname.arg | ||||
("[")); | ||||
RUN_TOKEN_TEST("File ] Test", "$", specialname.arg("]"), specialname.arg | ||||
("]")); | ||||
RUN_TOKEN_TEST("File $ Test", "$", specialname.arg("$"), specialname.arg | ||||
("$")); | ||||
RUN_TOKEN_TEST("File * Test", "$", specialname.arg("*"), specialname.arg | ||||
("*")); | ||||
RUN_TOKEN_TEST("File \\ Test", "$", specialname.arg("\\"), specialname.a | ||||
rg("\\")); | ||||
RUN_TOKEN_TEST("File & Test", "$", specialname.arg("&"), specialname.arg | ||||
("&")); | ||||
RUN_TOKEN_TEST("File % Test", "$", specialname.arg("%"), specialname.arg | ||||
("%")); | ||||
RUN_TOKEN_TEST("File # Test", "$", specialname.arg("#"), specialname.arg | ||||
("#")); | ||||
// load all plugins now | ||||
//PluginLoader::instance()->loadPlugins( false ); // file plugins are no | ||||
t required | ||||
// Testing system functions | ||||
RUN_TOKEN_TEST("Date Test", "[date]", filename, QDateTime::currentDateTi | ||||
me().toString("dd-MM-yyyy")); | ||||
RUN_TOKEN_TEST("dd-MM-yyyy Date Test", "[date;dd-MM-yyyy]", | ||||
filename, QDateTime::currentDateTime().toString("dd-MM-yy | ||||
yy")); | ||||
RUN_TOKEN_TEST("dd:MM:yyyy Date Test", "[date;dd:MM:yyyy]", | ||||
filename, QDateTime::currentDateTime().toString("dd:MM:yy | ||||
yy")); | ||||
RUN_TOKEN_TEST("yy.mm.dd Date Test", "[date;yy.mm.dd]", | ||||
filename, QDateTime::currentDateTime().toString("yy.mm.dd | ||||
")); | ||||
RUN_TOKEN_TEST("d Date Test", "[date;d]", filename, QDateTime::currentDa | ||||
teTime().toString("d")); | ||||
RUN_TOKEN_TEST("dd Date Test", "[date;dd]", filename, QDateTime::current | ||||
DateTime().toString("dd")); | ||||
RUN_TOKEN_TEST("ddd Date Test", "[date;ddd]", filename, QDateTime::curre | ||||
ntDateTime().toString("ddd")); | ||||
RUN_TOKEN_TEST("dddd Date Test", "[date;dddd]", filename, QDateTime::cur | ||||
rentDateTime().toString("dddd")); | ||||
RUN_TOKEN_TEST("M Date Test", "[date;M]", filename, QDateTime::currentDa | ||||
teTime().toString("M")); | ||||
RUN_TOKEN_TEST("MM Date Test", "[date;MM]", filename, QDateTime::current | ||||
DateTime().toString("MM")); | ||||
RUN_TOKEN_TEST("MMM Date Test", "[date;MMM]", filename, QDateTime::curre | ||||
ntDateTime().toString("MMM")); | ||||
RUN_TOKEN_TEST("MMMM Date Test", "[date;MMMM]", filename, QDateTime::cur | ||||
rentDateTime().toString("MMMM")); | ||||
RUN_TOKEN_TEST("yy Date Test", "[date;yy]", filename, QDateTime::current | ||||
DateTime().toString("yy")); | ||||
RUN_TOKEN_TEST("yyyy Date Test", "[date;yyyy]", filename, QDateTime::cur | ||||
rentDateTime().toString("yyyy")); | ||||
RUN_TOKEN_TEST("h Date Test", "[date;h]", filename, QDateTime::currentDa | ||||
teTime().toString("h")); | ||||
RUN_TOKEN_TEST("hh Date Test", "[date;hh]", filename, QDateTime::current | ||||
DateTime().toString("hh")); | ||||
RUN_TOKEN_TEST("m Date Test", "[date;m]", filename, QDateTime::currentDa | ||||
teTime().toString("m")); | ||||
RUN_TOKEN_TEST("mm Date Test", "[date;mm]", filename, QDateTime::current | ||||
DateTime().toString("mm")); | ||||
RUN_TOKEN_TEST("s Date Test", "[date;s]", filename, QDateTime::currentDa | ||||
teTime().toString("s")); | ||||
RUN_TOKEN_TEST("ss Date Test", "[date;ss]", filename, QDateTime::current | ||||
DateTime().toString("ss")); | ||||
// Current computers are to slow to compare two milliseconds as the inst | ||||
ruction is longer than | ||||
// a millisecond. | ||||
// | ||||
// RUN_TOKEN_TEST( "z Date Test", "[date;z]", filename, QDateTime::curre | ||||
ntDateTime().toString( "z") ); | ||||
// RUN_TOKEN_TEST( "zzz Date Test", "[date;zzz]", filename, QDateTime::c | ||||
urrentDateTime().toString( "zzz") ); | ||||
RUN_TOKEN_TEST("ap Date Test", "[date;ap]", filename, QDateTime::current | ||||
DateTime().toString("ap")); | ||||
RUN_TOKEN_TEST("AP Date Test", "[date;AP]", filename, QDateTime::current | ||||
DateTime().toString("AP")); | ||||
RUN_TOKEN_TEST("Day Test", "[day]", filename, QDateTime::currentDateTime | ||||
().toString("dd")); | ||||
RUN_TOKEN_TEST("Month Test", "[month]", filename, QDateTime::currentDate | ||||
Time().toString("MM")); | ||||
RUN_TOKEN_TEST("Year Test", "[year]", filename, QDateTime::currentDateTi | ||||
me().toString("yyyy")); | ||||
RUN_TOKEN_TEST("Hour Test", "[hour]", filename, QDateTime::currentDateTi | ||||
me().toString("hh")); | ||||
RUN_TOKEN_TEST("Minute Test", "[minute]", filename, QDateTime::currentDa | ||||
teTime().toString("mm")); | ||||
RUN_TOKEN_TEST("Second Test", "[second]", filename, QDateTime::currentDa | ||||
teTime().toString("ss")); | ||||
RUN_TOKEN_TEST("Time Test", "[time]", filename, QDateTime::currentDateTi | ||||
me().toString("hh-mm-ss")); | ||||
// Testing numbering name, start, step, skip | ||||
RUN_NUMBER_TESTS("Numbers 0- Step 1", 0, 1, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 1- Step 1", 1, 1, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 2- Step 1", 2, 1, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers -2- Step 1", -2, 1, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 0- Step 2", 0, 2, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 1- Step 2", 1, 2, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 2- Step 2", 2, 2, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers -2- Step 2", -2, 2, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 0- Step 7", 0, 7, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 1- Step 7", 1, 7, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 2- Step 7", 2, 7, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers -2- Step 7", -2, 7, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 0- Step -3", 0, -3, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 1- Step -3", 1, -3, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers 2- Step -3", 2, -3, QList<int>()); | ||||
RUN_NUMBER_TESTS("Numbers -2- Step -3", -2, -3, QList<int>()); | ||||
RUN_NUMBER_TESTS("Skip 0- Step 1", 0, 1, QList<int>() << 1 << 2 << 3 << | ||||
4 << 89); | ||||
RUN_NUMBER_TESTS("Skip 1- Step 1", 1, 1, QList<int>() << 1 << 2 << 3 << | ||||
4 << 89); | ||||
RUN_NUMBER_TESTS("Skip 2- Step 1", 2, 1, QList<int>() << 1 << 2 << 3 << | ||||
4 << 89); | ||||
RUN_NUMBER_TESTS("Skip -2- Step 1", -2, 1, QList<int>() << 1 << 2 << 3 < | ||||
< 4 << 89); | ||||
RUN_NUMBER_TESTS("Skip 10- Step 79", 10, 79, QList<int>() << 1 << 2 << 3 | ||||
<< 4 << 89); | ||||
RUN_NUMBER_TESTS("Skip 10- Step -2", 10, -2, QList<int>() << 1 << 2 << 3 | ||||
<< 4 << 89); | ||||
RUN_NUMBER_TESTS("Skip 10- Step -1", 10, -1, QList<int>() << 1 << 2 << 3 | ||||
<< 4 << 89); | ||||
// Test the find and replace feature of KRename | ||||
RUN_REPLACE_TEST("Replace: Spaces", "$", "Filename with spaces", "Filena | ||||
me_with_spaces", " ", "_", false); | ||||
RUN_REPLACE_TEST("Replace: Nothing", "$", "Filename", "Filename", " ", " | ||||
_", false); | ||||
RUN_REPLACE_TEST("Replace: Word", "$", "Filename with spaces", "Filename | ||||
HAS spaces", "with", "HAS", false); | ||||
RUN_REPLACE_TEST("Replace: $", "$", "Filename with $ and spaces", "Filen | ||||
ame with ! and spaces", "$", "!", false); | ||||
RUN_REPLACE_TEST("Replace: &", "$", "Filename with & and spaces", "Filen | ||||
ame with ! and spaces", "&", "!", false); | ||||
RUN_REPLACE_TEST("Replace: %", "$", "Filename with % and spaces", "Filen | ||||
ame with ! and spaces", "%", "!", false); | ||||
RUN_REPLACE_TEST("Replace: *", "$", "Filename with * and spaces", "Filen | ||||
ame with ! and spaces", "*", "!", false); | ||||
RUN_REPLACE_TEST("Replace: [", "$", "Filename with [ and spaces", "Filen | ||||
ame with ! and spaces", "[", "!", false); | ||||
RUN_REPLACE_TEST("Replace: ]", "$", "Filename with ] and spaces", "Filen | ||||
ame with ! and spaces", "]", "!", false); | ||||
RUN_REPLACE_TEST("Replace: #", "$", "Filename with # and spaces", "Filen | ||||
ame with ! and spaces", "#", "!", false); | ||||
RUN_REPLACE_TEST("Replace: to $", "$", "Filename with spaces", "Filename | ||||
$ spaces", "with", "$", false); | ||||
RUN_REPLACE_TEST("Replace: to &", "$", "Filename with spaces", "Filename | ||||
& spaces", "with", "&", false); | ||||
RUN_REPLACE_TEST("Replace: to %", "$", "Filename with spaces", "Filename | ||||
% spaces", "with", "%", false); | ||||
RUN_REPLACE_TEST("Replace: to *", "$", "Filename with spaces", "Filename | ||||
* spaces", "with", "*", false); | ||||
RUN_REPLACE_TEST("Replace: to [", "$", "Filename with spaces", "Filename | ||||
[ spaces", "with", "[", false); | ||||
RUN_REPLACE_TEST("Replace: to ]", "$", "Filename with spaces", "Filename | ||||
] spaces", "with", "]", false); | ||||
RUN_REPLACE_TEST("Replace: to #", "$", "Filename with spaces", "Filename | ||||
# spaces", "with", "#", false); | ||||
RUN_REPLACE_TEST("RegExp: ?", "$", "Filename", "AAAAAAAAA", "[a-zA-z]?", | ||||
"A", true); | ||||
RUN_REPLACE_TEST("RegExp: {1}", "$", "Filename", "AAAAAAAA", "[a-zA-z]{1 | ||||
}", "A", true); | ||||
RUN_REPLACE_TEST("RegExp: +", "$", "Filename", "A", "[a-zA-z]+", "A", tr | ||||
ue); | ||||
RUN_REPLACE_TEST("RegExp: \\d", "$", "Filename 123", "Filename NumberNum | ||||
berNumber", "\\d", "Number", true); | ||||
RUN_REPLACE_TEST("RegExp: \\d+", "$", "Filename 123", "Filename Number", | ||||
"\\d+", "Number", true); | ||||
RUN_REPLACE_TEST("RegExp: Match", "$", "Filename 123", "MATCHING", "[a-z | ||||
A-z]* \\d{3}", "MATCHING", true); | ||||
// TODO: | ||||
// TODO: Manual Change Test | ||||
// Regression tests | ||||
// Caused an infinite loop | ||||
RUN_TOKEN_TEST("[1-2 [4-] Test", "[1-2 [4-]", filename, ' ' + filename.r | ||||
ight(filename.length() - 3)); | ||||
const char *regTemplate = "###{329;13"; | ||||
RUN_TOKEN_TEST(regTemplate, regTemplate, filename, "329"); | ||||
RUN_TOKEN_TEST("ABC {1", "ABC {1", filename, "ABC {1"); | ||||
// Brackets appeared as \[ in the final result | ||||
QString regressionName = "1-07 Take Flight (Wings) [Pocketman]"; | ||||
QString regressionExpect = "100-Take Flight (Wings) [Pocketman]"; | ||||
RUN_TOKEN_TEST("1##-[$6-] Test", "1##-[$6-]", regressionName, regression | ||||
Expect); | ||||
KRenameFile::List files; | ||||
QStringList expected; | ||||
QStringList expectedPaths; | ||||
files << KRenameFile(QUrl("/home/foo/bar/subdir"), true, eSplitMode_Firs | ||||
tDot, 1) | ||||
<< KRenameFile(QUrl("/home/foo"), true, eSplitMode_FirstDot, 1) | ||||
<< KRenameFile(QUrl("/home/foo/bar"), true, eSplitMode_FirstDot, 1 | ||||
) | ||||
<< KRenameFile(QUrl("/home/foo/bar/baz"), true, eSplitMode_FirstDo | ||||
t, 1); | ||||
expected << "SUBDIR" << "FOO" << "BAR" << "BAZ"; | ||||
expectedPaths << "/home/foo/bar" << "/home" << "/home/FOO" << "/home/FOO | ||||
/BAR"; | ||||
RUN_KRENAME_MULTI_FILE_TEST(files, expected, expectedPaths, | ||||
"&", "Testing a directory hierarchy"); | ||||
} | ||||
bool KRenameTest::tokenTest(const char *token, const QString &filename, cons | ||||
t QString &expected) | ||||
{ | ||||
QString directory("/home/krename/"); | ||||
KRenameFile::List list; | ||||
KRenameFile file(QUrl(directory + filename), filename.isEmpty(), eSplitM | ||||
ode_FirstDot, 1); | ||||
list.push_back(file); | ||||
BatchRenamer b; | ||||
b.setFilenameTemplate(token); | ||||
b.setFiles(&list); | ||||
b.processFilenames(); | ||||
QString str = list[0].dstFilename(); | ||||
bool result = (str == expected); | ||||
if (m_verbose || !result) | ||||
writeTestMessage(" ---> Expected: (%s) Got: (%s) Token: (%s)", | writeTestMessage(" ---> Expected: (%s) Got: (%s) Token: (%s)", | |||
expectedPath[i].toLatin1().data(), | expected.toLatin1().data(), | |||
strPath.toLatin1().data(), token.toLatin1().data() | str.toLatin1().data(), token); | |||
); | ||||
return result; | ||||
} | ||||
bool KRenameTest::numberingTest(int length, int start, int step, QList<int> | ||||
skip, int num) | ||||
{ | ||||
QString directory("/home/krename/"); | ||||
KRenameFile::List list; | ||||
QString token; | ||||
token.fill('#', length); | ||||
for (int i = 0; i < num; i++) { | ||||
QString filename = "any" + QString::number(i); | ||||
KRenameFile file(QUrl(directory + filename), filename.isEmpty(), eSp | ||||
litMode_FirstDot, 1); | ||||
list.push_back(file); | ||||
} | ||||
BatchRenamer b; | ||||
b.setFilenameTemplate(token); | ||||
b.setFiles(&list); | ||||
b.setNumberStepping(step); | ||||
b.setNumberStartIndex(start); | ||||
b.setNumberSkipList(skip); | ||||
b.processFilenames(); | ||||
int cur = start; | ||||
bool result = true; | ||||
QString expected; | ||||
while (skip.contains(cur)) { | ||||
cur += step; | ||||
} | } | |||
result = result && strResult && pathResult; | KRenameFile::List::ConstIterator it = list.constBegin(); | |||
while (it != list.end() && result) { | ||||
expected.sprintf("%0*i", length, cur); | ||||
result = ((*it).dstFilename() == expected); | ||||
if (m_verbose || !result) | ||||
qDebug(" ---> Expected: (%s) Got: (%s) Start: %i Step: %i Token: | ||||
(%s)", | ||||
expected.toLatin1().data(), (*it).dstFilename().toLatin1( | ||||
).data(), start, step, token.toLatin1().data()); | ||||
do { | ||||
cur += step; | ||||
} while (skip.contains(cur)); | ||||
++it; | ||||
} | ||||
return result; | ||||
} | } | |||
return result; | bool KRenameTest::replaceTest(const QString &token, const QString &filename, | |||
} | const QString &expected, | |||
const QString &replace, const QString &with, b | ||||
ool regExp) | ||||
{ | ||||
QString directory("/home/krename/"); | ||||
KRenameFile::List list; | ||||
KRenameFile file(QUrl(directory + filename), filename.isEmpty(), eSplitM | ||||
ode_FirstDot, 1); | ||||
list.push_back(file); | ||||
QList<TReplaceItem> replaceList; | ||||
TReplaceItem strings; | ||||
strings.find = replace; | ||||
strings.replace = with; | ||||
strings.reg = regExp; | ||||
replaceList.append(strings); | ||||
BatchRenamer b; | ||||
b.setFilenameTemplate(token); | ||||
b.setFiles(&list); | ||||
b.setReplaceList(replaceList); | ||||
b.processFilenames(); | ||||
QString str = list[0].dstFilename(); | ||||
bool result = (str == expected); | ||||
if (m_verbose || !result) | ||||
writeTestMessage(" ---> Expected: (%s) Got: (%s) Token: (%s)", | ||||
expected.toLatin1().data(), | ||||
str.toLatin1().data(), token.toLatin1().data()); | ||||
return result; | ||||
} | ||||
bool KRenameTest::testMultipleFiles(KRenameFile::List &files, const QStringL | ||||
ist &expected, const QStringList &expectedPath, const QString &token) | ||||
{ | ||||
BatchRenamer b; | ||||
b.setFilenameTemplate(token); | ||||
b.setFiles(&files); | ||||
b.processFilenames(); | ||||
bool result = true; | ||||
for (int i = 0; i < files.count(); i++) { | ||||
QString str = files[i].dstFilename(); | ||||
QString strPath = files[i].dstDirectory(); | ||||
bool strResult = (str == expected[i]); | ||||
bool pathResult = (strPath == expectedPath[i]); | ||||
if (m_verbose || !strResult) { | ||||
writeTestMessage(" ---> Expected: (%s) Got: (%s) Token: (%s)", | ||||
expected[i].toLatin1().data(), | ||||
str.toLatin1().data(), token.toLatin1().data()) | ||||
; | ||||
} | ||||
if (m_verbose || !pathResult) { | ||||
writeTestMessage(" ---> Expected: (%s) Got: (%s) Token: (%s)", | ||||
expectedPath[i].toLatin1().data(), | ||||
strPath.toLatin1().data(), token.toLatin1().dat | ||||
a()); | ||||
} | ||||
result = result && strResult && pathResult; | ||||
} | ||||
return result; | ||||
} | ||||
End of changes. 16 change blocks. | ||||
801 lines changed or deleted | 727 lines changed or added |