qtmobility/tests/auto/qcontactmanagerfiltering/tst_qcontactmanagerfiltering.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
child 15 1f895d8a5b2b
--- a/qtmobility/tests/auto/qcontactmanagerfiltering/tst_qcontactmanagerfiltering.cpp	Fri Jun 11 14:26:25 2010 +0300
+++ b/qtmobility/tests/auto/qcontactmanagerfiltering/tst_qcontactmanagerfiltering.cpp	Wed Jun 23 19:08:38 2010 +0300
@@ -166,12 +166,11 @@
     managerNames.removeAll("testdummy");
     managerNames.removeAll("teststaticdummy");
     managerNames.removeAll("maliciousplugin");
-#if defined(Q_OS_SYMBIAN)
-    // TODO: Analyze fails on symbiansim backend. Simply disable testing of
-    // symbiansim backend for now to make sure the fails do not steal attention
-    // from possible fails in symbian backend.
+    // Symbiansim backend does not support the required details for these
+	// tests to pass. Symbiansim backend specific unit test tst_simcm is
+	// testing filtering instead.
     managerNames.removeAll("symbiansim");
-#endif
+
 
     foreach(QString mgr, managerNames) {
         QMap<QString, QString> params;
@@ -360,6 +359,11 @@
             QTest::newRow("integer == 20, contains, string") << manager << defAndFieldNames.first << defAndFieldNames.second << QVariant("20") << (int)(Qt::MatchFixedString | Qt::MatchContains) << "bc";
             QTest::newRow("integer == 0, contains, string") << manager << defAndFieldNames.first << defAndFieldNames.second << QVariant("0") << (int)(Qt::MatchFixedString | Qt::MatchContains) << "abc";
         }
+
+        /* Detail filter semantics: empty definition or field */
+        newMRow("Empty Definition Name", manager) << manager << es << lastname << QVariant("A") << (int)(Qt::MatchStartsWith) << es; // empty definition name means filter matches nothing
+        newMRow("Empty Def And Field Name", manager) << manager << es << es << QVariant("A") << (int)(Qt::MatchStartsWith) << es; // as above
+        newMRow("Empty Field Name", manager) << manager << name << es << QVariant("A") << (int)(Qt::MatchStartsWith) << "abcdefghijk"; // empty field name matches any with a name detail
     }
 }
 
@@ -529,7 +533,7 @@
         newMRow("no def name", manager) << manager << es << "value" << false << ev << es;
 
         /* Strings (name) */
-        newMRow("first name presence", manager) << manager << "Name" << QString(QLatin1String(QContactName::FieldFirstName)) << false << ev << "abcdefg";
+        newMRow("first name presence", manager) << manager << "Name" << QString(QLatin1String(QContactName::FieldFirstName)) << false << ev << "abcdefghijk";
         newMRow("first name == Aaron", manager) << manager << "Name" << QString(QLatin1String(QContactName::FieldFirstName)) << true << QVariant("Aaron") << "a";
 
         /*
@@ -798,6 +802,7 @@
 
     QString phonedef = QContactPhoneNumber::DefinitionName;
     QString phonenum = QContactPhoneNumber::FieldNumber;
+    bool localeCapsFirst = (QString("aaa").localeAwareCompare(QString("AAA")) > 0);
 
     int csflag = (int)Qt::MatchCaseSensitive;
 
@@ -806,7 +811,7 @@
 
         /* First, cover the "empty defname / fieldname / ranges" cases */
         newMRow("invalid defname", manager) << manager << es << firstname << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << es;
-        newMRow("defn presence test", manager) << manager << namedef << es << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << "abcdefg";
+        newMRow("defn presence test", manager) << manager << namedef << es << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << "abcdefghijk";
         newMRow("field presence test", manager) << manager << phonedef << phonenum << QVariant() << QVariant() << false << 0 << true << 0 << "ab";
         newMRow("good def, bad field", manager) << manager << namedef << "Bongo" << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << es;
         newMRow("bad def", manager) << manager << "Bongo" << es << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << es;
@@ -816,27 +821,36 @@
         newMRow("field presence test negative", manager) << manager << "Burgers" << "Beef" << ev << ev << false << 0 << false << 0 << es;
         newMRow("defn yes, field no presence test negative", manager) << manager << namedef << "Burger" << ev << ev << false << 0 << false << 0 << es;
 
-        newMRow("no max, all results", manager) << manager << namedef << firstname << QVariant("a") << QVariant() << false << 0 << true << 0 << "abcdefg";
-        newMRow("no max, some results", manager) << manager << namedef << firstname << QVariant("BOB") << QVariant() << false << 0 << true << 0 << "bcdefg";
+        newMRow("no max, all results", manager) << manager << namedef << firstname << QVariant("a") << QVariant() << false << 0 << true << 0 << "abcdefghijk";
+        newMRow("no max, some results", manager) << manager << namedef << firstname << QVariant("bob") << QVariant() << false << 0 << true << 0 << "bcdefghijk";
         newMRow("no max, no results", manager) << manager << namedef << firstname << QVariant("ZamBeZI") << QVariant() << false << 0 << true << 0 << es;
-        newMRow("no min, all results", manager) << manager << namedef << firstname << QVariant() << QVariant("zambezi") << false << 0 << true << 0 << "abcdefg";
+        newMRow("no min, all results", manager) << manager << namedef << firstname << QVariant() << QVariant("zambezi") << false << 0 << true << 0 << "abcdefghijk";
         newMRow("no min, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("bOb") << false << 0 << true << 0 << "a";
         newMRow("no min, no results", manager) << manager << namedef << firstname << QVariant() << QVariant("aardvark") << false << 0 << true << 0 << es;
 
         /* now case sensitive */
-        newMRow("no max, cs, all results", manager) << manager << namedef << firstname << QVariant("A") << QVariant() << false << 0 << true << csflag << "abcdefg";
-        newMRow("no max, cs, some results", manager) << manager << namedef << firstname << QVariant("Bob") << QVariant() << false << 0 << true << csflag << "bcdefg";
-        newMRow("no max, cs, no results", manager) << manager << namedef << firstname << QVariant("Zambezi") << QVariant() << false << 0 << true << csflag << es;
-        newMRow("no min, cs, all results", manager) << manager << namedef << firstname << QVariant() << QVariant("Zambezi") << false << 0 << true << csflag << "abcdefg";
+        newMRow("no max, cs, all results", manager) << manager << namedef << firstname << QVariant("A") << QVariant() << false << 0 << true << csflag << "abcdefghijk";
+        newMRow("no max, cs, some results", manager) << manager << namedef << firstname << QVariant("Bob") << QVariant() << false << 0 << true << csflag << "bcdefghijk";
+        newMRow("no max, cs, no results", manager) << manager << namedef << firstname << QVariant("Xambezi") << QVariant() << false << 0 << true << csflag << "hijk";
+        newMRow("no min, cs, most results", manager) << manager << namedef << firstname << QVariant() << QVariant("Xambezi") << false << 0 << true << csflag << "abcdefg";
         newMRow("no min, cs, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("Bob") << false << 0 << true << csflag << "a";
         newMRow("no min, cs, no results", manager) << manager << namedef << firstname << QVariant() << QVariant("Aardvark") << false << 0 << true << csflag << es;
 
         /* due to ascii sorting, most lower case parameters give all results, which is boring */
-        newMRow("no max, cs, badcase, all results", manager) << manager << namedef << firstname << QVariant("A") << QVariant() << false << 0 << true << csflag << "abcdefg";
-        newMRow("no max, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant("BOB") << QVariant() << false << 0 << true << csflag << "bcdefg";
-        newMRow("no max, cs, badcase, no results", manager) << manager << namedef << firstname << QVariant("ZAMBEZI") << QVariant() << false << 0 << true << csflag << es;
-        newMRow("no min, cs, badcase, all results", manager) << manager << namedef << firstname << QVariant() << QVariant("ZAMBEZI") << false << 0 << true << csflag << "abcdefg";
-        newMRow("no min, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("BOB") << false << 0 << true << csflag << "a";
+        newMRow("no max, cs, badcase, all results", manager) << manager << namedef << firstname << QVariant("A") << QVariant() << false << 0 << true << csflag << "abcdefghijk";
+        if(localeCapsFirst) {
+            newMRow("no max, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant("BOB") << QVariant() << false << 0 << true << csflag << "bcdefghijk";
+        } else {
+            newMRow("no max, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant("BOB") << QVariant() << false << 0 << true << csflag << "cdefghijk";
+        }
+
+        newMRow("no max, cs, badcase, no results", manager) << manager << namedef << firstname << QVariant("XAMBEZI") << QVariant() << false << 0 << true << csflag << "hijk";
+        newMRow("no min, cs, badcase, all results", manager) << manager << namedef << firstname << QVariant() << QVariant("XAMBEZI") << false << 0 << true << csflag << "abcdefg";
+        if(localeCapsFirst) {
+            newMRow("no min, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("BOB") << false << 0 << true << csflag << "a";
+        } else {
+            newMRow("no min, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("BOB") << false << 0 << true << csflag << "ab";
+        }
         newMRow("no min, cs, badcase, no results", manager) << manager << namedef << firstname << QVariant() << QVariant("AARDVARK") << false << 0 << true << csflag << es;
 
         /* 'a' has phone number ("5551212") */
@@ -867,36 +881,15 @@
         QTest::newRow("string range - startswith - 9") << manager << namedef << firstname << QVariant("Barry") << QVariant("C") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "bc";
 
         // Open ended starts with
-        QTest::newRow("string range - startswith open top - 1") << manager << namedef << firstname << QVariant("A") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefg";
-        QTest::newRow("string range - startswith open top - 2") << manager << namedef << firstname << QVariant("A") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefg";
-        QTest::newRow("string range - startswith open top - 3") << manager << namedef << firstname << QVariant("Aaron") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefg";
-        QTest::newRow("string range - startswith open top - 4") << manager << namedef << firstname << QVariant("Aaron") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchStartsWith) << "bcdefg";
+        QTest::newRow("string range - startswith open top - 1") << manager << namedef << firstname << QVariant("A") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefghijk";
+        QTest::newRow("string range - startswith open top - 2") << manager << namedef << firstname << QVariant("A") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefghijk";
+        QTest::newRow("string range - startswith open top - 3") << manager << namedef << firstname << QVariant("Aaron") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefghijk";
+        QTest::newRow("string range - startswith open top - 4") << manager << namedef << firstname << QVariant("Aaron") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchStartsWith) << "bcdefghijk";
         QTest::newRow("string range - startswith open bottom - 1") << manager << namedef << firstname << ev << QVariant("Borit") << true << (int)(QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchStartsWith) << "abc";
         QTest::newRow("string range - startswith open bottom - 2") << manager << namedef << firstname << ev << QVariant("Borit") << true << (int)(QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "abc";
         QTest::newRow("string range - startswith open bottom - 3") << manager << namedef << firstname << ev << QVariant("Boris") << true << (int)(QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchStartsWith) << "abc";
         QTest::newRow("string range - startswith open bottom - 4") << manager << namedef << firstname << ev << QVariant("Boris") << true << (int)(QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "ab";
 
-        // Qt::MatchContains with range is invalid
-        QTest::newRow("string range - contains - 1") << manager << namedef << firstname << QVariant("A") << QVariant("Bob") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchContains) << es;
-
-        // Check EndsWith with range: A == son, B == sen, C == sun
-        QTest::newRow("string range - endswith - 1") << manager << namedef << lastname << QVariant("sen") << QVariant("son") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchEndsWith) << es;
-        QTest::newRow("string range - endswith - 2") << manager << namedef << lastname << QVariant("sen") << QVariant("son") << true << (int)(QContactDetailRangeFilter::IncludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchEndsWith) << "b";
-        QTest::newRow("string range - endswith - 3") << manager << namedef << lastname << QVariant("sen") << QVariant("son") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchEndsWith) << "a";
-        QTest::newRow("string range - endswith - 4") << manager << namedef << lastname << QVariant("sen") << QVariant("son") << true << (int)(QContactDetailRangeFilter::IncludeLower | QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchEndsWith) << "ab";
-        QTest::newRow("string range - endswith - 5") << manager << namedef << lastname << QVariant("sen") << QVariant("sun") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchEndsWith) << "ac";
-        QTest::newRow("string range - endswith - 6") << manager << namedef << lastname << QVariant("sen") << QVariant("sun") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchEndsWith) << "a";
-
-        // Endswith with open ends
-        QTest::newRow("string range - endswith no max - 1") << manager << namedef << lastname << QVariant("sen") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchEndsWith) << "acdg";
-        QTest::newRow("string range - endswith no max - 2") << manager << namedef << lastname << QVariant("sen") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchEndsWith) << "abcdg";
-        QTest::newRow("string range - endswith no max - 3") << manager << namedef << lastname << QVariant("sem") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchEndsWith) << "abcdg";
-        QTest::newRow("string range - endswith no max - 4") << manager << namedef << lastname << QVariant("sem") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchEndsWith) << "abcdg";
-        QTest::newRow("string range - endswith no min - 1") << manager << namedef << lastname << ev << QVariant("sen") << true << (int)(QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchEndsWith) << "ef";
-        QTest::newRow("string range - endswith no min - 2") << manager << namedef << lastname << ev << QVariant("sen") << true << (int)(QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchEndsWith) << "bef";
-        QTest::newRow("string range - endswith no min - 3") << manager << namedef << lastname << ev << QVariant("seo") << true << (int)(QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchEndsWith) << "bef";
-        QTest::newRow("string range - endswith no min - 4") << manager << namedef << lastname << ev << QVariant("seo") << true << (int)(QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchEndsWith) << "bef";
-
         /* A(10), B(20), C(-20) */
         // Now integer range testing
         QPair<QString, QString> defAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("Integer");
@@ -2025,14 +2018,22 @@
     QTest::addColumn<int>("directioni");
     QTest::addColumn<bool>("setbp");
     QTest::addColumn<int>("blankpolicyi");
+    QTest::addColumn<int>("casesensitivityi");
     QTest::addColumn<QString>("expected");
     QTest::addColumn<QString>("unstable");
 
     QString firstname = QContactName::FieldFirstName;
     QString lastname = QContactName::FieldLastName;
     QString namedef = QContactName::DefinitionName;
-    QString urldef = QContactUrl::DefinitionName;
-    QString urlfield = QContactUrl::FieldUrl;
+    QString dldef = QContactDisplayLabel::DefinitionName;
+    QString dlfld = QContactDisplayLabel::FieldLabel;
+
+    int asc = Qt::AscendingOrder;
+    int desc = Qt::DescendingOrder;
+    int bll = QContactSortOrder::BlanksLast;
+    int blf = QContactSortOrder::BlanksFirst;
+    int cs = Qt::CaseSensitive;
+    int ci = Qt::CaseInsensitive;
 
     for (int i = 0; i < managers.size(); i++) {
         QContactManager *manager = managers.at(i);
@@ -2040,20 +2041,23 @@
         QPair<QString, QString> integerDefAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("Integer");
         QPair<QString, QString> stringDefAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("String");
 
-        newMRow("first ascending", manager) << manager << namedef << firstname << (int)(Qt::AscendingOrder) << false << 0 << "abcdefg" << "efg";  // efg have the same first name
-        newMRow("first descending", manager) << manager << namedef << firstname << (int)(Qt::DescendingOrder) << false << 0 << "efgdcba" << "efg";// efg have the same first name
-        newMRow("last ascending", manager) << manager << namedef << lastname << (int)(Qt::AscendingOrder) << false << 0 << "bacdefg" << "";       // all have a well defined, sortable last name
-        newMRow("last descending", manager) << manager << namedef << lastname << (int)(Qt::DescendingOrder) << false << 0 << "gfedcab" << "";     // all have a well defined, sortable last name
+        newMRow("first ascending", manager) << manager << namedef << firstname << asc << false << 0 << cs << "abcdefghjik" << "efg";  // efg have the same first name
+        newMRow("first descending", manager) << manager << namedef << firstname << desc << false << 0 << cs << "kijhefgdcba" << "efg";// efg have the same first name
+        newMRow("last ascending", manager) << manager << namedef << lastname << asc << false << 0 << cs << "bacdefghijk" << "hijk";       // all have a well defined, sortable last name except hijk
+        newMRow("last descending", manager) << manager << namedef << lastname << desc << false << 0 << cs << "gfedcabhijk" << "hijk";     // all have a well defined, sortable last name except hijk
         if (!integerDefAndFieldNames.first.isEmpty() && !integerDefAndFieldNames.second.isEmpty()) {
-            newMRow("integer ascending, blanks last", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << (int)(Qt::AscendingOrder) << true << (int)(QContactSortOrder::BlanksLast) << "cabgfed" << "gfed"; // gfed have no integer
-            newMRow("integer descending, blanks last", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << (int)(Qt::DescendingOrder) << true << (int)(QContactSortOrder::BlanksLast) << "bacgfed" << "gfed"; // gfed have no integer
-            newMRow("integer ascending, blanks first", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << (int)(Qt::AscendingOrder) << true << (int)(QContactSortOrder::BlanksFirst) << "defgcab" << "gfed"; // gfed have no integer
-            newMRow("integer descending, blanks first", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << (int)(Qt::DescendingOrder) << true << (int)(QContactSortOrder::BlanksFirst) << "defgbac" << "gfed"; // gfed have no integer
+            newMRow("integer ascending, blanks last", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << asc << true << bll << cs << "cabgfedhijk" << "gfedhijk"; // gfedhijk have no integer
+            newMRow("integer descending, blanks last", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << desc << true << bll << cs << "bacgfedhijk" << "gfedhijk"; // gfedhijk have no integer
+            newMRow("integer ascending, blanks first", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << asc << true << blf << cs << "hijkdefgcab" << "gfedhijk"; // gfedhijk have no integer
+            newMRow("integer descending, blanks first", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << desc << true << blf << cs << "hijkdefgbac" << "gfedhijk"; // gfedhijk have no integer
         }
         if (!stringDefAndFieldNames.first.isEmpty() && !stringDefAndFieldNames.second.isEmpty()) {
-            QTest::newRow("string ascending (null value), blanks first") << manager << stringDefAndFieldNames.first << stringDefAndFieldNames.second << (int)(Qt::AscendingOrder) << true << (int)(QContactSortOrder::BlanksFirst) << "feabcdg" << "fe"; // f and e have blank string
-            QTest::newRow("string ascending (null value), blanks last") << manager << stringDefAndFieldNames.first << stringDefAndFieldNames.second << (int)(Qt::AscendingOrder) << true << (int)(QContactSortOrder::BlanksLast) << "abcdgef" << "ef";   // f and e have blank string
+            QTest::newRow("string ascending (null value), blanks first") << manager << stringDefAndFieldNames.first << stringDefAndFieldNames.second << asc << true << blf << cs << "feabcdg" << "fehijk"; // f and e have blank string
+            QTest::newRow("string ascending (null value), blanks last") << manager << stringDefAndFieldNames.first << stringDefAndFieldNames.second << asc << true << bll << cs << "abcdgef" << "efhijk";   // f and e have blank string
         }
+
+        newMRow("display label insensitive", manager) << manager << dldef << dlfld << asc << false << 0 << cs << "abcdefghjik" << "efg";
+        newMRow("display label sensitive", manager) << manager << dldef << dlfld << asc << false << 0 << ci << "abcdefghjik" << "efg";
     }
 }
 
@@ -2193,68 +2197,71 @@
     QString phonedef = QContactPhoneNumber::DefinitionName;
     QString numberfield = QContactPhoneNumber::FieldNumber;
 
+    int asc = Qt::AscendingOrder;
+    int desc = Qt::DescendingOrder;
+
     for (int i = 0; i < managers.size(); i++) {
         QContactManager *manager = managers.at(i);
         QPair<QString, QString> stringDefAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("String");
 
         QTest::newRow("1") << manager
-                           << true << namedef << firstname << (int)(Qt::AscendingOrder)
-                           << true << namedef << lastname << (int)(Qt::AscendingOrder)
+                           << true << namedef << firstname << asc
+                           << true << namedef << lastname << asc
                            << "abcdefg" << false;
         QTest::newRow("2") << manager
-                           << true << namedef << firstname << (int)(Qt::AscendingOrder)
-                           << true << namedef << lastname << (int)(Qt::DescendingOrder)
+                           << true << namedef << firstname << asc
+                           << true << namedef << lastname << desc
                            << "abcdgfe" << false;
         QTest::newRow("3") << manager
-                           << true << namedef << firstname << (int)(Qt::DescendingOrder)
-                           << true << namedef << lastname << (int)(Qt::AscendingOrder)
+                           << true << namedef << firstname << desc
+                           << true << namedef << lastname << asc
                            << "efgdcba" << false;
         QTest::newRow("4") << manager
-                           << true << namedef << firstname << (int)(Qt::DescendingOrder)
-                           << true << namedef << lastname << (int)(Qt::DescendingOrder)
+                           << true << namedef << firstname << desc
+                           << true << namedef << lastname << desc
                            << "gfedcba" << false;
 
         QTest::newRow("5") << manager
-                           << true << namedef << firstname << (int)(Qt::AscendingOrder)
-                           << false << namedef << lastname << (int)(Qt::AscendingOrder)
+                           << true << namedef << firstname << asc
+                           << false << namedef << lastname << asc
                            << "abcdefg" << true;
 
         QTest::newRow("5b") << manager
-                           << true << namedef << firstname << (int)(Qt::AscendingOrder)
-                           << true << es << es << (int)(Qt::AscendingOrder)
+                           << true << namedef << firstname << asc
+                           << true << es << es << asc
                            << "abcdefg" << true;
 
         QTest::newRow("6") << manager
-                           << false << namedef << firstname << (int)(Qt::AscendingOrder)
-                           << true << namedef << lastname << (int)(Qt::AscendingOrder)
+                           << false << namedef << firstname << asc
+                           << true << namedef << lastname << asc
                            << "bacdefg" << false;
 
         // This test is completely unstable; no sort criteria means dependent upon internal sort order of manager.
         //QTest::newRow("7") << manager
-        //                   << false << namedef << firstname << (int)(Qt::AscendingOrder)
-        //                   << false << namedef << lastname << (int)(Qt::AscendingOrder)
+        //                   << false << namedef << firstname << asc
+        //                   << false << namedef << lastname << asc
         //                   << "abcdefg" << false; // XXX Isn't this totally unstable?
 
         if (!stringDefAndFieldNames.first.isEmpty() && !stringDefAndFieldNames.second.isEmpty()) {
             QTest::newRow("8") << manager
-                               << true << stringDefAndFieldNames.first << stringDefAndFieldNames.second << (int)(Qt::AscendingOrder)
-                               << false << stringDefAndFieldNames.first << stringDefAndFieldNames.second << (int)(Qt::DescendingOrder)
+                               << true << stringDefAndFieldNames.first << stringDefAndFieldNames.second << asc
+                               << false << stringDefAndFieldNames.first << stringDefAndFieldNames.second << desc
                                << "abcdgef" << false; // default policy = blanks last, and ef have no value (e is empty, f is null)
 
             QTest::newRow("8b") << manager
-                               << true << stringDefAndFieldNames.first << stringDefAndFieldNames.second << (int)(Qt::AscendingOrder)
-                               << false << es << es << (int)(Qt::DescendingOrder)
+                               << true << stringDefAndFieldNames.first << stringDefAndFieldNames.second << asc
+                               << false << es << es << desc
                                << "abcdgef" << false; // default policy = blanks last, and ef have no value (e is empty, f is null)
         }
 
         QTest::newRow("9") << manager
-                           << true << phonedef << numberfield << (int)(Qt::AscendingOrder)
-                           << true << namedef << lastname << (int)(Qt::DescendingOrder)
+                           << true << phonedef << numberfield << asc
+                           << true << namedef << lastname << desc
                            << "abgfedc" << false;
 
         QTest::newRow("10") << manager
-                            << true << namedef << firstname << (int)(Qt::AscendingOrder)
-                            << true << namedef << firstname << (int)(Qt::DescendingOrder)
+                            << true << namedef << firstname << asc
+                            << true << namedef << firstname << desc
                             << "abcdefg" << true;
 
     }
@@ -2295,6 +2302,12 @@
     QList<QContactLocalId> ids = cm->contactIds(sortOrders);
     QString output = convertIds(contacts, ids);
 
+    // Remove the display label tests
+    output.remove('h');
+    output.remove('i');
+    output.remove('j');
+    output.remove('k');
+
     // Just like the single sort test, we might get some contacts back in indeterminate order
     // (but their relative position with other contacts should not change)
     if (efgunstable) {
@@ -2916,6 +2929,36 @@
     originalContactCount += 7;
     Q_ASSERT(cm->contactIds().count() == originalContactCount);
 
+    /* Now some for the locale aware sorting */
+    QContact h, i, j, k;
+    QContactName n2;
+    n2.setFirstName("xander");
+    n2.setCustomLabel("xander");
+    h.saveDetail(&n2);
+    n2.setFirstName("Xander");
+    n2.setCustomLabel("Xander");
+    i.saveDetail(&n2);
+    n2.setFirstName("xAnder");
+    n2.setCustomLabel("xAnder");
+    j.saveDetail(&n2);
+    n2.setFirstName("Yarrow");
+    n2.setCustomLabel("Yarrow");
+    k.saveDetail(&n2);
+
+    // XXX add &aumlaut; or &acircum; etc to test those sort orders
+    h = cm->compatibleContact(h);
+    i = cm->compatibleContact(i);
+    j = cm->compatibleContact(j);
+    k = cm->compatibleContact(k);
+    successfulSave = cm->saveContact(&h);
+    Q_ASSERT(successfulSave);
+    successfulSave = cm->saveContact(&i);
+    Q_ASSERT(successfulSave);
+    successfulSave = cm->saveContact(&j);
+    Q_ASSERT(successfulSave);
+    successfulSave = cm->saveContact(&k);
+    Q_ASSERT(successfulSave);
+
     /* Ensure the last modified times are different */
     QTest::qSleep(napTime);
     QContactName modifiedName = c.detail(QContactName::DefinitionName);
@@ -2935,6 +2978,10 @@
     QTest::qSleep(napTime);
 
     /* Add our newly saved contacts to our internal list of added contacts */
+    contactsAddedToManagers.insert(cm, k.id().localId());
+    contactsAddedToManagers.insert(cm, j.id().localId());
+    contactsAddedToManagers.insert(cm, i.id().localId());
+    contactsAddedToManagers.insert(cm, h.id().localId());
     contactsAddedToManagers.insert(cm, g.id().localId());
     contactsAddedToManagers.insert(cm, f.id().localId());
     contactsAddedToManagers.insert(cm, e.id().localId());
@@ -2951,6 +2998,10 @@
     e = cm->contact(e.id().localId());
     f = cm->contact(f.id().localId());
     g = cm->contact(g.id().localId());
+    h = cm->contact(h.id().localId());
+    i = cm->contact(i.id().localId());
+    j = cm->contact(j.id().localId());
+    k = cm->contact(k.id().localId());
 
     QList<QContactLocalId> list;
     if (!a.isEmpty())
@@ -2967,6 +3018,14 @@
         list << f.id().localId();
     if (!g.isEmpty())
         list << g.id().localId();
+    if (!h.isEmpty())
+        list << h.id().localId();
+    if (!i.isEmpty())
+        list << i.id().localId();
+    if (!j.isEmpty())
+        list << j.id().localId();
+    if (!k.isEmpty())
+        list << k.id().localId();
 
     return list;
 }