kdelibs/kdeui/tests/kmainwindow_unittest.cpp
Ivailo Monev 3c110d1c62 kdeui: remove unused virtual KMainWindow::queryExit() method
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
2022-03-13 07:36:14 +02:00

193 lines
5.7 KiB
C++

/* This file is part of the KDE libraries
Copyright (c) 2006 David Faure <faure@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "qtest_kde.h"
#include "kmainwindow_unittest.h"
#include "moc_kmainwindow_unittest.cpp"
#include <kmainwindow.h>
#include <kstatusbar.h>
#include <kglobal.h>
#include <QtGui/qevent.h>
#include <ktoolbar.h>
#include <kconfiggroup.h>
QTEST_KDEMAIN( KMainWindow_UnitTest, GUI )
void KMainWindow_UnitTest::testDefaultName()
{
KMainWindow mw;
mw.show();
mw.ensurePolished();
QCOMPARE( mw.objectName(), QString::fromLatin1( "MainWindow#1" ) );
KMainWindow mw2;
mw2.show();
mw2.ensurePolished();
QCOMPARE( mw2.objectName(), QString::fromLatin1( "MainWindow#2" ) );
}
void KMainWindow_UnitTest::testFixedName()
{
KMainWindow mw;
mw.setObjectName( "mymainwindow" );
mw.show();
mw.ensurePolished();
QCOMPARE( mw.objectName(), QString::fromLatin1( "mymainwindow" ) );
KMainWindow mw2;
mw2.setObjectName( "mymainwindow" );
mw2.show();
mw2.ensurePolished();
QCOMPARE( mw2.objectName(), QString::fromLatin1( "mymainwindow2" ) );
}
void KMainWindow_UnitTest::testNameWithHash()
{
KMainWindow mw;
mw.setObjectName( "composer#" );
mw.show();
mw.ensurePolished();
QCOMPARE( mw.objectName(), QString::fromLatin1( "composer#1" ) );
KMainWindow mw2;
mw2.setObjectName( "composer#" );
mw2.show();
mw2.ensurePolished();
QCOMPARE( mw2.objectName(), QString::fromLatin1( "composer#2" ) );
KMainWindow mw4;
mw4.setObjectName( "composer#4" );
mw4.show();
mw4.ensurePolished();
QCOMPARE( mw4.objectName(), QString::fromLatin1( "composer#4" ) );
}
void KMainWindow_UnitTest::testNameWithSpecialChars()
{
KMainWindow mw;
mw.setObjectName( "a#@_test/" );
mw.show();
mw.ensurePolished();
QCOMPARE( mw.dbusName(), QString::fromLatin1( "/qttest/a___test_" ) );
KMainWindow mw2;
mw2.setObjectName( "a#@_test/" );
mw2.show();
mw2.ensurePolished();
QCOMPARE( mw2.dbusName(), QString::fromLatin1( "/qttest/a___test_2" ) );
}
static bool s_mainWindowDeleted;
class MyMainWindow : public KMainWindow
{
public:
MyMainWindow() : KMainWindow(),
m_queryClosedCalled( false )
{
}
/*reimp*/ bool queryClose() {
m_queryClosedCalled = true;
return true;
}
~MyMainWindow() {
s_mainWindowDeleted = true;
}
bool m_queryClosedCalled;
void reallyResize(int width, int height) {
const QSize oldSize = size();
resize(width, height);
// Send the pending resize event (resize() only sets Qt::WA_PendingResizeEvent)
QResizeEvent e(size(), oldSize);
QApplication::sendEvent(this, &e);
}
};
// Here we test
// - that queryClose is called
// - that autodeletion happens
void KMainWindow_UnitTest::testDeleteOnClose()
{
KGlobal::ref(); // don't let the deref in KMainWindow quit the app.
s_mainWindowDeleted = false;
MyMainWindow* mw = new MyMainWindow;
QVERIFY( mw->testAttribute( Qt::WA_DeleteOnClose ) );
mw->close();
QVERIFY( mw->m_queryClosedCalled );
qApp->sendPostedEvents( mw, QEvent::DeferredDelete );
QVERIFY( s_mainWindowDeleted );
}
void KMainWindow_UnitTest::testSaveWindowSize()
{
MyMainWindow mw;
KToolBar* tb = new KToolBar(&mw); // we need a toolbar to trigger an old bug in saveMainWindowSettings
tb->setObjectName("testtb");
mw.reallyResize(800, 600);
KConfigGroup cfg(KGlobal::config(), "TestWindowSize");
mw.saveMainWindowSettings(cfg);
mw.close();
KMainWindow mw2;
tb = new KToolBar(&mw2);
tb->setObjectName("testtb");
mw2.resize(50, 50);
mw2.applyMainWindowSettings(cfg);
QCOMPARE(mw2.size(), QSize(800, 600));
}
void KMainWindow_UnitTest::testAutoSaveSettings()
{
MyMainWindow mw;
KToolBar* tb = new KToolBar(&mw); // we need a toolbar to trigger an old bug in saveMainWindowSettings
tb->setObjectName("testtb");
const QString group("AutoSaveTestGroup");
mw.setAutoSaveSettings(group);
mw.reallyResize(800, 600);
mw.close();
KMainWindow mw2;
tb = new KToolBar(&mw2);
tb->setObjectName("testtb");
mw2.setAutoSaveSettings(group);
QCOMPARE(mw2.size(), QSize(800, 600));
}
void KMainWindow_UnitTest::testNoAutoSave()
{
// A mainwindow with autosaving, but not of the window size.
MyMainWindow mw;
const QString group("AutoSaveTestGroup");
mw.setAutoSaveSettings(group, false);
mw.reallyResize(750, 550);
mw.close();
KMainWindow mw2;
mw2.setAutoSaveSettings(group, false);
// NOT 750, 550! (the 800,600 comes from testAutoSaveSettings)
QCOMPARE(mw2.size(), QSize(800, 600));
}
void KMainWindow_UnitTest::testWidgetWithStatusBar()
{
// KMainWindow::statusBar() should not find any indirect KStatusBar child
// (e.g. in a case like konqueror, with one statusbar per frame)
MyMainWindow mw;
QWidget* frame1 = new QWidget(&mw);
KStatusBar* frameStatusBar = new KStatusBar(frame1);
QVERIFY(mw.statusBar() != frameStatusBar);
}