]>
cloud.milkyroute.net Git - dolphin.git/blob - src/tests/dolphinmainwindowtest.cpp
2 * SPDX-FileCopyrightText: 2017 Elvis Angelaccio <elvis.angelaccio@kde.org>
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "dolphinmainwindow.h"
8 #include "dolphinnewfilemenu.h"
9 #include "dolphintabpage.h"
10 #include "dolphintabwidget.h"
11 #include "dolphinviewcontainer.h"
13 #include <KActionCollection>
16 #include <QStandardPaths>
19 class DolphinMainWindowTest
: public QObject
26 void testClosingTabsWithSearchBoxVisible();
27 void testActiveViewAfterClosingSplitView_data();
28 void testActiveViewAfterClosingSplitView();
29 void testUpdateWindowTitleAfterClosingSplitView();
30 void testUpdateWindowTitleAfterChangingSplitView();
31 void testOpenInNewTabTitle();
32 void testNewFileMenuEnabled_data();
33 void testNewFileMenuEnabled();
34 void testWindowTitle_data();
35 void testWindowTitle();
40 QScopedPointer
<DolphinMainWindow
> m_mainWindow
;
43 void DolphinMainWindowTest::initTestCase()
45 QStandardPaths::setTestModeEnabled(true);
48 void DolphinMainWindowTest::init()
50 m_mainWindow
.reset(new DolphinMainWindow());
53 // See https://bugs.kde.org/show_bug.cgi?id=379135
54 void DolphinMainWindowTest::testClosingTabsWithSearchBoxVisible()
56 m_mainWindow
->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
58 // Without this call the searchbox doesn't get FocusIn events.
59 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
60 QVERIFY(m_mainWindow
->isVisible());
62 auto tabWidget
= m_mainWindow
->findChild
<DolphinTabWidget
*>("tabWidget");
65 // Show search box on first tab.
66 tabWidget
->currentTabPage()->activeViewContainer()->setSearchModeEnabled(true);
68 tabWidget
->openNewActivatedTab(QUrl::fromLocalFile(QDir::homePath()));
69 QCOMPARE(tabWidget
->count(), 2);
71 // Triggers the crash in bug #379135.
72 tabWidget
->closeTab();
73 QCOMPARE(tabWidget
->count(), 1);
76 void DolphinMainWindowTest::testActiveViewAfterClosingSplitView_data()
78 QTest::addColumn
<bool>("closeLeftView");
80 QTest::newRow("close left view") << true;
81 QTest::newRow("close right view") << false;
84 void DolphinMainWindowTest::testActiveViewAfterClosingSplitView()
86 m_mainWindow
->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
88 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
89 QVERIFY(m_mainWindow
->isVisible());
91 auto tabWidget
= m_mainWindow
->findChild
<DolphinTabWidget
*>("tabWidget");
93 QVERIFY(tabWidget
->currentTabPage()->primaryViewContainer());
94 QVERIFY(!tabWidget
->currentTabPage()->secondaryViewContainer());
97 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
98 QVERIFY(tabWidget
->currentTabPage()->splitViewEnabled());
99 QVERIFY(tabWidget
->currentTabPage()->secondaryViewContainer());
101 // Make sure the right view is the active one.
102 auto leftViewContainer
= tabWidget
->currentTabPage()->primaryViewContainer();
103 auto rightViewContainer
= tabWidget
->currentTabPage()->secondaryViewContainer();
104 QVERIFY(!leftViewContainer
->isActive());
105 QVERIFY(rightViewContainer
->isActive());
107 QFETCH(bool, closeLeftView
);
109 // Activate left view.
110 leftViewContainer
->setActive(true);
111 QVERIFY(leftViewContainer
->isActive());
112 QVERIFY(!rightViewContainer
->isActive());
114 // Close left view. The secondary view (which was on the right) will become the primary one and must be active.
115 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
116 QVERIFY(!leftViewContainer
->isActive());
117 QVERIFY(rightViewContainer
->isActive());
118 QCOMPARE(rightViewContainer
, tabWidget
->currentTabPage()->activeViewContainer());
120 // Close right view. The left view will become active.
121 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
122 QVERIFY(leftViewContainer
->isActive());
123 QVERIFY(!rightViewContainer
->isActive());
124 QCOMPARE(leftViewContainer
, tabWidget
->currentTabPage()->activeViewContainer());
128 // Test case for bug #385111
129 void DolphinMainWindowTest::testUpdateWindowTitleAfterClosingSplitView()
131 m_mainWindow
->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
132 m_mainWindow
->show();
133 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
134 QVERIFY(m_mainWindow
->isVisible());
136 auto tabWidget
= m_mainWindow
->findChild
<DolphinTabWidget
*>("tabWidget");
138 QVERIFY(tabWidget
->currentTabPage()->primaryViewContainer());
139 QVERIFY(!tabWidget
->currentTabPage()->secondaryViewContainer());
142 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
143 QVERIFY(tabWidget
->currentTabPage()->splitViewEnabled());
144 QVERIFY(tabWidget
->currentTabPage()->secondaryViewContainer());
146 // Make sure the right view is the active one.
147 auto leftViewContainer
= tabWidget
->currentTabPage()->primaryViewContainer();
148 auto rightViewContainer
= tabWidget
->currentTabPage()->secondaryViewContainer();
149 QVERIFY(!leftViewContainer
->isActive());
150 QVERIFY(rightViewContainer
->isActive());
152 // Activate left view.
153 leftViewContainer
->setActive(true);
154 QVERIFY(leftViewContainer
->isActive());
155 QVERIFY(!rightViewContainer
->isActive());
157 // Close split view. The secondary view (which was on the right) will become the primary one and must be active.
158 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
159 QVERIFY(!leftViewContainer
->isActive());
160 QVERIFY(rightViewContainer
->isActive());
161 QCOMPARE(rightViewContainer
, tabWidget
->currentTabPage()->activeViewContainer());
163 // Change URL and make sure we emit the currentUrlChanged signal (which triggers the window title update).
164 QSignalSpy
currentUrlChangedSpy(tabWidget
, &DolphinTabWidget::currentUrlChanged
);
165 tabWidget
->currentTabPage()->activeViewContainer()->setUrl(QUrl::fromLocalFile(QDir::rootPath()));
166 QCOMPARE(currentUrlChangedSpy
.count(), 1);
169 // Test case for bug #402641
170 void DolphinMainWindowTest::testUpdateWindowTitleAfterChangingSplitView()
172 m_mainWindow
->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
173 m_mainWindow
->show();
174 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
175 QVERIFY(m_mainWindow
->isVisible());
177 auto tabWidget
= m_mainWindow
->findChild
<DolphinTabWidget
*>("tabWidget");
181 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
182 QVERIFY(tabWidget
->currentTabPage()->splitViewEnabled());
184 auto leftViewContainer
= tabWidget
->currentTabPage()->primaryViewContainer();
185 auto rightViewContainer
= tabWidget
->currentTabPage()->secondaryViewContainer();
187 // Store old window title.
188 const auto oldTitle
= m_mainWindow
->windowTitle();
190 // Change URL in the right view and make sure the title gets updated.
191 rightViewContainer
->setUrl(QUrl::fromLocalFile(QDir::rootPath()));
192 QVERIFY(m_mainWindow
->windowTitle() != oldTitle
);
194 // Activate back the left view and check whether the old title gets restored.
195 leftViewContainer
->setActive(true);
196 QCOMPARE(m_mainWindow
->windowTitle(), oldTitle
);
199 // Test case for bug #397910
200 void DolphinMainWindowTest::testOpenInNewTabTitle()
202 m_mainWindow
->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
203 m_mainWindow
->show();
204 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
205 QVERIFY(m_mainWindow
->isVisible());
207 auto tabWidget
= m_mainWindow
->findChild
<DolphinTabWidget
*>("tabWidget");
210 tabWidget
->openNewTab(QUrl::fromLocalFile(QDir::tempPath()));
211 QCOMPARE(tabWidget
->count(), 2);
212 QVERIFY(tabWidget
->tabText(0) != tabWidget
->tabText(1));
213 if (!tabWidget
->tabIcon(0).isNull() && !tabWidget
->tabIcon(1).isNull()) {
214 QVERIFY(tabWidget
->tabIcon(0).name() != tabWidget
->tabIcon(1).name());
218 void DolphinMainWindowTest::testNewFileMenuEnabled_data()
220 QTest::addColumn
<QUrl
>("activeViewUrl");
221 QTest::addColumn
<bool>("expectedEnabled");
223 QTest::newRow("home") << QUrl::fromLocalFile(QDir::homePath()) << true;
224 QTest::newRow("root") << QUrl::fromLocalFile(QDir::rootPath()) << false;
225 QTest::newRow("trash") << QUrl::fromUserInput(QStringLiteral("trash:/")) << false;
228 void DolphinMainWindowTest::testNewFileMenuEnabled()
230 QFETCH(QUrl
, activeViewUrl
);
231 m_mainWindow
->openDirectories({ activeViewUrl
}, false);
232 m_mainWindow
->show();
233 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
234 QVERIFY(m_mainWindow
->isVisible());
236 auto newFileMenu
= m_mainWindow
->findChild
<DolphinNewFileMenu
*>("new_menu");
237 QVERIFY(newFileMenu
);
239 QFETCH(bool, expectedEnabled
);
240 QTRY_COMPARE(newFileMenu
->isEnabled(), expectedEnabled
);
243 void DolphinMainWindowTest::testWindowTitle_data()
245 QTest::addColumn
<QUrl
>("activeViewUrl");
246 QTest::addColumn
<QString
>("expectedWindowTitle");
248 // TODO: this test should enforce the english locale.
249 QTest::newRow("home") << QUrl::fromLocalFile(QDir::homePath()) << QStringLiteral("Home");
250 QTest::newRow("home with trailing slash") << QUrl::fromLocalFile(QStringLiteral("%1/").arg(QDir::homePath())) << QStringLiteral("Home");
251 QTest::newRow("trash") << QUrl::fromUserInput(QStringLiteral("trash:/")) << QStringLiteral("Trash");
254 void DolphinMainWindowTest::testWindowTitle()
256 QFETCH(QUrl
, activeViewUrl
);
257 m_mainWindow
->openDirectories({ activeViewUrl
}, false);
258 m_mainWindow
->show();
259 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
260 QVERIFY(m_mainWindow
->isVisible());
262 QFETCH(QString
, expectedWindowTitle
);
263 QCOMPARE(m_mainWindow
->windowTitle(), expectedWindowTitle
);
266 QTEST_MAIN(DolphinMainWindowTest
)
268 #include "dolphinmainwindowtest.moc"