Removed hardcoded values from tst_qgraphicsview::scrollBarRanges

Instead of testing the "windows" and "motif" styles, that test should
actually test the scrollBarRanges for all available styles. To be able
to do that, the magic numbers 16 (width/height of scrollbars) and 4
(spacing for the faux motif style) were replaced and instead of setting
the explicit values in the data the "number of scrollbars/spacings to
add/remove" is saved in a struct and the value of these (depending
on the style) is obtained in the test run.

This change does not also cause the fusion style to also be tested but
also fixes this test for Windows 7 and 8 (Aero) where the scrollbar
width/height is not 16 but 17.

Task-number: QTBUG-28611
Task-number: QTBUG-29002
Change-Id: I5d103018fde81cee6e6e89cd414426768b2dc8e7
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
This commit is contained in:
Oliver Wolff 2012-12-17 14:15:59 +01:00 committed by The Qt Project
parent 05659223bf
commit 083d2c8bb8
4 changed files with 731 additions and 1197 deletions

View File

@ -6,6 +6,7 @@ QT += widgets widgets-private testlib
QT += core-private gui-private
SOURCES += tst_qgraphicsview.cpp tst_qgraphicsview_2.cpp
HEADERS += tst_qgraphicsview.h
DEFINES += QT_NO_CAST_TO_ASCII
mac:CONFIG+=insignificant_test # QTBUG-26580

View File

@ -68,9 +68,15 @@
#include <private/qinputmethod_p.h>
#include "../../../qtest-config.h"
#include "tst_qgraphicsview.h"
Q_DECLARE_METATYPE(ExpectedValueDescription)
Q_DECLARE_METATYPE(QList<int>)
Q_DECLARE_METATYPE(QList<QRectF>)
Q_DECLARE_METATYPE(QMatrix)
Q_DECLARE_METATYPE(QPainterPath)
Q_DECLARE_METATYPE(Qt::ScrollBarPolicy)
Q_DECLARE_METATYPE(ScrollBarCount)
#ifdef Q_OS_MAC
//On mac we get full update. So check that the expected region is contained inside the actual
@ -2756,32 +2762,32 @@ public:
void tst_QGraphicsView::scrollBarRanges()
{
QFETCH(QString, style);
QFETCH(QSize, viewportSize);
QFETCH(QRectF, sceneRect);
QFETCH(ScrollBarCount, sceneRectOffsetFactors);
QFETCH(QTransform, transform);
QFETCH(Qt::ScrollBarPolicy, hbarpolicy);
QFETCH(Qt::ScrollBarPolicy, vbarpolicy);
QFETCH(int, hmin);
QFETCH(int, hmax);
QFETCH(int, vmin);
QFETCH(int, vmax);
QFETCH(bool, useMotif);
QFETCH(ExpectedValueDescription, hmin);
QFETCH(ExpectedValueDescription, hmax);
QFETCH(ExpectedValueDescription, vmin);
QFETCH(ExpectedValueDescription, vmax);
QFETCH(bool, useStyledPanel);
QGraphicsScene scene(sceneRect);
scene.addRect(sceneRect, QPen(Qt::blue), QBrush(QColor(Qt::green)));
if (style == QLatin1String("GTK+") && useStyledPanel)
QSKIP("GTK + style test skipped, see QTBUG-29002");
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setRenderHint(QPainter::Antialiasing);
view.setTransform(transform);
view.setFrameStyle(useStyledPanel ? QFrame::StyledPanel : QFrame::NoFrame);
if (useMotif) {
if (style == QString("motif"))
view.setStyle(new FauxMotifStyle);
} else {
#if !defined(QT_NO_STYLE_WINDOWS)
view.setStyle(QStyleFactory::create("windows"));
#endif
}
else
view.setStyle(QStyleFactory::create(style));
view.setStyleSheet(" "); // enables style propagation ;-)
int adjust = 0;
@ -2795,10 +2801,31 @@ void tst_QGraphicsView::scrollBarRanges()
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QCOMPARE(view.horizontalScrollBar()->minimum(), hmin);
QCOMPARE(view.verticalScrollBar()->minimum(), vmin);
QCOMPARE(view.horizontalScrollBar()->maximum(), hmax);
QCOMPARE(view.verticalScrollBar()->maximum(), vmax);
const int offset = view.style()->pixelMetric(QStyle::PM_ScrollBarExtent, 0, 0);
QRectF actualSceneRect;
actualSceneRect.setLeft(sceneRect.left() + sceneRectOffsetFactors.left * offset);
actualSceneRect.setWidth(sceneRect.width() + sceneRectOffsetFactors.right * offset);
actualSceneRect.setTop(sceneRect.top() + sceneRectOffsetFactors.top * offset);
actualSceneRect.setHeight(sceneRect.height() + sceneRectOffsetFactors.bottom * offset);
scene.setSceneRect(actualSceneRect);
scene.addRect(actualSceneRect, QPen(Qt::blue), QBrush(QColor(Qt::green)));
int expectedHmin = hmin.value + hmin.scrollBarExtentsToAdd * offset;
int expectedVmin = vmin.value + vmin.scrollBarExtentsToAdd * offset;
int expectedHmax = hmax.value + hmax.scrollBarExtentsToAdd * offset;
int expectedVmax = vmax.value + vmax.scrollBarExtentsToAdd* offset;
if (useStyledPanel && view.style()->styleHint(QStyle::SH_ScrollView_FrameOnlyAroundContents)) {
int spacing = view.style()->pixelMetric(QStyle::PM_ScrollView_ScrollBarSpacing);
expectedHmin += hmin.spacingsToAdd * spacing;
expectedVmin += vmin.spacingsToAdd * spacing;
expectedHmax += hmax.spacingsToAdd * spacing;
expectedVmax += vmax.spacingsToAdd * spacing;
}
QCOMPARE(view.horizontalScrollBar()->minimum(), expectedHmin);
QCOMPARE(view.verticalScrollBar()->minimum(), expectedVmin);
QCOMPARE(view.horizontalScrollBar()->maximum(), expectedHmax);
QCOMPARE(view.verticalScrollBar()->maximum(), expectedVmax);
}
class TestView : public QGraphicsView

View File

@ -0,0 +1,85 @@
/****************************************************************************
**
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef TST_QGRAPHICSVIEW_H
#define TST_QGRAPHICSVIEW_H
// This file contains structs used in tst_qgraphicsview::scrollBarRanges.
// Whenever these mention scrollbars or spacing it is about the number of
// scrollbars or spacings to use as these are style dependent so that the real
// value to add/remove has to be obtained in test run using the actual style.
struct ExpectedValueDescription {
ExpectedValueDescription(int v = 0, int sbeta = 0, int sta = 0)
: value(v)
, scrollBarExtentsToAdd(sbeta)
, spacingsToAdd(sta)
{
}
int value;
// Describes how often the scrollbar widht/height has to be added to or
// removed from the value.
int scrollBarExtentsToAdd;
// Describes how often the scrollbar spacing has to be added to or removed
// from the value if the used style has SH_ScrollView_FrameOnlyAroundContents
// set
int spacingsToAdd;
};
// Describes how often the scroll bar width/height has to be added to/removed
// from the according side of the sceneRect.
struct ScrollBarCount {
ScrollBarCount(int l = 0, int t = 0, int r = 0, int b = 0 )
: left(l)
, top(t)
, right(r)
, bottom(b)
{
}
int left;
int top;
int right;
int bottom;
};
#endif // TST_QGRAPHICSVIEW_H