+ // Get the first RDATE.
+
+ std::string RecurrenceDate;
+
+ if (TestEvent.RecurranceDateData.begin() != TestEvent.RecurranceDateData.end()){
+
+ RecurrenceDate = TestEvent.RecurranceDateData[0];
+
+ }
+
+ ASSERT_EQ("20160120", RecurrenceDate);
+
+ // Get the second RDATE.
+
+ RecurrenceDate.clear();
+
+ std::string RecurrenceDateTimeZoneParam;
+ std::string RecurrenceDateValue;
+
+ if (TestEvent.RecurranceDateData.size() > 1){
+
+ RecurrenceDate = TestEvent.RecurranceDateData[1];
+
+ }
+
+ if (TestEvent.RecurranceDateData.size() > 1){
+
+ RecurrenceDateTimeZoneParam = TestEvent.RecurranceDateDataTimeZoneParam[1];
+
+ }
+
+ if (TestEvent.RecurranceDateData.size() > 1){
+
+ RecurrenceDateValue = TestEvent.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 (TestEvent.RecurranceDateData.size() > 2){
+
+ RecurrenceDate = TestEvent.RecurranceDateData[2];
+
+ }
+
+ if (TestEvent.RecurranceDateData.size() > 2){
+
+ RecurrenceTokens = TestEvent.RecurranceDateDataTokens[2];
+
+ }
+
+ ASSERT_EQ("20160520", RecurrenceDate);
+ ASSERT_EQ("ZILCH=DATA", RecurrenceTokens);
+
+ // Get the first X-EXAMPLE1 token.
+
+ std::string XTokenName;
+ std::string XTokenData;
+
+ if (TestEvent.XTokensData.size() != 0 ){
+
+ XTokenData = TestEvent.XTokensData[0];
+
+ }
+
+ if (TestEvent.XTokensData.size() != 0){
+
+ XTokenName = TestEvent.XTokensDataTokens[0];
+
+ }
+
+ ASSERT_EQ("Moo", XTokenData);
+ ASSERT_EQ("X-EXAMPLE1", XTokenName);
+
+ // Get the second X-EXAMPLE1 token.
+
+ XTokenName.clear();
+ XTokenData.clear();
+
+ if (TestEvent.XTokensData.size() > 1){
+
+ XTokenData = TestEvent.XTokensData[1];
+
+ }
+
+ if (TestEvent.XTokensData.size() > 1){
+
+ XTokenName = TestEvent.XTokensDataTokens[1];
+
+ }
+
+ ASSERT_EQ("Meep", XTokenData);
+ ASSERT_EQ("X-EXAMPLE1;ANIMAL=NOPE", XTokenName);
+
+ // Get the third X-EXAMPLE1 token.
+
+ XTokenName.clear();
+ XTokenData.clear();
+
+ if (TestEvent.XTokensData.size() > 2){
+
+ XTokenData = TestEvent.XTokensData[2];
+
+ }
+
+ if (TestEvent.XTokensData.size() > 2){
+
+ XTokenName = TestEvent.XTokensDataTokens[2];
+
+ }
+
+ ASSERT_EQ("Meow", XTokenData);
+ ASSERT_EQ("X-EXAMPLE1;ANIMAL=CAT", XTokenName);
+
+ // Get the first X-EXAMPLE2 token.
+
+ XTokenName.clear();
+ XTokenData.clear();
+
+ if (TestEvent.XTokensData.size() > 3){
+
+ XTokenData = TestEvent.XTokensData[3];
+
+ }
+
+ if (TestEvent.XTokensData.size() > 3){
+
+ XTokenName = TestEvent.XTokensDataTokens[3];
+
+ }
+
+ ASSERT_EQ("Dish", XTokenData);
+ ASSERT_EQ("X-EXAMPLE2", XTokenName);
+
+ // Get the second X-EXAMPLE2 token.
+
+ XTokenName.clear();
+ XTokenData.clear();
+
+ if (TestEvent.XTokensData.size() > 4){
+
+ XTokenData = TestEvent.XTokensData[4];
+
+ }
+
+ if (TestEvent.XTokensData.size() > 4){
+
+ XTokenName = TestEvent.XTokensDataTokens[4];
+
+ }
+
+ ASSERT_EQ("Fork", XTokenData);
+ ASSERT_EQ("X-EXAMPLE2;OBJECT=KITCHEN", XTokenName);
+
+ // Get the third X-EXAMPLE2 token.
+
+ XTokenName.clear();
+ XTokenData.clear();
+
+ if (TestEvent.XTokensData.size() > 5){
+
+ XTokenData = TestEvent.XTokensData[5];
+
+ }
+
+ if (TestEvent.XTokensData.size() > 5){
+
+ XTokenName = TestEvent.XTokensDataTokens[5];
+
+ }
+
+ ASSERT_EQ("Table", XTokenData);
+ ASSERT_EQ("X-EXAMPLE2;OBJECT=LIVINGROOM", XTokenName);
+
+ // Get the X-STATUS token.
+
+ XTokenName.clear();
+ XTokenData.clear();
+
+ if (TestEvent.XTokensData.size() > 6){
+
+ XTokenData = TestEvent.XTokensData[6];
+
+ }
+
+ if (TestEvent.XTokensData.size() > 6){
+
+ XTokenName = TestEvent.XTokensDataTokens[6];
+
+ }
+
+ ASSERT_EQ("Idle", XTokenData);
+ ASSERT_EQ("X-STATUS;HOLIDAY=YES", XTokenName);
+
+ // Get the X-TRANSPORT token.
+
+ XTokenName.clear();
+ XTokenData.clear();
+
+ if (TestEvent.XTokensData.size() > 7){
+
+ XTokenData = TestEvent.XTokensData[7];
+
+ }
+
+ if (TestEvent.XTokensData.size() > 7){
+
+ XTokenName = TestEvent.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 (TestEvent.XTokensData.size() > 8){
+
+ XTokenData = TestEvent.XTokensData[8];
+
+ }
+
+ if (TestEvent.XTokensData.size() > 8){
+
+ XTokenName = TestEvent.XTokensDataTokens[8];
+
+ }
+
+ ASSERT_EQ("None", XTokenData);
+ ASSERT_EQ("X-PHANTOM-STATUS;HELP=NONE", XTokenName);
+
+}
+
+TEST(iCalendarEvent, AlarmTests){
+
+ CalendarEventObject TestEvent;
+ ASSERT_EQ(CALENDAROBJECTLOAD_OK, TestEvent.LoadFile("iCalendarEvent-Load2.vcf"));
+ ASSERT_EQ(CALENDAROBJECTVALID_OK, TestEvent.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 (TestEvent.CalendarAlarmData.size() > 0){
+
+ ActionData = TestEvent.CalendarAlarmData[0].AlarmAction;
+ ActionDataTokens = TestEvent.CalendarAlarmData[0].AlarmActionTokens;
+
+ TriggerData = TestEvent.CalendarAlarmData[0].TriggerData;
+ TriggerRelated = TestEvent.CalendarAlarmData[0].TriggerRelated;
+ TriggerValue = TestEvent.CalendarAlarmData[0].TriggerValue;
+ TriggerTokens = TestEvent.CalendarAlarmData[0].TriggerTokens;
+
+ DurationData = TestEvent.CalendarAlarmData[0].DurationData;
+ DurationTokens = TestEvent.CalendarAlarmData[0].DurationTokens;
+
+ RepeatData = TestEvent.CalendarAlarmData[0].RepeatData;
+ RepeatTokens = TestEvent.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);
+
+ // Test the first X-Token.
+
+ if (TestEvent.CalendarAlarmData[0].XTokensData.size() > 0){
+
+ XTokenData = TestEvent.CalendarAlarmData[0].XTokensData[0];
+ XTokenName = TestEvent.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 (TestEvent.CalendarAlarmData[0].XTokensData.size() > 1){
+
+ XTokenData = TestEvent.CalendarAlarmData[0].XTokensData[1];
+ XTokenName = TestEvent.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 (TestEvent.CalendarAlarmData[0].XTokensData.size() > 2){
+
+ XTokenData = TestEvent.CalendarAlarmData[0].XTokensData[2];
+ XTokenName = TestEvent.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 (TestEvent.CalendarAlarmData.size() > 1){
+
+ ActionData = TestEvent.CalendarAlarmData[1].AlarmAction;
+ ActionDataTokens = TestEvent.CalendarAlarmData[1].AlarmActionTokens;
+
+ TriggerData = TestEvent.CalendarAlarmData[1].TriggerData;
+ TriggerRelated = TestEvent.CalendarAlarmData[1].TriggerRelated;
+ TriggerValue = TestEvent.CalendarAlarmData[1].TriggerValue;
+ TriggerTokens = TestEvent.CalendarAlarmData[1].TriggerTokens;
+
+ DurationData = TestEvent.CalendarAlarmData[1].DurationData;
+ DurationTokens = TestEvent.CalendarAlarmData[1].DurationTokens;
+
+ RepeatData = TestEvent.CalendarAlarmData[1].RepeatData;
+ RepeatTokens = TestEvent.CalendarAlarmData[1].RepeatTokens;
+
+ DescriptionData = TestEvent.CalendarAlarmData[1].DescriptionData;
+ DescriptionAltRep = TestEvent.CalendarAlarmData[1].DescriptionAltRep;
+ DescriptionLanguage = TestEvent.CalendarAlarmData[1].DescriptionLanguage;
+ DescriptionTokens = TestEvent.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 (TestEvent.CalendarAlarmData[1].XTokensData.size() > 0){
+
+ XTokenData = TestEvent.CalendarAlarmData[1].XTokensData[0];
+ XTokenName = TestEvent.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 (TestEvent.CalendarAlarmData[1].XTokensData.size() > 1){
+
+ XTokenData = TestEvent.CalendarAlarmData[1].XTokensData[1];
+ XTokenName = TestEvent.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 (TestEvent.CalendarAlarmData[1].XTokensData.size() > 2){
+
+ XTokenData = TestEvent.CalendarAlarmData[1].XTokensData[2];
+ XTokenName = TestEvent.CalendarAlarmData[1].XTokensDataTokens[2];
+
+ }
+
+ ASSERT_EQ("Example Data 3", XTokenData);
+ ASSERT_EQ("X-EXAMPLE3;WORLD=NO", XTokenName);
+
+}