/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include class tst_QFileSystemEntry : public QObject { Q_OBJECT private slots: void getSetCheck_data(); void getSetCheck(); void suffix_data(); void suffix(); void completeSuffix_data(); void completeSuffix(); void baseName_data(); void baseName(); void completeBaseName_data(); void completeBaseName(); #if defined(Q_OS_WIN) void absoluteOrRelative_data(); void absoluteOrRelative(); #endif void isClean_data(); void isClean(); void defaultCtor(); }; #if defined(Q_OS_WIN) void tst_QFileSystemEntry::getSetCheck_data() { QTest::addColumn("nativeFilePath"); QTest::addColumn("internalnativeFilePath"); QTest::addColumn("filepath"); QTest::addColumn("filename"); QTest::addColumn("baseName"); QTest::addColumn("completeBasename"); QTest::addColumn("suffix"); QTest::addColumn("completeSuffix"); QTest::addColumn("absolute"); QTest::addColumn("relative"); QString absPrefix = QLatin1String("\\\\?\\"); QString relPrefix = absPrefix + QDir::toNativeSeparators(QDir::currentPath()) + QLatin1String("\\"); QTest::newRow("simple") << QString("A:\\home\\qt\\in\\a\\dir.tar.gz") << absPrefix + QString("A:\\home\\qt\\in\\a\\dir.tar.gz") << "A:/home/qt/in/a/dir.tar.gz" << "dir.tar.gz" << "dir" << "dir.tar" << "gz" << "tar.gz" << true << false; QTest::newRow("relative") << QString("in\\a\\dir.tar.gz") << relPrefix + QString("in\\a\\dir.tar.gz") << "in/a/dir.tar.gz" << "dir.tar.gz" << "dir" << "dir.tar" << "gz" << "tar.gz" << false <("nativeFilePath"); QTest::addColumn("filepath"); QTest::addColumn("filename"); QTest::addColumn("basename"); QTest::addColumn("completeBasename"); QTest::addColumn("suffix"); QTest::addColumn("completeSuffix"); QTest::addColumn("absolute"); QTest::newRow("empty") << QByteArray() << QString() << QString() << QString() << QString() << QString() << QString() << false; QTest::newRow("simple") << QByteArray("/home/qt/in/a/dir.tar.gz") << "/home/qt/in/a/dir.tar.gz" << "dir.tar.gz" << "dir" << "dir.tar" << "gz" << "tar.gz" << true; QTest::newRow("relative") << QByteArray("in/a/dir.tar.gz") << "in/a/dir.tar.gz" << "dir.tar.gz" << "dir" << "dir.tar" << "gz" << "tar.gz" << false; QTest::newRow("noSuffix") << QByteArray("myDir/myfile") << "myDir/myfile" << "myfile" << "myfile" << "myfile" << "" << "" << false; QTest::newRow("noLongSuffix") << QByteArray("myDir/myfile.txt") << "myDir/myfile.txt" << "myfile.txt" << "myfile" << "myfile" << "txt" << "txt" << false; QTest::newRow("endingSlash") << QByteArray("myDir/myfile.bla/") << "myDir/myfile.bla/" << "" << "" << "" << "" << "" << false; QTest::newRow("relativePath") << QByteArray("A:dir/without/leading/backslash.bat") << "A:dir/without/leading/backslash.bat" << "backslash.bat" << "backslash" << "backslash" << "bat" << "bat" << false; } void tst_QFileSystemEntry::getSetCheck() { QFETCH(QByteArray, nativeFilePath); QFETCH(QString, filepath); QFETCH(QString, filename); QFETCH(QString, basename); QFETCH(QString, completeBasename); QFETCH(QString, suffix); QFETCH(QString, completeSuffix); QFETCH(bool, absolute); QFileSystemEntry entry1(filepath); QCOMPARE(entry1.filePath(), filepath); QCOMPARE(entry1.nativeFilePath(), nativeFilePath); QCOMPARE(entry1.fileName(), filename); QCOMPARE(entry1.suffix(), suffix); QCOMPARE(entry1.completeSuffix(), completeSuffix); QCOMPARE(entry1.isAbsolute(), absolute); QCOMPARE(entry1.isRelative(), !absolute); QCOMPARE(entry1.baseName(), basename); QCOMPARE(entry1.completeBaseName(), completeBasename); QFileSystemEntry entry2(nativeFilePath, QFileSystemEntry::FromNativePath()); QCOMPARE(entry2.suffix(), suffix); QCOMPARE(entry2.completeSuffix(), completeSuffix); QCOMPARE(entry2.isAbsolute(), absolute); QCOMPARE(entry2.isRelative(), !absolute); QCOMPARE(entry2.filePath(), filepath); QCOMPARE(entry2.nativeFilePath(), nativeFilePath); QCOMPARE(entry2.fileName(), filename); QCOMPARE(entry2.baseName(), basename); QCOMPARE(entry2.completeBaseName(), completeBasename); } #endif void tst_QFileSystemEntry::suffix_data() { QTest::addColumn("file"); QTest::addColumn("expected"); QTest::newRow("empty") << QString() << QString(); QTest::newRow("noextension0") << "file" << ""; QTest::newRow("noextension1") << "/path/to/file" << ""; QTest::newRow("data0") << "file.tar" << "tar"; QTest::newRow("data1") << "file.tar.gz" << "gz"; QTest::newRow("data2") << "/path/file/file.tar.gz" << "gz"; QTest::newRow("data3") << "/path/file.tar" << "tar"; QTest::newRow("hidden1-1") << ".ext1" << "ext1"; QTest::newRow("hidden1-2") << ".ext" << "ext"; QTest::newRow("hidden1-3") << ".ex" << "ex"; QTest::newRow("hidden1-4") << ".e" << "e"; QTest::newRow("hidden2-1") << ".ext1.ext2" << "ext2"; QTest::newRow("hidden2-2") << ".ext.ext2" << "ext2"; QTest::newRow("hidden2-3") << ".ex.ext2" << "ext2"; QTest::newRow("hidden2-4") << ".e.ext2" << "ext2"; QTest::newRow("hidden2-5") << "..ext2" << "ext2"; QTest::newRow("dots") << "/path/file.with.dots/file..ext2" << "ext2"; QTest::newRow("dots2") << "/path/file.with.dots/.file..ext2" << "ext2"; } void tst_QFileSystemEntry::suffix() { QFETCH(QString, file); QFETCH(QString, expected); QFileSystemEntry fe(file); QCOMPARE(fe.suffix(), expected); QFileSystemEntry fi2(file); // first resolve the last slash (void) fi2.path(); QCOMPARE(fi2.suffix(), expected); } void tst_QFileSystemEntry::completeSuffix_data() { QTest::addColumn("file"); QTest::addColumn("expected"); QTest::newRow("empty") << QString() << QString(); QTest::newRow("noextension0") << "file" << ""; QTest::newRow("noextension1") << "/path/to/file" << ""; QTest::newRow("data0") << "file.tar" << "tar"; QTest::newRow("data1") << "file.tar.gz" << "tar.gz"; QTest::newRow("data2") << "/path/file/file.tar.gz" << "tar.gz"; QTest::newRow("data3") << "/path/file.tar" << "tar"; QTest::newRow("dots") << "/path/file.with.dots/file..ext2" << ".ext2"; QTest::newRow("dots2") << "/path/file.with.dots/.file..ext2" << "file..ext2"; } void tst_QFileSystemEntry::completeSuffix() { QFETCH(QString, file); QFETCH(QString, expected); QFileSystemEntry fi(file); QCOMPARE(fi.completeSuffix(), expected); QFileSystemEntry fi2(file); // first resolve the last slash (void) fi2.path(); QCOMPARE(fi2.completeSuffix(), expected); } void tst_QFileSystemEntry::baseName_data() { QTest::addColumn("file"); QTest::addColumn("expected"); QTest::newRow("empty") << QString() << QString(); QTest::newRow("data0") << "file.tar" << "file"; QTest::newRow("data1") << "file.tar.gz" << "file"; QTest::newRow("data2") << "/path/file/file.tar.gz" << "file"; QTest::newRow("data3") << "/path/file.tar" << "file"; QTest::newRow("data4") << "/path/file" << "file"; QTest::newRow("dots") << "/path/file.with.dots/file..ext2" << "file"; QTest::newRow("dots2") << "/path/file.with.dots/.file..ext2" << ""; } void tst_QFileSystemEntry::baseName() { QFETCH(QString, file); QFETCH(QString, expected); QFileSystemEntry fi(file); QCOMPARE(fi.baseName(), expected); QFileSystemEntry fi2(file); // first resolve the last slash (void) fi2.path(); QCOMPARE(fi2.baseName(), expected); } void tst_QFileSystemEntry::completeBaseName_data() { QTest::addColumn("file"); QTest::addColumn("expected"); QTest::newRow("empty") << QString() << QString(); QTest::newRow("data0") << "file.tar" << "file"; QTest::newRow("data1") << "file.tar.gz" << "file.tar"; QTest::newRow("data2") << "/path/file/file.tar.gz" << "file.tar"; QTest::newRow("data3") << "/path/file.tar" << "file"; QTest::newRow("data4") << "/path/file" << "file"; QTest::newRow("dots") << "/path/file.with.dots/file..ext2" << "file."; QTest::newRow("dots2") << "/path/file.with.dots/.file..ext2" << ".file."; } void tst_QFileSystemEntry::completeBaseName() { QFETCH(QString, file); QFETCH(QString, expected); QFileSystemEntry fi(file); QCOMPARE(fi.completeBaseName(), expected); QFileSystemEntry fi2(file); // first resolve the last slash (void) fi2.path(); QCOMPARE(fi2.completeBaseName(), expected); } #if defined(Q_OS_WIN) void tst_QFileSystemEntry::absoluteOrRelative_data() { QTest::addColumn("path"); QTest::addColumn("isAbsolute"); QTest::addColumn("isRelative"); QTest::newRow("empty") << QString() << false << true; QTest::newRow("data0") << "file.tar" << false << true; QTest::newRow("data1") << "/path/file/file.tar.gz" << false << false; QTest::newRow("data1") << "C:path/file/file.tar.gz" << false << false; QTest::newRow("data3") << "C:/path/file" << true << false; QTest::newRow("data3") << "//machine/share" << true << false; } void tst_QFileSystemEntry::absoluteOrRelative() { QFETCH(QString, path); QFETCH(bool, isAbsolute); QFETCH(bool, isRelative); QFileSystemEntry fi(path); QCOMPARE(fi.isAbsolute(), isAbsolute); QCOMPARE(fi.isRelative(), isRelative); } #endif void tst_QFileSystemEntry::isClean_data() { QTest::addColumn("path"); QTest::addColumn("isClean"); QTest::newRow("empty") << QString() << true; QTest::newRow("simple") << "foo" << true; QTest::newRow("complex") << "/foo/bar/bz" << true; QTest::newRow(".file") << "/foo/.file" << true; QTest::newRow("..file") << "/foo/..file" << true; QTest::newRow("...") << "/foo/.../bar" << true; QTest::newRow("./") << "./" << false; QTest::newRow("../") << "../" << false; QTest::newRow(".") << "." << false; QTest::newRow("..") << ".." << false; QTest::newRow("/.") << "/." << false; QTest::newRow("/..") << "/.." << false; QTest::newRow("/../") << "foo/../bar" << false; QTest::newRow("/./") << "foo/./bar" << false; QTest::newRow("//") << "foo//bar" << false; } void tst_QFileSystemEntry::isClean() { QFETCH(QString, path); QFETCH(bool, isClean); QFileSystemEntry fi(path); QCOMPARE(fi.isClean(), isClean); } void tst_QFileSystemEntry::defaultCtor() { QFileSystemEntry entry; QVERIFY(entry.filePath().isNull()); QVERIFY(entry.nativeFilePath().isNull()); QVERIFY(entry.fileName().isNull()); QCOMPARE(entry.path(), QString(".")); QVERIFY(entry.baseName().isNull()); QVERIFY(entry.completeBaseName().isNull()); QVERIFY(entry.suffix().isNull()); QVERIFY(entry.completeSuffix().isNull()); QVERIFY(!entry.isAbsolute()); QVERIFY(entry.isRelative()); QVERIFY(entry.isClean()); #if defined(Q_OS_WIN) QVERIFY(!entry.isDriveRoot()); #endif QVERIFY(!entry.isRoot()); QVERIFY(entry.isEmpty()); } QTEST_MAIN(tst_QFileSystemEntry) #include