tests/auto/q3widgetstack/tst_q3widgetstack.cpp
changeset 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the test suite of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 
       
    43 #include <QtTest/QtTest>
       
    44 
       
    45 #include "q3widgetstack.h"
       
    46 #include <qapplication.h>
       
    47 #include <qboxlayout.h>
       
    48 #include <qlayout.h>
       
    49 #include <qradiobutton.h>
       
    50 #include <qlineedit.h>
       
    51 #include <qdialog.h>
       
    52 
       
    53 //TESTED_CLASS=
       
    54 //TESTED_FILES=
       
    55 
       
    56 class tst_Q3WidgetStack : public QObject
       
    57 {
       
    58     Q_OBJECT
       
    59 
       
    60 public:
       
    61     tst_Q3WidgetStack();
       
    62     virtual ~tst_Q3WidgetStack();
       
    63 
       
    64 protected slots:
       
    65     void aboutToShow_helper(int);
       
    66     void aboutToShow_helper(QWidget *);
       
    67 public slots:
       
    68     void initTestCase();
       
    69     void cleanupTestCase();
       
    70     void init();
       
    71     void cleanup();
       
    72 private slots:
       
    73     void aboutToShow();
       
    74     void sizeHint();
       
    75     void addWidget();
       
    76 
       
    77 private:
       
    78     Q3WidgetStack *testWidget;
       
    79     QWidget *widgetOne;
       
    80     QWidget *widgetTwo;
       
    81 
       
    82     // Helpers for aboutToShow() test
       
    83     QWidget *currentVisibleWidgetOne;
       
    84     int aboutToShowId;
       
    85     bool aboutToShowSignalOne;
       
    86     QWidget *currentVisibleWidgetTwo;
       
    87     QWidget *aboutToShowWidget;
       
    88     bool aboutToShowSignalTwo;
       
    89 
       
    90 };
       
    91 
       
    92 
       
    93 const QSizePolicy ignored(QSizePolicy::Ignored, QSizePolicy::Ignored);
       
    94 const QSizePolicy preferred(QSizePolicy::Preferred, QSizePolicy::Preferred);
       
    95 
       
    96 tst_Q3WidgetStack::tst_Q3WidgetStack()
       
    97 {
       
    98     testWidget = 0;
       
    99 }
       
   100 
       
   101 tst_Q3WidgetStack::~tst_Q3WidgetStack()
       
   102 {
       
   103 }
       
   104 
       
   105 
       
   106 void tst_Q3WidgetStack::initTestCase()
       
   107 {
       
   108     testWidget = new Q3WidgetStack( 0 );
       
   109     qApp->setMainWidget(testWidget);
       
   110     testWidget->show();
       
   111     widgetOne = new QWidget( testWidget );
       
   112     testWidget->addWidget( widgetOne );
       
   113     widgetTwo = new QWidget( testWidget );
       
   114     testWidget->addWidget( widgetTwo );
       
   115 
       
   116 }
       
   117 
       
   118 void tst_Q3WidgetStack::cleanupTestCase()
       
   119 {
       
   120     delete testWidget;
       
   121     testWidget = 0;
       
   122 }
       
   123 
       
   124 void tst_Q3WidgetStack::init()
       
   125 {
       
   126    testWidget->raiseWidget( widgetOne );
       
   127 }
       
   128 
       
   129 void tst_Q3WidgetStack::cleanup()
       
   130 {
       
   131 }
       
   132 
       
   133 void tst_Q3WidgetStack::aboutToShow_helper(int id)
       
   134 {
       
   135     currentVisibleWidgetOne = testWidget->visibleWidget();
       
   136     aboutToShowId = id;
       
   137     aboutToShowSignalOne = TRUE;
       
   138 }
       
   139 
       
   140 void tst_Q3WidgetStack::aboutToShow_helper(QWidget *widget)
       
   141 {
       
   142     currentVisibleWidgetTwo = testWidget->visibleWidget();
       
   143     aboutToShowWidget = widget;
       
   144     aboutToShowSignalTwo = TRUE;
       
   145 }
       
   146 
       
   147 void tst_Q3WidgetStack::aboutToShow()
       
   148 {
       
   149     currentVisibleWidgetOne = 0;
       
   150     aboutToShowId = 1000; // The id is not likely to be 1000
       
   151     aboutToShowSignalOne = FALSE;
       
   152     currentVisibleWidgetTwo = 0;
       
   153     aboutToShowWidget = 0;
       
   154     aboutToShowSignalTwo = FALSE;
       
   155 
       
   156     connect(testWidget, SIGNAL(aboutToShow(int)), this, SLOT(aboutToShow_helper(int)));
       
   157     connect(testWidget, SIGNAL(aboutToShow(QWidget *)), this, SLOT(aboutToShow_helper(QWidget *)));
       
   158     testWidget->raiseWidget(widgetTwo);
       
   159     for (int a = 0;a < 10;a++) {
       
   160 	qApp->processEvents();
       
   161 	if (aboutToShowSignalOne || aboutToShowSignalTwo)
       
   162 	    break;
       
   163     }
       
   164     QVERIFY(aboutToShowSignalOne);
       
   165     QVERIFY(aboutToShowSignalTwo);
       
   166     QVERIFY(currentVisibleWidgetOne == widgetOne);
       
   167     QVERIFY(currentVisibleWidgetTwo == widgetOne);
       
   168     QCOMPARE(aboutToShowId, testWidget->id(widgetTwo));
       
   169     QCOMPARE(aboutToShowWidget, widgetTwo);
       
   170     QCOMPARE(testWidget->visibleWidget(), widgetTwo);
       
   171 }
       
   172 
       
   173 void tst_Q3WidgetStack::sizeHint()
       
   174 {
       
   175     QDialog dialog(0);
       
   176 
       
   177     QHBoxLayout *layout = new QHBoxLayout(&dialog);
       
   178     Q3WidgetStack *stack = new Q3WidgetStack(&dialog);
       
   179     layout->addWidget(stack);
       
   180 
       
   181     QWidget *pageA = new QWidget(stack);
       
   182     (new QVBoxLayout(pageA))->addWidget(new QLineEdit(pageA));
       
   183     stack->addWidget(pageA);
       
   184     pageA->setSizePolicy(ignored);
       
   185 
       
   186     QWidget *pageB = new QWidget(stack);
       
   187     (new QVBoxLayout(pageB))->addWidget(new QRadioButton(pageB));
       
   188     stack->addWidget(pageB);
       
   189     pageB->setSizePolicy(ignored);
       
   190 
       
   191     stack->raiseWidget(pageA);
       
   192     dialog.show();
       
   193 
       
   194     QSize before(dialog.size());
       
   195     pageB->setSizePolicy(preferred);
       
   196     stack->raiseWidget(pageB);
       
   197 
       
   198     layout->activate();
       
   199     dialog.setFixedSize(dialog.minimumSizeHint());
       
   200     qApp->processEvents();
       
   201     QVERIFY(before != dialog.minimumSizeHint());
       
   202 }
       
   203 
       
   204 void tst_Q3WidgetStack::addWidget()
       
   205 {
       
   206     QDialog dialog(0);
       
   207     Q3WidgetStack *stack = new Q3WidgetStack(&dialog);
       
   208 
       
   209     // The widget should now be added to the stack 
       
   210     QWidget *widget = new QWidget(stack);
       
   211     QCOMPARE(stack->id(widget), -1);
       
   212 
       
   213     // The widget should get a positive ID
       
   214     int id = stack->addWidget(widget);
       
   215     QVERIFY(id >= 0);
       
   216     QCOMPARE(stack->id(widget), id);
       
   217     QCOMPARE(stack->widget(id), widget);
       
   218 
       
   219     QWidget *widget2 = new QWidget(stack);
       
   220     QCOMPARE(stack->id(widget2), -1);
       
   221 
       
   222     // The widget should get a negative ID different from -1
       
   223     id = stack->addWidget(widget2, -2);
       
   224     QVERIFY(id < -1);
       
   225     QCOMPARE(stack->id(widget2), id);
       
   226     QVERIFY(stack->id(widget2) != stack->id(widget));
       
   227     QCOMPARE(stack->widget(id), widget2);
       
   228 
       
   229     // The widget should be removed when it's deleted
       
   230     delete widget2;
       
   231     QCOMPARE(stack->id(widget2), -1);
       
   232     QCOMPARE(stack->widget(id), (QWidget*)0);
       
   233     
       
   234     // Create a unique ID
       
   235     int uid = stack->id(widget) + 100;
       
   236     QWidget *widget3 = new QWidget(widget);
       
   237 
       
   238     // Test of reparenting
       
   239     id = stack->addWidget(widget3, uid);
       
   240     QCOMPARE(id, uid);
       
   241     QCOMPARE(stack->id(widget3), id);
       
   242     QCOMPARE(widget3->parentWidget(), (QWidget*)stack);
       
   243     QCOMPARE(stack->widget(id), widget3);
       
   244 
       
   245     delete widget3;
       
   246     QCOMPARE(stack->id(widget3), -1);
       
   247     QCOMPARE(stack->widget(id), (QWidget*)0);
       
   248 
       
   249     delete widget;
       
   250     QCOMPARE(stack->id(widget), -1);
       
   251 
       
   252     delete stack;
       
   253 
       
   254 }
       
   255 
       
   256 QTEST_MAIN(tst_Q3WidgetStack)
       
   257 #include "tst_q3widgetstack.moc"