2017-05-22 09:37:37 +00:00
|
|
|
/***************************************************************************
|
|
|
|
* Copyright (C) 2017 by Elvis Angelaccio <elvis.angelaccio@kde.org> *
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
* This program is distributed in the hope that it will be useful, *
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
|
|
* GNU General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU General Public License *
|
|
|
|
* along with this program; if not, write to the *
|
|
|
|
* Free Software Foundation, Inc., *
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#include "dolphinmainwindow.h"
|
2018-10-07 11:05:55 +00:00
|
|
|
#include "dolphinnewfilemenu.h"
|
2017-05-22 09:37:37 +00:00
|
|
|
#include "dolphintabpage.h"
|
|
|
|
#include "dolphintabwidget.h"
|
|
|
|
#include "dolphinviewcontainer.h"
|
|
|
|
|
2018-04-25 10:34:02 +00:00
|
|
|
#include <KActionCollection>
|
|
|
|
|
|
|
|
#include <QSignalSpy>
|
2018-06-03 09:24:20 +00:00
|
|
|
#include <QStandardPaths>
|
2017-05-22 09:37:37 +00:00
|
|
|
#include <QTest>
|
|
|
|
|
|
|
|
class DolphinMainWindowTest : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
private slots:
|
2018-06-03 09:24:20 +00:00
|
|
|
void initTestCase();
|
2017-05-22 09:37:37 +00:00
|
|
|
void init();
|
|
|
|
void testClosingTabsWithSearchBoxVisible();
|
2018-04-25 11:42:18 +00:00
|
|
|
void testActiveViewAfterClosingSplitView_data();
|
|
|
|
void testActiveViewAfterClosingSplitView();
|
2018-04-25 10:34:02 +00:00
|
|
|
void testUpdateWindowTitleAfterClosingSplitView();
|
2018-09-02 08:53:32 +00:00
|
|
|
void testOpenInNewTabTitle();
|
2018-10-07 11:05:55 +00:00
|
|
|
void testNewFileMenuEnabled_data();
|
|
|
|
void testNewFileMenuEnabled();
|
2017-05-22 09:37:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
QScopedPointer<DolphinMainWindow> m_mainWindow;
|
|
|
|
};
|
|
|
|
|
2018-06-03 09:24:20 +00:00
|
|
|
void DolphinMainWindowTest::initTestCase()
|
|
|
|
{
|
|
|
|
QStandardPaths::setTestModeEnabled(true);
|
|
|
|
}
|
|
|
|
|
2017-05-22 09:37:37 +00:00
|
|
|
void DolphinMainWindowTest::init()
|
|
|
|
{
|
|
|
|
m_mainWindow.reset(new DolphinMainWindow());
|
|
|
|
}
|
|
|
|
|
|
|
|
// See https://bugs.kde.org/show_bug.cgi?id=379135
|
|
|
|
void DolphinMainWindowTest::testClosingTabsWithSearchBoxVisible()
|
|
|
|
{
|
|
|
|
m_mainWindow->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
|
|
|
|
m_mainWindow->show();
|
|
|
|
// Without this call the searchbox doesn't get FocusIn events.
|
2018-02-03 21:34:24 +00:00
|
|
|
QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
|
2017-05-22 09:37:37 +00:00
|
|
|
QVERIFY(m_mainWindow->isVisible());
|
|
|
|
|
|
|
|
auto tabWidget = m_mainWindow->findChild<DolphinTabWidget*>("tabWidget");
|
|
|
|
QVERIFY(tabWidget);
|
|
|
|
|
|
|
|
// Show search box on first tab.
|
|
|
|
tabWidget->currentTabPage()->activeViewContainer()->setSearchModeEnabled(true);
|
|
|
|
|
|
|
|
tabWidget->openNewActivatedTab(QUrl::fromLocalFile(QDir::homePath()));
|
|
|
|
QCOMPARE(tabWidget->count(), 2);
|
|
|
|
|
|
|
|
// Triggers the crash in bug #379135.
|
|
|
|
tabWidget->closeTab();
|
|
|
|
QCOMPARE(tabWidget->count(), 1);
|
|
|
|
}
|
|
|
|
|
2018-04-25 11:42:18 +00:00
|
|
|
void DolphinMainWindowTest::testActiveViewAfterClosingSplitView_data()
|
|
|
|
{
|
|
|
|
QTest::addColumn<bool>("closeLeftView");
|
|
|
|
|
|
|
|
QTest::newRow("close left view") << true;
|
|
|
|
QTest::newRow("close right view") << false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindowTest::testActiveViewAfterClosingSplitView()
|
|
|
|
{
|
|
|
|
m_mainWindow->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
|
|
|
|
m_mainWindow->show();
|
|
|
|
QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
|
|
|
|
QVERIFY(m_mainWindow->isVisible());
|
|
|
|
|
|
|
|
auto tabWidget = m_mainWindow->findChild<DolphinTabWidget*>("tabWidget");
|
|
|
|
QVERIFY(tabWidget);
|
|
|
|
QVERIFY(tabWidget->currentTabPage()->primaryViewContainer());
|
|
|
|
QVERIFY(!tabWidget->currentTabPage()->secondaryViewContainer());
|
|
|
|
|
|
|
|
// Open split view.
|
|
|
|
m_mainWindow->actionCollection()->action(QStringLiteral("split_view"))->trigger();
|
|
|
|
QVERIFY(tabWidget->currentTabPage()->splitViewEnabled());
|
|
|
|
QVERIFY(tabWidget->currentTabPage()->secondaryViewContainer());
|
|
|
|
|
|
|
|
// Make sure the right view is the active one.
|
|
|
|
auto leftViewContainer = tabWidget->currentTabPage()->primaryViewContainer();
|
|
|
|
auto rightViewContainer = tabWidget->currentTabPage()->secondaryViewContainer();
|
|
|
|
QVERIFY(!leftViewContainer->isActive());
|
|
|
|
QVERIFY(rightViewContainer->isActive());
|
|
|
|
|
|
|
|
QFETCH(bool, closeLeftView);
|
|
|
|
if (closeLeftView) {
|
|
|
|
// Activate left view.
|
|
|
|
leftViewContainer->setActive(true);
|
|
|
|
QVERIFY(leftViewContainer->isActive());
|
|
|
|
QVERIFY(!rightViewContainer->isActive());
|
|
|
|
|
|
|
|
// Close left view. The secondary view (which was on the right) will become the primary one and must be active.
|
|
|
|
m_mainWindow->actionCollection()->action(QStringLiteral("split_view"))->trigger();
|
|
|
|
QVERIFY(!leftViewContainer->isActive());
|
|
|
|
QVERIFY(rightViewContainer->isActive());
|
|
|
|
QCOMPARE(rightViewContainer, tabWidget->currentTabPage()->activeViewContainer());
|
|
|
|
} else {
|
|
|
|
// Close right view. The left view will become active.
|
|
|
|
m_mainWindow->actionCollection()->action(QStringLiteral("split_view"))->trigger();
|
|
|
|
QVERIFY(leftViewContainer->isActive());
|
|
|
|
QVERIFY(!rightViewContainer->isActive());
|
|
|
|
QCOMPARE(leftViewContainer, tabWidget->currentTabPage()->activeViewContainer());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-04-25 10:34:02 +00:00
|
|
|
// Test case for bug #385111
|
|
|
|
void DolphinMainWindowTest::testUpdateWindowTitleAfterClosingSplitView()
|
|
|
|
{
|
|
|
|
m_mainWindow->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
|
|
|
|
m_mainWindow->show();
|
|
|
|
QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
|
|
|
|
QVERIFY(m_mainWindow->isVisible());
|
|
|
|
|
|
|
|
auto tabWidget = m_mainWindow->findChild<DolphinTabWidget*>("tabWidget");
|
|
|
|
QVERIFY(tabWidget);
|
|
|
|
QVERIFY(tabWidget->currentTabPage()->primaryViewContainer());
|
|
|
|
QVERIFY(!tabWidget->currentTabPage()->secondaryViewContainer());
|
|
|
|
|
|
|
|
// Open split view.
|
|
|
|
m_mainWindow->actionCollection()->action(QStringLiteral("split_view"))->trigger();
|
|
|
|
QVERIFY(tabWidget->currentTabPage()->splitViewEnabled());
|
|
|
|
QVERIFY(tabWidget->currentTabPage()->secondaryViewContainer());
|
|
|
|
|
|
|
|
// Make sure the right view is the active one.
|
|
|
|
auto leftViewContainer = tabWidget->currentTabPage()->primaryViewContainer();
|
|
|
|
auto rightViewContainer = tabWidget->currentTabPage()->secondaryViewContainer();
|
|
|
|
QVERIFY(!leftViewContainer->isActive());
|
|
|
|
QVERIFY(rightViewContainer->isActive());
|
|
|
|
|
|
|
|
// Activate left view.
|
|
|
|
leftViewContainer->setActive(true);
|
|
|
|
QVERIFY(leftViewContainer->isActive());
|
|
|
|
QVERIFY(!rightViewContainer->isActive());
|
|
|
|
|
|
|
|
// Close split view. The secondary view (which was on the right) will become the primary one and must be active.
|
|
|
|
m_mainWindow->actionCollection()->action(QStringLiteral("split_view"))->trigger();
|
2018-04-25 11:42:18 +00:00
|
|
|
QVERIFY(!leftViewContainer->isActive());
|
2018-04-25 10:34:02 +00:00
|
|
|
QVERIFY(rightViewContainer->isActive());
|
|
|
|
QCOMPARE(rightViewContainer, tabWidget->currentTabPage()->activeViewContainer());
|
|
|
|
|
|
|
|
// Change URL and make sure we emit the currentUrlChanged signal (which triggers the window title update).
|
|
|
|
QSignalSpy currentUrlChangedSpy(tabWidget, &DolphinTabWidget::currentUrlChanged);
|
|
|
|
tabWidget->currentTabPage()->activeViewContainer()->setUrl(QUrl::fromLocalFile(QDir::rootPath()));
|
|
|
|
QCOMPARE(currentUrlChangedSpy.count(), 1);
|
|
|
|
}
|
|
|
|
|
2018-09-02 08:53:32 +00:00
|
|
|
// Test case for bug #397910
|
|
|
|
void DolphinMainWindowTest::testOpenInNewTabTitle()
|
|
|
|
{
|
|
|
|
m_mainWindow->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
|
|
|
|
m_mainWindow->show();
|
|
|
|
QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
|
|
|
|
QVERIFY(m_mainWindow->isVisible());
|
|
|
|
|
|
|
|
auto tabWidget = m_mainWindow->findChild<DolphinTabWidget*>("tabWidget");
|
|
|
|
QVERIFY(tabWidget);
|
|
|
|
|
|
|
|
tabWidget->openNewTab(QUrl::fromLocalFile(QDir::tempPath()));
|
|
|
|
QCOMPARE(tabWidget->count(), 2);
|
|
|
|
QVERIFY(tabWidget->tabText(0) != tabWidget->tabText(1));
|
2018-10-07 19:37:35 +00:00
|
|
|
if (!tabWidget->tabIcon(0).isNull() && !tabWidget->tabIcon(1).isNull()) {
|
|
|
|
QVERIFY(tabWidget->tabIcon(0).name() != tabWidget->tabIcon(1).name());
|
|
|
|
}
|
2018-09-02 08:53:32 +00:00
|
|
|
}
|
|
|
|
|
2018-10-07 11:05:55 +00:00
|
|
|
void DolphinMainWindowTest::testNewFileMenuEnabled_data()
|
|
|
|
{
|
|
|
|
QTest::addColumn<QUrl>("activeViewUrl");
|
|
|
|
QTest::addColumn<bool>("expectedEnabled");
|
|
|
|
|
|
|
|
QTest::newRow("home") << QUrl::fromLocalFile(QDir::homePath()) << true;
|
|
|
|
QTest::newRow("root") << QUrl::fromLocalFile(QDir::rootPath()) << false;
|
|
|
|
QTest::newRow("trash") << QUrl::fromUserInput(QStringLiteral("trash:/")) << false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindowTest::testNewFileMenuEnabled()
|
|
|
|
{
|
|
|
|
QFETCH(QUrl, activeViewUrl);
|
|
|
|
m_mainWindow->openDirectories({ activeViewUrl }, false);
|
|
|
|
m_mainWindow->show();
|
|
|
|
QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
|
|
|
|
QVERIFY(m_mainWindow->isVisible());
|
|
|
|
|
|
|
|
auto newFileMenu = m_mainWindow->findChild<DolphinNewFileMenu*>("newFileMenu");
|
|
|
|
QVERIFY(newFileMenu);
|
|
|
|
|
|
|
|
QFETCH(bool, expectedEnabled);
|
|
|
|
QCOMPARE(newFileMenu->isEnabled(), expectedEnabled);
|
|
|
|
}
|
|
|
|
|
2017-05-22 09:37:37 +00:00
|
|
|
QTEST_MAIN(DolphinMainWindowTest)
|
|
|
|
|
|
|
|
#include "dolphinmainwindowtest.moc"
|