tests/auto/qfiledialog2/tst_qfiledialog2.cpp
changeset 7 f7bc934e204c
parent 0 1918ee327afb
--- a/tests/auto/qfiledialog2/tst_qfiledialog2.cpp	Tue Feb 02 00:43:10 2010 +0200
+++ b/tests/auto/qfiledialog2/tst_qfiledialog2.cpp	Wed Mar 31 11:06:36 2010 +0300
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
@@ -87,13 +87,13 @@
     }
 };
 
-class tst_QFiledialog : public QObject
+class tst_QFileDialog2 : public QObject
 {
 Q_OBJECT
 
 public:
-    tst_QFiledialog();
-    virtual ~tst_QFiledialog();
+    tst_QFileDialog2();
+    virtual ~tst_QFileDialog2();
 
 public slots:
     void init();
@@ -116,6 +116,7 @@
 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
     void task226366_lowerCaseHardDriveWindows();
 #endif
+    void completionOnLevelAfterRoot();
     void task233037_selectingDirectory();
     void task235069_hideOnEscape();
     void task236402_dontWatchDeletedDir();
@@ -130,23 +131,25 @@
     void task259105_filtersCornerCases();
 
     void QTBUG4419_lineEditSelectAll();
+    void QTBUG6558_showDirsOnly();
+    void QTBUG4842_selectFilterWithHideNameFilterDetails();
 
 private:
     QByteArray userSettings;
 };
 
-tst_QFiledialog::tst_QFiledialog()
+tst_QFileDialog2::tst_QFileDialog2()
 {   
 #if defined(Q_OS_WINCE)
     qApp->setAutoMaximizeThreshold(-1);
 #endif
 }
 
-tst_QFiledialog::~tst_QFiledialog()
+tst_QFileDialog2::~tst_QFileDialog2()
 {
 }
 
-void tst_QFiledialog::init()
+void tst_QFileDialog2::init()
 {
     // Save the developers settings so they don't get mad when their sidebar folders are gone.
     QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
@@ -161,14 +164,14 @@
 #endif
 }
 
-void tst_QFiledialog::cleanup()
+void tst_QFileDialog2::cleanup()
 {
     QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
     settings.beginGroup(QLatin1String("Qt"));
     settings.setValue(QLatin1String("filedialog"), userSettings);
 }
 
-void tst_QFiledialog::listRoot()
+void tst_QFileDialog2::listRoot()
 {
 #if defined QT_BUILD_INTERNAL
     QFileInfoGatherer fileInfoGatherer;
@@ -190,7 +193,7 @@
 #endif
 }
 
-void tst_QFiledialog::heapCorruption()
+void tst_QFileDialog2::heapCorruption()
 {
     QVector<QNonNativeFileDialog*> dialogs;
     for (int i=0; i < 10; i++) {
@@ -200,14 +203,14 @@
     qDeleteAll(dialogs);
 }
 
-struct FriendlyQFileDialog : public QFileDialog
+struct FriendlyQFileDialog : public QNonNativeFileDialog
 {
-    friend class tst_QFileDialog;
+    friend class tst_QFileDialog2;
     Q_DECLARE_PRIVATE(QFileDialog)
 };
 
 
-void tst_QFiledialog::deleteDirAndFiles()
+void tst_QFileDialog2::deleteDirAndFiles()
 {
 #if defined QT_BUILD_INTERNAL
     QString tempPath = QDir::tempPath() + '/' + "QFileDialogTestDir4FullDelete";
@@ -239,7 +242,7 @@
 #endif
 }
 
-void tst_QFiledialog::filter()
+void tst_QFileDialog2::filter()
 {
     QNonNativeFileDialog fd;
     QAction *hiddenAction = qFindChild<QAction*>(&fd, "qt_show_hidden_action");
@@ -252,7 +255,7 @@
     QVERIFY(hiddenAction->isChecked());
 }
 
-void tst_QFiledialog::showNameFilterDetails()
+void tst_QFileDialog2::showNameFilterDetails()
 {
     QNonNativeFileDialog fd;
     QComboBox *filters = qFindChild<QComboBox*>(&fd, "fileTypeCombo");
@@ -277,7 +280,7 @@
     QCOMPARE(filters->itemText(2), filterChoices.at(2));
 }
 
-void tst_QFiledialog::unc()
+void tst_QFileDialog2::unc()
 {
 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
     // Only test UNC on Windows./
@@ -292,7 +295,7 @@
     QCOMPARE(model->index(fd.directory().absolutePath()), model->index(dir));
 }
 
-void tst_QFiledialog::emptyUncPath()
+void tst_QFileDialog2::emptyUncPath()
 {
     QNonNativeFileDialog fd;
 	fd.show();
@@ -305,7 +308,7 @@
     QVERIFY(model);
 }
 
-void tst_QFiledialog::task178897_minimumSize()
+void tst_QFileDialog2::task178897_minimumSize()
 {
     QNonNativeFileDialog fd;
     QSize oldMs = fd.layout()->minimumSize();
@@ -319,7 +322,7 @@
     QVERIFY(ms.width() <= oldMs.width());
 }
 
-void tst_QFiledialog::task180459_lastDirectory_data()
+void tst_QFileDialog2::task180459_lastDirectory_data()
 {
     QTest::addColumn<QString>("path");
     QTest::addColumn<QString>("directory");
@@ -342,7 +345,7 @@
 
 }
 
-void tst_QFiledialog::task180459_lastDirectory()
+void tst_QFileDialog2::task180459_lastDirectory()
 {
     //first visit the temp directory and close the dialog
     QNonNativeFileDialog *dlg = new QNonNativeFileDialog(0, "", QDir::tempPath());
@@ -446,7 +449,7 @@
         }
 };
 
-void tst_QFiledialog::task227304_proxyOnFileDialog()
+void tst_QFileDialog2::task227304_proxyOnFileDialog()
 {
 #if defined QT_BUILD_INTERNAL
     QNonNativeFileDialog fd(0, "", QDir::currentPath(), 0);
@@ -485,7 +488,7 @@
 #endif
 }
 
-void tst_QFiledialog::task227930_correctNavigationKeyboardBehavior()
+void tst_QFileDialog2::task227930_correctNavigationKeyboardBehavior()
 {
     QDir current = QDir::currentPath();
     current.mkdir("test");
@@ -524,7 +527,7 @@
 }
 
 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
-void tst_QFiledialog::task226366_lowerCaseHardDriveWindows()
+void tst_QFileDialog2::task226366_lowerCaseHardDriveWindows()
 {
     QNonNativeFileDialog fd;
     fd.setDirectory(QDir::root().path());
@@ -550,7 +553,46 @@
 }
 #endif
 
-void tst_QFiledialog::task233037_selectingDirectory()
+void tst_QFileDialog2::completionOnLevelAfterRoot()
+{
+    QNonNativeFileDialog fd;
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
+    fd.setDirectory("C:");
+    QDir current = fd.directory();
+    current.mkdir("completionOnLevelAfterRootTest");
+#else
+    fd.setFilter(QDir::Hidden | QDir::AllDirs | QDir::Files | QDir::System);
+    fd.setDirectory("/");
+    QDir etc("/etc");
+    if (!etc.exists())
+        QSKIP("This test requires to have an etc directory under /", SkipAll);
+#endif
+    fd.show();
+    QLineEdit *edit = qFindChild<QLineEdit*>(&fd, "fileNameEdit");
+    QTest::qWait(2000);
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
+    //I love testlib :D
+    QTest::keyClick(edit, Qt::Key_C);
+    QTest::keyClick(edit, Qt::Key_O);
+    QTest::keyClick(edit, Qt::Key_M);
+    QTest::keyClick(edit, Qt::Key_P);
+    QTest::keyClick(edit, Qt::Key_L);
+#else
+    QTest::keyClick(edit, Qt::Key_E);
+    QTest::keyClick(edit, Qt::Key_T);
+#endif
+    QTest::qWait(200);
+    QTest::keyClick(edit->completer()->popup(), Qt::Key_Down);
+    QTest::qWait(200);
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
+    QCOMPARE(edit->text(), QString("completionOnLevelAfterRootTest"));
+    current.rmdir("completionOnLevelAfterRootTest");
+#else
+    QCOMPARE(edit->text(), QString("etc"));
+#endif
+}
+
+void tst_QFileDialog2::task233037_selectingDirectory()
 {
     QDir current = QDir::currentPath();
     current.mkdir("test");
@@ -573,7 +615,7 @@
     current.rmdir("test");
 }
 
-void tst_QFiledialog::task235069_hideOnEscape()
+void tst_QFileDialog2::task235069_hideOnEscape()
 {
     QDir current = QDir::currentPath();
     QNonNativeFileDialog fd;
@@ -595,7 +637,7 @@
     QCOMPARE(fd2.isVisible(), false);
 }
 
-void tst_QFiledialog::task236402_dontWatchDeletedDir()
+void tst_QFileDialog2::task236402_dontWatchDeletedDir()
 {
 #if defined QT_BUILD_INTERNAL
     //THIS TEST SHOULD NOT DISPLAY WARNINGS
@@ -620,7 +662,7 @@
 #endif
 }
 
-void tst_QFiledialog::task203703_returnProperSeparator()
+void tst_QFileDialog2::task203703_returnProperSeparator()
 {
     QDir current = QDir::currentPath();
     current.mkdir("aaaaaaaaaaaaaaaaaa");
@@ -645,7 +687,7 @@
     current.rmdir("aaaaaaaaaaaaaaaaaa");
 }
 
-void tst_QFiledialog::task228844_ensurePreviousSorting()
+void tst_QFileDialog2::task228844_ensurePreviousSorting()
 {
     QDir current = QDir::currentPath();
     current.mkdir("aaaaaaaaaaaaaaaaaa");
@@ -747,7 +789,7 @@
 }
 
 
-void tst_QFiledialog::task239706_editableFilterCombo()
+void tst_QFileDialog2::task239706_editableFilterCombo()
 {
     QNonNativeFileDialog d;
     d.setNameFilter("*.cpp *.h");
@@ -770,7 +812,7 @@
     QTest::keyPress(filterCombo, Qt::Key_Enter); // should not trigger assertion failure
 }
 
-void tst_QFiledialog::task218353_relativePaths()
+void tst_QFileDialog2::task218353_relativePaths()
 {
     QDir appDir = QDir::current();
     QVERIFY(appDir.cdUp() != false);
@@ -787,7 +829,7 @@
     appDir.rmdir("test");
 }
 
-void tst_QFiledialog::task251321_sideBarHiddenEntries()
+void tst_QFileDialog2::task251321_sideBarHiddenEntries()
 {
 #if defined QT_BUILD_INTERNAL
     QNonNativeFileDialog fd;
@@ -847,7 +889,7 @@
 };
 #endif
 
-void tst_QFiledialog::task251341_sideBarRemoveEntries()
+void tst_QFileDialog2::task251341_sideBarRemoveEntries()
 {
 #if defined QT_BUILD_INTERNAL
     QNonNativeFileDialog fd;
@@ -912,7 +954,7 @@
 #endif
 }
 
-void tst_QFiledialog::task254490_selectFileMultipleTimes()
+void tst_QFileDialog2::task254490_selectFileMultipleTimes()
 {
     QString tempPath = QDir::tempPath();
     QTemporaryFile *t;
@@ -944,7 +986,7 @@
     t->deleteLater();
 }
 
-void tst_QFiledialog::task257579_sideBarWithNonCleanUrls()
+void tst_QFileDialog2::task257579_sideBarWithNonCleanUrls()
 {
 #if defined QT_BUILD_INTERNAL
     QDir tempDir = QDir::temp();
@@ -970,7 +1012,7 @@
 #endif
 }
 
-void tst_QFiledialog::task259105_filtersCornerCases()
+void tst_QFileDialog2::task259105_filtersCornerCases()
 {
     QNonNativeFileDialog fd(0, "TestFileDialog");
     fd.setNameFilter(QLatin1String("All Files! (*);;Text Files (*.txt)"));
@@ -1014,7 +1056,7 @@
     QCOMPARE(filters->currentText(), QLatin1String("Text Files"));
 }
 
-void tst_QFiledialog::QTBUG4419_lineEditSelectAll()
+void tst_QFileDialog2::QTBUG4419_lineEditSelectAll()
 {
     QString tempPath = QDir::tempPath();
     QTemporaryFile *t;
@@ -1040,5 +1082,111 @@
     QCOMPARE(tempPath + QChar('/') + lineEdit->selectedText(), t->fileName());
 }
 
-QTEST_MAIN(tst_QFiledialog)
+void tst_QFileDialog2::QTBUG6558_showDirsOnly()
+{
+    const QString tempPath = QDir::tempPath();
+    QDir dirTemp(tempPath);
+    const QString tempName = QLatin1String("showDirsOnly.") + QString::number(qrand());
+    dirTemp.mkdir(tempName);
+    dirTemp.cd(tempName);
+    QTRY_VERIFY(dirTemp.exists());
+
+    const QString dirPath = dirTemp.absolutePath();
+    QDir dir(dirPath);
+
+    //We create two dirs
+    dir.mkdir("a");
+    dir.mkdir("b");
+
+    //Create a file
+    QFile tempFile(dirPath + "/plop.txt");
+    tempFile.open(QIODevice::WriteOnly | QIODevice::Text);
+    QTextStream out(&tempFile);
+    out << "The magic number is: " << 49 << "\n";
+    tempFile.close();
+
+    QNonNativeFileDialog fd(0, "TestFileDialog");
+
+    fd.setDirectory(dir.absolutePath());
+    fd.setViewMode(QFileDialog::List);
+    fd.setAcceptMode(QFileDialog::AcceptSave);
+    fd.setOption(QFileDialog::ShowDirsOnly, true);
+    fd.show();
+
+    QApplication::setActiveWindow(&fd);
+    QTest::qWaitForWindowShown(&fd);
+    QTRY_COMPARE(fd.isVisible(), true);
+    QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&fd));
+
+    QFileSystemModel *model = qFindChild<QFileSystemModel*>(&fd, "qt_filesystem_model");
+    QTRY_COMPARE(model->rowCount(model->index(dir.absolutePath())), 2);
+
+    fd.setOption(QFileDialog::ShowDirsOnly, false);
+    QTRY_COMPARE(model->rowCount(model->index(dir.absolutePath())), 3);
+
+    fd.setOption(QFileDialog::ShowDirsOnly, true);
+    QTRY_COMPARE(model->rowCount(model->index(dir.absolutePath())), 2);
+
+    fd.setFileMode(QFileDialog::DirectoryOnly);
+    QTRY_COMPARE(model->rowCount(model->index(dir.absolutePath())), 2);
+    QTRY_COMPARE(bool(fd.options() & QFileDialog::ShowDirsOnly), true);
+
+    fd.setFileMode(QFileDialog::AnyFile);
+    QTRY_COMPARE(model->rowCount(model->index(dir.absolutePath())), 3);
+    QTRY_COMPARE(bool(fd.options() & QFileDialog::ShowDirsOnly), false);
+
+    fd.setDirectory(QDir::homePath());
+
+    //We remove the dirs
+    dir.rmdir("a");
+    dir.rmdir("b");
+
+    //we delete the file
+    tempFile.remove();
+
+    dirTemp.cdUp();
+    dirTemp.rmdir(tempName);
+}
+
+void tst_QFileDialog2::QTBUG4842_selectFilterWithHideNameFilterDetails()
+{
+    QStringList filtersStr;
+    filtersStr << "Images (*.png *.xpm *.jpg)" << "Text files (*.txt)" << "XML files (*.xml)";
+    QString chosenFilterString("Text files (*.txt)");
+
+    QNonNativeFileDialog fd(0, "TestFileDialog");
+    fd.setAcceptMode(QFileDialog::AcceptSave);
+    fd.setOption(QFileDialog::HideNameFilterDetails, true);
+    fd.setNameFilters(filtersStr);
+    fd.selectNameFilter(chosenFilterString);
+    fd.show();
+
+    QApplication::setActiveWindow(&fd);
+    QTest::qWaitForWindowShown(&fd);
+    QTRY_COMPARE(fd.isVisible(), true);
+    QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&fd));
+
+    QComboBox *filters = qFindChild<QComboBox*>(&fd, "fileTypeCombo");
+    //We compare the current combobox text with the stripped version
+    QCOMPARE(filters->currentText(), QString("Text files"));
+
+    QNonNativeFileDialog fd2(0, "TestFileDialog");
+    fd2.setAcceptMode(QFileDialog::AcceptSave);
+    fd2.setOption(QFileDialog::HideNameFilterDetails, false);
+    fd2.setNameFilters(filtersStr);
+    fd2.selectNameFilter(chosenFilterString);
+    fd2.show();
+
+    QApplication::setActiveWindow(&fd2);
+    QTest::qWaitForWindowShown(&fd2);
+    QTRY_COMPARE(fd2.isVisible(), true);
+    QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&fd2));
+
+    QComboBox *filters2 = qFindChild<QComboBox*>(&fd2, "fileTypeCombo");
+    //We compare the current combobox text with the non stripped version
+    QCOMPARE(filters2->currentText(), chosenFilterString);
+
+}
+
+QTEST_MAIN(tst_QFileDialog2)
 #include "tst_qfiledialog2.moc"