// xestiacalendar_icaltaskload.h - Xestia Calendar iCalendar Task Component Unit Tests // // (c) 2016-2017 Xestia Software Development. // // This file is part of Xestia Calendar. // // Xestia Calendar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by the // Free Software Foundation, version 3 of the license. // // Xestia Calendar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with Xestia Calendar. If not, see #include "../objects/calendartask/CalendarTask.h" #include class iCalendarTaskLoadTests : public ::testing::Test { private: virtual void SetUp() { } virtual void TearDown() { } }; TEST_F(iCalendarTaskLoadTests, BasicTests){ CalendarTaskObject testTask; ASSERT_EQ(CALENDAROBJECTLOAD_MISSING, testTask.LoadFile("iCalendarTask-Missing.vcf")); ASSERT_EQ(CALENDAROBJECTLOAD_CANNOTOPEN, testTask.LoadFile("iCalendarTask-InvalidPermissions.vcf")); ASSERT_EQ(CALENDAROBJECTLOAD_OK, testTask.LoadFile("iCalendarTask-Load1.vcf")); } TEST_F(iCalendarTaskLoadTests, ObjectDataTests){ CalendarTaskObject testTask; ASSERT_EQ(CALENDAROBJECTLOAD_OK, testTask.LoadFile("iCalendarTask-Load2.vcf")); ASSERT_EQ(CALENDAROBJECTVALID_OK, testTask.ValidBaseObject()); // Tests for DTSTAMP. ASSERT_EQ("20160131T104500Z", testTask.dateTimeStampData); ASSERT_EQ("OTHER=PARAM", testTask.dateTimeStampTokens); // Tests for UID. ASSERT_EQ("b3a16392-ad86-4061-be53-c215af2306e1", testTask.uniqueID); ASSERT_EQ("UNIQUEPARAM=CERTAINLY;OKAY=MAYBENOT", testTask.uniqueIDTokens); // Tests for CLASS. ASSERT_EQ("PUBLIC", testTask.classData); ASSERT_EQ("CHOCOLATE=NONE", testTask.classDataTokens); // Tests for COMPLETED. ASSERT_EQ("20160131T110100Z", testTask.completedData); ASSERT_EQ("LYING=NEVER", testTask.completedDataTokens); // Tests for CREATED. ASSERT_EQ("20160131T080000Z", testTask.dateTimeCreatedData); ASSERT_EQ("CARAMEL=PLEASE", testTask.dateTimeCreatedTokens); // Tests for DESCRIPTION. std::string descriptionData; std::string descriptionAltRep; std::string descriptionLanguage; std::string descriptionTokens; if (testTask.descriptionList.begin() != testTask.descriptionList.end()){ descriptionData = testTask.descriptionList[0]; } if (testTask.descriptionListAltRep.begin() != testTask.descriptionListAltRep.end()){ descriptionAltRep = testTask.descriptionListAltRep[0]; } if (testTask.descriptionListLanguage.begin() != testTask.descriptionListLanguage.end()){ descriptionLanguage = testTask.descriptionListLanguage[0]; } if (testTask.descriptionListTokens.begin() != testTask.descriptionListTokens.end()){ descriptionTokens = testTask.descriptionListTokens[0]; } ASSERT_EQ("This is a description of the todo.", descriptionData); ASSERT_EQ("null:nodata", descriptionAltRep); ASSERT_EQ("kw", descriptionLanguage); ASSERT_EQ("EXAMPLE=TOKEN;MOREDATA=YES", descriptionTokens); // Tests for DTSTART. ASSERT_EQ("20160131T103000Z", testTask.dateTimeStartData); ASSERT_EQ("DATE-TIME", testTask.dateTimeStartDataValue); ASSERT_EQ("Europe/Truro", testTask.dateTimeStartDataTimeZoneID); ASSERT_EQ("PARAMONE=YES;PARAMTWO=NO", testTask.dateTimeStartDataTokens); // Tests for GEO. ASSERT_EQ("20.0;20.0", testTask.geographicData); ASSERT_EQ("EXAMPLE=MOOP", testTask.geographicTokens); // Tests for LAST-MODIFIED. ASSERT_EQ("20160131T114200Z", testTask.lastModifiedData); ASSERT_EQ("FUTURE=EVEN", testTask.lastModifiedTokens); // Tests for LOCATION. ASSERT_EQ("The Crystal Ceiling, Truro", testTask.locationData); ASSERT_EQ("null:nodata", testTask.locationDataAltRep); ASSERT_EQ("kw", testTask.locationDataLanguage); ASSERT_EQ("EXACT=YES", testTask.locationDataTokens); // Tests for ORGANIZER. ASSERT_EQ("mailto:organiser@example.com", testTask.organiserData); ASSERT_EQ("ExampleOrganiser", testTask.organiserDataCommonName); ASSERT_EQ("null:nodata", testTask.organiserDataDirectoryEntry); ASSERT_EQ("mailto:organiser.noreply@example.com", testTask.organiserDataSentByParam); ASSERT_EQ("kw", testTask.organiserDataLanguage); ASSERT_EQ("HAPPY=WEEKS", testTask.organiserDataTokens); // Tests for PERCENT-COMPLETE. ASSERT_EQ("42", testTask.percentCompleteData); ASSERT_EQ("DEEP=THOUGHT", testTask.percentCompleteTokens); // Tests for PRIORITY. ASSERT_EQ(5, testTask.priorityData); ASSERT_EQ("STATUS=DEFAULT", testTask.priorityTokens); // Tests for RECURRENCE-ID. ASSERT_EQ("20160131", testTask.recurranceIDData); ASSERT_EQ("Europe/Truro", testTask.recurranceIDDataTimeZoneParam); ASSERT_EQ("THISANDFUTURE", testTask.recurranceIDDataRangeParam); ASSERT_EQ("DATE", testTask.recurranceIDDataValue); ASSERT_EQ("EXAMPLE=DATA", testTask.recurranceIDDataTokens); // Tests for SEQUENCE. ASSERT_EQ(3, testTask.sequenceData); ASSERT_EQ("TEST=YAY", testTask.sequenceTokens); // Tests for STATUS. ASSERT_EQ("2.0;Success", testTask.statusData); ASSERT_EQ("kw", testTask.statusLanguage); ASSERT_EQ("FAVOURITE=BEANS;NOTLIKE=UNKNOWN", testTask.statusTokens); // Tests for SUMMARY. ASSERT_EQ("A summary of the todo.", testTask.summaryData); ASSERT_EQ("null:nodata", testTask.summaryDataAltRep); ASSERT_EQ("kw", testTask.summaryDataLanguage); ASSERT_EQ("FAVOURITE=TOFU;NOTLIKE=NONE", testTask.summaryDataTokens); // Tests for URL. ASSERT_EQ("http://www.example.com/", testTask.urlData); ASSERT_EQ("EXTERNAL=YES", testTask.urlDataTokens); // Tests for RRULE. ASSERT_EQ("FREQ=DAILY;COUNT=10", testTask.recurranceRuleData); ASSERT_EQ("TEST=DATA", testTask.recurranceRuleDataTokens); // Tests for DUE. ASSERT_EQ("20160131T150000Z", testTask.dueData); ASSERT_EQ("Europe/Truro", testTask.dueDataTimeZoneID); ASSERT_EQ("DATE-TIME", testTask.dueDataValue); ASSERT_EQ("TEST=YES", testTask.dueDataTokens); // Tests for DURATION. CalendarTaskObject testTask2; ASSERT_EQ(CALENDAROBJECTLOAD_OK, testTask2.LoadFile("iCalendarTask-Load3.vcf")); ASSERT_EQ(CALENDAROBJECTVALID_OK, testTask2.ValidBaseObject()); ASSERT_EQ("PT15M", testTask2.durationData); ASSERT_EQ("TEST=YES", testTask2.durationDataTokens); // Tests for ATTACH. First ATTACH property. std::string attachData; std::string attachDataFormatType; std::string attachDataValue; std::string attachDataEncoding; std::string attachDataTokens; if (testTask.attachList.begin() != testTask.attachList.end()){ attachData = testTask.attachList[0]; } if (testTask.attachListFormatType.begin() != testTask.attachListFormatType.end()){ attachDataFormatType = testTask.attachListFormatType[0]; } ASSERT_EQ("http://www.example.com/", attachData); ASSERT_EQ("application/internet-shortcut", attachDataFormatType); // Second ATTACH property. attachData.clear(); attachDataFormatType.clear(); attachDataValue.clear(); attachDataEncoding.clear(); if (testTask.attachList.size() > 1){ attachData = testTask.attachList[1]; } if (testTask.attachListFormatType.size() > 1){ attachDataFormatType = testTask.attachListFormatType[1]; } ASSERT_EQ("http://www.example.com/page2.html", attachData); ASSERT_EQ("application/internet-shortcut", attachDataFormatType); // Third ATTACH property. attachData.clear(); attachDataFormatType.clear(); attachDataValue.clear(); attachDataEncoding.clear(); attachDataTokens.clear(); if (testTask.attachList.size() > 2){ attachData = testTask.attachList[2]; } if (testTask.attachListFormatType.size() > 2){ attachDataFormatType = testTask.attachListFormatType[2]; } if (testTask.attachListValue.size() > 2){ attachDataValue = testTask.attachListValue[2]; } if (testTask.attachListFormatType.size() > 2){ attachDataEncoding = testTask.attachListEncoding[2]; } if (testTask.attachListTokens.size() > 2){ attachDataTokens = testTask.attachListTokens[2]; } ASSERT_EQ("VGhpcyBpcyBhbiBleGFtcGxlIGZpbGU=", attachData); ASSERT_EQ("text/plain", attachDataFormatType); ASSERT_EQ("BASE64", attachDataEncoding); ASSERT_EQ("BINARY", attachDataValue); ASSERT_EQ("STUPID=EXAMPLE", attachDataTokens); // Tests for ATTENDEE. First ATTENDEE property. std::string attendeeDataMember; std::string attendeeDataDelegatedFrom; std::string attendeeDataDelegatedTo; std::string attendeeDataRole; std::string attendeeDataRSVP; std::string attendeeDataDirectoryEntry; std::string attendeeDataSentBy; std::string attendeeDataCommonName; std::string attendeeDataCalendarUserType; std::string attendeeDataParticipationStatus; std::string attendeeDataLanguage; std::string attendeeDataTokens; std::string attendeeData; if (testTask.attendeeList.begin() != testTask.attendeeList.end()){ attendeeData = testTask.attendeeList[0]; } ASSERT_EQ("Attendee One", attendeeData); // Second ATTENDEE property. attendeeData.clear(); if (testTask.attendeeList.size() > 1){ attendeeData = testTask.attendeeList[1]; } if (testTask.attendeeList.size() > 1){ attendeeDataDelegatedFrom = testTask.attendeeListDelegatedFrom[1]; } if (testTask.attendeeList.size() > 1){ attendeeDataDelegatedTo = testTask.attendeeListDelegatedTo[1]; } if (testTask.attendeeList.size() > 1){ attendeeDataRole = testTask.attendeeListRole[1]; } if (testTask.attendeeList.size() > 1){ attendeeDataRSVP = testTask.attendeeListRSVP[1]; } ASSERT_EQ("Attendee Two", attendeeData); ASSERT_EQ("mailto:delegated.from@example.com", attendeeDataDelegatedFrom); ASSERT_EQ("mailto:delegated.to@example.com", attendeeDataDelegatedTo); ASSERT_EQ("CHAIR", attendeeDataRole); ASSERT_EQ("TRUE", attendeeDataRSVP); // Third ATTENDEE property. attendeeData.clear(); if (testTask.attendeeList.size() > 2){ attendeeData = testTask.attendeeList[2]; } if (testTask.attendeeList.size() > 2){ attendeeDataDirectoryEntry = testTask.attendeeListDirectoryEntry[2]; } if (testTask.attendeeList.size() > 2){ attendeeDataSentBy = testTask.attendeeListSentBy[2]; } if (testTask.attendeeList.size() > 2){ attendeeDataCommonName = testTask.attendeeListCommonName[2]; } if (testTask.attendeeList.size() > 2){ attendeeDataCalendarUserType = testTask.attendeeListCalendarUserType[2]; } if (testTask.attendeeList.size() > 2){ attendeeDataParticipationStatus = testTask.attendeeListParticipationStatus[2]; } if (testTask.attendeeList.size() > 2){ attendeeDataLanguage = testTask.attendeeListLanguage[2]; } if (testTask.attendeeList.size() > 2){ attendeeDataTokens = testTask.attendeeListTokens[2]; } ASSERT_EQ("Attendee Three", attendeeData); ASSERT_EQ("null:nodata", attendeeDataDirectoryEntry); ASSERT_EQ("mailto:sent.by@example.com", attendeeDataSentBy); ASSERT_EQ("Attendee The Third", attendeeDataCommonName); ASSERT_EQ("INDIVIDUAL", attendeeDataCalendarUserType); ASSERT_EQ("ACCEPTED", attendeeDataParticipationStatus); ASSERT_EQ("kw", attendeeDataLanguage); ASSERT_EQ("EXAMPLE=DATA", attendeeDataTokens); // Get the first CATEGORIES. std::string categoryData; if (testTask.categoriesList.begin() != testTask.categoriesList.end()){ categoryData = testTask.categoriesList[0]; } ASSERT_EQ("CATEGORY ONE, CATEGORY TWO", categoryData); categoryData.clear(); std::string categoryLanguage; // Get the second CATEGORIES. if (testTask.categoriesList.size() > 1){ categoryData = testTask.categoriesList[1]; } if (testTask.categoriesList.size() > 1){ categoryLanguage = testTask.categoriesListLanguage[1]; } ASSERT_EQ("CATEGORY THREE, CATEGORY FOUR", categoryData); ASSERT_EQ("en", categoryLanguage); categoryData.clear(); categoryLanguage.clear(); // Get the third CATEGORIES. std::string categoryTokens; if (testTask.categoriesList.size() > 2){ categoryData = testTask.categoriesList[2]; } if (testTask.categoriesList.size() > 2){ categoryLanguage = testTask.categoriesListLanguage[2]; } if (testTask.categoriesList.size() > 2){ categoryTokens = testTask.categoriesListTokens[2]; } ASSERT_EQ("CATEGORY FIVE, CATEGORY SIX, CATEGORY SEVEN", categoryData); ASSERT_EQ("en-GB", categoryLanguage); ASSERT_EQ("SAMPLE=TOKEN", categoryTokens); // Get the first COMMENT. std::string commentData; if (testTask.commentList.begin() != testTask.commentList.end()){ commentData = testTask.commentList[0]; } ASSERT_EQ("This is the first comment.", commentData); // Get the second COMMENT. commentData.clear(); std::string commentDataAltRep; std::string commentDataLanguage; if (testTask.commentList.size() > 1){ commentData = testTask.commentList[1]; } if (testTask.commentList.size() > 1){ commentDataAltRep = testTask.commentListAltRep[1]; } if (testTask.commentList.size() > 1){ commentDataLanguage = testTask.commentListLanguage[1]; } ASSERT_EQ("This is the second comment.", commentData); ASSERT_EQ("null:nodata", commentDataAltRep); ASSERT_EQ("en", commentDataLanguage); // Get the third COMMENT. commentData.clear(); std::string commentDataTokens; if (testTask.commentList.size() > 2){ commentData = testTask.commentList[2]; } if (testTask.commentList.size() > 2){ commentDataTokens = testTask.commentListTokens[2]; } ASSERT_EQ("This is the third comment.", commentData); ASSERT_EQ("ZEBRAS=YES", commentDataTokens); // Get the first CONTACT. std::string contactData; if (testTask.contactList.begin() != testTask.contactList.end()){ contactData = testTask.contactList[0]; } ASSERT_EQ("First Contact", contactData); // Get the second CONTACT. contactData.clear(); std::string contactDataAltRep; std::string contactDataLanguage; if (testTask.contactList.size() > 1){ contactData = testTask.contactList[1]; } if (testTask.contactList.size() > 1){ contactDataAltRep = testTask.contactListAltRep[1]; } if (testTask.contactList.size() > 1){ contactDataLanguage = testTask.contactListLanguage[1]; } ASSERT_EQ("Second Contact", contactData); ASSERT_EQ("null:nodata", contactDataAltRep); ASSERT_EQ("en-GB", contactDataLanguage); // Get the third CONTACT. contactData.clear(); std::string contactDataTokens; if (testTask.contactList.size() > 2){ contactData = testTask.contactList[2]; } if (testTask.contactList.size() > 2){ contactDataTokens = testTask.contactListTokens[2]; } ASSERT_EQ("Third Contact", contactData); ASSERT_EQ("ZEBRAS=NO", contactDataTokens); // Get the first EXDATE. std::string excludeDate; if (testTask.excludeDateData.begin() != testTask.excludeDateData.end()){ excludeDate = testTask.excludeDateData[0]; } ASSERT_EQ("20160125T120000Z", excludeDate); // Get the second EXDATE. excludeDate.clear(); std::string excludeDataTimeZoneParam; std::string excludeDataValue; if (testTask.contactList.size() > 1){ excludeDate = testTask.excludeDateData[1]; } if (testTask.contactList.size() > 1){ excludeDataTimeZoneParam = testTask.excludeDateDataTimeZoneParam[1]; } if (testTask.contactList.size() > 1){ excludeDataValue = testTask.excludeDateDataValue[1]; } ASSERT_EQ("20160125T130000Z", excludeDate); ASSERT_EQ("DATE-TIME", excludeDataValue); ASSERT_EQ("Europe/Truro", excludeDataTimeZoneParam); // Get the third EXDATE. excludeDate.clear(); std::string excludeDataTokens; if (testTask.contactList.size() > 2){ excludeDate = testTask.excludeDateData[2]; } if (testTask.contactList.size() > 2){ excludeDataTokens = testTask.excludeDateDataTokens[2]; } ASSERT_EQ("20160125T133000Z", excludeDate); ASSERT_EQ("ZOOP=ZIPPO", excludeDataTokens); // Get the first REQUEST-STATUS. std::string requestStatus; if (testTask.requestStatusData.begin() != testTask.requestStatusData.end()){ requestStatus = testTask.requestStatusData[0]; } ASSERT_EQ("2.0;Success", requestStatus); // Get the second REQUEST-STATUS. requestStatus.clear(); std::string requestLanguage; if (testTask.contactList.size() > 1){ requestStatus = testTask.requestStatusData[1]; } if (testTask.contactList.size() > 1){ requestLanguage = testTask.requestStatusLanguage[1]; } ASSERT_EQ("3.42;Really big irrecoverable error caused by the user", requestStatus); ASSERT_EQ("en", requestLanguage); // Get the third REQUEST-STATUS. requestStatus.clear(); std::string requestTokens; if (testTask.contactList.size() > 2){ requestStatus = testTask.requestStatusData[2]; } if (testTask.contactList.size() > 2){ requestTokens = testTask.requestStatusTokens[2]; } ASSERT_EQ("3.7;Invalid calendar user", requestStatus); ASSERT_EQ("USER=MISSING", requestTokens); // Get the first RELATED-TO. std::string relatedTo; if (testTask.relatedToData.begin() != testTask.relatedToData.end()){ relatedTo = testTask.relatedToData[0]; } ASSERT_EQ("person.1@example.com", relatedTo); // Get the second RELATED-TO. relatedTo.clear(); std::string relatedToType; if (testTask.relatedToData.size() > 1){ relatedTo = testTask.relatedToData[1]; } if (testTask.relatedToData.size() > 1){ relatedToType = testTask.relatedToDataRelationType[1]; } ASSERT_EQ("person.2@example.com", relatedTo); ASSERT_EQ("PARENT", relatedToType); // Get the third RELATED-TO. relatedTo.clear(); std::string relatedToTokens; if (testTask.relatedToData.size() > 2){ relatedTo = testTask.relatedToData[2]; } if (testTask.relatedToData.size() > 2){ relatedToTokens = testTask.relatedToDataTokens[2]; } ASSERT_EQ("person.3@example.com", relatedTo); ASSERT_EQ("SCHOOL=MEETING", relatedToTokens); // Get the first RESOURCES. std::string resources; if (testTask.resourcesData.begin() != testTask.resourcesData.end()){ resources = testTask.resourcesData[0]; } ASSERT_EQ("DMAC RECEIVER", resources); // Get the second RESOURCES. resources.clear(); std::string resourcesLanguage; if (testTask.resourcesData.size() > 1){ resources = testTask.resourcesData[1]; } if (testTask.resourcesData.size() > 1){ resourcesLanguage = testTask.resourcesDataLanguage[1]; } ASSERT_EQ("PAL-I TELEVISION SET", resources); ASSERT_EQ("en", resourcesLanguage); // Get the third RESOURCES. resources.clear(); std::string resourcesAltRep; std::string resourcesTokens; if (testTask.resourcesData.size() > 2){ resources = testTask.resourcesData[2]; } if (testTask.resourcesData.size() > 2){ resourcesAltRep = testTask.resourcesDataAltRep[2]; } if (testTask.resourcesData.size() > 2){ resourcesTokens = testTask.resourcesDataTokens[2]; } ASSERT_EQ("PAL/SECAM VCR", resources); ASSERT_EQ("null:nodata", resourcesAltRep); ASSERT_EQ("STATUS=BROKEN", resourcesTokens); // Get the first RDATE. std::string recurrenceDate; if (testTask.recurranceDateData.begin() != testTask.recurranceDateData.end()){ recurrenceDate = testTask.recurranceDateData[0]; } ASSERT_EQ("20160120", recurrenceDate); // Get the second RDATE. recurrenceDate.clear(); std::string recurrenceDateTimeZoneParam; std::string recurrenceDateValue; if (testTask.recurranceDateData.size() > 1){ recurrenceDate = testTask.recurranceDateData[1]; } if (testTask.recurranceDateData.size() > 1){ recurrenceDateTimeZoneParam = testTask.recurranceDateDataTimeZoneParam[1]; } if (testTask.recurranceDateData.size() > 1){ recurrenceDateValue = testTask.recurranceDateDataValue[1]; } ASSERT_EQ("20160121", recurrenceDate); ASSERT_EQ("DATE", recurrenceDateValue); ASSERT_EQ("Europe/Truro", recurrenceDateTimeZoneParam); // Get the third RDATE. recurrenceDate.clear(); std::string recurrenceTokens; if (testTask.recurranceDateData.size() > 2){ recurrenceDate = testTask.recurranceDateData[2]; } if (testTask.recurranceDateData.size() > 2){ recurrenceTokens = testTask.recurranceDateDataTokens[2]; } ASSERT_EQ("20160520", recurrenceDate); ASSERT_EQ("ZILCH=DATA", recurrenceTokens); // Get the first X-EXAMPLE1 token. std::string xTokenName; std::string xTokenData; if (testTask.xTokensData.size() != 0 ){ xTokenData = testTask.xTokensData[0]; } if (testTask.xTokensData.size() != 0){ xTokenName = testTask.xTokensDataTokens[0]; } ASSERT_EQ("Moo", xTokenData); ASSERT_EQ("X-EXAMPLE1", xTokenName); // Get the second X-EXAMPLE1 token. xTokenName.clear(); xTokenData.clear(); if (testTask.xTokensData.size() > 1){ xTokenData = testTask.xTokensData[1]; } if (testTask.xTokensData.size() > 1){ xTokenName = testTask.xTokensDataTokens[1]; } ASSERT_EQ("Meep", xTokenData); ASSERT_EQ("X-EXAMPLE1;ANIMAL=NOPE", xTokenName); // Get the third X-EXAMPLE1 token. xTokenName.clear(); xTokenData.clear(); if (testTask.xTokensData.size() > 2){ xTokenData = testTask.xTokensData[2]; } if (testTask.xTokensData.size() > 2){ xTokenName = testTask.xTokensDataTokens[2]; } ASSERT_EQ("Meow", xTokenData); ASSERT_EQ("X-EXAMPLE1;ANIMAL=CAT", xTokenName); // Get the first X-EXAMPLE2 token. xTokenName.clear(); xTokenData.clear(); if (testTask.xTokensData.size() > 3){ xTokenData = testTask.xTokensData[3]; } if (testTask.xTokensData.size() > 3){ xTokenName = testTask.xTokensDataTokens[3]; } ASSERT_EQ("Dish", xTokenData); ASSERT_EQ("X-EXAMPLE2", xTokenName); // Get the second X-EXAMPLE2 token. xTokenName.clear(); xTokenData.clear(); if (testTask.xTokensData.size() > 4){ xTokenData = testTask.xTokensData[4]; } if (testTask.xTokensData.size() > 4){ xTokenName = testTask.xTokensDataTokens[4]; } ASSERT_EQ("Fork", xTokenData); ASSERT_EQ("X-EXAMPLE2;OBJECT=KITCHEN", xTokenName); // Get the third X-EXAMPLE2 token. xTokenName.clear(); xTokenData.clear(); if (testTask.xTokensData.size() > 5){ xTokenData = testTask.xTokensData[5]; } if (testTask.xTokensData.size() > 5){ xTokenName = testTask.xTokensDataTokens[5]; } ASSERT_EQ("Table", xTokenData); ASSERT_EQ("X-EXAMPLE2;OBJECT=LIVINGROOM", xTokenName); // Get the X-STATUS token. xTokenName.clear(); xTokenData.clear(); if (testTask.xTokensData.size() > 6){ xTokenData = testTask.xTokensData[6]; } if (testTask.xTokensData.size() > 6){ xTokenName = testTask.xTokensDataTokens[6]; } ASSERT_EQ("Idle", xTokenData); ASSERT_EQ("X-STATUS;HOLIDAY=YES", xTokenName); // Get the X-TRANSPORT token. xTokenName.clear(); xTokenData.clear(); if (testTask.xTokensData.size() > 7){ xTokenData = testTask.xTokensData[7]; } if (testTask.xTokensData.size() > 7){ xTokenName = testTask.xTokensDataTokens[7]; } ASSERT_EQ("Private Hire", xTokenData); ASSERT_EQ("X-TRANSPORT;PUBLIC=NO", xTokenName); // Get the X-PHANTOM-STATUS token. xTokenName.clear(); xTokenData.clear(); if (testTask.xTokensData.size() > 8){ xTokenData = testTask.xTokensData[8]; } if (testTask.xTokensData.size() > 8){ xTokenName = testTask.xTokensDataTokens[8]; } ASSERT_EQ("None", xTokenData); ASSERT_EQ("X-PHANTOM-STATUS;HELP=NONE", xTokenName); } TEST_F(iCalendarTaskLoadTests, AlarmTests){ CalendarTaskObject testTask; ASSERT_EQ(CALENDAROBJECTLOAD_OK, testTask.LoadFile("iCalendarTask-Load2.vcf")); ASSERT_EQ(CALENDAROBJECTVALID_OK, testTask.ValidBaseObject()); // Tests for the first VALARM property. std::string actionData; std::string actionDataTokens; std::string triggerData; std::string triggerRelated; std::string triggerValue; std::string triggerTokens; std::string durationData; std::string durationTokens; std::string repeatData; std::string repeatTokens; std::string xTokenData; std::string xTokenName; if (testTask.calendarAlarmData.size() > 0){ actionData = testTask.calendarAlarmData[0].alarmAction; actionDataTokens = testTask.calendarAlarmData[0].alarmActionTokens; triggerData = testTask.calendarAlarmData[0].triggerData; triggerRelated = testTask.calendarAlarmData[0].triggerRelated; triggerValue = testTask.calendarAlarmData[0].triggerValue; triggerTokens = testTask.calendarAlarmData[0].triggerTokens; durationData = testTask.calendarAlarmData[0].durationData; durationTokens = testTask.calendarAlarmData[0].durationTokens; repeatData = testTask.calendarAlarmData[0].repeatData; repeatTokens = testTask.calendarAlarmData[0].repeatTokens; } ASSERT_EQ("AUDIO", actionData); ASSERT_EQ("FUNKY=SOUNDS", actionDataTokens); ASSERT_EQ("20160220T160000Z", triggerData); ASSERT_EQ("END", triggerRelated); ASSERT_EQ("DATE-TIME", triggerValue); ASSERT_EQ("PUSH=BUTTON", triggerTokens); ASSERT_EQ("PT5H", durationData); ASSERT_EQ("FLYING=NO", durationTokens); ASSERT_EQ("PT5M", repeatData); ASSERT_EQ("NEVER=SLEEP", repeatTokens); // Tests for ATTACH. First ATTACH property. std::string attachData; std::string attachDataFormatType; std::string attachDataValue; std::string attachDataEncoding; std::string attachDataTokens; if (testTask.calendarAlarmData[0].attachList.begin() != testTask.calendarAlarmData[0].attachList.end()){ attachData = testTask.attachList[0]; } if (testTask.calendarAlarmData[0].attachListFormatType.begin() != testTask.calendarAlarmData[0].attachListFormatType.end()){ attachDataFormatType = testTask.attachListFormatType[0]; } ASSERT_EQ("http://www.example.com/", attachData); ASSERT_EQ("application/internet-shortcut", attachDataFormatType); // Second ATTACH property. attachData.clear(); attachDataFormatType.clear(); attachDataValue.clear(); attachDataEncoding.clear(); if (testTask.calendarAlarmData[0].attachList.size() > 1){ attachData = testTask.calendarAlarmData[0].attachList[1]; } if (testTask.calendarAlarmData[0].attachListFormatType.size() > 1){ attachDataFormatType = testTask.calendarAlarmData[0].attachListFormatType[1]; } ASSERT_EQ("http://www.example.com/page2.html", attachData); ASSERT_EQ("application/internet-shortcut", attachDataFormatType); // Third ATTACH property. attachData.clear(); attachDataFormatType.clear(); attachDataValue.clear(); attachDataEncoding.clear(); attachDataTokens.clear(); if (testTask.calendarAlarmData[0].attachList.size() > 2){ attachData = testTask.calendarAlarmData[0].attachList[2]; } if (testTask.calendarAlarmData[0].attachListFormatType.size() > 2){ attachDataFormatType = testTask.calendarAlarmData[0].attachListFormatType[2]; } if (testTask.calendarAlarmData[0].attachListValue.size() > 2){ attachDataValue = testTask.calendarAlarmData[0].attachListValue[2]; } if (testTask.calendarAlarmData[0].attachListFormatType.size() > 2){ attachDataEncoding = testTask.calendarAlarmData[0].attachListEncoding[2]; } if (testTask.calendarAlarmData[0].attachListTokens.size() > 2){ attachDataTokens = testTask.calendarAlarmData[0].attachListTokens[2]; } ASSERT_EQ("VGhpcyBpcyBhbiBleGFtcGxlIGZpbGU=", attachData); ASSERT_EQ("text/plain", attachDataFormatType); ASSERT_EQ("BASE64", attachDataEncoding); ASSERT_EQ("BINARY", attachDataValue); ASSERT_EQ("STUPID=EXAMPLE", attachDataTokens); // Test the first X-Token. if (testTask.calendarAlarmData[0].xTokensData.size() > 0){ xTokenData = testTask.calendarAlarmData[0].xTokensData[0]; xTokenName = testTask.calendarAlarmData[0].xTokensDataTokens[0]; } ASSERT_EQ("Example Data 1", xTokenData); ASSERT_EQ("X-EXAMPLE1;YAY=YES", xTokenName); // Test the second X-Token. xTokenData.clear(); xTokenName.clear(); if (testTask.calendarAlarmData[0].xTokensData.size() > 1){ xTokenData = testTask.calendarAlarmData[0].xTokensData[1]; xTokenName = testTask.calendarAlarmData[0].xTokensDataTokens[1]; } ASSERT_EQ("Example Data 2", xTokenData); ASSERT_EQ("X-EXAMPLE2;NOPE=YEP", xTokenName); // Test the third X-Token. xTokenData.clear(); xTokenName.clear(); if (testTask.calendarAlarmData[0].xTokensData.size() > 2){ xTokenData = testTask.calendarAlarmData[0].xTokensData[2]; xTokenName = testTask.calendarAlarmData[0].xTokensDataTokens[2]; } ASSERT_EQ("Example Data 3", xTokenData); ASSERT_EQ("X-EXAMPLE3;WORLD=NO", xTokenName); // Tests for the second VALARM property. actionData.clear(); actionDataTokens.clear(); triggerData.clear(); triggerRelated.clear(); triggerValue.clear(); triggerTokens.clear(); durationData.clear(); durationTokens.clear(); repeatData.clear(); repeatTokens.clear(); xTokenData.clear(); xTokenName.clear(); string descriptionData; string descriptionAltRep; string descriptionLanguage; string descriptionTokens; if (testTask.calendarAlarmData.size() > 1){ actionData = testTask.calendarAlarmData[1].alarmAction; actionDataTokens = testTask.calendarAlarmData[1].alarmActionTokens; triggerData = testTask.calendarAlarmData[1].triggerData; triggerRelated = testTask.calendarAlarmData[1].triggerRelated; triggerValue = testTask.calendarAlarmData[1].triggerValue; triggerTokens = testTask.calendarAlarmData[1].triggerTokens; durationData = testTask.calendarAlarmData[1].durationData; durationTokens = testTask.calendarAlarmData[1].durationTokens; repeatData = testTask.calendarAlarmData[1].repeatData; repeatTokens = testTask.calendarAlarmData[1].repeatTokens; descriptionData = testTask.calendarAlarmData[1].descriptionData; descriptionAltRep = testTask.calendarAlarmData[1].descriptionAltRep; descriptionLanguage = testTask.calendarAlarmData[1].descriptionLanguage; descriptionTokens = testTask.calendarAlarmData[1].descriptionTokens; } ASSERT_EQ("DISPLAY", actionData); ASSERT_EQ("FLASHING=LIGHTS", actionDataTokens); ASSERT_EQ("20160230T110000Z", triggerData); ASSERT_EQ("END", triggerRelated); ASSERT_EQ("DATE-TIME", triggerValue); ASSERT_EQ("PUSH=BUTTON", triggerTokens); ASSERT_EQ("PT7H", durationData); ASSERT_EQ("FLYING=YES", durationTokens); ASSERT_EQ("PT3M", repeatData); ASSERT_EQ("SLEEP=ALWAYS", repeatTokens); ASSERT_EQ("This is the second alarm.", descriptionData); ASSERT_EQ("null:nodata", descriptionAltRep); ASSERT_EQ("kw", descriptionLanguage); ASSERT_EQ("TERRIBLE=TOKEN", descriptionTokens); // Test the first X-Token. if (testTask.calendarAlarmData[1].xTokensData.size() > 0){ xTokenData = testTask.calendarAlarmData[1].xTokensData[0]; xTokenName = testTask.calendarAlarmData[1].xTokensDataTokens[0]; } ASSERT_EQ("Example Data 1", xTokenData); ASSERT_EQ("X-EXAMPLE1;YAY=YES", xTokenName); // Test the second X-Token. xTokenData.clear(); xTokenName.clear(); if (testTask.calendarAlarmData[1].xTokensData.size() > 1){ xTokenData = testTask.calendarAlarmData[1].xTokensData[1]; xTokenName = testTask.calendarAlarmData[1].xTokensDataTokens[1]; } ASSERT_EQ("Example Data 2", xTokenData); ASSERT_EQ("X-EXAMPLE2;NOPE=YEP", xTokenName); // Test the third X-Token. xTokenData.clear(); xTokenName.clear(); if (testTask.calendarAlarmData[1].xTokensData.size() > 2){ xTokenData = testTask.calendarAlarmData[1].xTokensData[2]; xTokenName = testTask.calendarAlarmData[1].xTokensDataTokens[2]; } ASSERT_EQ("Example Data 3", xTokenData); ASSERT_EQ("X-EXAMPLE3;WORLD=NO", xTokenName); // Tests for the third VALARM property. actionData.clear(); actionDataTokens.clear(); triggerData.clear(); triggerRelated.clear(); triggerValue.clear(); triggerTokens.clear(); durationData.clear(); durationTokens.clear(); repeatData.clear(); repeatTokens.clear(); xTokenData.clear(); xTokenName.clear(); descriptionData.clear(); descriptionAltRep.clear(); descriptionLanguage.clear(); descriptionTokens.clear(); string summaryData; string summaryAltRep; string summaryLanguage; string summaryTokens; string attendeeDataMember; string attendeeDataDelegatedFrom; string attendeeDataDelegatedTo; string attendeeDataRole; string attendeeDataRSVP; string attendeeDataDirectoryEntry; string attendeeDataSentBy; string attendeeDataCommonName; string attendeeDataCalendarUserType; string attendeeDataParticipationStatus; string attendeeDataLanguage; string attendeeDataTokens; string attendeeData; attachData.clear(); attachDataFormatType.clear(); attachDataValue.clear(); attachDataEncoding.clear(); attachDataTokens.clear(); if (testTask.calendarAlarmData.size() > 2){ actionData = testTask.calendarAlarmData[2].alarmAction; actionDataTokens = testTask.calendarAlarmData[2].alarmActionTokens; triggerData = testTask.calendarAlarmData[2].triggerData; triggerRelated = testTask.calendarAlarmData[2].triggerRelated; triggerValue = testTask.calendarAlarmData[2].triggerValue; triggerTokens = testTask.calendarAlarmData[2].triggerTokens; durationData = testTask.calendarAlarmData[2].durationData; durationTokens = testTask.calendarAlarmData[2].durationTokens; repeatData = testTask.calendarAlarmData[2].repeatData; repeatTokens = testTask.calendarAlarmData[2].repeatTokens; descriptionData = testTask.calendarAlarmData[2].descriptionData; descriptionAltRep = testTask.calendarAlarmData[2].descriptionAltRep; descriptionLanguage = testTask.calendarAlarmData[2].descriptionLanguage; descriptionTokens = testTask.calendarAlarmData[2].descriptionTokens; summaryData = testTask.calendarAlarmData[2].summaryData; summaryAltRep = testTask.calendarAlarmData[2].summaryAltRep; summaryLanguage = testTask.calendarAlarmData[2].summaryLanguage; summaryTokens = testTask.calendarAlarmData[2].summaryTokens; } ASSERT_EQ("EMAIL", actionData); ASSERT_EQ("FLASHING=LIGHTS", actionDataTokens); ASSERT_EQ("20160230T120000Z", triggerData); ASSERT_EQ("END", triggerRelated); ASSERT_EQ("DATE-TIME", triggerValue); ASSERT_EQ("PUSH=BUTTON", triggerTokens); ASSERT_EQ("PT7H", durationData); ASSERT_EQ("FLYING=YES", durationTokens); ASSERT_EQ("PT3M", repeatData); ASSERT_EQ("SLEEP=ALWAYS", repeatTokens); ASSERT_EQ("This is the third alarm.", descriptionData); ASSERT_EQ("null:nodata", descriptionAltRep); ASSERT_EQ("kw", descriptionLanguage); ASSERT_EQ("TERRIBLE=TOKEN", descriptionTokens); ASSERT_EQ("This is the summary of the third alarm.", summaryData); ASSERT_EQ("null:nodata", summaryAltRep); ASSERT_EQ("en", summaryLanguage); ASSERT_EQ("MEEP=MOOP", summaryTokens); // Tests for ATTENDEE. First ATTENDEE property. if (testTask.calendarAlarmData[2].attendeeList.begin() != testTask.calendarAlarmData[2].attendeeList.end()){ attendeeData = testTask.calendarAlarmData[2].attendeeList[0]; } ASSERT_EQ("Attendee One", attendeeData); // Second ATTENDEE property. attendeeData.clear(); if (testTask.calendarAlarmData[2].attendeeList.size() > 1){ attendeeData = testTask.calendarAlarmData[2].attendeeList[1]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 1){ attendeeDataDelegatedFrom = testTask.calendarAlarmData[2].attendeeListDelegatedFrom[1]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 1){ attendeeDataDelegatedTo = testTask.calendarAlarmData[2].attendeeListDelegatedTo[1]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 1){ attendeeDataRole = testTask.calendarAlarmData[2].attendeeListRole[1]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 1){ attendeeDataRSVP = testTask.calendarAlarmData[2].attendeeListRSVP[1]; } ASSERT_EQ("Attendee Two", attendeeData); ASSERT_EQ("mailto:delegated.from@example.com", attendeeDataDelegatedFrom); ASSERT_EQ("mailto:delegated.to@example.com", attendeeDataDelegatedTo); ASSERT_EQ("CHAIR", attendeeDataRole); ASSERT_EQ("TRUE", attendeeDataRSVP); // Third ATTENDEE property. attendeeData.clear(); if (testTask.calendarAlarmData[2].attendeeList.size() > 2){ attendeeData = testTask.calendarAlarmData[2].attendeeList[2]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 2){ attendeeDataDirectoryEntry = testTask.calendarAlarmData[2].attendeeListDirectoryEntry[2]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 2){ attendeeDataSentBy = testTask.calendarAlarmData[2].attendeeListSentBy[2]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 2){ attendeeDataCommonName = testTask.calendarAlarmData[2].attendeeListCommonName[2]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 2){ attendeeDataCalendarUserType = testTask.calendarAlarmData[2].attendeeListCalendarUserType[2]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 2){ attendeeDataParticipationStatus = testTask.calendarAlarmData[2].attendeeListParticipationStatus[2]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 2){ attendeeDataLanguage = testTask.calendarAlarmData[2].attendeeListLanguage[2]; } if (testTask.calendarAlarmData[2].attendeeList.size() > 2){ attendeeDataTokens = testTask.calendarAlarmData[2].attendeeListTokens[2]; } ASSERT_EQ("Attendee Three", attendeeData); ASSERT_EQ("null:nodata", attendeeDataDirectoryEntry); ASSERT_EQ("mailto:sent.by@example.com", attendeeDataSentBy); ASSERT_EQ("Attendee The Third", attendeeDataCommonName); ASSERT_EQ("INDIVIDUAL", attendeeDataCalendarUserType); ASSERT_EQ("ACCEPTED", attendeeDataParticipationStatus); ASSERT_EQ("kw", attendeeDataLanguage); ASSERT_EQ("EXAMPLE=DATA", attendeeDataTokens); // Tests for ATTACH. First ATTACH property. if (testTask.calendarAlarmData[2].attachList.begin() != testTask.calendarAlarmData[2].attachList.end()){ attachData = testTask.calendarAlarmData[2].attachList[0]; } if (testTask.calendarAlarmData[2].attachListFormatType.begin() != testTask.calendarAlarmData[2].attachListFormatType.end()){ attachDataFormatType = testTask.calendarAlarmData[2].attachListFormatType[0]; } ASSERT_EQ("http://www.example.com/", attachData); ASSERT_EQ("application/internet-shortcut", attachDataFormatType); // Second ATTACH property. attachData.clear(); attachDataFormatType.clear(); attachDataValue.clear(); attachDataEncoding.clear(); if (testTask.calendarAlarmData[2].attachList.size() > 1){ attachData = testTask.calendarAlarmData[2].attachList[1]; } if (testTask.calendarAlarmData[2].attachListFormatType.size() > 1){ attachDataFormatType = testTask.calendarAlarmData[2].attachListFormatType[1]; } ASSERT_EQ("http://www.example.com/page2.html", attachData); ASSERT_EQ("application/internet-shortcut", attachDataFormatType); // Third ATTACH property. attachData.clear(); attachDataFormatType.clear(); attachDataValue.clear(); attachDataEncoding.clear(); attachDataTokens.clear(); if (testTask.calendarAlarmData[2].attachList.size() > 2){ attachData = testTask.calendarAlarmData[2].attachList[2]; } if (testTask.calendarAlarmData[2].attachListFormatType.size() > 2){ attachDataFormatType = testTask.calendarAlarmData[2].attachListFormatType[2]; } if (testTask.calendarAlarmData[2].attachListValue.size() > 2){ attachDataValue = testTask.calendarAlarmData[2].attachListValue[2]; } if (testTask.calendarAlarmData[2].attachListFormatType.size() > 2){ attachDataEncoding = testTask.calendarAlarmData[2].attachListEncoding[2]; } if (testTask.calendarAlarmData[2].attachListTokens.size() > 2){ attachDataTokens = testTask.calendarAlarmData[2].attachListTokens[2]; } ASSERT_EQ("VGhpcyBpcyBhbiBleGFtcGxlIGZpbGU=", attachData); ASSERT_EQ("text/plain", attachDataFormatType); ASSERT_EQ("BASE64", attachDataEncoding); ASSERT_EQ("BINARY", attachDataValue); ASSERT_EQ("STUPID=EXAMPLE", attachDataTokens); // Test the first X-Token. if (testTask.calendarAlarmData[2].xTokensData.size() > 0){ xTokenData = testTask.calendarAlarmData[2].xTokensData[0]; xTokenName = testTask.calendarAlarmData[2].xTokensDataTokens[0]; } ASSERT_EQ("Example Data 1", xTokenData); ASSERT_EQ("X-EXAMPLE1;YAY=YES", xTokenName); // Test the second X-Token. xTokenData.clear(); xTokenName.clear(); if (testTask.calendarAlarmData[2].xTokensData.size() > 1){ xTokenData = testTask.calendarAlarmData[2].xTokensData[1]; xTokenName = testTask.calendarAlarmData[2].xTokensDataTokens[1]; } ASSERT_EQ("Example Data 2", xTokenData); ASSERT_EQ("X-EXAMPLE2;NOPE=YEP", xTokenName); // Test the third X-Token. xTokenData.clear(); xTokenName.clear(); if (testTask.calendarAlarmData[2].xTokensData.size() > 2){ xTokenData = testTask.calendarAlarmData[2].xTokensData[2]; xTokenName = testTask.calendarAlarmData[2].xTokensDataTokens[2]; } ASSERT_EQ("Example Data 3", xTokenData); ASSERT_EQ("X-EXAMPLE3;WORLD=NO", xTokenName); }