qtmobility/tests/auto/qlatin1constant/tst_qlatin1constant.cpp
changeset 4 90517678cc4f
child 5 453da2cfceef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtmobility/tests/auto/qlatin1constant/tst_qlatin1constant.cpp	Mon May 03 13:18:40 2010 +0300
@@ -0,0 +1,299 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $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 Technology Preview License Agreement accompanying
+** this package.
+**
+** 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.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+
+#include "qtcontactsglobal.h"
+#include <QSet>
+#include <QMetaType>
+#include <QTypeInfo>
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+QTM_USE_NAMESPACE
+
+Q_DEFINE_LATIN1_CONSTANT(a, "a");
+Q_DEFINE_LATIN1_CONSTANT(a2, "a");
+Q_DEFINE_LATIN1_CONSTANT(b, "b");
+Q_DEFINE_LATIN1_CONSTANT(b2, "b");
+Q_DEFINE_LATIN1_CONSTANT(bb, "bb");
+Q_DEFINE_LATIN1_CONSTANT(bb2, "bb");
+
+Q_DEFINE_LATIN1_CONSTANT(z, "");
+Q_DEFINE_LATIN1_CONSTANT(z2, "");
+
+Q_DEFINE_LATIN1_CONSTANT(z3, "\0");
+Q_DEFINE_LATIN1_CONSTANT(soup, "alphabet soup"); // but you can't have any
+
+QLatin1String ln(0);
+QLatin1String lz("");
+QLatin1String la("a");
+QLatin1String lb("b");
+QLatin1String lbb("bb");
+QLatin1String lsoup("alphabet soup");
+
+QString sn;
+QString sz("");
+QString sa(la);
+QString sb(lb);
+QString sbb(lbb);
+QString ssoup("alphabet soup");
+
+class tst_QLatin1Constant: public QObject
+{
+Q_OBJECT
+
+public:
+    tst_QLatin1Constant();
+    virtual ~tst_QLatin1Constant();
+
+    // Overload testers
+    int overloaded(const char *) {return 1;}
+    //int overloaded(const QLatin1String& ) {return 2;}
+    int overloaded(QLatin1String ) {return 3;}
+    int overloaded(const QString& ) {return 4;}
+    //int overloaded(QString ){return 5;}
+    //template<int N> int overloaded(const QLatin1Constant<N>& ) {return 6;}
+    template<int N> int overloaded(QLatin1Constant<N> ) {return 7;}
+    int overloaded(const QVariant&) {return 8;}
+
+    // More overload testers
+    int overloaded2(QLatin1String) {return 3;}
+    int overloaded2(const QString&) {return 4;}
+
+    int overloaded3(const char*) {return 1;}
+    int overloaded3(QLatin1String) {return 3;}
+
+    int overloaded4(const char*) {return 1;}
+    int overloaded4(const QString&) {return 4;}
+
+    // Conversion testers
+    bool charfunc(const char* str) {return qstrcmp(str, "alphabet soup") == 0;}
+    bool latfunc(QLatin1String lat) {return qstrcmp(lat.latin1(), "alphabet soup") == 0;}
+    bool latreffunc(const QLatin1String& lat) {return qstrcmp(lat.latin1(), "alphabet soup") == 0;}
+    bool strfunc(QString str) {return str == QString::fromAscii("alphabet soup");}
+    bool strreffunc(const QString& str) {return str == QString::fromAscii("alphabet soup");}
+    bool varfunc(const QVariant& var) {return (var.type() == QVariant::String) && var.toString() == QString::fromAscii("alphabet soup");}
+
+private slots:
+    void hash();
+    void conversion();
+    void overloads();
+    void equals();
+    void latinEquals();
+    void stringEquals();
+    void ordering();
+    void latinaccessor();
+};
+
+tst_QLatin1Constant::tst_QLatin1Constant()
+{
+}
+
+tst_QLatin1Constant::~tst_QLatin1Constant()
+{
+}
+
+void tst_QLatin1Constant::hash()
+{
+    // Test that if a == b, hash(a) == hash(b)
+    // (also for ===)
+    QVERIFY(qHash(a) == qHash(a));
+    QVERIFY(qHash(a) == qHash(a2));
+    QVERIFY(qHash(b) == qHash(b));
+    QVERIFY(qHash(b) == qHash(b));
+    QVERIFY(qHash(bb) == qHash(bb));
+    QVERIFY(qHash(bb) == qHash(bb));
+
+    // As a convenience, make sure that hashing
+    // the same string gives the same results
+    // no matter the storage
+    QVERIFY(qHash(a) == qHash(la));
+    QVERIFY(qHash(a) == qHash(sa));
+}
+
+void tst_QLatin1Constant::equals()
+{
+    // Check symmetry and dupes
+    QVERIFY(a == a);
+    QVERIFY(a == a2);
+    QVERIFY(a2 == a);
+    QVERIFY(b == b);
+    QVERIFY(b == b2);
+    QVERIFY(b2 == b2);
+    QVERIFY(bb == bb);
+    QVERIFY(bb == bb2);
+    QVERIFY(bb2 == bb);
+
+    QVERIFY(z == z);
+    QVERIFY(z == z2);
+    QVERIFY(z2 == z);
+
+    // Now make sure that the length is taken into account
+    QVERIFY(b != bb2);
+    QVERIFY(bb2 != b);
+    QVERIFY(a != z);
+    QVERIFY(z != a);
+
+    // and just in case something is really wrong
+    QVERIFY(a != b);
+    QVERIFY(b != a);
+}
+
+void tst_QLatin1Constant::latinaccessor()
+{
+    QVERIFY(a.chars == a.latin1());
+    QVERIFY(z.latin1() == z.chars);
+}
+
+void tst_QLatin1Constant::latinEquals()
+{
+    // Test operator== with latin1 strings
+    QVERIFY(a == la);
+    QVERIFY(la == a);
+    QVERIFY(a2 == la);
+    QVERIFY(la == a2);
+    QVERIFY(b == lb);
+    QVERIFY(lb == b);
+    QVERIFY(bb == lbb);
+    QVERIFY(lbb == bb);
+
+    QVERIFY(b != lbb);
+    QVERIFY(lbb != b);
+
+    QVERIFY(a != lb);
+    QVERIFY(lb != a);
+
+    QVERIFY(z == lz);
+    QVERIFY((z == ln) == (lz == ln)); // QLatin1String(0) != QLatin1String("")
+    QVERIFY(lz == z);
+    QVERIFY((ln == z) == (ln == lz));
+}
+
+void tst_QLatin1Constant::stringEquals()
+{
+    // Test operator== with QStrings
+    QVERIFY(a == sa);
+    QVERIFY(sa == a);
+    QVERIFY(a2 == sa);
+    QVERIFY(sa == a2);
+    QVERIFY(b == sb);
+    QVERIFY(sb == b);
+    QVERIFY(bb == sbb);
+    QVERIFY(sbb == bb);
+
+    QVERIFY(b != sbb);
+    QVERIFY(sbb != b);
+
+    QVERIFY(a != sb);
+    QVERIFY(sb != a);
+
+    QVERIFY(z == sz);
+    QVERIFY((z == sn) == (sz == sn)); // QString(0) != QString("")
+    QVERIFY(sz == z);
+    QVERIFY((sn == z) == (sn == sz));
+}
+
+void tst_QLatin1Constant::conversion()
+{
+    QVERIFY(charfunc("alphabet soup"));
+    QVERIFY(charfunc(soup.chars));
+    QVERIFY(charfunc(soup.latin1()));
+
+    QVERIFY(latfunc(lsoup));
+    QVERIFY(latreffunc(lsoup));
+
+    QVERIFY(strfunc(ssoup));
+    QVERIFY(strreffunc(ssoup));
+
+    // See if soup gets converted appropriately
+    QVERIFY(latfunc(soup));
+    QVERIFY(strfunc(soup));
+    QVERIFY(latreffunc(soup));
+    QVERIFY(strreffunc(soup));
+    QVERIFY(varfunc(soup));
+
+    // Now we also want to make sure that converting to QLatin1String doesn't copy the string
+    QLatin1String lsoup2 = soup; // implicit operator QLatin1String
+    QLatin1String lsoup3 = (QLatin1String) soup; // explicit operator QLatin1String
+    QLatin1String lsoup4 = QLatin1String(soup); // implicit operator QLatin1String
+
+    QVERIFY(lsoup2.latin1() == soup.latin1());
+    QVERIFY(lsoup3.latin1() == soup.latin1());
+    QVERIFY(lsoup4.latin1() == soup.latin1());
+}
+
+void tst_QLatin1Constant::overloads()
+{
+    QVERIFY(overloaded("alphabet soup") == 1);
+    QVERIFY(overloaded(soup) == 7);
+    QVERIFY(overloaded(lsoup) == 2 || overloaded(lsoup) == 3);
+    QVERIFY(overloaded(ssoup) == 4 || overloaded(ssoup) == 5);
+
+    QVERIFY(overloaded2(lsoup) == 3);
+    QVERIFY(overloaded2(ssoup) == 4);
+    QCOMPARE(overloaded2(soup.latin1()), 4); // XXX grr, can't call with just soup [ambiguous], this goes to QString
+
+    QVERIFY(overloaded3(lsoup) == 3);
+    QCOMPARE(overloaded3(soup), 3); // XXX this goes with QLatin1String
+
+    QVERIFY(overloaded4(ssoup) == 4);
+    QCOMPARE(overloaded4(soup), 4); // XXX this goes with QString
+}
+
+void tst_QLatin1Constant::ordering()
+{
+    QVERIFY(z < a);
+    QVERIFY(!(a < z));
+    QVERIFY(a < b);
+    QVERIFY(!(b < a));
+    QVERIFY(a < bb);
+    QVERIFY(!(bb < a));
+    QVERIFY(b < bb);
+    QVERIFY(!(bb < b));
+
+    QVERIFY(!(a < a));
+    QVERIFY(!(z < z));
+}
+
+QTEST_MAIN(tst_QLatin1Constant)
+#include "tst_qlatin1constant.moc"