--- a/qtmobility/tests/auto/qcontactdetails/tst_qcontactdetails.cpp Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/tests/auto/qcontactdetails/tst_qcontactdetails.cpp Mon May 03 13:18:40 2010 +0300
@@ -81,7 +81,10 @@
void onlineAccount();
void organization();
void phoneNumber();
+ void ringtone();
void syncTarget();
+ void tag();
+ void thumbnail();
void timestamp();
void type();
void url();
@@ -237,34 +240,27 @@
QContactAvatar a1, a2;
// test property set
- a1.setAvatar("1234");
- QCOMPARE(a1.avatar(), QString("1234"));
- QCOMPARE(a1.value(QContactAvatar::FieldAvatar), QString("1234"));
- a1.setSubType(QContactAvatar::SubTypeAudioRingtone);
- QCOMPARE(a1.subType(), QString(QLatin1String(QContactAvatar::SubTypeAudioRingtone)));
- QCOMPARE(a1.value(QContactAvatar::FieldSubType), QString(QLatin1String(QContactAvatar::SubTypeAudioRingtone)));
-
- a1.setSubType(QContactAvatar::SubTypeImage);
-
- //pixmap
- uchar pixDataRGB[] = {255, 0, 0, 0, 0, 255, 0, 0, 255, 255, 0, 0}; // Red, Blue, Red, Blue
- QImage img(pixDataRGB, 2, 2, 6, QImage::Format_RGB888); // 2 pixels width, 2 pixels height, 6 bytes per line, RGB888 format
- QImage scaled = img.scaled(100, 100); // Scale image to show results better
- QPixmap pix = QPixmap::fromImage(scaled); // Create pixmap from image
- a1.setPixmap(pix);
+ a1.setImageUrl(QUrl("1234"));
+ QCOMPARE(a1.imageUrl(), QUrl("1234"));
+ QCOMPARE(a1.value<QUrl>(QContactAvatar::FieldImageUrl), QUrl("1234"));
+ a2.setVideoUrl(QUrl("videoUrl"));
+ a2.setImageUrl(QUrl("imageUrl"));
+ QCOMPARE(a2.videoUrl(), QUrl("videoUrl"));
+ QCOMPARE(a2.value<QUrl>(QContactAvatar::FieldVideoUrl), QUrl("videoUrl"));
+ QCOMPARE(a2.imageUrl(), QUrl("imageUrl"));
+ QCOMPARE(a2.value<QUrl>(QContactAvatar::FieldImageUrl), QUrl("imageUrl"));
// test property add
QVERIFY(c.saveDetail(&a1));
QCOMPARE(c.details(QContactAvatar::DefinitionName).count(), 1);
- QCOMPARE(QContactAvatar(c.details(QContactAvatar::DefinitionName).value(0)).avatar(), a1.avatar());
- QCOMPARE(a1.pixmap(), pix);
+ QCOMPARE(QContactAvatar(c.details(QContactAvatar::DefinitionName).value(0)).imageUrl(), a1.imageUrl());
// test property update
a1.setValue("label","label1");
- a1.setAvatar("12345");
+ a1.setImageUrl(QUrl("12345"));
QVERIFY(c.saveDetail(&a1));
QCOMPARE(c.details(QContactAvatar::DefinitionName).value(0).value("label"), QString("label1"));
- QCOMPARE(c.details(QContactAvatar::DefinitionName).value(0).value(QContactAvatar::FieldAvatar), QString("12345"));
+ QCOMPARE(c.details(QContactAvatar::DefinitionName).value(0).value<QUrl>(QContactAvatar::FieldImageUrl), QUrl("12345"));
// test property remove
QVERIFY(c.removeDetail(&a1));
@@ -608,6 +604,39 @@
QCOMPARE(c.details(QContactNickname::DefinitionName).count(), 0);
}
+void tst_QContactDetails::note()
+{
+ QContact c;
+ QContactNote n1, n2;
+
+ // test property set
+ n1.setNote("lorem ipsum");
+ QCOMPARE(n1.note(), QString("lorem ipsum"));
+ QCOMPARE(n1.value(QContactNote::FieldNote), QString("lorem ipsum"));
+
+ // test property add
+ QVERIFY(c.saveDetail(&n1));
+ QCOMPARE(c.details(QContactNote::DefinitionName).count(), 1);
+ QCOMPARE(QContactNote(c.details(QContactNote::DefinitionName).value(0)).note(), n1.note());
+
+ // test property update
+ n1.setValue("label","label1");
+ n1.setNote("orange gypsum");
+ QVERIFY(c.saveDetail(&n1));
+ QCOMPARE(c.details(QContactNote::DefinitionName).value(0).value("label"), QString("label1"));
+ QCOMPARE(c.details(QContactNote::DefinitionName).value(0).value(QContactNote::FieldNote), QString("orange gypsum"));
+
+ // test property remove
+ QVERIFY(c.removeDetail(&n1));
+ QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
+ QVERIFY(c.saveDetail(&n2));
+ QCOMPARE(c.details(QContactNote::DefinitionName).count(), 1);
+ QVERIFY(c.removeDetail(&n2));
+ QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
+ QVERIFY(c.removeDetail(&n2) == false);
+ QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
+}
+
void tst_QContactDetails::onlineAccount()
{
QContact c;
@@ -617,15 +646,6 @@
o1.setAccountUri("test@nokia.com");
QCOMPARE(o1.accountUri(), QString("test@nokia.com"));
QCOMPARE(o1.value(QContactOnlineAccount::FieldAccountUri), QString("test@nokia.com"));
- o1.setNickname("test");
- QCOMPARE(o1.nickname(), QString("test"));
- QCOMPARE(o1.value(QContactOnlineAccount::FieldNickname), QString("test"));
- o1.setStatusMessage("Gone Fishing");
- QCOMPARE(o1.statusMessage(), QString("Gone Fishing"));
- QCOMPARE(o1.value(QContactOnlineAccount::FieldStatusMessage), QString("Gone Fishing"));
- o1.setPresence("Extended Away");
- QCOMPARE(o1.presence(), QString("Extended Away"));
- QCOMPARE(o1.value(QContactOnlineAccount::FieldPresence), QString("Extended Away"));
// Sub types
o1.setSubTypes(QContactOnlineAccount::SubTypeSip);
@@ -643,9 +663,6 @@
QVERIFY(c.saveDetail(&o1));
QCOMPARE(c.details(QContactOnlineAccount::DefinitionName).count(), 1);
QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).accountUri(), o1.accountUri());
- QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).presence(), o1.presence());
- QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).nickname(), o1.nickname());
- QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).statusMessage(), o1.statusMessage());
QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).accountUri(), o1.accountUri());
// test property update
@@ -684,9 +701,9 @@
QCOMPARE(o1.location(), QString("location one"));
QCOMPARE(o1.value(QContactOrganization::FieldLocation), QString("location one"));
- o1.setLogo("logo one");
- QCOMPARE(o1.logo(), QString("logo one"));
- QCOMPARE(o1.value(QContactOrganization::FieldLogo), QString("logo one"));
+ o1.setLogoUrl(QUrl("logo one"));
+ QCOMPARE(o1.logoUrl(), QUrl("logo one"));
+ QCOMPARE(o1.value<QUrl>(QContactOrganization::FieldLogoUrl), QUrl("logo one"));
o1.setTitle("title one");
QCOMPARE(o1.title(), QString("title one"));
@@ -719,13 +736,13 @@
// organization-specific API testing
o1.setDepartment(QStringList(QString("Imaginary Dept")));
o1.setLocation("Utopia");
- o1.setLogo("logo.png");
+ o1.setLogoUrl(QUrl("logo.png"));
o1.setName("Utopian Megacorporation");
o1.setTitle("Generic Employee");
c.saveDetail(&o1);
QVERIFY(c.detail(QContactOrganization::DefinitionName).value<QStringList>(QContactOrganization::FieldDepartment) == QStringList(QString("Imaginary Dept")));
QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldLocation) == QString("Utopia"));
- QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldLogo) == QString("logo.png"));
+ QVERIFY(c.detail(QContactOrganization::DefinitionName).value<QUrl>(QContactOrganization::FieldLogoUrl) == QUrl("logo.png"));
QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldName) == QString("Utopian Megacorporation"));
QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldTitle) == QString("Generic Employee"));
}
@@ -745,7 +762,7 @@
QCOMPARE(p1.subTypes(), QStringList() << QLatin1String(QContactPhoneNumber::SubTypeCar));
QStringList sl;
- sl << QLatin1String(QContactPhoneNumber::SubTypeMobile) << QLatin1String(QContactPhoneNumber::SubTypeFacsimile);
+ sl << QLatin1String(QContactPhoneNumber::SubTypeMobile) << QLatin1String(QContactPhoneNumber::SubTypeFax);
p1.setSubTypes(sl);
QCOMPARE(p1.subTypes(), sl);
@@ -764,7 +781,7 @@
p1.setSubTypes(QContactPhoneNumber::SubTypeDtmfMenu);
c.saveDetail(&p1);
QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).variantValue(QContactPhoneNumber::FieldSubTypes).toStringList() == QStringList(QString(QLatin1String(QContactPhoneNumber::SubTypeDtmfMenu))));
- p1.setSubTypes(QStringList() << QContactPhoneNumber::SubTypeModem << QContactPhoneNumber::SubTypeFacsimile);
+ p1.setSubTypes(QStringList() << QContactPhoneNumber::SubTypeModem << QContactPhoneNumber::SubTypeFax);
c.saveDetail(&p1);
QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).variantValue(QContactPhoneNumber::FieldSubTypes).toStringList() == p1.subTypes());
@@ -779,6 +796,47 @@
QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).count(), 0);
}
+void tst_QContactDetails::ringtone()
+{
+ QContact c;
+ QContactRingtone r1, r2;
+
+ // test property set
+ r1.setAudioRingtoneUrl(QUrl("audioUrl"));
+ QCOMPARE(r1.audioRingtoneUrl(), QUrl("audioUrl"));
+ QCOMPARE(r1.value<QUrl>(QContactRingtone::FieldAudioRingtoneUrl), QUrl("audioUrl"));
+
+ // and the other fields
+ r2.setVideoRingtoneUrl(QUrl("videoUrl"));
+ QCOMPARE(r2.videoRingtoneUrl(), QUrl("videoUrl"));
+ QCOMPARE(r2.value<QUrl>(QContactRingtone::FieldVideoRingtoneUrl), QUrl("videoUrl"));
+ r2.setVibrationRingtoneUrl(QUrl("vibrationUrl"));
+ QCOMPARE(r2.vibrationRingtoneUrl(), QUrl("vibrationUrl"));
+ QCOMPARE(r2.value<QUrl>(QContactRingtone::FieldVibrationRingtoneUrl), QUrl("vibrationUrl"));
+
+ // test property add
+ QVERIFY(c.saveDetail(&r1));
+ QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 1);
+ QCOMPARE(QContactRingtone(c.details(QContactRingtone::DefinitionName).value(0)).audioRingtoneUrl(), r1.audioRingtoneUrl());
+
+ // test property update
+ r1.setValue("label","label1");
+ r1.setAudioRingtoneUrl(QUrl("audioUrl2"));
+ QVERIFY(c.saveDetail(&r1));
+ QCOMPARE(c.details(QContactRingtone::DefinitionName).value(0).value("label"), QString("label1"));
+ QCOMPARE(c.details(QContactRingtone::DefinitionName).value(0).value<QUrl>(QContactRingtone::FieldAudioRingtoneUrl), QUrl("audioUrl2"));
+
+ // test property remove
+ QVERIFY(c.removeDetail(&r1));
+ QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 0);
+ QVERIFY(c.saveDetail(&r2));
+ QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 1);
+ QVERIFY(c.removeDetail(&r2));
+ QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 0);
+ QVERIFY(c.removeDetail(&r2) == false);
+ QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 0);
+}
+
void tst_QContactDetails::syncTarget()
{
QContact c;
@@ -812,6 +870,77 @@
QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 0);
}
+void tst_QContactDetails::tag()
+{
+ QContact c;
+ QContactTag t1, t2;
+
+ // test property set
+ t1.setTag("red");
+ QCOMPARE(t1.tag(), QString("red"));
+ QCOMPARE(t1.value(QContactTag::FieldTag), QString("red"));
+
+ // test property add
+ QVERIFY(c.saveDetail(&t1));
+ QCOMPARE(c.details(QContactTag::DefinitionName).count(), 1);
+ QCOMPARE(QContactTag(c.details(QContactTag::DefinitionName).value(0)).tag(), t1.tag());
+ QVERIFY(c.saveDetail(&t2));
+ QCOMPARE(c.details(QContactTag::DefinitionName).count(), 2);
+
+ // test property update
+ t1.setValue("label","label1");
+ t1.setTag("green");
+ QVERIFY(c.saveDetail(&t1));
+ QCOMPARE(c.details(QContactTag::DefinitionName).value(0).value("label"), QString("label1"));
+ QCOMPARE(c.details(QContactTag::DefinitionName).value(0).value(QContactTag::FieldTag), QString("green"));
+
+ // test property remove
+ QVERIFY(c.removeDetail(&t1));
+ QCOMPARE(c.details(QContactTag::DefinitionName).count(), 1);
+ QVERIFY(c.removeDetail(&t2));
+ QCOMPARE(c.details(QContactTag::DefinitionName).count(), 0);
+ QVERIFY(c.removeDetail(&t2) == false);
+ QCOMPARE(c.details(QContactTag::DefinitionName).count(), 0);
+}
+
+void tst_QContactDetails::thumbnail()
+{
+ QContact c;
+ QContactThumbnail t1, t2;
+ QImage i1, i2; // XXX TODO: FIXME load an image from bytearray
+
+ // test property set
+ t1.setThumbnail(i1);
+ QCOMPARE(t1.thumbnail(), i1);
+ QCOMPARE(t1.value<QImage>(QContactThumbnail::FieldThumbnail), i1);
+
+ // Make sure we have none to start with
+ QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 0);
+
+ // test property add
+ QVERIFY(c.saveDetail(&t1));
+ QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 1);
+ QCOMPARE(QContactThumbnail(c.details(QContactThumbnail::DefinitionName).value(0)).thumbnail(), t1.thumbnail());
+
+ // test property update
+ t1.setValue("label","label1");
+ t1.setThumbnail(i2);
+ QVERIFY(c.saveDetail(&t1));
+ QCOMPARE(c.details(QContactThumbnail::DefinitionName).value(0).value("label"), QString("label1"));
+ QCOMPARE(c.details(QContactThumbnail::DefinitionName).value(0).value<QImage>(QContactThumbnail::FieldThumbnail), i2);
+
+ // Uniqueness is not currently enforced
+ QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 1);
+ t2.setThumbnail(i1);
+ QVERIFY(c.saveDetail(&t2));
+ QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 2); // save should overwrite!
+ QCOMPARE(QContactThumbnail(c.details(QContactThumbnail::DefinitionName).value(0)).thumbnail(), i1);
+ QCOMPARE(QContactThumbnail(c.details(QContactThumbnail::DefinitionName).value(0)).thumbnail(), t2.thumbnail());
+
+ QVERIFY(c.removeDetail(&t1));
+ QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 1);
+}
+
void tst_QContactDetails::timestamp()
{
QContact c;
@@ -918,9 +1047,53 @@
QCOMPARE(c.details(QContactUrl::DefinitionName).count(), 0);
}
+
+
+
+
+
+
+
+
+
+
+
+// define a custom detail to test inheritance/slicing
+class CustomTestDetail : public QContactDetail
+{
+public:
+ Q_DECLARE_CUSTOM_CONTACT_DETAIL(CustomTestDetail, "CustomTestDetail")
+ Q_DECLARE_LATIN1_CONSTANT(FieldTestLabel, "TestLabel");
+
+ ~CustomTestDetail()
+ {
+ // we define a dtor which does some random stuff
+ // to test that the virtual dtor works as expected.
+
+ int *temp = 0;
+ int random = qrand();
+ random += 1;
+ if (random > 0) {
+ temp = new int;
+ *temp = 5;
+ }
+
+ if (temp) {
+ delete temp;
+ }
+ }
+
+ void setTestLabel(const QString& testLabel) { setValue(FieldTestLabel, testLabel); }
+ QString testLabel() const { return value(FieldTestLabel); }
+};
+Q_DEFINE_LATIN1_CONSTANT(CustomTestDetail::FieldTestLabel, "TestLabel");
+Q_DEFINE_LATIN1_CONSTANT(CustomTestDetail::DefinitionName, "CustomTestDetail");
+
void tst_QContactDetails::custom()
{
QContact c;
+
+ // first, test a custom definition detail
QContactDetail c1("mycustom"), c2("mycustom");
// test property set
@@ -946,39 +1119,63 @@
QCOMPARE(c.details("mycustom").count(), 0);
QVERIFY(c.removeDetail(&c2) == false);
QCOMPARE(c.details("mycustom").count(), 0);
-}
+
-void tst_QContactDetails::note()
-{
- QContact c;
- QContactNote n1, n2;
+ // then, test a custom subclass (we don't test registration of the custom definition, however)
+ CustomTestDetail ctd1, ctd2;
+ ctd1.setTestLabel("this is a test");
+ ctd2.setTestLabel("test 2");
+ QCOMPARE(ctd1.testLabel(), QString("this is a test"));
+
+ // prior to add
+ QCOMPARE(c.details("CustomTestDetail").count(), 0);
+ QCOMPARE(c.details<CustomTestDetail>().count(), 0);
- // test property set
- n1.setNote("lorem ipsum");
- QCOMPARE(n1.note(), QString("lorem ipsum"));
- QCOMPARE(n1.value(QContactNote::FieldNote), QString("lorem ipsum"));
+ // test detail add
+ QVERIFY(c.saveDetail(&ctd1));
+ QCOMPARE(c.details("CustomTestDetail").count(), 1);
+ QCOMPARE(c.details<CustomTestDetail>().count(), 1);
+ QCOMPARE(c.details<CustomTestDetail>().first().testLabel(), QString("this is a test"));
- // test property add
- QVERIFY(c.saveDetail(&n1));
- QCOMPARE(c.details(QContactNote::DefinitionName).count(), 1);
- QCOMPARE(QContactNote(c.details(QContactNote::DefinitionName).value(0)).note(), n1.note());
+ // test detail update
+ ctd1.setTestLabel("this is a modified test");
+ QVERIFY(c.saveDetail(&ctd1)); // should merely update
+ QCOMPARE(c.details("CustomTestDetail").count(), 1);
+ QCOMPARE(c.details<CustomTestDetail>().count(), 1);
+ QCOMPARE(c.details<CustomTestDetail>().first().testLabel(), QString("this is a modified test"));
- // test property update
- n1.setValue("label","label1");
- n1.setNote("orange gypsum");
- QVERIFY(c.saveDetail(&n1));
- QCOMPARE(c.details(QContactNote::DefinitionName).value(0).value("label"), QString("label1"));
- QCOMPARE(c.details(QContactNote::DefinitionName).value(0).value(QContactNote::FieldNote), QString("orange gypsum"));
+ // test detail remove
+ QVERIFY(c.removeDetail(&ctd1));
+ QCOMPARE(c.details("CustomTestDetail").count(), 0);
+ QCOMPARE(c.details<CustomTestDetail>().count(), 0);
+
+ // now test how custom details interact with foreach loops.
+ QVERIFY(c.saveDetail(&ctd1));
+ QVERIFY(c.saveDetail(&ctd2));
+ QVERIFY(c.saveDetail(&c1));
+
+ // first, definition agnostic foreach.
+ foreach (const QContactDetail& det, c.details()) {
+ QCOMPARE(det.definitionName().isEmpty(), false);
+ }
- // test property remove
- QVERIFY(c.removeDetail(&n1));
- QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
- QVERIFY(c.saveDetail(&n2));
- QCOMPARE(c.details(QContactNote::DefinitionName).count(), 1);
- QVERIFY(c.removeDetail(&n2));
- QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
- QVERIFY(c.removeDetail(&n2) == false);
- QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
+ // second, definition parameter foreach, with assignment.
+ foreach (const QContactDetail& det, c.details("CustomTestDetail")) {
+ CustomTestDetail customDet = det;
+ QCOMPARE(det.definitionName(), QString("CustomTestDetail"));
+ QCOMPARE(customDet.testLabel().isEmpty(), false);
+ }
+
+ // third, definition parameter foreach, with cast.
+ foreach (const QContactDetail& det, c.details("CustomTestDetail")) {
+ QCOMPARE(static_cast<CustomTestDetail>(det).definitionName(), QString("CustomTestDetail"));
+ QCOMPARE(static_cast<CustomTestDetail>(det).testLabel().isEmpty(), false);
+ }
+
+ // fourth, parametrized foreach.
+ foreach (const CustomTestDetail& det, c.details<CustomTestDetail>()) {
+ QCOMPARE(det.definitionName(), QString("CustomTestDetail"));
+ }
}