796 QString firstname = QContactName::FieldFirstName; |
800 QString firstname = QContactName::FieldFirstName; |
797 QString lastname = QContactName::FieldLastName; |
801 QString lastname = QContactName::FieldLastName; |
798 |
802 |
799 QString phonedef = QContactPhoneNumber::DefinitionName; |
803 QString phonedef = QContactPhoneNumber::DefinitionName; |
800 QString phonenum = QContactPhoneNumber::FieldNumber; |
804 QString phonenum = QContactPhoneNumber::FieldNumber; |
|
805 bool localeCapsFirst = (QString("aaa").localeAwareCompare(QString("AAA")) > 0); |
801 |
806 |
802 int csflag = (int)Qt::MatchCaseSensitive; |
807 int csflag = (int)Qt::MatchCaseSensitive; |
803 |
808 |
804 for (int i = 0; i < managers.size(); i++) { |
809 for (int i = 0; i < managers.size(); i++) { |
805 QContactManager *manager = managers.at(i); |
810 QContactManager *manager = managers.at(i); |
806 |
811 |
807 /* First, cover the "empty defname / fieldname / ranges" cases */ |
812 /* First, cover the "empty defname / fieldname / ranges" cases */ |
808 newMRow("invalid defname", manager) << manager << es << firstname << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << es; |
813 newMRow("invalid defname", manager) << manager << es << firstname << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << es; |
809 newMRow("defn presence test", manager) << manager << namedef << es << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << "abcdefg"; |
814 newMRow("defn presence test", manager) << manager << namedef << es << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << "abcdefghijk"; |
810 newMRow("field presence test", manager) << manager << phonedef << phonenum << QVariant() << QVariant() << false << 0 << true << 0 << "ab"; |
815 newMRow("field presence test", manager) << manager << phonedef << phonenum << QVariant() << QVariant() << false << 0 << true << 0 << "ab"; |
811 newMRow("good def, bad field", manager) << manager << namedef << "Bongo" << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << es; |
816 newMRow("good def, bad field", manager) << manager << namedef << "Bongo" << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << es; |
812 newMRow("bad def", manager) << manager << "Bongo" << es << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << es; |
817 newMRow("bad def", manager) << manager << "Bongo" << es << QVariant("A") << QVariant("Bob") << false << 0 << true << 0 << es; |
813 |
818 |
814 /* Presence for fields that aren't there */ |
819 /* Presence for fields that aren't there */ |
815 newMRow("defn presence test negative", manager) << manager << "Burgers" << es << ev << ev << false << 0 << false << 0 << es; |
820 newMRow("defn presence test negative", manager) << manager << "Burgers" << es << ev << ev << false << 0 << false << 0 << es; |
816 newMRow("field presence test negative", manager) << manager << "Burgers" << "Beef" << ev << ev << false << 0 << false << 0 << es; |
821 newMRow("field presence test negative", manager) << manager << "Burgers" << "Beef" << ev << ev << false << 0 << false << 0 << es; |
817 newMRow("defn yes, field no presence test negative", manager) << manager << namedef << "Burger" << ev << ev << false << 0 << false << 0 << es; |
822 newMRow("defn yes, field no presence test negative", manager) << manager << namedef << "Burger" << ev << ev << false << 0 << false << 0 << es; |
818 |
823 |
819 newMRow("no max, all results", manager) << manager << namedef << firstname << QVariant("a") << QVariant() << false << 0 << true << 0 << "abcdefg"; |
824 newMRow("no max, all results", manager) << manager << namedef << firstname << QVariant("a") << QVariant() << false << 0 << true << 0 << "abcdefghijk"; |
820 newMRow("no max, some results", manager) << manager << namedef << firstname << QVariant("BOB") << QVariant() << false << 0 << true << 0 << "bcdefg"; |
825 newMRow("no max, some results", manager) << manager << namedef << firstname << QVariant("bob") << QVariant() << false << 0 << true << 0 << "bcdefghijk"; |
821 newMRow("no max, no results", manager) << manager << namedef << firstname << QVariant("ZamBeZI") << QVariant() << false << 0 << true << 0 << es; |
826 newMRow("no max, no results", manager) << manager << namedef << firstname << QVariant("ZamBeZI") << QVariant() << false << 0 << true << 0 << es; |
822 newMRow("no min, all results", manager) << manager << namedef << firstname << QVariant() << QVariant("zambezi") << false << 0 << true << 0 << "abcdefg"; |
827 newMRow("no min, all results", manager) << manager << namedef << firstname << QVariant() << QVariant("zambezi") << false << 0 << true << 0 << "abcdefghijk"; |
823 newMRow("no min, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("bOb") << false << 0 << true << 0 << "a"; |
828 newMRow("no min, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("bOb") << false << 0 << true << 0 << "a"; |
824 newMRow("no min, no results", manager) << manager << namedef << firstname << QVariant() << QVariant("aardvark") << false << 0 << true << 0 << es; |
829 newMRow("no min, no results", manager) << manager << namedef << firstname << QVariant() << QVariant("aardvark") << false << 0 << true << 0 << es; |
825 |
830 |
826 /* now case sensitive */ |
831 /* now case sensitive */ |
827 newMRow("no max, cs, all results", manager) << manager << namedef << firstname << QVariant("A") << QVariant() << false << 0 << true << csflag << "abcdefg"; |
832 newMRow("no max, cs, all results", manager) << manager << namedef << firstname << QVariant("A") << QVariant() << false << 0 << true << csflag << "abcdefghijk"; |
828 newMRow("no max, cs, some results", manager) << manager << namedef << firstname << QVariant("Bob") << QVariant() << false << 0 << true << csflag << "bcdefg"; |
833 newMRow("no max, cs, some results", manager) << manager << namedef << firstname << QVariant("Bob") << QVariant() << false << 0 << true << csflag << "bcdefghijk"; |
829 newMRow("no max, cs, no results", manager) << manager << namedef << firstname << QVariant("Zambezi") << QVariant() << false << 0 << true << csflag << es; |
834 newMRow("no max, cs, no results", manager) << manager << namedef << firstname << QVariant("Xambezi") << QVariant() << false << 0 << true << csflag << "hijk"; |
830 newMRow("no min, cs, all results", manager) << manager << namedef << firstname << QVariant() << QVariant("Zambezi") << false << 0 << true << csflag << "abcdefg"; |
835 newMRow("no min, cs, most results", manager) << manager << namedef << firstname << QVariant() << QVariant("Xambezi") << false << 0 << true << csflag << "abcdefg"; |
831 newMRow("no min, cs, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("Bob") << false << 0 << true << csflag << "a"; |
836 newMRow("no min, cs, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("Bob") << false << 0 << true << csflag << "a"; |
832 newMRow("no min, cs, no results", manager) << manager << namedef << firstname << QVariant() << QVariant("Aardvark") << false << 0 << true << csflag << es; |
837 newMRow("no min, cs, no results", manager) << manager << namedef << firstname << QVariant() << QVariant("Aardvark") << false << 0 << true << csflag << es; |
833 |
838 |
834 /* due to ascii sorting, most lower case parameters give all results, which is boring */ |
839 /* due to ascii sorting, most lower case parameters give all results, which is boring */ |
835 newMRow("no max, cs, badcase, all results", manager) << manager << namedef << firstname << QVariant("A") << QVariant() << false << 0 << true << csflag << "abcdefg"; |
840 newMRow("no max, cs, badcase, all results", manager) << manager << namedef << firstname << QVariant("A") << QVariant() << false << 0 << true << csflag << "abcdefghijk"; |
836 newMRow("no max, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant("BOB") << QVariant() << false << 0 << true << csflag << "bcdefg"; |
841 if(localeCapsFirst) { |
837 newMRow("no max, cs, badcase, no results", manager) << manager << namedef << firstname << QVariant("ZAMBEZI") << QVariant() << false << 0 << true << csflag << es; |
842 newMRow("no max, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant("BOB") << QVariant() << false << 0 << true << csflag << "bcdefghijk"; |
838 newMRow("no min, cs, badcase, all results", manager) << manager << namedef << firstname << QVariant() << QVariant("ZAMBEZI") << false << 0 << true << csflag << "abcdefg"; |
843 } else { |
839 newMRow("no min, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("BOB") << false << 0 << true << csflag << "a"; |
844 newMRow("no max, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant("BOB") << QVariant() << false << 0 << true << csflag << "cdefghijk"; |
|
845 } |
|
846 |
|
847 newMRow("no max, cs, badcase, no results", manager) << manager << namedef << firstname << QVariant("XAMBEZI") << QVariant() << false << 0 << true << csflag << "hijk"; |
|
848 newMRow("no min, cs, badcase, all results", manager) << manager << namedef << firstname << QVariant() << QVariant("XAMBEZI") << false << 0 << true << csflag << "abcdefg"; |
|
849 if(localeCapsFirst) { |
|
850 newMRow("no min, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("BOB") << false << 0 << true << csflag << "a"; |
|
851 } else { |
|
852 newMRow("no min, cs, badcase, some results", manager) << manager << namedef << firstname << QVariant() << QVariant("BOB") << false << 0 << true << csflag << "ab"; |
|
853 } |
840 newMRow("no min, cs, badcase, no results", manager) << manager << namedef << firstname << QVariant() << QVariant("AARDVARK") << false << 0 << true << csflag << es; |
854 newMRow("no min, cs, badcase, no results", manager) << manager << namedef << firstname << QVariant() << QVariant("AARDVARK") << false << 0 << true << csflag << es; |
841 |
855 |
842 /* 'a' has phone number ("5551212") */ |
856 /* 'a' has phone number ("5551212") */ |
843 QTest::newRow("range1") << manager << phonedef << phonenum << QVariant("5551200") << QVariant("5551220") << false << 0 << false << 0 << "a"; |
857 QTest::newRow("range1") << manager << phonedef << phonenum << QVariant("5551200") << QVariant("5551220") << false << 0 << false << 0 << "a"; |
844 |
858 |
865 QTest::newRow("string range - startswith - 7") << manager << namedef << firstname << QVariant("Bob") << QVariant("C") << true << (int)(QContactDetailRangeFilter::IncludeLower | QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchStartsWith) << "bc"; |
879 QTest::newRow("string range - startswith - 7") << manager << namedef << firstname << QVariant("Bob") << QVariant("C") << true << (int)(QContactDetailRangeFilter::IncludeLower | QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchStartsWith) << "bc"; |
866 QTest::newRow("string range - startswith - 8") << manager << namedef << firstname << QVariant("Bob") << QVariant("C") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "c"; |
880 QTest::newRow("string range - startswith - 8") << manager << namedef << firstname << QVariant("Bob") << QVariant("C") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "c"; |
867 QTest::newRow("string range - startswith - 9") << manager << namedef << firstname << QVariant("Barry") << QVariant("C") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "bc"; |
881 QTest::newRow("string range - startswith - 9") << manager << namedef << firstname << QVariant("Barry") << QVariant("C") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "bc"; |
868 |
882 |
869 // Open ended starts with |
883 // Open ended starts with |
870 QTest::newRow("string range - startswith open top - 1") << manager << namedef << firstname << QVariant("A") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefg"; |
884 QTest::newRow("string range - startswith open top - 1") << manager << namedef << firstname << QVariant("A") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefghijk"; |
871 QTest::newRow("string range - startswith open top - 2") << manager << namedef << firstname << QVariant("A") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefg"; |
885 QTest::newRow("string range - startswith open top - 2") << manager << namedef << firstname << QVariant("A") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefghijk"; |
872 QTest::newRow("string range - startswith open top - 3") << manager << namedef << firstname << QVariant("Aaron") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefg"; |
886 QTest::newRow("string range - startswith open top - 3") << manager << namedef << firstname << QVariant("Aaron") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchStartsWith) << "abcdefghijk"; |
873 QTest::newRow("string range - startswith open top - 4") << manager << namedef << firstname << QVariant("Aaron") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchStartsWith) << "bcdefg"; |
887 QTest::newRow("string range - startswith open top - 4") << manager << namedef << firstname << QVariant("Aaron") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchStartsWith) << "bcdefghijk"; |
874 QTest::newRow("string range - startswith open bottom - 1") << manager << namedef << firstname << ev << QVariant("Borit") << true << (int)(QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchStartsWith) << "abc"; |
888 QTest::newRow("string range - startswith open bottom - 1") << manager << namedef << firstname << ev << QVariant("Borit") << true << (int)(QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchStartsWith) << "abc"; |
875 QTest::newRow("string range - startswith open bottom - 2") << manager << namedef << firstname << ev << QVariant("Borit") << true << (int)(QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "abc"; |
889 QTest::newRow("string range - startswith open bottom - 2") << manager << namedef << firstname << ev << QVariant("Borit") << true << (int)(QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "abc"; |
876 QTest::newRow("string range - startswith open bottom - 3") << manager << namedef << firstname << ev << QVariant("Boris") << true << (int)(QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchStartsWith) << "abc"; |
890 QTest::newRow("string range - startswith open bottom - 3") << manager << namedef << firstname << ev << QVariant("Boris") << true << (int)(QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchStartsWith) << "abc"; |
877 QTest::newRow("string range - startswith open bottom - 4") << manager << namedef << firstname << ev << QVariant("Boris") << true << (int)(QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "ab"; |
891 QTest::newRow("string range - startswith open bottom - 4") << manager << namedef << firstname << ev << QVariant("Boris") << true << (int)(QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchStartsWith) << "ab"; |
878 |
|
879 // Qt::MatchContains with range is invalid |
|
880 QTest::newRow("string range - contains - 1") << manager << namedef << firstname << QVariant("A") << QVariant("Bob") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchContains) << es; |
|
881 |
|
882 // Check EndsWith with range: A == son, B == sen, C == sun |
|
883 QTest::newRow("string range - endswith - 1") << manager << namedef << lastname << QVariant("sen") << QVariant("son") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchEndsWith) << es; |
|
884 QTest::newRow("string range - endswith - 2") << manager << namedef << lastname << QVariant("sen") << QVariant("son") << true << (int)(QContactDetailRangeFilter::IncludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchEndsWith) << "b"; |
|
885 QTest::newRow("string range - endswith - 3") << manager << namedef << lastname << QVariant("sen") << QVariant("son") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchEndsWith) << "a"; |
|
886 QTest::newRow("string range - endswith - 4") << manager << namedef << lastname << QVariant("sen") << QVariant("son") << true << (int)(QContactDetailRangeFilter::IncludeLower | QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchEndsWith) << "ab"; |
|
887 QTest::newRow("string range - endswith - 5") << manager << namedef << lastname << QVariant("sen") << QVariant("sun") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchEndsWith) << "ac"; |
|
888 QTest::newRow("string range - endswith - 6") << manager << namedef << lastname << QVariant("sen") << QVariant("sun") << true << (int)(QContactDetailRangeFilter::ExcludeLower | QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchEndsWith) << "a"; |
|
889 |
|
890 // Endswith with open ends |
|
891 QTest::newRow("string range - endswith no max - 1") << manager << namedef << lastname << QVariant("sen") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchEndsWith) << "acdg"; |
|
892 QTest::newRow("string range - endswith no max - 2") << manager << namedef << lastname << QVariant("sen") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchEndsWith) << "abcdg"; |
|
893 QTest::newRow("string range - endswith no max - 3") << manager << namedef << lastname << QVariant("sem") << ev << true << (int)(QContactDetailRangeFilter::ExcludeLower) << true << (int)(Qt::MatchEndsWith) << "abcdg"; |
|
894 QTest::newRow("string range - endswith no max - 4") << manager << namedef << lastname << QVariant("sem") << ev << true << (int)(QContactDetailRangeFilter::IncludeLower) << true << (int)(Qt::MatchEndsWith) << "abcdg"; |
|
895 QTest::newRow("string range - endswith no min - 1") << manager << namedef << lastname << ev << QVariant("sen") << true << (int)(QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchEndsWith) << "ef"; |
|
896 QTest::newRow("string range - endswith no min - 2") << manager << namedef << lastname << ev << QVariant("sen") << true << (int)(QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchEndsWith) << "bef"; |
|
897 QTest::newRow("string range - endswith no min - 3") << manager << namedef << lastname << ev << QVariant("seo") << true << (int)(QContactDetailRangeFilter::ExcludeUpper) << true << (int)(Qt::MatchEndsWith) << "bef"; |
|
898 QTest::newRow("string range - endswith no min - 4") << manager << namedef << lastname << ev << QVariant("seo") << true << (int)(QContactDetailRangeFilter::IncludeUpper) << true << (int)(Qt::MatchEndsWith) << "bef"; |
|
899 |
892 |
900 /* A(10), B(20), C(-20) */ |
893 /* A(10), B(20), C(-20) */ |
901 // Now integer range testing |
894 // Now integer range testing |
902 QPair<QString, QString> defAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("Integer"); |
895 QPair<QString, QString> defAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("Integer"); |
903 if (!defAndFieldNames.first.isEmpty() && !defAndFieldNames.second.isEmpty()) { |
896 if (!defAndFieldNames.first.isEmpty() && !defAndFieldNames.second.isEmpty()) { |
2023 QTest::addColumn<QString>("defname"); |
2016 QTest::addColumn<QString>("defname"); |
2024 QTest::addColumn<QString>("fieldname"); |
2017 QTest::addColumn<QString>("fieldname"); |
2025 QTest::addColumn<int>("directioni"); |
2018 QTest::addColumn<int>("directioni"); |
2026 QTest::addColumn<bool>("setbp"); |
2019 QTest::addColumn<bool>("setbp"); |
2027 QTest::addColumn<int>("blankpolicyi"); |
2020 QTest::addColumn<int>("blankpolicyi"); |
|
2021 QTest::addColumn<int>("casesensitivityi"); |
2028 QTest::addColumn<QString>("expected"); |
2022 QTest::addColumn<QString>("expected"); |
2029 QTest::addColumn<QString>("unstable"); |
2023 QTest::addColumn<QString>("unstable"); |
2030 |
2024 |
2031 QString firstname = QContactName::FieldFirstName; |
2025 QString firstname = QContactName::FieldFirstName; |
2032 QString lastname = QContactName::FieldLastName; |
2026 QString lastname = QContactName::FieldLastName; |
2033 QString namedef = QContactName::DefinitionName; |
2027 QString namedef = QContactName::DefinitionName; |
2034 QString urldef = QContactUrl::DefinitionName; |
2028 QString dldef = QContactDisplayLabel::DefinitionName; |
2035 QString urlfield = QContactUrl::FieldUrl; |
2029 QString dlfld = QContactDisplayLabel::FieldLabel; |
|
2030 |
|
2031 int asc = Qt::AscendingOrder; |
|
2032 int desc = Qt::DescendingOrder; |
|
2033 int bll = QContactSortOrder::BlanksLast; |
|
2034 int blf = QContactSortOrder::BlanksFirst; |
|
2035 int cs = Qt::CaseSensitive; |
|
2036 int ci = Qt::CaseInsensitive; |
2036 |
2037 |
2037 for (int i = 0; i < managers.size(); i++) { |
2038 for (int i = 0; i < managers.size(); i++) { |
2038 QContactManager *manager = managers.at(i); |
2039 QContactManager *manager = managers.at(i); |
2039 |
2040 |
2040 QPair<QString, QString> integerDefAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("Integer"); |
2041 QPair<QString, QString> integerDefAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("Integer"); |
2041 QPair<QString, QString> stringDefAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("String"); |
2042 QPair<QString, QString> stringDefAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("String"); |
2042 |
2043 |
2043 newMRow("first ascending", manager) << manager << namedef << firstname << (int)(Qt::AscendingOrder) << false << 0 << "abcdefg" << "efg"; // efg have the same first name |
2044 newMRow("first ascending", manager) << manager << namedef << firstname << asc << false << 0 << cs << "abcdefghjik" << "efg"; // efg have the same first name |
2044 newMRow("first descending", manager) << manager << namedef << firstname << (int)(Qt::DescendingOrder) << false << 0 << "efgdcba" << "efg";// efg have the same first name |
2045 newMRow("first descending", manager) << manager << namedef << firstname << desc << false << 0 << cs << "kijhefgdcba" << "efg";// efg have the same first name |
2045 newMRow("last ascending", manager) << manager << namedef << lastname << (int)(Qt::AscendingOrder) << false << 0 << "bacdefg" << ""; // all have a well defined, sortable last name |
2046 newMRow("last ascending", manager) << manager << namedef << lastname << asc << false << 0 << cs << "bacdefghijk" << "hijk"; // all have a well defined, sortable last name except hijk |
2046 newMRow("last descending", manager) << manager << namedef << lastname << (int)(Qt::DescendingOrder) << false << 0 << "gfedcab" << ""; // all have a well defined, sortable last name |
2047 newMRow("last descending", manager) << manager << namedef << lastname << desc << false << 0 << cs << "gfedcabhijk" << "hijk"; // all have a well defined, sortable last name except hijk |
2047 if (!integerDefAndFieldNames.first.isEmpty() && !integerDefAndFieldNames.second.isEmpty()) { |
2048 if (!integerDefAndFieldNames.first.isEmpty() && !integerDefAndFieldNames.second.isEmpty()) { |
2048 newMRow("integer ascending, blanks last", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << (int)(Qt::AscendingOrder) << true << (int)(QContactSortOrder::BlanksLast) << "cabgfed" << "gfed"; // gfed have no integer |
2049 newMRow("integer ascending, blanks last", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << asc << true << bll << cs << "cabgfedhijk" << "gfedhijk"; // gfedhijk have no integer |
2049 newMRow("integer descending, blanks last", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << (int)(Qt::DescendingOrder) << true << (int)(QContactSortOrder::BlanksLast) << "bacgfed" << "gfed"; // gfed have no integer |
2050 newMRow("integer descending, blanks last", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << desc << true << bll << cs << "bacgfedhijk" << "gfedhijk"; // gfedhijk have no integer |
2050 newMRow("integer ascending, blanks first", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << (int)(Qt::AscendingOrder) << true << (int)(QContactSortOrder::BlanksFirst) << "defgcab" << "gfed"; // gfed have no integer |
2051 newMRow("integer ascending, blanks first", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << asc << true << blf << cs << "hijkdefgcab" << "gfedhijk"; // gfedhijk have no integer |
2051 newMRow("integer descending, blanks first", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << (int)(Qt::DescendingOrder) << true << (int)(QContactSortOrder::BlanksFirst) << "defgbac" << "gfed"; // gfed have no integer |
2052 newMRow("integer descending, blanks first", manager) << manager << integerDefAndFieldNames.first << integerDefAndFieldNames.second << desc << true << blf << cs << "hijkdefgbac" << "gfedhijk"; // gfedhijk have no integer |
2052 } |
2053 } |
2053 if (!stringDefAndFieldNames.first.isEmpty() && !stringDefAndFieldNames.second.isEmpty()) { |
2054 if (!stringDefAndFieldNames.first.isEmpty() && !stringDefAndFieldNames.second.isEmpty()) { |
2054 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 |
2055 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 |
2055 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 |
2056 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 |
2056 } |
2057 } |
|
2058 |
|
2059 newMRow("display label insensitive", manager) << manager << dldef << dlfld << asc << false << 0 << cs << "abcdefghjik" << "efg"; |
|
2060 newMRow("display label sensitive", manager) << manager << dldef << dlfld << asc << false << 0 << ci << "abcdefghjik" << "efg"; |
2057 } |
2061 } |
2058 } |
2062 } |
2059 |
2063 |
2060 void tst_QContactManagerFiltering::sorting() |
2064 void tst_QContactManagerFiltering::sorting() |
2061 { |
2065 { |
2191 QString lastname = QContactName::FieldLastName; |
2195 QString lastname = QContactName::FieldLastName; |
2192 QString namedef = QContactName::DefinitionName; |
2196 QString namedef = QContactName::DefinitionName; |
2193 QString phonedef = QContactPhoneNumber::DefinitionName; |
2197 QString phonedef = QContactPhoneNumber::DefinitionName; |
2194 QString numberfield = QContactPhoneNumber::FieldNumber; |
2198 QString numberfield = QContactPhoneNumber::FieldNumber; |
2195 |
2199 |
|
2200 int asc = Qt::AscendingOrder; |
|
2201 int desc = Qt::DescendingOrder; |
|
2202 |
2196 for (int i = 0; i < managers.size(); i++) { |
2203 for (int i = 0; i < managers.size(); i++) { |
2197 QContactManager *manager = managers.at(i); |
2204 QContactManager *manager = managers.at(i); |
2198 QPair<QString, QString> stringDefAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("String"); |
2205 QPair<QString, QString> stringDefAndFieldNames = defAndFieldNamesForTypePerManager.value(manager).value("String"); |
2199 |
2206 |
2200 QTest::newRow("1") << manager |
2207 QTest::newRow("1") << manager |
2201 << true << namedef << firstname << (int)(Qt::AscendingOrder) |
2208 << true << namedef << firstname << asc |
2202 << true << namedef << lastname << (int)(Qt::AscendingOrder) |
2209 << true << namedef << lastname << asc |
2203 << "abcdefg" << false; |
2210 << "abcdefg" << false; |
2204 QTest::newRow("2") << manager |
2211 QTest::newRow("2") << manager |
2205 << true << namedef << firstname << (int)(Qt::AscendingOrder) |
2212 << true << namedef << firstname << asc |
2206 << true << namedef << lastname << (int)(Qt::DescendingOrder) |
2213 << true << namedef << lastname << desc |
2207 << "abcdgfe" << false; |
2214 << "abcdgfe" << false; |
2208 QTest::newRow("3") << manager |
2215 QTest::newRow("3") << manager |
2209 << true << namedef << firstname << (int)(Qt::DescendingOrder) |
2216 << true << namedef << firstname << desc |
2210 << true << namedef << lastname << (int)(Qt::AscendingOrder) |
2217 << true << namedef << lastname << asc |
2211 << "efgdcba" << false; |
2218 << "efgdcba" << false; |
2212 QTest::newRow("4") << manager |
2219 QTest::newRow("4") << manager |
2213 << true << namedef << firstname << (int)(Qt::DescendingOrder) |
2220 << true << namedef << firstname << desc |
2214 << true << namedef << lastname << (int)(Qt::DescendingOrder) |
2221 << true << namedef << lastname << desc |
2215 << "gfedcba" << false; |
2222 << "gfedcba" << false; |
2216 |
2223 |
2217 QTest::newRow("5") << manager |
2224 QTest::newRow("5") << manager |
2218 << true << namedef << firstname << (int)(Qt::AscendingOrder) |
2225 << true << namedef << firstname << asc |
2219 << false << namedef << lastname << (int)(Qt::AscendingOrder) |
2226 << false << namedef << lastname << asc |
2220 << "abcdefg" << true; |
2227 << "abcdefg" << true; |
2221 |
2228 |
2222 QTest::newRow("5b") << manager |
2229 QTest::newRow("5b") << manager |
2223 << true << namedef << firstname << (int)(Qt::AscendingOrder) |
2230 << true << namedef << firstname << asc |
2224 << true << es << es << (int)(Qt::AscendingOrder) |
2231 << true << es << es << asc |
2225 << "abcdefg" << true; |
2232 << "abcdefg" << true; |
2226 |
2233 |
2227 QTest::newRow("6") << manager |
2234 QTest::newRow("6") << manager |
2228 << false << namedef << firstname << (int)(Qt::AscendingOrder) |
2235 << false << namedef << firstname << asc |
2229 << true << namedef << lastname << (int)(Qt::AscendingOrder) |
2236 << true << namedef << lastname << asc |
2230 << "bacdefg" << false; |
2237 << "bacdefg" << false; |
2231 |
2238 |
2232 // This test is completely unstable; no sort criteria means dependent upon internal sort order of manager. |
2239 // This test is completely unstable; no sort criteria means dependent upon internal sort order of manager. |
2233 //QTest::newRow("7") << manager |
2240 //QTest::newRow("7") << manager |
2234 // << false << namedef << firstname << (int)(Qt::AscendingOrder) |
2241 // << false << namedef << firstname << asc |
2235 // << false << namedef << lastname << (int)(Qt::AscendingOrder) |
2242 // << false << namedef << lastname << asc |
2236 // << "abcdefg" << false; // XXX Isn't this totally unstable? |
2243 // << "abcdefg" << false; // XXX Isn't this totally unstable? |
2237 |
2244 |
2238 if (!stringDefAndFieldNames.first.isEmpty() && !stringDefAndFieldNames.second.isEmpty()) { |
2245 if (!stringDefAndFieldNames.first.isEmpty() && !stringDefAndFieldNames.second.isEmpty()) { |
2239 QTest::newRow("8") << manager |
2246 QTest::newRow("8") << manager |
2240 << true << stringDefAndFieldNames.first << stringDefAndFieldNames.second << (int)(Qt::AscendingOrder) |
2247 << true << stringDefAndFieldNames.first << stringDefAndFieldNames.second << asc |
2241 << false << stringDefAndFieldNames.first << stringDefAndFieldNames.second << (int)(Qt::DescendingOrder) |
2248 << false << stringDefAndFieldNames.first << stringDefAndFieldNames.second << desc |
2242 << "abcdgef" << false; // default policy = blanks last, and ef have no value (e is empty, f is null) |
2249 << "abcdgef" << false; // default policy = blanks last, and ef have no value (e is empty, f is null) |
2243 |
2250 |
2244 QTest::newRow("8b") << manager |
2251 QTest::newRow("8b") << manager |
2245 << true << stringDefAndFieldNames.first << stringDefAndFieldNames.second << (int)(Qt::AscendingOrder) |
2252 << true << stringDefAndFieldNames.first << stringDefAndFieldNames.second << asc |
2246 << false << es << es << (int)(Qt::DescendingOrder) |
2253 << false << es << es << desc |
2247 << "abcdgef" << false; // default policy = blanks last, and ef have no value (e is empty, f is null) |
2254 << "abcdgef" << false; // default policy = blanks last, and ef have no value (e is empty, f is null) |
2248 } |
2255 } |
2249 |
2256 |
2250 QTest::newRow("9") << manager |
2257 QTest::newRow("9") << manager |
2251 << true << phonedef << numberfield << (int)(Qt::AscendingOrder) |
2258 << true << phonedef << numberfield << asc |
2252 << true << namedef << lastname << (int)(Qt::DescendingOrder) |
2259 << true << namedef << lastname << desc |
2253 << "abgfedc" << false; |
2260 << "abgfedc" << false; |
2254 |
2261 |
2255 QTest::newRow("10") << manager |
2262 QTest::newRow("10") << manager |
2256 << true << namedef << firstname << (int)(Qt::AscendingOrder) |
2263 << true << namedef << firstname << asc |
2257 << true << namedef << firstname << (int)(Qt::DescendingOrder) |
2264 << true << namedef << firstname << desc |
2258 << "abcdefg" << true; |
2265 << "abcdefg" << true; |
2259 |
2266 |
2260 } |
2267 } |
2261 } |
2268 } |
2262 |
2269 |
2914 successfulSave = cm->saveContact(&g); |
2927 successfulSave = cm->saveContact(&g); |
2915 Q_ASSERT(successfulSave); |
2928 Q_ASSERT(successfulSave); |
2916 originalContactCount += 7; |
2929 originalContactCount += 7; |
2917 Q_ASSERT(cm->contactIds().count() == originalContactCount); |
2930 Q_ASSERT(cm->contactIds().count() == originalContactCount); |
2918 |
2931 |
|
2932 /* Now some for the locale aware sorting */ |
|
2933 QContact h, i, j, k; |
|
2934 QContactName n2; |
|
2935 n2.setFirstName("xander"); |
|
2936 n2.setCustomLabel("xander"); |
|
2937 h.saveDetail(&n2); |
|
2938 n2.setFirstName("Xander"); |
|
2939 n2.setCustomLabel("Xander"); |
|
2940 i.saveDetail(&n2); |
|
2941 n2.setFirstName("xAnder"); |
|
2942 n2.setCustomLabel("xAnder"); |
|
2943 j.saveDetail(&n2); |
|
2944 n2.setFirstName("Yarrow"); |
|
2945 n2.setCustomLabel("Yarrow"); |
|
2946 k.saveDetail(&n2); |
|
2947 |
|
2948 // XXX add äaut; or âum; etc to test those sort orders |
|
2949 h = cm->compatibleContact(h); |
|
2950 i = cm->compatibleContact(i); |
|
2951 j = cm->compatibleContact(j); |
|
2952 k = cm->compatibleContact(k); |
|
2953 successfulSave = cm->saveContact(&h); |
|
2954 Q_ASSERT(successfulSave); |
|
2955 successfulSave = cm->saveContact(&i); |
|
2956 Q_ASSERT(successfulSave); |
|
2957 successfulSave = cm->saveContact(&j); |
|
2958 Q_ASSERT(successfulSave); |
|
2959 successfulSave = cm->saveContact(&k); |
|
2960 Q_ASSERT(successfulSave); |
|
2961 |
2919 /* Ensure the last modified times are different */ |
2962 /* Ensure the last modified times are different */ |
2920 QTest::qSleep(napTime); |
2963 QTest::qSleep(napTime); |
2921 QContactName modifiedName = c.detail(QContactName::DefinitionName); |
2964 QContactName modifiedName = c.detail(QContactName::DefinitionName); |
2922 modifiedName.setCustomLabel("Clarence"); |
2965 modifiedName.setCustomLabel("Clarence"); |
2923 c.saveDetail(&modifiedName); |
2966 c.saveDetail(&modifiedName); |