/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** ** This file is part of the Qt Commercial Charts Add-on. ** ** $QT_BEGIN_LICENSE$ ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. ** ** If you have questions regarding the use of this file, please use ** contact form at http://qt.digia.com ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef BUILD_PRIVATE_UNIT_TESTS #include class tst_Domain: public QObject { Q_OBJECT private Q_SLOTS: void skip(); }; void tst_Domain::skip() { #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) QSKIP("This test requires the debug version of library"); #else QSKIP("This test requires the debug version of library", SkipAll); #endif } QTEST_MAIN(tst_Domain) #include "tst_domain.moc" #else #include #include #include #include QTCOMMERCIALCHART_USE_NAMESPACE Q_DECLARE_METATYPE(XYDomain*) Q_DECLARE_METATYPE(QSizeF) Q_DECLARE_METATYPE(QMargins) class AxisMock: public QAbstractAxisPrivate { Q_OBJECT public: AxisMock(Qt::Alignment alignment):QAbstractAxisPrivate(0){ setAlignment(alignment);}; void initializeGraphics(QGraphicsItem* item) { Q_UNUSED(item); }; void initializeDomain(AbstractDomain* domain) { Q_UNUSED(domain); }; void setMin(const QVariant &min) { Q_UNUSED(min); } qreal min() { return m_min;} void setMax(const QVariant &max) { Q_UNUSED(max); } qreal max() { return m_max; } void setRange(const QVariant &min, const QVariant &max) { Q_UNUSED(min); Q_UNUSED(max); }; void setRange(qreal min, qreal max) { m_min=min; m_max=max; emit rangeChanged(min,max); }; int count () const { return m_count; } void handleDomainUpdated(){}; public: int m_count; qreal m_min; qreal m_max; }; class tst_Domain: public QObject { Q_OBJECT public Q_SLOTS: void initTestCase(); void cleanupTestCase(); void init(); void cleanup(); private Q_SLOTS: void domain(); void handleHorizontalAxisRangeChanged_data(); void handleHorizontalAxisRangeChanged(); void handleVerticalAxisRangeChanged_data(); void handleVerticalAxisRangeChanged(); void isEmpty_data(); void isEmpty(); void maxX_data(); void maxX(); void maxY_data(); void maxY(); void minX_data(); void minX(); void minY_data(); void minY(); void operatorEquals_data(); void operatorEquals(); void setRange_data(); void setRange(); void setRangeX_data(); void setRangeX(); void setRangeY_data(); void setRangeY(); void spanX_data(); void spanX(); void spanY_data(); void spanY(); void zoomIn_data(); void zoomIn(); void zoomOut_data(); void zoomOut(); void move_data(); void move(); }; void tst_Domain::initTestCase() { } void tst_Domain::cleanupTestCase() { } void tst_Domain::init() { } void tst_Domain::cleanup() { } void tst_Domain::domain() { XYDomain domain; QCOMPARE(domain.isEmpty(), true); QCOMPARE(domain.maxX(), 0.0); QCOMPARE(domain.maxY(), 0.0); QCOMPARE(domain.minX(), 0.0); QCOMPARE(domain.minY(), 0.0); } void tst_Domain::handleHorizontalAxisRangeChanged_data() { QTest::addColumn("min"); QTest::addColumn("max"); QTest::newRow("-1 1") << -1.0 << 1.0; QTest::newRow("0 1") << 0.0 << 1.0; QTest::newRow("-1 0") << -1.0 << 0.0; } void tst_Domain::handleHorizontalAxisRangeChanged() { QFETCH(qreal, min); QFETCH(qreal, max); XYDomain domain; QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); AxisMock axis(Qt::AlignBottom); QObject::connect(&axis,SIGNAL(rangeChanged(qreal,qreal)),&domain,SLOT(handleHorizontalAxisRangeChanged(qreal,qreal))); axis.setRange(min,max); QVERIFY(qFuzzyCompare(domain.minX(), min)); QVERIFY(qFuzzyCompare(domain.maxX(), max)); QList arg1 = spy1.first(); QVERIFY(qFuzzyCompare(arg1.at(0).toReal(), min)); QVERIFY(qFuzzyCompare(arg1.at(1).toReal(), max)); TRY_COMPARE(spy0.count(), 1); TRY_COMPARE(spy1.count(), 1); TRY_COMPARE(spy2.count(), 0); } void tst_Domain::handleVerticalAxisRangeChanged_data() { QTest::addColumn("min"); QTest::addColumn("max"); QTest::newRow("-1 1") << -1.0 << 1.0; QTest::newRow("0 1") << 0.0 << 1.0; QTest::newRow("-1 0") << -1.0 << 0.0; } void tst_Domain::handleVerticalAxisRangeChanged() { QFETCH(qreal, min); QFETCH(qreal, max); XYDomain domain; QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); AxisMock axis(Qt::AlignLeft); QObject::connect(&axis, SIGNAL(rangeChanged(qreal,qreal)), &domain, SLOT(handleVerticalAxisRangeChanged(qreal,qreal))); axis.setRange(min,max); QVERIFY(qFuzzyCompare(domain.minY(), min)); QVERIFY(qFuzzyCompare(domain.maxY(), max)); QList arg1 = spy2.first(); QVERIFY(qFuzzyCompare(arg1.at(0).toReal(), min)); QVERIFY(qFuzzyCompare(arg1.at(1).toReal(), max)); TRY_COMPARE(spy0.count(), 1); TRY_COMPARE(spy1.count(), 0); TRY_COMPARE(spy2.count(), 1); } void tst_Domain::isEmpty_data() { QTest::addColumn("minX"); QTest::addColumn("maxX"); QTest::addColumn("minY"); QTest::addColumn("maxY"); QTest::addColumn("size"); QTest::addColumn("isEmpty"); QTest::newRow("0 0 0 0") << 0.0 << 0.0 << 0.0 << 0.0 << QSizeF(1,1) << true; QTest::newRow("0 1 0 0") << 0.0 << 1.0 << 0.0 << 0.0 << QSizeF(1,1) << true; QTest::newRow("0 0 0 1") << 0.0 << 1.0 << 0.0 << 0.0 << QSizeF(1,1) << true; QTest::newRow("0 1 0 1") << 0.0 << 1.0 << 0.0 << 1.0 << QSizeF(1,1) << false; QTest::newRow("0 1 0 1") << 0.0 << 1.0 << 0.0 << 1.0 << QSizeF(-11,1) << true; } void tst_Domain::isEmpty() { QFETCH(qreal, minX); QFETCH(qreal, maxX); QFETCH(qreal, minY); QFETCH(qreal, maxY); QFETCH(QSizeF, size); QFETCH(bool, isEmpty); XYDomain domain; domain.setRange(minX, maxX, minY, maxY); domain.setSize(size); QCOMPARE(domain.isEmpty(), isEmpty); } void tst_Domain::maxX_data() { QTest::addColumn("maxX1"); QTest::addColumn("maxX2"); QTest::addColumn("count"); QTest::newRow("1") << 0.0 << 1.0 << 1; QTest::newRow("1.0") << 1.0 << 1.0 << 1; QTest::newRow("2.0") << 1.0 << 0.0 << 2; } void tst_Domain::maxX() { QFETCH(qreal, maxX1); QFETCH(qreal, maxX2); QFETCH(int, count); XYDomain domain; QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); domain.setMaxX(maxX1); QCOMPARE(domain.maxX(), maxX1); domain.setMaxX(maxX2); QCOMPARE(domain.maxX(), maxX2); TRY_COMPARE(spy0.count(), count); TRY_COMPARE(spy1.count(), count); TRY_COMPARE(spy2.count(), 0); } void tst_Domain::maxY_data() { QTest::addColumn("maxY1"); QTest::addColumn("maxY2"); QTest::addColumn("count"); QTest::newRow("1") << 0.0 << 1.0 << 1; QTest::newRow("1.0") << 1.0 << 1.0 << 1; QTest::newRow("2.0") << 1.0 << 0.0 << 2; } void tst_Domain::maxY() { QFETCH(qreal, maxY1); QFETCH(qreal, maxY2); QFETCH(int, count); XYDomain domain; QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); domain.setMaxY(maxY1); QCOMPARE(domain.maxY(), maxY1); domain.setMaxY(maxY2); QCOMPARE(domain.maxY(), maxY2); TRY_COMPARE(spy0.count(), count); TRY_COMPARE(spy1.count(), 0); TRY_COMPARE(spy2.count(), count); } void tst_Domain::minX_data() { QTest::addColumn("minX1"); QTest::addColumn("minX2"); QTest::addColumn("count"); QTest::newRow("1") << 0.0 << 1.0 << 1; QTest::newRow("1.0") << 1.0 << 1.0 << 1; QTest::newRow("2.0") << 1.0 << 0.0 << 2; } void tst_Domain::minX() { QFETCH(qreal, minX1); QFETCH(qreal, minX2); QFETCH(int, count); XYDomain domain; QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); domain.setMinX(minX1); QCOMPARE(domain.minX(), minX1); domain.setMinX(minX2); QCOMPARE(domain.minX(), minX2); TRY_COMPARE(spy0.count(), count); TRY_COMPARE(spy1.count(), count); TRY_COMPARE(spy2.count(), 0); } void tst_Domain::minY_data() { QTest::addColumn("minY1"); QTest::addColumn("minY2"); QTest::addColumn("count"); QTest::newRow("1") << 0.0 << 1.0 << 1; QTest::newRow("1.0") << 1.0 << 1.0 << 1; QTest::newRow("2.0") << 1.0 << 0.0 << 2; } void tst_Domain::minY() { QFETCH(qreal, minY1); QFETCH(qreal, minY2); QFETCH(int, count); XYDomain domain; QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); domain.setMinY(minY1); QCOMPARE(domain.minY(), minY1); domain.setMinY(minY2); QCOMPARE(domain.minY(), minY2); TRY_COMPARE(spy0.count(), count); TRY_COMPARE(spy1.count(), 0); TRY_COMPARE(spy2.count(), count); } void tst_Domain::operatorEquals_data() { QTest::addColumn("domain1"); QTest::addColumn("domain2"); QTest::addColumn("equals"); QTest::addColumn("notEquals"); XYDomain* a; XYDomain* b; a = new XYDomain(); a->setRange(0, 100, 0, 100); b = new XYDomain(); b->setRange(0, 100, 0, 100); QTest::newRow("equals") << a << b << true << false; a = new XYDomain(); a->setRange(0, 100, 0, 100); b = new XYDomain(); b->setRange(0, 100, 0, 1); QTest::newRow("equals") << a << b << false << true; a = new XYDomain(); a->setRange(0, 100, 0, 100); b = new XYDomain(); b->setRange(0, 1, 0, 100); QTest::newRow("equals") << a << b << false << true; } void tst_Domain::operatorEquals() { QFETCH(XYDomain*, domain1); QFETCH(XYDomain*, domain2); QFETCH(bool, equals); QFETCH(bool, notEquals); XYDomain domain; QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); QCOMPARE(*domain1==*domain2, equals); QCOMPARE(*domain1!=*domain2, notEquals); TRY_COMPARE(spy0.count(), 0); TRY_COMPARE(spy1.count(), 0); TRY_COMPARE(spy2.count(), 0); } void tst_Domain::setRange_data() { QTest::addColumn("minX"); QTest::addColumn("maxX"); QTest::addColumn("minY"); QTest::addColumn("maxY"); QTest::newRow("1,2,1,2") << 1.0 << 2.0 << 1.0 << 2.0; QTest::newRow("1,3,1,3") << 1.0 << 3.0 << 1.0 << 3.0; QTest::newRow("-1,5,-2,-1") << -1.0 << 5.0 << -2.0 << -1.0; } void tst_Domain::setRange() { QFETCH(qreal, minX); QFETCH(qreal, maxX); QFETCH(qreal, minY); QFETCH(qreal, maxY); XYDomain domain; QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); domain.setRange(minX, maxX, minY, maxY); QCOMPARE(domain.minX(), minX); QCOMPARE(domain.maxX(), maxX); QCOMPARE(domain.minY(), minY); QCOMPARE(domain.maxY(), maxY); TRY_COMPARE(spy0.count(), 1); TRY_COMPARE(spy1.count(), 1); TRY_COMPARE(spy2.count(), 1); } void tst_Domain::setRangeX_data() { QTest::addColumn("min"); QTest::addColumn("max"); QTest::newRow("-1 1") << -1.0 << 1.0; QTest::newRow("0 1") << 0.0 << 1.0; QTest::newRow("-1 0") << -1.0 << 0.0; } void tst_Domain::setRangeX() { QFETCH(qreal, min); QFETCH(qreal, max); XYDomain domain; QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); domain.setRangeX(min, max); QVERIFY(qFuzzyCompare(domain.minX(), min)); QVERIFY(qFuzzyCompare(domain.maxX(), max)); QList arg1 = spy1.first(); QVERIFY(qFuzzyCompare(arg1.at(0).toReal(), min)); QVERIFY(qFuzzyCompare(arg1.at(1).toReal(), max)); TRY_COMPARE(spy0.count(), 1); TRY_COMPARE(spy1.count(), 1); TRY_COMPARE(spy2.count(), 0); } void tst_Domain::setRangeY_data() { QTest::addColumn("min"); QTest::addColumn("max"); QTest::newRow("-1 1") << -1.0 << 1.0; QTest::newRow("0 1") << 0.0 << 1.0; QTest::newRow("-1 0") << -1.0 << 0.0; } void tst_Domain::setRangeY() { QFETCH(qreal, min); QFETCH(qreal, max); XYDomain domain; QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); domain.setRangeY(min, max); QVERIFY(qFuzzyCompare(domain.minY(), min)); QVERIFY(qFuzzyCompare(domain.maxY(), max)); QList arg1 = spy2.first(); QVERIFY(qFuzzyCompare(arg1.at(0).toReal(), min)); QVERIFY(qFuzzyCompare(arg1.at(1).toReal(), max)); TRY_COMPARE(spy0.count(), 1); TRY_COMPARE(spy1.count(), 0); TRY_COMPARE(spy2.count(), 1); } void tst_Domain::spanX_data() { QTest::addColumn("minX"); QTest::addColumn("maxX"); QTest::addColumn("spanX"); QTest::newRow("1 2 1") << 1.0 << 2.0 << 1.0; QTest::newRow("0 2 2") << 1.0 << 2.0 << 1.0; } void tst_Domain::spanX() { QFETCH(qreal, minX); QFETCH(qreal, maxX); QFETCH(qreal, spanX); XYDomain domain; domain.setRangeX(minX, maxX); QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); QCOMPARE(domain.spanX(), spanX); TRY_COMPARE(spy0.count(), 0); TRY_COMPARE(spy1.count(), 0); TRY_COMPARE(spy2.count(), 0); } void tst_Domain::spanY_data() { QTest::addColumn("minY"); QTest::addColumn("maxY"); QTest::addColumn("spanY"); QTest::newRow("1 2 1") << 1.0 << 2.0 << 1.0; QTest::newRow("0 2 2") << 1.0 << 2.0 << 1.0; } void tst_Domain::spanY() { QFETCH(qreal, minY); QFETCH(qreal, maxY); QFETCH(qreal, spanY); XYDomain domain; domain.setRangeY(minY, maxY); QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); QCOMPARE(domain.spanY(), spanY); TRY_COMPARE(spy0.count(), 0); TRY_COMPARE(spy1.count(), 0); TRY_COMPARE(spy2.count(), 0); } void tst_Domain::zoomIn_data() { QTest::addColumn("range"); QTest::addColumn("size"); QTest::addColumn("zoom"); QTest::addColumn("result"); QTest::newRow("first") << QMargins(0,0,1000,1000) << QSizeF(1000, 1000) << QMargins(100, 100, 900, 900) << QMargins(100,100,900,900); QTest::newRow("second") << QMargins(0,0,2000,2000) << QSizeF(1000, 1000) << QMargins(100, 100, 900, 900) << QMargins(200,200,1800,1800); } void tst_Domain::zoomIn() { QFETCH(QMargins, range); QFETCH(QSizeF, size); QFETCH(QMargins, zoom); QFETCH(QMargins, result); XYDomain domain; domain.setRange(range.left(), range.right(), range.top(),range.bottom()); domain.setSize(size); QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); domain.zoomIn(QRectF(zoom.left(),zoom.top(),zoom.right()-zoom.left(),zoom.bottom()-zoom.top())); QCOMPARE(domain.minX(),qreal(result.left())); QCOMPARE(domain.maxX(),qreal(result.right())); QCOMPARE(domain.minY(),qreal(result.top())); QCOMPARE(domain.maxY(),qreal(result.bottom())); TRY_COMPARE(spy0.count(), 1); TRY_COMPARE(spy1.count(), 1); TRY_COMPARE(spy2.count(), 1); } void tst_Domain::zoomOut_data() { QTest::addColumn("range"); QTest::addColumn("size"); QTest::addColumn("zoom"); QTest::addColumn("result"); QTest::newRow("first") << QMargins(100,100,900,900) << QSizeF(1000, 1000) << QMargins(100, 100, 900, 900) << QMargins(0,0,1000,1000); QTest::newRow("second") << QMargins(200,200,1800,1800) << QSizeF(1000, 1000) << QMargins(100, 100, 900, 900) << QMargins(0,0,2000,2000); } void tst_Domain::zoomOut() { QFETCH(QMargins, range); QFETCH(QSizeF, size); QFETCH(QMargins, zoom); QFETCH(QMargins, result); XYDomain domain; domain.setRange(range.left(), range.right(), range.top(),range.bottom()); domain.setSize(size); QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); domain.zoomOut(QRectF(zoom.left(),zoom.top(),zoom.right()-zoom.left(),zoom.bottom()-zoom.top())); QCOMPARE(domain.minX(),qreal(result.left())); QCOMPARE(domain.maxX(),qreal(result.right())); QCOMPARE(domain.minY(),qreal(result.top())); QCOMPARE(domain.maxY(),qreal(result.bottom())); TRY_COMPARE(spy0.count(), 1); TRY_COMPARE(spy1.count(), 1); TRY_COMPARE(spy2.count(), 1); } void tst_Domain::move_data() { QTest::addColumn("range"); QTest::addColumn("size"); QTest::addColumn("dx"); QTest::addColumn("dy"); QTest::addColumn("result"); QTest::newRow("first") << QMargins(0,0,1000,1000) << QSizeF(1000, 1000) << 10 << 10 << QMargins(10,10,1010,1010); QTest::newRow("second") << QMargins(0,0,1000,1000) << QSizeF(1000, 1000) << -10 << -10 << QMargins(-10,-10,990,990); } void tst_Domain::move() { QFETCH(QMargins, range); QFETCH(QSizeF, size); QFETCH(int, dx); QFETCH(int, dy); QFETCH(QMargins, result); XYDomain domain; domain.setRange(range.left(), range.right(), range.top(),range.bottom()); domain.setSize(size); QSignalSpy spy0(&domain, SIGNAL(updated())); QSignalSpy spy1(&domain, SIGNAL(rangeHorizontalChanged(qreal,qreal))); QSignalSpy spy2(&domain, SIGNAL(rangeVerticalChanged(qreal,qreal))); domain.move(dx, dy); QCOMPARE(domain.minX(),qreal(result.left())); QCOMPARE(domain.maxX(),qreal(result.right())); QCOMPARE(domain.minY(),qreal(result.top())); QCOMPARE(domain.maxY(),qreal(result.bottom())); TRY_COMPARE(spy0.count(), 1); TRY_COMPARE(spy1.count(), (dx != 0 ? 1 : 0)); TRY_COMPARE(spy2.count(), (dy != 0 ? 1 : 0)); } QTEST_MAIN(tst_Domain) #include "tst_domain.moc" #endif