]>
cloud.milkyroute.net Git - dolphin.git/blob - src/tests/dolphinmainwindowtest.cpp
1 /***************************************************************************
2 * Copyright (C) 2017 by Elvis Angelaccio <elvis.angelaccio@kde.org> *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
20 #include "dolphinmainwindow.h"
21 #include "dolphinnewfilemenu.h"
22 #include "dolphintabpage.h"
23 #include "dolphintabwidget.h"
24 #include "dolphinviewcontainer.h"
26 #include <KActionCollection>
29 #include <QStandardPaths>
32 class DolphinMainWindowTest
: public QObject
39 void testClosingTabsWithSearchBoxVisible();
40 void testActiveViewAfterClosingSplitView_data();
41 void testActiveViewAfterClosingSplitView();
42 void testUpdateWindowTitleAfterClosingSplitView();
43 void testOpenInNewTabTitle();
44 void testNewFileMenuEnabled_data();
45 void testNewFileMenuEnabled();
49 QScopedPointer
<DolphinMainWindow
> m_mainWindow
;
52 void DolphinMainWindowTest::initTestCase()
54 QStandardPaths::setTestModeEnabled(true);
57 void DolphinMainWindowTest::init()
59 m_mainWindow
.reset(new DolphinMainWindow());
62 // See https://bugs.kde.org/show_bug.cgi?id=379135
63 void DolphinMainWindowTest::testClosingTabsWithSearchBoxVisible()
65 m_mainWindow
->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
67 // Without this call the searchbox doesn't get FocusIn events.
68 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
69 QVERIFY(m_mainWindow
->isVisible());
71 auto tabWidget
= m_mainWindow
->findChild
<DolphinTabWidget
*>("tabWidget");
74 // Show search box on first tab.
75 tabWidget
->currentTabPage()->activeViewContainer()->setSearchModeEnabled(true);
77 tabWidget
->openNewActivatedTab(QUrl::fromLocalFile(QDir::homePath()));
78 QCOMPARE(tabWidget
->count(), 2);
80 // Triggers the crash in bug #379135.
81 tabWidget
->closeTab();
82 QCOMPARE(tabWidget
->count(), 1);
85 void DolphinMainWindowTest::testActiveViewAfterClosingSplitView_data()
87 QTest::addColumn
<bool>("closeLeftView");
89 QTest::newRow("close left view") << true;
90 QTest::newRow("close right view") << false;
93 void DolphinMainWindowTest::testActiveViewAfterClosingSplitView()
95 m_mainWindow
->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
97 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
98 QVERIFY(m_mainWindow
->isVisible());
100 auto tabWidget
= m_mainWindow
->findChild
<DolphinTabWidget
*>("tabWidget");
102 QVERIFY(tabWidget
->currentTabPage()->primaryViewContainer());
103 QVERIFY(!tabWidget
->currentTabPage()->secondaryViewContainer());
106 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
107 QVERIFY(tabWidget
->currentTabPage()->splitViewEnabled());
108 QVERIFY(tabWidget
->currentTabPage()->secondaryViewContainer());
110 // Make sure the right view is the active one.
111 auto leftViewContainer
= tabWidget
->currentTabPage()->primaryViewContainer();
112 auto rightViewContainer
= tabWidget
->currentTabPage()->secondaryViewContainer();
113 QVERIFY(!leftViewContainer
->isActive());
114 QVERIFY(rightViewContainer
->isActive());
116 QFETCH(bool, closeLeftView
);
118 // Activate left view.
119 leftViewContainer
->setActive(true);
120 QVERIFY(leftViewContainer
->isActive());
121 QVERIFY(!rightViewContainer
->isActive());
123 // Close left view. The secondary view (which was on the right) will become the primary one and must be active.
124 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
125 QVERIFY(!leftViewContainer
->isActive());
126 QVERIFY(rightViewContainer
->isActive());
127 QCOMPARE(rightViewContainer
, tabWidget
->currentTabPage()->activeViewContainer());
129 // Close right view. The left view will become active.
130 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
131 QVERIFY(leftViewContainer
->isActive());
132 QVERIFY(!rightViewContainer
->isActive());
133 QCOMPARE(leftViewContainer
, tabWidget
->currentTabPage()->activeViewContainer());
137 // Test case for bug #385111
138 void DolphinMainWindowTest::testUpdateWindowTitleAfterClosingSplitView()
140 m_mainWindow
->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
141 m_mainWindow
->show();
142 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
143 QVERIFY(m_mainWindow
->isVisible());
145 auto tabWidget
= m_mainWindow
->findChild
<DolphinTabWidget
*>("tabWidget");
147 QVERIFY(tabWidget
->currentTabPage()->primaryViewContainer());
148 QVERIFY(!tabWidget
->currentTabPage()->secondaryViewContainer());
151 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
152 QVERIFY(tabWidget
->currentTabPage()->splitViewEnabled());
153 QVERIFY(tabWidget
->currentTabPage()->secondaryViewContainer());
155 // Make sure the right view is the active one.
156 auto leftViewContainer
= tabWidget
->currentTabPage()->primaryViewContainer();
157 auto rightViewContainer
= tabWidget
->currentTabPage()->secondaryViewContainer();
158 QVERIFY(!leftViewContainer
->isActive());
159 QVERIFY(rightViewContainer
->isActive());
161 // Activate left view.
162 leftViewContainer
->setActive(true);
163 QVERIFY(leftViewContainer
->isActive());
164 QVERIFY(!rightViewContainer
->isActive());
166 // Close split view. The secondary view (which was on the right) will become the primary one and must be active.
167 m_mainWindow
->actionCollection()->action(QStringLiteral("split_view"))->trigger();
168 QVERIFY(!leftViewContainer
->isActive());
169 QVERIFY(rightViewContainer
->isActive());
170 QCOMPARE(rightViewContainer
, tabWidget
->currentTabPage()->activeViewContainer());
172 // Change URL and make sure we emit the currentUrlChanged signal (which triggers the window title update).
173 QSignalSpy
currentUrlChangedSpy(tabWidget
, &DolphinTabWidget::currentUrlChanged
);
174 tabWidget
->currentTabPage()->activeViewContainer()->setUrl(QUrl::fromLocalFile(QDir::rootPath()));
175 QCOMPARE(currentUrlChangedSpy
.count(), 1);
178 // Test case for bug #397910
179 void DolphinMainWindowTest::testOpenInNewTabTitle()
181 m_mainWindow
->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
182 m_mainWindow
->show();
183 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
184 QVERIFY(m_mainWindow
->isVisible());
186 auto tabWidget
= m_mainWindow
->findChild
<DolphinTabWidget
*>("tabWidget");
189 tabWidget
->openNewTab(QUrl::fromLocalFile(QDir::tempPath()));
190 QCOMPARE(tabWidget
->count(), 2);
191 qDebug() << "First tab:" << tabWidget
->tabIcon(0).name() << "second tab:" << tabWidget
->tabIcon(1).name();
192 QVERIFY(tabWidget
->tabIcon(0).name() != tabWidget
->tabIcon(1).name());
193 QVERIFY(tabWidget
->tabText(0) != tabWidget
->tabText(1));
196 void DolphinMainWindowTest::testNewFileMenuEnabled_data()
198 QTest::addColumn
<QUrl
>("activeViewUrl");
199 QTest::addColumn
<bool>("expectedEnabled");
201 QTest::newRow("home") << QUrl::fromLocalFile(QDir::homePath()) << true;
202 QTest::newRow("root") << QUrl::fromLocalFile(QDir::rootPath()) << false;
203 QTest::newRow("trash") << QUrl::fromUserInput(QStringLiteral("trash:/")) << false;
206 void DolphinMainWindowTest::testNewFileMenuEnabled()
208 QFETCH(QUrl
, activeViewUrl
);
209 m_mainWindow
->openDirectories({ activeViewUrl
}, false);
210 m_mainWindow
->show();
211 QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow
.data()));
212 QVERIFY(m_mainWindow
->isVisible());
214 auto newFileMenu
= m_mainWindow
->findChild
<DolphinNewFileMenu
*>("newFileMenu");
215 QVERIFY(newFileMenu
);
217 QFETCH(bool, expectedEnabled
);
218 QCOMPARE(newFileMenu
->isEnabled(), expectedEnabled
);
221 QTEST_MAIN(DolphinMainWindowTest
)
223 #include "dolphinmainwindowtest.moc"