tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
--- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp	Tue Jul 06 15:10:48 2010 +0300
+++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp	Wed Aug 18 10:37:55 2010 +0300
@@ -47,10 +47,17 @@
 #include <QFontMetrics>
 #include <QGraphicsSceneMouseEvent>
 #include <qmath.h>
+#include <QDeclarativeView>
+#include <private/qapplication_p.h>
 
 #include "../../../shared/util.h"
 #include "testhttpserver.h"
 
+#ifdef Q_OS_SYMBIAN
+// In Symbian OS test data is located in applications private dir
+#define SRCDIR "."
+#endif
+
 class tst_qdeclarativetext : public QObject
 
 {
@@ -65,6 +72,9 @@
     void elide();
     void textFormat();
 
+    void alignments_data();
+    void alignments();
+
     void embeddedImages_data();
     void embeddedImages();
 
@@ -87,6 +97,8 @@
 
     void clickLink();
 
+    void QTBUG_12291();
+
 private:
     QStringList standard;
     QStringList richText;
@@ -103,6 +115,8 @@
     QStringList colorStrings;
 
     QDeclarativeEngine engine;
+
+    QDeclarativeView *createView(const QString &filename);
 };
 
 tst_qdeclarativetext::tst_qdeclarativetext()
@@ -158,6 +172,14 @@
     //
 }
 
+QDeclarativeView *tst_qdeclarativetext::createView(const QString &filename)
+{
+    QDeclarativeView *canvas = new QDeclarativeView(0);
+
+    canvas->setSource(QUrl::fromLocalFile(filename));
+    return canvas;
+}
+
 void tst_qdeclarativetext::text()
 {
     {
@@ -226,6 +248,7 @@
         QDeclarativeText *textObject = qobject_cast<QDeclarativeText*>(textComponent.create());
 
         QVERIFY(textObject != 0);
+        QVERIFY(textObject->boundingRect().width() > 0);
         QCOMPARE(textObject->width(), qreal(metricWidth));
         QVERIFY(textObject->textFormat() == QDeclarativeText::AutoText); // setting text doesn't change format
     }
@@ -378,6 +401,67 @@
     }
 }
 
+
+void tst_qdeclarativetext::alignments_data()
+{
+    QTest::addColumn<int>("hAlign");
+    QTest::addColumn<int>("vAlign");
+    QTest::addColumn<QString>("expectfile");
+
+    QTest::newRow("LT") << int(Qt::AlignLeft) << int(Qt::AlignTop) << SRCDIR "/data/alignments_lt.png";
+    QTest::newRow("RT") << int(Qt::AlignRight) << int(Qt::AlignTop) << SRCDIR "/data/alignments_rt.png";
+    QTest::newRow("CT") << int(Qt::AlignHCenter) << int(Qt::AlignTop) << SRCDIR "/data/alignments_ct.png";
+
+    QTest::newRow("LB") << int(Qt::AlignLeft) << int(Qt::AlignBottom) << SRCDIR "/data/alignments_lb.png";
+    QTest::newRow("RB") << int(Qt::AlignRight) << int(Qt::AlignBottom) << SRCDIR "/data/alignments_rb.png";
+    QTest::newRow("CB") << int(Qt::AlignHCenter) << int(Qt::AlignBottom) << SRCDIR "/data/alignments_cb.png";
+
+    QTest::newRow("LC") << int(Qt::AlignLeft) << int(Qt::AlignVCenter) << SRCDIR "/data/alignments_lc.png";
+    QTest::newRow("RC") << int(Qt::AlignRight) << int(Qt::AlignVCenter) << SRCDIR "/data/alignments_rc.png";
+    QTest::newRow("CC") << int(Qt::AlignHCenter) << int(Qt::AlignVCenter) << SRCDIR "/data/alignments_cc.png";
+}
+
+
+void tst_qdeclarativetext::alignments()
+{
+    QFETCH(int, hAlign);
+    QFETCH(int, vAlign);
+    QFETCH(QString, expectfile);
+
+#ifdef Q_WS_X11
+    // Font-specific, but not likely platform-specific, so only test on one platform
+    QFont fn;
+    fn.setRawName("-misc-fixed-medium-r-*-*-8-*-*-*-*-*-*-*");
+    QApplication::setFont(fn);
+#endif
+
+    QDeclarativeView *canvas = createView(SRCDIR "/data/alignments.qml");
+
+    canvas->show();
+    QApplication::setActiveWindow(canvas);
+    QTest::qWaitForWindowShown(canvas);
+    QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas));
+
+    QObject *ob = canvas->rootObject();
+    QVERIFY(ob != 0);
+    ob->setProperty("horizontalAlignment",hAlign);
+    ob->setProperty("verticalAlignment",vAlign);
+    QTRY_COMPARE(ob->property("running").toBool(),false);
+    QImage actual(canvas->width(), canvas->height(), QImage::Format_RGB32);
+    actual.fill(qRgb(255,255,255));
+    QPainter p(&actual);
+    canvas->render(&p);
+
+    QImage expect(expectfile);
+
+#ifdef Q_WS_X11
+    // Font-specific, but not likely platform-specific, so only test on one platform
+    if (QApplicationPrivate::graphics_system_name == "raster" || QApplicationPrivate::graphics_system_name == "") {
+        QCOMPARE(actual,expect);
+    }
+#endif
+}
+
 //the alignment tests may be trivial o.oa
 void tst_qdeclarativetext::horizontalAlignment()
 {
@@ -766,22 +850,22 @@
         QCOMPARE(textObject->font().letterSpacing(), 0.0);
     }
     {
-        QString componentStr = "import Qt 4.7\nText { text: \"Hello world!\"; font.letterSpacing: -50 }";
+        QString componentStr = "import Qt 4.7\nText { text: \"Hello world!\"; font.letterSpacing: -2 }";
         QDeclarativeComponent textComponent(&engine);
         textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
         QDeclarativeText *textObject = qobject_cast<QDeclarativeText*>(textComponent.create());
 
         QVERIFY(textObject != 0);
-        QCOMPARE(textObject->font().letterSpacing(), -50.);
+        QCOMPARE(textObject->font().letterSpacing(), -2.);
     }
     {
-        QString componentStr = "import Qt 4.7\nText { text: \"Hello world!\"; font.letterSpacing: 200 }";
+        QString componentStr = "import Qt 4.7\nText { text: \"Hello world!\"; font.letterSpacing: 3 }";
         QDeclarativeComponent textComponent(&engine);
         textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
         QDeclarativeText *textObject = qobject_cast<QDeclarativeText*>(textComponent.create());
 
         QVERIFY(textObject != 0);
-        QCOMPARE(textObject->font().letterSpacing(), 200.);
+        QCOMPARE(textObject->font().letterSpacing(), 3.);
     }
 }
 
@@ -816,6 +900,23 @@
     }
 }
 
+void tst_qdeclarativetext::QTBUG_12291()
+{
+    QDeclarativeView *canvas = createView(SRCDIR "/data/rotated.qml");
+
+    canvas->show();
+    QApplication::setActiveWindow(canvas);
+    QTest::qWaitForWindowShown(canvas);
+    QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas));
+
+    QObject *ob = canvas->rootObject();
+    QVERIFY(ob != 0);
+
+    QDeclarativeText *text = ob->findChild<QDeclarativeText*>("text");
+    QVERIFY(text);
+    QVERIFY(text->boundingRect().isValid());
+}
+
 class EventSender : public QGraphicsItem
 {
 public: