qtmobility/tests/auto/qcontactdetails/tst_qcontactdetails.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 5 453da2cfceef
equal deleted inserted replaced
1:2b40d63a9c3d 4:90517678cc4f
    79     void nickname();
    79     void nickname();
    80     void note();
    80     void note();
    81     void onlineAccount();
    81     void onlineAccount();
    82     void organization();
    82     void organization();
    83     void phoneNumber();
    83     void phoneNumber();
       
    84     void ringtone();
    84     void syncTarget();
    85     void syncTarget();
       
    86     void tag();
       
    87     void thumbnail();
    85     void timestamp();
    88     void timestamp();
    86     void type();
    89     void type();
    87     void url();
    90     void url();
    88 
    91 
    89     // custom definition testing
    92     // custom definition testing
   235 {
   238 {
   236     QContact c;
   239     QContact c;
   237     QContactAvatar a1, a2;
   240     QContactAvatar a1, a2;
   238 
   241 
   239     // test property set
   242     // test property set
   240     a1.setAvatar("1234");
   243     a1.setImageUrl(QUrl("1234"));
   241     QCOMPARE(a1.avatar(), QString("1234"));
   244     QCOMPARE(a1.imageUrl(), QUrl("1234"));
   242     QCOMPARE(a1.value(QContactAvatar::FieldAvatar), QString("1234"));
   245     QCOMPARE(a1.value<QUrl>(QContactAvatar::FieldImageUrl), QUrl("1234"));
   243     a1.setSubType(QContactAvatar::SubTypeAudioRingtone);
   246     a2.setVideoUrl(QUrl("videoUrl"));
   244     QCOMPARE(a1.subType(), QString(QLatin1String(QContactAvatar::SubTypeAudioRingtone)));
   247     a2.setImageUrl(QUrl("imageUrl"));
   245     QCOMPARE(a1.value(QContactAvatar::FieldSubType), QString(QLatin1String(QContactAvatar::SubTypeAudioRingtone)));
   248     QCOMPARE(a2.videoUrl(), QUrl("videoUrl"));
   246 
   249     QCOMPARE(a2.value<QUrl>(QContactAvatar::FieldVideoUrl), QUrl("videoUrl"));
   247     a1.setSubType(QContactAvatar::SubTypeImage);
   250     QCOMPARE(a2.imageUrl(), QUrl("imageUrl"));
   248     
   251     QCOMPARE(a2.value<QUrl>(QContactAvatar::FieldImageUrl), QUrl("imageUrl"));
   249     //pixmap
       
   250     uchar pixDataRGB[] = {255, 0, 0, 0, 0, 255, 0, 0, 255, 255, 0, 0}; // Red, Blue, Red, Blue
       
   251     QImage img(pixDataRGB, 2, 2, 6, QImage::Format_RGB888); // 2 pixels width, 2 pixels height, 6 bytes per line, RGB888 format
       
   252     QImage scaled = img.scaled(100, 100); // Scale image to show results better
       
   253     QPixmap pix = QPixmap::fromImage(scaled); // Create pixmap from image
       
   254     a1.setPixmap(pix);
       
   255 
   252 
   256     // test property add
   253     // test property add
   257     QVERIFY(c.saveDetail(&a1));
   254     QVERIFY(c.saveDetail(&a1));
   258     QCOMPARE(c.details(QContactAvatar::DefinitionName).count(), 1);
   255     QCOMPARE(c.details(QContactAvatar::DefinitionName).count(), 1);
   259     QCOMPARE(QContactAvatar(c.details(QContactAvatar::DefinitionName).value(0)).avatar(), a1.avatar());
   256     QCOMPARE(QContactAvatar(c.details(QContactAvatar::DefinitionName).value(0)).imageUrl(), a1.imageUrl());
   260     QCOMPARE(a1.pixmap(), pix);
       
   261 
   257 
   262     // test property update
   258     // test property update
   263     a1.setValue("label","label1");
   259     a1.setValue("label","label1");
   264     a1.setAvatar("12345");
   260     a1.setImageUrl(QUrl("12345"));
   265     QVERIFY(c.saveDetail(&a1));
   261     QVERIFY(c.saveDetail(&a1));
   266     QCOMPARE(c.details(QContactAvatar::DefinitionName).value(0).value("label"), QString("label1"));
   262     QCOMPARE(c.details(QContactAvatar::DefinitionName).value(0).value("label"), QString("label1"));
   267     QCOMPARE(c.details(QContactAvatar::DefinitionName).value(0).value(QContactAvatar::FieldAvatar), QString("12345"));
   263     QCOMPARE(c.details(QContactAvatar::DefinitionName).value(0).value<QUrl>(QContactAvatar::FieldImageUrl), QUrl("12345"));
   268 
   264 
   269     // test property remove
   265     // test property remove
   270     QVERIFY(c.removeDetail(&a1));
   266     QVERIFY(c.removeDetail(&a1));
   271     QCOMPARE(c.details(QContactAvatar::DefinitionName).count(), 0);
   267     QCOMPARE(c.details(QContactAvatar::DefinitionName).count(), 0);
   272     QVERIFY(c.saveDetail(&a2));
   268     QVERIFY(c.saveDetail(&a2));
   606     QCOMPARE(c.details(QContactNickname::DefinitionName).count(), 0);
   602     QCOMPARE(c.details(QContactNickname::DefinitionName).count(), 0);
   607     QVERIFY(c.removeDetail(&n2) == false);
   603     QVERIFY(c.removeDetail(&n2) == false);
   608     QCOMPARE(c.details(QContactNickname::DefinitionName).count(), 0);
   604     QCOMPARE(c.details(QContactNickname::DefinitionName).count(), 0);
   609 }
   605 }
   610 
   606 
       
   607 void tst_QContactDetails::note()
       
   608 {
       
   609     QContact c;
       
   610     QContactNote n1, n2;
       
   611 
       
   612     // test property set
       
   613     n1.setNote("lorem ipsum");
       
   614     QCOMPARE(n1.note(), QString("lorem ipsum"));
       
   615     QCOMPARE(n1.value(QContactNote::FieldNote), QString("lorem ipsum"));
       
   616 
       
   617     // test property add
       
   618     QVERIFY(c.saveDetail(&n1));
       
   619     QCOMPARE(c.details(QContactNote::DefinitionName).count(), 1);
       
   620     QCOMPARE(QContactNote(c.details(QContactNote::DefinitionName).value(0)).note(), n1.note());
       
   621 
       
   622     // test property update
       
   623     n1.setValue("label","label1");
       
   624     n1.setNote("orange gypsum");
       
   625     QVERIFY(c.saveDetail(&n1));
       
   626     QCOMPARE(c.details(QContactNote::DefinitionName).value(0).value("label"), QString("label1"));
       
   627     QCOMPARE(c.details(QContactNote::DefinitionName).value(0).value(QContactNote::FieldNote), QString("orange gypsum"));
       
   628 
       
   629     // test property remove
       
   630     QVERIFY(c.removeDetail(&n1));
       
   631     QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
       
   632     QVERIFY(c.saveDetail(&n2));
       
   633     QCOMPARE(c.details(QContactNote::DefinitionName).count(), 1);
       
   634     QVERIFY(c.removeDetail(&n2));
       
   635     QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
       
   636     QVERIFY(c.removeDetail(&n2) == false);
       
   637     QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
       
   638 }
       
   639 
   611 void tst_QContactDetails::onlineAccount()
   640 void tst_QContactDetails::onlineAccount()
   612 {
   641 {
   613     QContact c;
   642     QContact c;
   614     QContactOnlineAccount o1, o2;
   643     QContactOnlineAccount o1, o2;
   615 
   644 
   616     // test property set
   645     // test property set
   617     o1.setAccountUri("test@nokia.com");
   646     o1.setAccountUri("test@nokia.com");
   618     QCOMPARE(o1.accountUri(), QString("test@nokia.com"));
   647     QCOMPARE(o1.accountUri(), QString("test@nokia.com"));
   619     QCOMPARE(o1.value(QContactOnlineAccount::FieldAccountUri), QString("test@nokia.com"));
   648     QCOMPARE(o1.value(QContactOnlineAccount::FieldAccountUri), QString("test@nokia.com"));
   620     o1.setNickname("test");
       
   621     QCOMPARE(o1.nickname(), QString("test"));
       
   622     QCOMPARE(o1.value(QContactOnlineAccount::FieldNickname), QString("test"));
       
   623     o1.setStatusMessage("Gone Fishing");
       
   624     QCOMPARE(o1.statusMessage(), QString("Gone Fishing"));
       
   625     QCOMPARE(o1.value(QContactOnlineAccount::FieldStatusMessage), QString("Gone Fishing"));
       
   626     o1.setPresence("Extended Away");
       
   627     QCOMPARE(o1.presence(), QString("Extended Away"));
       
   628     QCOMPARE(o1.value(QContactOnlineAccount::FieldPresence), QString("Extended Away"));
       
   629 
   649 
   630     // Sub types
   650     // Sub types
   631     o1.setSubTypes(QContactOnlineAccount::SubTypeSip);
   651     o1.setSubTypes(QContactOnlineAccount::SubTypeSip);
   632     QCOMPARE(o1.subTypes(), QStringList() << QLatin1String(QContactOnlineAccount::SubTypeSip));
   652     QCOMPARE(o1.subTypes(), QStringList() << QLatin1String(QContactOnlineAccount::SubTypeSip));
   633 
   653 
   641 
   661 
   642     // test property add
   662     // test property add
   643     QVERIFY(c.saveDetail(&o1));
   663     QVERIFY(c.saveDetail(&o1));
   644     QCOMPARE(c.details(QContactOnlineAccount::DefinitionName).count(), 1);
   664     QCOMPARE(c.details(QContactOnlineAccount::DefinitionName).count(), 1);
   645     QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).accountUri(), o1.accountUri());
   665     QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).accountUri(), o1.accountUri());
   646     QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).presence(), o1.presence());
       
   647     QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).nickname(), o1.nickname());
       
   648     QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).statusMessage(), o1.statusMessage());
       
   649     QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).accountUri(), o1.accountUri());
   666     QCOMPARE(QContactOnlineAccount(c.details(QContactOnlineAccount::DefinitionName).value(0)).accountUri(), o1.accountUri());
   650 
   667 
   651     // test property update
   668     // test property update
   652     o1.setValue("label","label1");
   669     o1.setValue("label","label1");
   653     o1.setAccountUri("test2@nokia.com");
   670     o1.setAccountUri("test2@nokia.com");
   682 
   699 
   683     o1.setLocation("location one");
   700     o1.setLocation("location one");
   684     QCOMPARE(o1.location(), QString("location one"));
   701     QCOMPARE(o1.location(), QString("location one"));
   685     QCOMPARE(o1.value(QContactOrganization::FieldLocation), QString("location one"));
   702     QCOMPARE(o1.value(QContactOrganization::FieldLocation), QString("location one"));
   686 
   703 
   687     o1.setLogo("logo one");
   704     o1.setLogoUrl(QUrl("logo one"));
   688     QCOMPARE(o1.logo(), QString("logo one"));
   705     QCOMPARE(o1.logoUrl(), QUrl("logo one"));
   689     QCOMPARE(o1.value(QContactOrganization::FieldLogo), QString("logo one"));
   706     QCOMPARE(o1.value<QUrl>(QContactOrganization::FieldLogoUrl), QUrl("logo one"));
   690 
   707 
   691     o1.setTitle("title one");
   708     o1.setTitle("title one");
   692     QCOMPARE(o1.title(), QString("title one"));
   709     QCOMPARE(o1.title(), QString("title one"));
   693     QCOMPARE(o1.value(QContactOrganization::FieldTitle), QString("title one"));
   710     QCOMPARE(o1.value(QContactOrganization::FieldTitle), QString("title one"));
   694 
   711 
   717     QCOMPARE(c.details(QContactOrganization::DefinitionName).count(), 0);
   734     QCOMPARE(c.details(QContactOrganization::DefinitionName).count(), 0);
   718 
   735 
   719     // organization-specific API testing
   736     // organization-specific API testing
   720     o1.setDepartment(QStringList(QString("Imaginary Dept")));
   737     o1.setDepartment(QStringList(QString("Imaginary Dept")));
   721     o1.setLocation("Utopia");
   738     o1.setLocation("Utopia");
   722     o1.setLogo("logo.png");
   739     o1.setLogoUrl(QUrl("logo.png"));
   723     o1.setName("Utopian Megacorporation");
   740     o1.setName("Utopian Megacorporation");
   724     o1.setTitle("Generic Employee");
   741     o1.setTitle("Generic Employee");
   725     c.saveDetail(&o1);
   742     c.saveDetail(&o1);
   726     QVERIFY(c.detail(QContactOrganization::DefinitionName).value<QStringList>(QContactOrganization::FieldDepartment) == QStringList(QString("Imaginary Dept")));
   743     QVERIFY(c.detail(QContactOrganization::DefinitionName).value<QStringList>(QContactOrganization::FieldDepartment) == QStringList(QString("Imaginary Dept")));
   727     QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldLocation) == QString("Utopia"));
   744     QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldLocation) == QString("Utopia"));
   728     QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldLogo) == QString("logo.png"));
   745     QVERIFY(c.detail(QContactOrganization::DefinitionName).value<QUrl>(QContactOrganization::FieldLogoUrl) == QUrl("logo.png"));
   729     QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldName) == QString("Utopian Megacorporation"));
   746     QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldName) == QString("Utopian Megacorporation"));
   730     QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldTitle) == QString("Generic Employee"));
   747     QVERIFY(c.detail(QContactOrganization::DefinitionName).value(QContactOrganization::FieldTitle) == QString("Generic Employee"));
   731 }
   748 }
   732 
   749 
   733 void tst_QContactDetails::phoneNumber()
   750 void tst_QContactDetails::phoneNumber()
   743     // Sub types
   760     // Sub types
   744     p1.setSubTypes(QContactPhoneNumber::SubTypeCar);
   761     p1.setSubTypes(QContactPhoneNumber::SubTypeCar);
   745     QCOMPARE(p1.subTypes(), QStringList() << QLatin1String(QContactPhoneNumber::SubTypeCar));
   762     QCOMPARE(p1.subTypes(), QStringList() << QLatin1String(QContactPhoneNumber::SubTypeCar));
   746 
   763 
   747     QStringList sl;
   764     QStringList sl;
   748     sl << QLatin1String(QContactPhoneNumber::SubTypeMobile) << QLatin1String(QContactPhoneNumber::SubTypeFacsimile);
   765     sl << QLatin1String(QContactPhoneNumber::SubTypeMobile) << QLatin1String(QContactPhoneNumber::SubTypeFax);
   749     p1.setSubTypes(sl);
   766     p1.setSubTypes(sl);
   750     QCOMPARE(p1.subTypes(), sl);
   767     QCOMPARE(p1.subTypes(), sl);
   751 
   768 
   752     // test property add
   769     // test property add
   753     QVERIFY(c.saveDetail(&p1));
   770     QVERIFY(c.saveDetail(&p1));
   762     QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).value(0).value(QContactPhoneNumber::FieldNumber), QString("12345"));
   779     QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).value(0).value(QContactPhoneNumber::FieldNumber), QString("12345"));
   763 
   780 
   764     p1.setSubTypes(QContactPhoneNumber::SubTypeDtmfMenu);
   781     p1.setSubTypes(QContactPhoneNumber::SubTypeDtmfMenu);
   765     c.saveDetail(&p1);
   782     c.saveDetail(&p1);
   766     QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).variantValue(QContactPhoneNumber::FieldSubTypes).toStringList() == QStringList(QString(QLatin1String(QContactPhoneNumber::SubTypeDtmfMenu))));
   783     QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).variantValue(QContactPhoneNumber::FieldSubTypes).toStringList() == QStringList(QString(QLatin1String(QContactPhoneNumber::SubTypeDtmfMenu))));
   767     p1.setSubTypes(QStringList() << QContactPhoneNumber::SubTypeModem << QContactPhoneNumber::SubTypeFacsimile);
   784     p1.setSubTypes(QStringList() << QContactPhoneNumber::SubTypeModem << QContactPhoneNumber::SubTypeFax);
   768     c.saveDetail(&p1);
   785     c.saveDetail(&p1);
   769     QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).variantValue(QContactPhoneNumber::FieldSubTypes).toStringList() == p1.subTypes());
   786     QVERIFY(c.detail(QContactPhoneNumber::DefinitionName).variantValue(QContactPhoneNumber::FieldSubTypes).toStringList() == p1.subTypes());
   770 
   787 
   771     // test property remove
   788     // test property remove
   772     QVERIFY(c.removeDetail(&p1));
   789     QVERIFY(c.removeDetail(&p1));
   777     QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).count(), 0);
   794     QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).count(), 0);
   778     QVERIFY(c.removeDetail(&p2) == false);
   795     QVERIFY(c.removeDetail(&p2) == false);
   779     QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).count(), 0);
   796     QCOMPARE(c.details(QContactPhoneNumber::DefinitionName).count(), 0);
   780 }
   797 }
   781 
   798 
       
   799 void tst_QContactDetails::ringtone()
       
   800 {
       
   801     QContact c;
       
   802     QContactRingtone r1, r2;
       
   803 
       
   804     // test property set
       
   805     r1.setAudioRingtoneUrl(QUrl("audioUrl"));
       
   806     QCOMPARE(r1.audioRingtoneUrl(), QUrl("audioUrl"));
       
   807     QCOMPARE(r1.value<QUrl>(QContactRingtone::FieldAudioRingtoneUrl), QUrl("audioUrl"));
       
   808 
       
   809     // and the other fields
       
   810     r2.setVideoRingtoneUrl(QUrl("videoUrl"));
       
   811     QCOMPARE(r2.videoRingtoneUrl(), QUrl("videoUrl"));
       
   812     QCOMPARE(r2.value<QUrl>(QContactRingtone::FieldVideoRingtoneUrl), QUrl("videoUrl"));
       
   813     r2.setVibrationRingtoneUrl(QUrl("vibrationUrl"));
       
   814     QCOMPARE(r2.vibrationRingtoneUrl(), QUrl("vibrationUrl"));
       
   815     QCOMPARE(r2.value<QUrl>(QContactRingtone::FieldVibrationRingtoneUrl), QUrl("vibrationUrl"));
       
   816 
       
   817     // test property add
       
   818     QVERIFY(c.saveDetail(&r1));
       
   819     QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 1);
       
   820     QCOMPARE(QContactRingtone(c.details(QContactRingtone::DefinitionName).value(0)).audioRingtoneUrl(), r1.audioRingtoneUrl());
       
   821 
       
   822     // test property update
       
   823     r1.setValue("label","label1");
       
   824     r1.setAudioRingtoneUrl(QUrl("audioUrl2"));
       
   825     QVERIFY(c.saveDetail(&r1));
       
   826     QCOMPARE(c.details(QContactRingtone::DefinitionName).value(0).value("label"), QString("label1"));
       
   827     QCOMPARE(c.details(QContactRingtone::DefinitionName).value(0).value<QUrl>(QContactRingtone::FieldAudioRingtoneUrl), QUrl("audioUrl2"));
       
   828 
       
   829     // test property remove
       
   830     QVERIFY(c.removeDetail(&r1));
       
   831     QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 0);
       
   832     QVERIFY(c.saveDetail(&r2));
       
   833     QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 1);
       
   834     QVERIFY(c.removeDetail(&r2));
       
   835     QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 0);
       
   836     QVERIFY(c.removeDetail(&r2) == false);
       
   837     QCOMPARE(c.details(QContactRingtone::DefinitionName).count(), 0);
       
   838 }
       
   839 
   782 void tst_QContactDetails::syncTarget()
   840 void tst_QContactDetails::syncTarget()
   783 {
   841 {
   784     QContact c;
   842     QContact c;
   785     QContactSyncTarget s1, s2;
   843     QContactSyncTarget s1, s2;
   786 
   844 
   808     QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 1);
   866     QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 1);
   809     QVERIFY(c.removeDetail(&s2));
   867     QVERIFY(c.removeDetail(&s2));
   810     QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 0);
   868     QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 0);
   811     QVERIFY(c.removeDetail(&s2) == false);
   869     QVERIFY(c.removeDetail(&s2) == false);
   812     QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 0);
   870     QCOMPARE(c.details(QContactSyncTarget::DefinitionName).count(), 0);
       
   871 }
       
   872 
       
   873 void tst_QContactDetails::tag()
       
   874 {
       
   875     QContact c;
       
   876     QContactTag t1, t2;
       
   877 
       
   878     // test property set
       
   879     t1.setTag("red");
       
   880     QCOMPARE(t1.tag(), QString("red"));
       
   881     QCOMPARE(t1.value(QContactTag::FieldTag), QString("red"));
       
   882 
       
   883     // test property add
       
   884     QVERIFY(c.saveDetail(&t1));
       
   885     QCOMPARE(c.details(QContactTag::DefinitionName).count(), 1);
       
   886     QCOMPARE(QContactTag(c.details(QContactTag::DefinitionName).value(0)).tag(), t1.tag());
       
   887     QVERIFY(c.saveDetail(&t2));
       
   888     QCOMPARE(c.details(QContactTag::DefinitionName).count(), 2);
       
   889 
       
   890     // test property update
       
   891     t1.setValue("label","label1");
       
   892     t1.setTag("green");
       
   893     QVERIFY(c.saveDetail(&t1));
       
   894     QCOMPARE(c.details(QContactTag::DefinitionName).value(0).value("label"), QString("label1"));
       
   895     QCOMPARE(c.details(QContactTag::DefinitionName).value(0).value(QContactTag::FieldTag), QString("green"));
       
   896 
       
   897     // test property remove
       
   898     QVERIFY(c.removeDetail(&t1));
       
   899     QCOMPARE(c.details(QContactTag::DefinitionName).count(), 1);
       
   900     QVERIFY(c.removeDetail(&t2));
       
   901     QCOMPARE(c.details(QContactTag::DefinitionName).count(), 0);
       
   902     QVERIFY(c.removeDetail(&t2) == false);
       
   903     QCOMPARE(c.details(QContactTag::DefinitionName).count(), 0);
       
   904 }
       
   905 
       
   906 void tst_QContactDetails::thumbnail()
       
   907 {
       
   908     QContact c;
       
   909     QContactThumbnail t1, t2;
       
   910     QImage i1, i2; // XXX TODO: FIXME load an image from bytearray
       
   911 
       
   912     // test property set
       
   913     t1.setThumbnail(i1);
       
   914     QCOMPARE(t1.thumbnail(), i1);
       
   915     QCOMPARE(t1.value<QImage>(QContactThumbnail::FieldThumbnail), i1);
       
   916 
       
   917     // Make sure we have none to start with
       
   918     QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 0);
       
   919 
       
   920     // test property add
       
   921     QVERIFY(c.saveDetail(&t1));
       
   922     QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 1);
       
   923     QCOMPARE(QContactThumbnail(c.details(QContactThumbnail::DefinitionName).value(0)).thumbnail(), t1.thumbnail());
       
   924 
       
   925     // test property update
       
   926     t1.setValue("label","label1");
       
   927     t1.setThumbnail(i2);
       
   928     QVERIFY(c.saveDetail(&t1));
       
   929     QCOMPARE(c.details(QContactThumbnail::DefinitionName).value(0).value("label"), QString("label1"));
       
   930     QCOMPARE(c.details(QContactThumbnail::DefinitionName).value(0).value<QImage>(QContactThumbnail::FieldThumbnail), i2);
       
   931 
       
   932     // Uniqueness is not currently enforced
       
   933     QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 1);
       
   934     t2.setThumbnail(i1);
       
   935     QVERIFY(c.saveDetail(&t2));
       
   936     QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 2); // save should overwrite!
       
   937     QCOMPARE(QContactThumbnail(c.details(QContactThumbnail::DefinitionName).value(0)).thumbnail(), i1);
       
   938     QCOMPARE(QContactThumbnail(c.details(QContactThumbnail::DefinitionName).value(0)).thumbnail(), t2.thumbnail());
       
   939 
       
   940     QVERIFY(c.removeDetail(&t1));
       
   941     QCOMPARE(c.details(QContactThumbnail::DefinitionName).count(), 1);
   813 }
   942 }
   814 
   943 
   815 void tst_QContactDetails::timestamp()
   944 void tst_QContactDetails::timestamp()
   816 {
   945 {
   817     QContact c;
   946     QContact c;
   916     QCOMPARE(c.details(QContactUrl::DefinitionName).count(), 0);
  1045     QCOMPARE(c.details(QContactUrl::DefinitionName).count(), 0);
   917     QVERIFY(c.removeDetail(&u2) == false);
  1046     QVERIFY(c.removeDetail(&u2) == false);
   918     QCOMPARE(c.details(QContactUrl::DefinitionName).count(), 0);
  1047     QCOMPARE(c.details(QContactUrl::DefinitionName).count(), 0);
   919 }
  1048 }
   920 
  1049 
       
  1050 
       
  1051 
       
  1052 
       
  1053 
       
  1054 
       
  1055 
       
  1056 
       
  1057 
       
  1058 
       
  1059 
       
  1060 
       
  1061 // define a custom detail to test inheritance/slicing
       
  1062 class CustomTestDetail : public QContactDetail
       
  1063 {
       
  1064 public:
       
  1065     Q_DECLARE_CUSTOM_CONTACT_DETAIL(CustomTestDetail, "CustomTestDetail")
       
  1066     Q_DECLARE_LATIN1_CONSTANT(FieldTestLabel, "TestLabel");
       
  1067 
       
  1068     ~CustomTestDetail()
       
  1069     {
       
  1070         // we define a dtor which does some random stuff
       
  1071         // to test that the virtual dtor works as expected.
       
  1072 
       
  1073         int *temp = 0;
       
  1074         int random = qrand();
       
  1075         random += 1;
       
  1076         if (random > 0) {
       
  1077             temp = new int;
       
  1078             *temp = 5;
       
  1079         }
       
  1080 
       
  1081         if (temp) {
       
  1082             delete temp;
       
  1083         }
       
  1084     }
       
  1085 
       
  1086     void setTestLabel(const QString& testLabel) { setValue(FieldTestLabel, testLabel); }
       
  1087     QString testLabel() const { return value(FieldTestLabel); }
       
  1088 };
       
  1089 Q_DEFINE_LATIN1_CONSTANT(CustomTestDetail::FieldTestLabel, "TestLabel");
       
  1090 Q_DEFINE_LATIN1_CONSTANT(CustomTestDetail::DefinitionName, "CustomTestDetail");
       
  1091 
   921 void tst_QContactDetails::custom()
  1092 void tst_QContactDetails::custom()
   922 {
  1093 {
   923     QContact c;
  1094     QContact c;
       
  1095 
       
  1096     // first, test a custom definition detail
   924     QContactDetail c1("mycustom"), c2("mycustom");
  1097     QContactDetail c1("mycustom"), c2("mycustom");
   925 
  1098 
   926     // test property set
  1099     // test property set
   927     c1.setValue("custom", "1234");
  1100     c1.setValue("custom", "1234");
   928     QCOMPARE(c1.value("custom"), QString("1234"));
  1101     QCOMPARE(c1.value("custom"), QString("1234"));
   944     QCOMPARE(c.details("mycustom").count(), 1);
  1117     QCOMPARE(c.details("mycustom").count(), 1);
   945     QVERIFY(c.removeDetail(&c2));
  1118     QVERIFY(c.removeDetail(&c2));
   946     QCOMPARE(c.details("mycustom").count(), 0);
  1119     QCOMPARE(c.details("mycustom").count(), 0);
   947     QVERIFY(c.removeDetail(&c2) == false);
  1120     QVERIFY(c.removeDetail(&c2) == false);
   948     QCOMPARE(c.details("mycustom").count(), 0);
  1121     QCOMPARE(c.details("mycustom").count(), 0);
   949 }
  1122 
   950 
  1123 
   951 void tst_QContactDetails::note()
  1124     // then, test a custom subclass (we don't test registration of the custom definition, however)
   952 {
  1125     CustomTestDetail ctd1, ctd2;
   953     QContact c;
  1126     ctd1.setTestLabel("this is a test");
   954     QContactNote n1, n2;
  1127     ctd2.setTestLabel("test 2");
   955 
  1128     QCOMPARE(ctd1.testLabel(), QString("this is a test"));
   956     // test property set
  1129 
   957     n1.setNote("lorem ipsum");
  1130     // prior to add
   958     QCOMPARE(n1.note(), QString("lorem ipsum"));
  1131     QCOMPARE(c.details("CustomTestDetail").count(), 0);
   959     QCOMPARE(n1.value(QContactNote::FieldNote), QString("lorem ipsum"));
  1132     QCOMPARE(c.details<CustomTestDetail>().count(), 0);
   960 
  1133 
   961     // test property add
  1134     // test detail add
   962     QVERIFY(c.saveDetail(&n1));
  1135     QVERIFY(c.saveDetail(&ctd1));
   963     QCOMPARE(c.details(QContactNote::DefinitionName).count(), 1);
  1136     QCOMPARE(c.details("CustomTestDetail").count(), 1);
   964     QCOMPARE(QContactNote(c.details(QContactNote::DefinitionName).value(0)).note(), n1.note());
  1137     QCOMPARE(c.details<CustomTestDetail>().count(), 1);
   965 
  1138     QCOMPARE(c.details<CustomTestDetail>().first().testLabel(), QString("this is a test"));
   966     // test property update
  1139 
   967     n1.setValue("label","label1");
  1140     // test detail update
   968     n1.setNote("orange gypsum");
  1141     ctd1.setTestLabel("this is a modified test");
   969     QVERIFY(c.saveDetail(&n1));
  1142     QVERIFY(c.saveDetail(&ctd1)); // should merely update
   970     QCOMPARE(c.details(QContactNote::DefinitionName).value(0).value("label"), QString("label1"));
  1143     QCOMPARE(c.details("CustomTestDetail").count(), 1);
   971     QCOMPARE(c.details(QContactNote::DefinitionName).value(0).value(QContactNote::FieldNote), QString("orange gypsum"));
  1144     QCOMPARE(c.details<CustomTestDetail>().count(), 1);
   972 
  1145     QCOMPARE(c.details<CustomTestDetail>().first().testLabel(), QString("this is a modified test"));
   973     // test property remove
  1146 
   974     QVERIFY(c.removeDetail(&n1));
  1147     // test detail remove
   975     QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
  1148     QVERIFY(c.removeDetail(&ctd1));
   976     QVERIFY(c.saveDetail(&n2));
  1149     QCOMPARE(c.details("CustomTestDetail").count(), 0);
   977     QCOMPARE(c.details(QContactNote::DefinitionName).count(), 1);
  1150     QCOMPARE(c.details<CustomTestDetail>().count(), 0);
   978     QVERIFY(c.removeDetail(&n2));
  1151 
   979     QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
  1152     // now test how custom details interact with foreach loops.
   980     QVERIFY(c.removeDetail(&n2) == false);
  1153     QVERIFY(c.saveDetail(&ctd1));
   981     QCOMPARE(c.details(QContactNote::DefinitionName).count(), 0);
  1154     QVERIFY(c.saveDetail(&ctd2));
       
  1155     QVERIFY(c.saveDetail(&c1));
       
  1156 
       
  1157     // first, definition agnostic foreach.
       
  1158     foreach (const QContactDetail& det, c.details()) {
       
  1159         QCOMPARE(det.definitionName().isEmpty(), false);
       
  1160     }
       
  1161 
       
  1162     // second, definition parameter foreach, with assignment.
       
  1163     foreach (const QContactDetail& det, c.details("CustomTestDetail")) {
       
  1164         CustomTestDetail customDet = det;
       
  1165         QCOMPARE(det.definitionName(), QString("CustomTestDetail"));
       
  1166         QCOMPARE(customDet.testLabel().isEmpty(), false);
       
  1167     }
       
  1168 
       
  1169     // third, definition parameter foreach, with cast.
       
  1170     foreach (const QContactDetail& det, c.details("CustomTestDetail")) {
       
  1171         QCOMPARE(static_cast<CustomTestDetail>(det).definitionName(), QString("CustomTestDetail"));
       
  1172         QCOMPARE(static_cast<CustomTestDetail>(det).testLabel().isEmpty(), false);
       
  1173     }
       
  1174 
       
  1175     // fourth, parametrized foreach.
       
  1176     foreach (const CustomTestDetail& det, c.details<CustomTestDetail>()) {
       
  1177         QCOMPARE(det.definitionName(), QString("CustomTestDetail"));
       
  1178     }
   982 }
  1179 }
   983 
  1180 
   984 
  1181 
   985 QTEST_MAIN(tst_QContactDetails)
  1182 QTEST_MAIN(tst_QContactDetails)
   986 #include "tst_qcontactdetails.moc"
  1183 #include "tst_qcontactdetails.moc"