From d3af2eb36ee2c9cb62b1a0db7118c718aa2160c0 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sat, 30 Jan 2016 20:41:48 +0000 Subject: [PATCH 01/16] Added CalendarTask object. --- source/objects/calendartask/CalendarTask.cpp | 11 +++++++++++ source/objects/calendartask/CalendarTask.h | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 source/objects/calendartask/CalendarTask.cpp create mode 100644 source/objects/calendartask/CalendarTask.h diff --git a/source/objects/calendartask/CalendarTask.cpp b/source/objects/calendartask/CalendarTask.cpp new file mode 100644 index 0000000..48af315 --- /dev/null +++ b/source/objects/calendartask/CalendarTask.cpp @@ -0,0 +1,11 @@ +#include "CalendarTask.h" + +using namespace std; + +CalendarObjectValidResult CalendarTaskObject::ValidObject(){ + +} + +void CalendarTaskObject::ProcessData(){ + +} \ No newline at end of file diff --git a/source/objects/calendartask/CalendarTask.h b/source/objects/calendartask/CalendarTask.h new file mode 100644 index 0000000..3e57ef5 --- /dev/null +++ b/source/objects/calendartask/CalendarTask.h @@ -0,0 +1,16 @@ +#ifndef __OBJECTS_CALENDARTASK_CALENDARTASK_H__ +#define __OBJECTS_CALENDARTASK_CALENDARTASK_H__ + +#include "../calendarobject/CalendarObject.h" + +class CalendarTaskObject: public CalendarObject{ + + CalendarObjectValidResult ValidObject(); + + private: + + void ProcessData(); + +}; + +#endif \ No newline at end of file -- 2.39.2 From bc51648f7ff641c8a7ea5ef76e17cefc611565f7 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sat, 30 Jan 2016 20:53:21 +0000 Subject: [PATCH 02/16] Added menu option for unit testing the iCalendar Task Component. --- source/tests/xestiacalendar_icaltaskload.h | 19 +++++++++++++++++++ source/tests/xestiacalendar_test.cpp | 7 +++++++ 2 files changed, 26 insertions(+) create mode 100644 source/tests/xestiacalendar_icaltaskload.h diff --git a/source/tests/xestiacalendar_icaltaskload.h b/source/tests/xestiacalendar_icaltaskload.h new file mode 100644 index 0000000..af6fd25 --- /dev/null +++ b/source/tests/xestiacalendar_icaltaskload.h @@ -0,0 +1,19 @@ +// xestiacalendar_icaleventload.h - Xestia Calendar iCalendar Task Component Unit Tests +// +// (c) 2016 Xestia Software Development. +// +// This file is part of Xestia Calendar. +// +// Xestia Address Book 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 Address Book 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" \ No newline at end of file diff --git a/source/tests/xestiacalendar_test.cpp b/source/tests/xestiacalendar_test.cpp index f13707f..90764ea 100644 --- a/source/tests/xestiacalendar_test.cpp +++ b/source/tests/xestiacalendar_test.cpp @@ -23,6 +23,7 @@ #include "xestiacalendar_icaleventload.h" #include "xestiacalendar_commonfunctions.h" +#include "xestiacalendar_icaltaskload.h" enum MenuOpts { TESTS_ICALLOADEVENT = 1, @@ -47,6 +48,7 @@ void printmenu(){ std::cout << "Select an option:" << std::endl << std::endl; std::cout << TESTS_ICALLOADEVENT << ". iCalendar Event Component Load" << std::endl; + std::cout << TESTS_ICALLOADTODO << ". iCalendar Task Component Load" << std::endl; std::cout << TESTS_COMMONFUNCTIONS << ". Common Functions" << std::endl; std::cout << TESTS_QUIT << ". Quit" << std::endl; std::cout << std::endl; @@ -101,6 +103,11 @@ int main(int argc, char* argv[]){ ::testing::GTEST_FLAG(filter) = "iCalendarEvent*"; TestResult = RUN_ALL_TESTS(); break; + case TESTS_ICALLOADTODO: + printn("Running iCalendar Task Component tests..."); + ::testing::GTEST_FLAG(filter) = "iCalendarTask*"; + TestResult = RUN_ALL_TESTS(); + break; case TESTS_COMMONFUNCTIONS: printn("Running Commmon Functions tests..."); ::testing::GTEST_FLAG(filter) = "CommonFunctions*"; -- 2.39.2 From 818e257d9650262dbe4d3dab6849b4c10279bd88 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sat, 30 Jan 2016 21:38:37 +0000 Subject: [PATCH 03/16] Added tests/iCalendarTask-InvalidPermissions.vcf for unit testing. --- source/tests/iCalendarTask-InvalidPermissions.vcf | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 source/tests/iCalendarTask-InvalidPermissions.vcf diff --git a/source/tests/iCalendarTask-InvalidPermissions.vcf b/source/tests/iCalendarTask-InvalidPermissions.vcf new file mode 100644 index 0000000..baceb67 --- /dev/null +++ b/source/tests/iCalendarTask-InvalidPermissions.vcf @@ -0,0 +1,8 @@ +BEGIN:VCALENDAR +VERSION:2.0 +BEGIN:VTODO +DTSTAMP:20160116T165200Z +UID:00 +SUMMARY:Invalid Permissions Unit Test Meeting +END:VTODO +END:VCALENDAR -- 2.39.2 From 2d7a81dd3a791c60adca1938809f8b49525c84b3 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:16:14 +0000 Subject: [PATCH 04/16] Added inital unit tests for CalendarTaskObject in iCalendarTask/BasicTests. --- source/tests/xestiacalendar_icaltaskload.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/tests/xestiacalendar_icaltaskload.h b/source/tests/xestiacalendar_icaltaskload.h index af6fd25..cc62ff5 100644 --- a/source/tests/xestiacalendar_icaltaskload.h +++ b/source/tests/xestiacalendar_icaltaskload.h @@ -16,4 +16,14 @@ // You should have received a copy of the GNU General Public License along // with Xestia Calendar. If not, see -#include "../objects/calendartask/CalendarTask.h" \ No newline at end of file +#include "../objects/calendartask/CalendarTask.h" + +TEST(iCalendarTask, 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")); + +} \ No newline at end of file -- 2.39.2 From abad53ea10af66d3b73823c0081ddf179a3233eb Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:16:28 +0000 Subject: [PATCH 05/16] Added code to check CalendarTaskObject is valid --- source/objects/calendartask/CalendarTask.cpp | 130 +++++++++++++++++++ 1 file changed, 130 insertions(+) diff --git a/source/objects/calendartask/CalendarTask.cpp b/source/objects/calendartask/CalendarTask.cpp index 48af315..eb99179 100644 --- a/source/objects/calendartask/CalendarTask.cpp +++ b/source/objects/calendartask/CalendarTask.cpp @@ -4,6 +4,136 @@ using namespace std; CalendarObjectValidResult CalendarTaskObject::ValidObject(){ + bool ValidBegin = false; + bool ValidEnd = false; + bool ValidDateTimeStamp = false; + bool ValidUniqueID = false; + int SeekCount = 0; + string PropertyName; + + // Look for BEGIN:VEVENT. + + for (vector::iterator iter = ObjectName.begin(); + iter != ObjectName.end(); iter++){ + + if (ObjectName[SeekCount] == "BEGIN" && + ObjectData[SeekCount] == "VTODO"){ + + if (ValidBegin == false){ + ValidBegin = true; + } else { + return CALENDAROBJECTVALID_INVALIDFORMAT; + } + + } + + if (ObjectName[SeekCount] == "END" && + ObjectData[SeekCount] == "VTODO" && + ValidBegin == false){ + + return CALENDAROBJECTVALID_INVALIDFORMAT; + + } + + SeekCount++; + + } + + SeekCount = 0; + + // Look for DTSTAMP. + + for (vector::iterator iter = ObjectName.begin(); + iter != ObjectName.end(); iter++){ + + try{ + PropertyName = ObjectName[SeekCount].substr(0,7); + } + + catch(const out_of_range& oor){ + continue; + } + + if (PropertyName == "DTSTAMP"){ + + if (ValidDateTimeStamp == false){ + ValidDateTimeStamp = true; + } else { + return CALENDAROBJECTVALID_INVALIDFORMAT; + } + + } + + SeekCount++; + + } + + SeekCount = 0; + + // Look for UID. + + for (vector::iterator iter = ObjectName.begin(); + iter != ObjectName.end(); iter++){ + + try{ + PropertyName = ObjectName[SeekCount].substr(0,3); + } + + catch(const out_of_range& oor){ + continue; + } + + if (PropertyName == "UID"){ + + if (ValidUniqueID == false){ + ValidUniqueID = true; + } else { + return CALENDAROBJECTVALID_INVALIDFORMAT; + } + + } + + SeekCount++; + + } + + SeekCount = 0; + + // Look for END:VEVENT. + + for (vector::iterator iter = ObjectName.begin(); + iter != ObjectName.end(); iter++){ + + if (ObjectName[SeekCount] == "END" && + ObjectData[SeekCount] == "VTODO"){ + + if (ValidEnd == false){ + ValidEnd = true; + } else { + return CALENDAROBJECTVALID_INVALIDFORMAT; + } + + } + + SeekCount++; + + } + + // Check if the VEVENT is valid. + + if (ValidBegin == true && + ValidEnd == true && + ValidDateTimeStamp == true && + ValidUniqueID == true){ + + return CALENDAROBJECTVALID_OK; + + } else { + + return CALENDAROBJECTVALID_INVALIDFORMAT; + + } + } void CalendarTaskObject::ProcessData(){ -- 2.39.2 From bfa437b1e8ea6af5c8c974710341f7ef0c5ca15a Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:16:42 +0000 Subject: [PATCH 06/16] Added iCalendarTask-Load1.vcf for unit testing. --- source/tests/iCalendarTask-Load1.vcf | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 source/tests/iCalendarTask-Load1.vcf diff --git a/source/tests/iCalendarTask-Load1.vcf b/source/tests/iCalendarTask-Load1.vcf new file mode 100644 index 0000000..0c36098 --- /dev/null +++ b/source/tests/iCalendarTask-Load1.vcf @@ -0,0 +1,7 @@ +BEGIN:VCALENDAR +VERSION:2.0 +BEGIN:VTODO +DTSTAMP:20160131T160000Z +UID:00 +END:VTODO +END:VCALENDAR \ No newline at end of file -- 2.39.2 From 9adb728229860fdd959e6373a880a902e8212e77 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:18:19 +0000 Subject: [PATCH 07/16] Updated list of files for unit testing in INDEX. --- source/tests/INDEX | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/tests/INDEX b/source/tests/INDEX index 5e8b2bb..8511bfb 100644 --- a/source/tests/INDEX +++ b/source/tests/INDEX @@ -2,3 +2,9 @@ List of files other than CPP/H files used for unit testing. iCalendarEvent-InvalidPermissions.vcf Used for testing invalid permissions. iCalendarEvent-Load1.vcf Basic iCalendar Event file. +iCalendarEvent-Load2.vcf Details iCalendar Event file. +iCalendarEvent-Load3.vcf Basic iCalendar Event file for + testing DURATION. + +iCalendarTask-InvalidPermissions.vcf Used for testing invalid permissions. +iCalendarTask-Load1.vcf Basic iCalendar Task file. \ No newline at end of file -- 2.39.2 From 13e3af6809e03e1680ef238c7da55fb97be1e645 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:44:39 +0000 Subject: [PATCH 08/16] Added initial unit tests for iCalendarTask/ObjectDataTests. --- source/tests/xestiacalendar_icaltaskload.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/tests/xestiacalendar_icaltaskload.h b/source/tests/xestiacalendar_icaltaskload.h index cc62ff5..ed083ca 100644 --- a/source/tests/xestiacalendar_icaltaskload.h +++ b/source/tests/xestiacalendar_icaltaskload.h @@ -26,4 +26,12 @@ TEST(iCalendarTask, BasicTests){ ASSERT_EQ(CALENDAROBJECTLOAD_CANNOTOPEN, TestTask.LoadFile("iCalendarTask-InvalidPermissions.vcf")); ASSERT_EQ(CALENDAROBJECTLOAD_OK, TestTask.LoadFile("iCalendarTask-Load1.vcf")); +} + +TEST(iCalendarTask, ObjectDataTests){ + + CalendarTaskObject TestTask; + ASSERT_EQ(CALENDAROBJECTLOAD_OK, TestTask.LoadFile("iCalendarTask-Load2.vcf")); + ASSERT_EQ(CALENDAROBJECTVALID_OK, TestTask.ValidBaseObject()); + } \ No newline at end of file -- 2.39.2 From c778e14122779caa69c6d6e3ccb64672c5721c9e Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:46:15 +0000 Subject: [PATCH 09/16] Replaced mentions of VEVENT with VTODO in CalendarTaskObject. --- source/objects/calendartask/CalendarTask.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/objects/calendartask/CalendarTask.cpp b/source/objects/calendartask/CalendarTask.cpp index eb99179..4e56efb 100644 --- a/source/objects/calendartask/CalendarTask.cpp +++ b/source/objects/calendartask/CalendarTask.cpp @@ -11,7 +11,7 @@ CalendarObjectValidResult CalendarTaskObject::ValidObject(){ int SeekCount = 0; string PropertyName; - // Look for BEGIN:VEVENT. + // Look for BEGIN:VTODO. for (vector::iterator iter = ObjectName.begin(); iter != ObjectName.end(); iter++){ @@ -65,7 +65,7 @@ CalendarObjectValidResult CalendarTaskObject::ValidObject(){ } SeekCount++; - + } SeekCount = 0; @@ -99,7 +99,7 @@ CalendarObjectValidResult CalendarTaskObject::ValidObject(){ SeekCount = 0; - // Look for END:VEVENT. + // Look for END:VTODO. for (vector::iterator iter = ObjectName.begin(); iter != ObjectName.end(); iter++){ @@ -119,13 +119,13 @@ CalendarObjectValidResult CalendarTaskObject::ValidObject(){ } - // Check if the VEVENT is valid. - + // Check if the VTODO is valid. + if (ValidBegin == true && ValidEnd == true && ValidDateTimeStamp == true && ValidUniqueID == true){ - + return CALENDAROBJECTVALID_OK; } else { -- 2.39.2 From bca123ebe3ca5c92dac2ef005508b99522f19c01 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:46:44 +0000 Subject: [PATCH 10/16] Added code to process DTSTAMP in CalendarTaskObject. --- source/objects/calendartask/CalendarTask.cpp | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/source/objects/calendartask/CalendarTask.cpp b/source/objects/calendartask/CalendarTask.cpp index 4e56efb..86571f8 100644 --- a/source/objects/calendartask/CalendarTask.cpp +++ b/source/objects/calendartask/CalendarTask.cpp @@ -138,4 +138,31 @@ CalendarObjectValidResult CalendarTaskObject::ValidObject(){ void CalendarTaskObject::ProcessData(){ + // Process the data. + + multimap DataReceived; + map PropertyData; + string *PropertyNameData = nullptr; + int ObjectSeekCount = 0; + + // Get the Date Time Stamp (DTSTAMP). + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "DTSTAMP"); + + // Process the data from DTSTAMP. + + if (DataReceived.begin() != DataReceived.end()){ + + try { + DateTimeStampTokens = DataReceived.begin()->first.substr(8); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + DateTimeStampData = DataReceived.begin()->second; + + } + } \ No newline at end of file -- 2.39.2 From 4a618434a920b8ec2f6b5661291f9433ca36e47c Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:51:36 +0000 Subject: [PATCH 11/16] Added unit tests for DTSTAMP in iCalendarTask/ObjectDataTests. --- source/tests/xestiacalendar_icaltaskload.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/tests/xestiacalendar_icaltaskload.h b/source/tests/xestiacalendar_icaltaskload.h index ed083ca..91284d9 100644 --- a/source/tests/xestiacalendar_icaltaskload.h +++ b/source/tests/xestiacalendar_icaltaskload.h @@ -34,4 +34,9 @@ TEST(iCalendarTask, ObjectDataTests){ 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); + } \ No newline at end of file -- 2.39.2 From 4e285b12e407f93187860b1e9d2961a86074ed4f Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:51:47 +0000 Subject: [PATCH 12/16] Initial version of tests/iCalendarTask-Load2.vcf --- source/tests/iCalendarTask-Load2.vcf | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 source/tests/iCalendarTask-Load2.vcf diff --git a/source/tests/iCalendarTask-Load2.vcf b/source/tests/iCalendarTask-Load2.vcf new file mode 100644 index 0000000..4df0b83 --- /dev/null +++ b/source/tests/iCalendarTask-Load2.vcf @@ -0,0 +1,7 @@ +BEGIN:VCALENDAR +VERSION:2.0 +BEGIN:VTODO +DTSTAMP;OTHER=PARAM:20160131T104500Z +UID:00 +END:VTODO +END:VCALENDAR \ No newline at end of file -- 2.39.2 From 454dcc0988ad8d52e9e6dcaa436edae7a382695e Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:54:03 +0000 Subject: [PATCH 13/16] Added code to process UID in CalendarTaskObject. --- source/objects/calendartask/CalendarTask.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source/objects/calendartask/CalendarTask.cpp b/source/objects/calendartask/CalendarTask.cpp index 86571f8..cb22857 100644 --- a/source/objects/calendartask/CalendarTask.cpp +++ b/source/objects/calendartask/CalendarTask.cpp @@ -165,4 +165,24 @@ void CalendarTaskObject::ProcessData(){ } + // Get the Unique ID (UID). + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "UID"); + + // Process the data from UID. + + if (DataReceived.begin() != DataReceived.end()){ + + try { + UniqueIDTokens = DataReceived.begin()->first.substr(4); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + UniqueID = DataReceived.begin()->second; + + } + } \ No newline at end of file -- 2.39.2 From 0f2ed4760a30a22dd39c7357f88eec930072b606 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:54:16 +0000 Subject: [PATCH 14/16] Added the UID property to tests/iCalendarTask-Load2.vcf --- source/tests/iCalendarTask-Load2.vcf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/tests/iCalendarTask-Load2.vcf b/source/tests/iCalendarTask-Load2.vcf index 4df0b83..8aa44cb 100644 --- a/source/tests/iCalendarTask-Load2.vcf +++ b/source/tests/iCalendarTask-Load2.vcf @@ -2,6 +2,6 @@ BEGIN:VCALENDAR VERSION:2.0 BEGIN:VTODO DTSTAMP;OTHER=PARAM:20160131T104500Z -UID:00 +UID;UNIQUEPARAM=CERTAINLY;OKAY=MAYBENOT:b3a16392-ad86-4061-be53-c215af2306e1 END:VTODO END:VCALENDAR \ No newline at end of file -- 2.39.2 From 7e0fc2688529f1a0059cb27fb1659bbcc97e02fe Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:54:26 +0000 Subject: [PATCH 15/16] Added unit tests for UID in iCalendarTask/ObjectDataTests. --- source/tests/xestiacalendar_icaltaskload.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/tests/xestiacalendar_icaltaskload.h b/source/tests/xestiacalendar_icaltaskload.h index 91284d9..952365f 100644 --- a/source/tests/xestiacalendar_icaltaskload.h +++ b/source/tests/xestiacalendar_icaltaskload.h @@ -39,4 +39,9 @@ TEST(iCalendarTask, ObjectDataTests){ 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); + } \ No newline at end of file -- 2.39.2 From a9c97432676c629caab9ad88abd04a58b53073e2 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 31 Jan 2016 10:57:39 +0000 Subject: [PATCH 16/16] Added code to process CLASS in CalendarTaskObject. --- source/objects/calendartask/CalendarTask.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/objects/calendartask/CalendarTask.cpp b/source/objects/calendartask/CalendarTask.cpp index cb22857..3e7a342 100644 --- a/source/objects/calendartask/CalendarTask.cpp +++ b/source/objects/calendartask/CalendarTask.cpp @@ -185,4 +185,22 @@ void CalendarTaskObject::ProcessData(){ } + // Process the data from CLASS. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "CLASS"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + ClassDataTokens = DataReceived.begin()->first.substr(6); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + ClassData = DataReceived.begin()->second; + + } + } \ No newline at end of file -- 2.39.2