summaryrefslogtreecommitdiffstats
path: root/tests/auto/qbrush
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2009-03-23 09:18:55 (GMT)
committerSimon Hausmann <simon.hausmann@nokia.com>2009-03-23 09:18:55 (GMT)
commite5fcad302d86d316390c6b0f62759a067313e8a9 (patch)
treec2afbf6f1066b6ce261f14341cf6d310e5595bc1 /tests/auto/qbrush
downloadQt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip
Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz
Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2
Long live Qt 4.5!
Diffstat (limited to 'tests/auto/qbrush')
-rw-r--r--tests/auto/qbrush/.gitignore1
-rw-r--r--tests/auto/qbrush/qbrush.pro5
-rw-r--r--tests/auto/qbrush/tst_qbrush.cpp383
3 files changed, 389 insertions, 0 deletions
diff --git a/tests/auto/qbrush/.gitignore b/tests/auto/qbrush/.gitignore
new file mode 100644
index 0000000..e9321a1
--- /dev/null
+++ b/tests/auto/qbrush/.gitignore
@@ -0,0 +1 @@
+tst_qbrush
diff --git a/tests/auto/qbrush/qbrush.pro b/tests/auto/qbrush/qbrush.pro
new file mode 100644
index 0000000..c17784c
--- /dev/null
+++ b/tests/auto/qbrush/qbrush.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+SOURCES += tst_qbrush.cpp
+
+
+
diff --git a/tests/auto/qbrush/tst_qbrush.cpp b/tests/auto/qbrush/tst_qbrush.cpp
new file mode 100644
index 0000000..11f715a
--- /dev/null
+++ b/tests/auto/qbrush/tst_qbrush.cpp
@@ -0,0 +1,383 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+
+#include "qbrush.h"
+#include <QPainter>
+
+#include <qdebug.h>
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+class tst_QBrush : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QBrush();
+
+private slots:
+ void operator_eq_eq();
+ void operator_eq_eq_data();
+
+ void stream();
+ void stream_data();
+
+ void badStyles();
+
+ void testQLinearGradientSetters();
+ void testQRadialGradientSetters();
+ void testQConicalGradientSetters();
+ void testQGradientCopyConstructor();
+
+ void gradientStops();
+
+ void textures();
+
+ void nullBrush();
+};
+
+Q_DECLARE_METATYPE(QBrush)
+
+tst_QBrush::tst_QBrush()
+{
+}
+
+void tst_QBrush::operator_eq_eq_data()
+{
+ QTest::addColumn<QBrush>("brush1");
+ QTest::addColumn<QBrush>("brush2");
+ QTest::addColumn<bool>("isEqual");
+
+ QLinearGradient lg(10, 10, 100, 100);
+ lg.setColorAt(0, Qt::red);
+ lg.setColorAt(0.5, Qt::blue);
+ lg.setColorAt(1, Qt::green);
+
+ QTest::newRow("black vs black") << QBrush(Qt::black) << QBrush(Qt::black) << true;
+ QTest::newRow("black vs blue") << QBrush(Qt::black) << QBrush(Qt::blue) << false;
+
+ QTest::newRow("red vs no") << QBrush(Qt::red) << QBrush(Qt::NoBrush) << false;
+ QTest::newRow("no vs no") << QBrush(Qt::NoBrush) << QBrush(Qt::NoBrush) << true;
+
+ QTest::newRow("lg vs same lg") << QBrush(lg) << QBrush(lg) << true;
+ QTest::newRow("lg vs diff lg") << QBrush(lg) << QBrush(QLinearGradient(QPoint(0, 0), QPoint(1, 1)))
+ << false;
+
+ QTest::newRow("rad vs con") << QBrush(QRadialGradient(0, 0, 0, 0, 0)) << QBrush(QConicalGradient(0, 0, 0)) << false;
+}
+
+void tst_QBrush::operator_eq_eq()
+{
+ QFETCH(QBrush, brush1);
+ QFETCH(QBrush, brush2);
+ QFETCH(bool, isEqual);
+ QCOMPARE(brush1 == brush2, isEqual);
+}
+
+void tst_QBrush::stream_data()
+{
+ QTest::addColumn<QBrush>("brush");
+
+ QLinearGradient lg(10, 10, 100, 100);
+ lg.setColorAt(0, Qt::red);
+ lg.setColorAt(0.5, Qt::blue);
+ lg.setColorAt(1, Qt::green);
+
+ QTest::newRow("black") << QBrush(Qt::black);
+ QTest::newRow("red") << QBrush(Qt::red);
+ QTest::newRow("no") << QBrush(Qt::NoBrush);
+ QTest::newRow("lg") << QBrush(lg);
+ QTest::newRow("rad") << QBrush(QRadialGradient(0, 0, 0, 0, 0));
+ QTest::newRow("con") << QBrush(QConicalGradient(0, 0, 0));
+}
+
+void tst_QBrush::stream()
+{
+ QFETCH(QBrush, brush);
+
+ QByteArray data;
+
+ {
+ QDataStream stream(&data, QIODevice::WriteOnly);
+ stream << brush;
+ }
+
+ QBrush cmp;
+ {
+ QDataStream stream(&data, QIODevice::ReadOnly);
+ stream >> cmp;
+ }
+
+ QCOMPARE(brush.style(), cmp.style());
+ QCOMPARE(brush.color(), cmp.color());
+ QCOMPARE(brush, cmp);
+}
+
+void tst_QBrush::testQLinearGradientSetters()
+{
+ QLinearGradient lg;
+
+ QCOMPARE(lg.start(), QPointF(0, 0));
+ QCOMPARE(lg.finalStop(), QPointF(1, 1));
+
+ lg.setStart(101, 102);
+ QCOMPARE(lg.start(), QPointF(101, 102));
+
+ lg.setStart(QPointF(201, 202));
+ QCOMPARE(lg.start(), QPointF(201, 202));
+
+ lg.setFinalStop(103, 104);
+ QCOMPARE(lg.finalStop(), QPointF(103, 104));
+
+ lg.setFinalStop(QPointF(203, 204));
+ QCOMPARE(lg.finalStop(), QPointF(203, 204));
+}
+
+void tst_QBrush::testQRadialGradientSetters()
+{
+ QRadialGradient rg;
+
+ QCOMPARE(rg.radius(), qreal(1.0));
+ QCOMPARE(rg.center(), QPointF(0, 0));
+ QCOMPARE(rg.focalPoint(), QPointF(0, 0));
+
+ rg.setRadius(100);
+ QCOMPARE(rg.radius(), qreal(100.0));
+
+ rg.setCenter(101, 102);
+ QCOMPARE(rg.center(), QPointF(101, 102));
+
+ rg.setCenter(QPointF(201, 202));
+ QCOMPARE(rg.center(), QPointF(201, 202));
+
+ rg.setFocalPoint(103, 104);
+ QCOMPARE(rg.focalPoint(), QPointF(103, 104));
+
+ rg.setFocalPoint(QPointF(203, 204));
+ QCOMPARE(rg.focalPoint(), QPointF(203, 204));
+}
+
+void tst_QBrush::testQConicalGradientSetters()
+{
+ QConicalGradient cg;
+
+ QCOMPARE(cg.angle(), qreal(0.0));
+ QCOMPARE(cg.center(), QPointF(0, 0));
+
+ cg.setAngle(100);
+ QCOMPARE(cg.angle(), qreal(100.0));
+
+ cg.setCenter(102, 103);
+ QCOMPARE(cg.center(), QPointF(102, 103));
+
+ cg.setCenter(QPointF(202, 203));
+ QCOMPARE(cg.center(), QPointF(202, 203));
+}
+
+void tst_QBrush::testQGradientCopyConstructor()
+{
+ {
+ QLinearGradient lg1(101, 102, 103, 104);
+
+ QLinearGradient lg2 = lg1;
+ QCOMPARE(lg1.start(), lg2.start());
+ QCOMPARE(lg1.finalStop(), lg2.finalStop());
+
+ QGradient g = lg1;
+ QCOMPARE(((QLinearGradient *) &g)->start(), lg1.start());
+ QCOMPARE(((QLinearGradient *) &g)->finalStop(), lg1.finalStop());
+ }
+
+ {
+ QRadialGradient rg1(101, 102, 103, 104, 105);
+
+ QRadialGradient rg2 = rg1;
+ QCOMPARE(rg1.center(), rg2.center());
+ QCOMPARE(rg1.focalPoint(), rg2.focalPoint());
+ QCOMPARE(rg1.radius(), rg2.radius());
+
+ QGradient g = rg1;
+ QCOMPARE(((QRadialGradient *) &g)->center(), rg1.center());
+ QCOMPARE(((QRadialGradient *) &g)->focalPoint(), rg1.focalPoint());
+ QCOMPARE(((QRadialGradient *) &g)->radius(), rg1.radius());
+ }
+
+ {
+ QConicalGradient cg1(101, 102, 103);
+
+ QConicalGradient cg2 = cg1;
+ QCOMPARE(cg1.center(), cg2.center());
+ QCOMPARE(cg1.angle(), cg2.angle());
+
+ QGradient g = cg1;
+ QCOMPARE(((QConicalGradient *) &g)->center(), cg1.center());
+ QCOMPARE(((QConicalGradient *) &g)->angle(), cg1.angle());
+ }
+
+}
+
+void tst_QBrush::badStyles()
+{
+ // QBrush(Qt::BrushStyle) constructor
+ QCOMPARE(QBrush(Qt::LinearGradientPattern).style(), Qt::NoBrush);
+ QCOMPARE(QBrush(Qt::RadialGradientPattern).style(), Qt::NoBrush);
+ QCOMPARE(QBrush(Qt::ConicalGradientPattern).style(), Qt::NoBrush);
+ QCOMPARE(QBrush(Qt::TexturePattern).style(), Qt::NoBrush);
+
+ // QBrush(QColor, Qt::BrushStyle) constructor
+ QCOMPARE(QBrush(QColor(0, 0, 0), Qt::LinearGradientPattern).style(), Qt::NoBrush);
+ QCOMPARE(QBrush(QColor(0, 0, 0), Qt::RadialGradientPattern).style(), Qt::NoBrush);
+ QCOMPARE(QBrush(QColor(0, 0, 0), Qt::ConicalGradientPattern).style(), Qt::NoBrush);
+ QCOMPARE(QBrush(QColor(0, 0, 0), Qt::TexturePattern).style(), Qt::NoBrush);
+
+ // QBrush(Qt::GlobalColor, Qt::BrushStyle) constructor
+ QCOMPARE(QBrush(Qt::black, Qt::LinearGradientPattern).style(), Qt::NoBrush);
+ QCOMPARE(QBrush(Qt::black, Qt::RadialGradientPattern).style(), Qt::NoBrush);
+ QCOMPARE(QBrush(Qt::black, Qt::ConicalGradientPattern).style(), Qt::NoBrush);
+ QCOMPARE(QBrush(Qt::black, Qt::TexturePattern).style(), Qt::NoBrush);
+
+ // Set style...
+ QBrush brush(Qt::red);
+
+ brush.setStyle(Qt::LinearGradientPattern);
+ QCOMPARE(brush.style(), Qt::SolidPattern);
+
+ brush.setStyle(Qt::RadialGradientPattern);
+ QCOMPARE(brush.style(), Qt::SolidPattern);
+
+ brush.setStyle(Qt::ConicalGradientPattern);
+ QCOMPARE(brush.style(), Qt::SolidPattern);
+
+ brush.setStyle(Qt::TexturePattern);
+ QCOMPARE(brush.style(), Qt::SolidPattern);
+
+}
+
+void tst_QBrush::gradientStops()
+{
+ QLinearGradient gradient;
+ gradient.setColorAt(0, Qt::red);
+ gradient.setColorAt(1, Qt::blue);
+
+ QCOMPARE(gradient.stops().size(), 2);
+
+ QCOMPARE(gradient.stops().at(0), QGradientStop(0, QColor(Qt::red)));
+ QCOMPARE(gradient.stops().at(1), QGradientStop(1, QColor(Qt::blue)));
+
+ gradient.setColorAt(0, Qt::blue);
+ gradient.setColorAt(1, Qt::red);
+
+ QCOMPARE(gradient.stops().size(), 2);
+
+ QCOMPARE(gradient.stops().at(0), QGradientStop(0, QColor(Qt::blue)));
+ QCOMPARE(gradient.stops().at(1), QGradientStop(1, QColor(Qt::red)));
+
+ gradient.setColorAt(0.5, Qt::green);
+
+ QCOMPARE(gradient.stops().size(), 3);
+ QCOMPARE(gradient.stops().at(1), QGradientStop(0.5, QColor(Qt::green)));
+
+ // A hack in parseStopNode() in qsvghandler.cpp depends on inserting stops at NaN.
+ gradient.setStops(QGradientStops() << QGradientStop(qQNaN(), QColor()));
+ QCOMPARE(gradient.stops().size(), 1);
+ QVERIFY(qIsNaN(gradient.stops().at(0).first));
+ QCOMPARE(gradient.stops().at(0).second, QColor());
+}
+
+void fill(QPaintDevice *pd) {
+ QPainter p(pd);
+
+ int w = pd->width();
+ int h = pd->height();
+
+ p.fillRect(0, 0, w, h, Qt::white);
+ p.fillRect(0, 0, w/3, h/3, Qt::black);
+}
+
+void tst_QBrush::textures()
+{
+ QPixmap pixmap_source(10, 10);
+ QImage image_source(10, 10, QImage::Format_RGB32);
+
+ fill(&pixmap_source);
+ fill(&image_source);
+
+ // Create a pixmap brush and compare its texture and textureImage
+ // to the expected image
+ QBrush pixmap_brush;
+ pixmap_brush.setTexture(pixmap_source);
+ QImage image = pixmap_brush.texture().toImage().convertToFormat(QImage::Format_RGB32);
+ QCOMPARE(image, image_source);
+ image = pixmap_brush.textureImage().convertToFormat(QImage::Format_RGB32);
+ QCOMPARE(image, image_source);
+
+ pixmap_brush = QBrush(pixmap_source);
+ image = pixmap_brush.texture().toImage().convertToFormat(QImage::Format_RGB32);
+ QCOMPARE(image, image_source);
+ image = pixmap_brush.textureImage().convertToFormat(QImage::Format_RGB32);
+ QCOMPARE(image, image_source);
+
+ // Create a image brush and compare its texture and textureImage
+ // to the expected image
+ QBrush image_brush;
+ image_brush.setTextureImage(image_source);
+ image = image_brush.texture().toImage().convertToFormat(QImage::Format_RGB32);
+ QCOMPARE(image, image_source);
+ QCOMPARE(image_brush.textureImage(), image_source);
+
+ image_brush = QBrush(image_source);
+ image = image_brush.texture().toImage().convertToFormat(QImage::Format_RGB32);
+ QCOMPARE(image, image_source);
+ QCOMPARE(image_brush.textureImage(), image_source);
+}
+
+void tst_QBrush::nullBrush()
+{
+ QBrush brush(QColor(100,0,0), Qt::NoBrush);
+ QCOMPARE(brush.color(), QColor(100,0,0));
+}
+
+QTEST_MAIN(tst_QBrush)
+#include "tst_qbrush.moc"