From 02248b76582978705c083ef8ffb85c8d4efe4a23 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 13 Dec 2015 20:47:06 +0000 Subject: [PATCH] Added source, header and unit tests to the ADR vCard property in ContactDataObject. --- source/contacteditor/ContactDataObject.cpp | 370 +++++++++++++++++++++ source/contacteditor/ContactDataObject.h | 1 + source/tests/LoadCheck-Load4.vcf | 12 + source/tests/xestiaab_contactload.h | 271 +++++++++++++++ 4 files changed, 654 insertions(+) diff --git a/source/contacteditor/ContactDataObject.cpp b/source/contacteditor/ContactDataObject.cpp index 2a7f6a4..eeb95b0 100644 --- a/source/contacteditor/ContactDataObject.cpp +++ b/source/contacteditor/ContactDataObject.cpp @@ -84,6 +84,7 @@ ContactLoadStatus ContactDataObject::LoadFile(wxString Filename){ int FNCount = 0; int NicknameCount = 0; int TimeZoneCount = 0; + int AddressCount = 0; wxString ContactLine; wxString PropertyLine; wxString PropertySeg1; @@ -226,6 +227,11 @@ ContactLoadStatus ContactDataObject::LoadFile(wxString Filename){ ProcessTimeZone(PropertySeg1, PropertySeg2, &TimeZoneCount); TimeZoneCount++; + } else if (Property == wxT("ADR")){ + + ProcessAddress(PropertySeg1, PropertySeg2, &AddressCount); + AddressCount++; + } } @@ -1262,6 +1268,370 @@ void ContactDataObject::ProcessTimeZone(wxString PropertySeg1, wxString Property } +void ContactDataObject::ProcessAddress(wxString PropertySeg1, wxString PropertySeg2, int *AddressCount){ + + size_t intPropertyLen = PropertySeg1.Len(); + std::map SplitPoints; + std::map SplitLength; + std::map::iterator SLiter; + wxString PropertyData; + wxString PropertyName; + wxString PropertyValue; + wxString PropertyTokens; + wxString AddressLabel; + wxString AddressLang; + wxString AddressAltID; + wxString AddressPID; + wxString AddressTokens; + wxString AddressGeo; + wxString AddressTimezone; + wxString AddressType; + wxString AddressMediatype; + wxString AddressPOBox; + wxString AddressExtended; + wxString AddressStreet; + wxString AddressLocality; + wxString AddressCity; + wxString AddressRegion; + wxString AddressPostalCode; + wxString AddressCountry; + bool FirstToken = TRUE; + int intSplitsFound = 0; + int intSplitSize = 0; + int intPrevValue = 5; + int intPref = 0; + int intType = 0; + long ListCtrlIndex; + + SplitValues(&PropertySeg1, &SplitPoints, &SplitLength, intPrevValue); + + intPrevValue = 4; + + PropertyType PropType; + + // Look for type before continuing. + + CheckType(&PropertySeg1, &SplitPoints, &SplitLength, &intPrevValue, &PropType); + + intPrevValue = 4; + + std::map *AddressList = NULL; + std::map *AddressListTown = NULL; + std::map *AddressListCounty = NULL; + std::map *AddressListPostCode = NULL; + std::map *AddressListCountry = NULL; + std::map *AddressListLabel = NULL; + std::map *AddressListLang = NULL; + std::map *AddressListAltID = NULL; + std::map *AddressListPID = NULL; + std::map *AddressListTokens = NULL; + std::map *AddressListGeo = NULL; + std::map *AddressListTimezone = NULL; + std::map *AddressListType = NULL; + std::map *AddressListMediatype = NULL; + std::map *AddressListPref = NULL; + + switch(PropType){ + case PROPERTY_NONE: + AddressList = &GeneralAddressList; + AddressListTown = &GeneralAddressListTown; + AddressListCounty = &GeneralAddressListCounty; + AddressListPostCode = &GeneralAddressListPostCode; + AddressListCountry = &GeneralAddressListCountry; + AddressListLabel = &GeneralAddressListLabel; + AddressListLang = &GeneralAddressListLang; + AddressListAltID = &GeneralAddressListAltID; + AddressListPID = &GeneralAddressListPID; + AddressListTokens = &GeneralAddressListTokens; + AddressListGeo = &GeneralAddressListGeo; + AddressListTimezone = &GeneralAddressListTimezone; + AddressListType = &GeneralAddressListType; + AddressListMediatype = &GeneralAddressListMediatype; + AddressListPref = &GeneralAddressListPref; + break; + case PROPERTY_HOME: + AddressList = &HomeAddressList; + AddressListTown = &HomeAddressListTown; + AddressListCounty = &HomeAddressListCounty; + AddressListPostCode = &HomeAddressListPostCode; + AddressListCountry = &HomeAddressListCountry; + AddressListLabel = &HomeAddressListLabel; + AddressListLang = &HomeAddressListLang; + AddressListAltID = &HomeAddressListAltID; + AddressListPID = &HomeAddressListPID; + AddressListTokens = &HomeAddressListTokens; + AddressListGeo = &HomeAddressListGeo; + AddressListTimezone = &HomeAddressListTimezone; + AddressListType = &HomeAddressListType; + AddressListMediatype = &HomeAddressListMediatype; + AddressListPref = &HomeAddressListPref; + break; + case PROPERTY_WORK: + AddressList = &BusinessAddressList; + AddressListTown = &BusinessAddressListTown; + AddressListCounty = &BusinessAddressListCounty; + AddressListPostCode = &BusinessAddressListPostCode; + AddressListCountry = &BusinessAddressListCountry; + AddressListLabel = &BusinessAddressListLabel; + AddressListLang = &BusinessAddressListLang; + AddressListAltID = &BusinessAddressListAltID; + AddressListPID = &BusinessAddressListPID; + AddressListTokens = &BusinessAddressListTokens; + AddressListGeo = &BusinessAddressListGeo; + AddressListTimezone = &BusinessAddressListTimezone; + AddressListType = &BusinessAddressListType; + AddressListMediatype = &BusinessAddressListMediatype; + AddressListPref = &BusinessAddressListPref; + break; + } + + intPrevValue = 4; + + for (std::map::iterator intiter = SplitPoints.begin(); + intiter != SplitPoints.end(); ++intiter){ + + SLiter = SplitLength.find(intiter->first); + + PropertyData = PropertySeg1.Mid(intPrevValue, (SLiter->second)); + + wxStringTokenizer PropertyElement (PropertyData, wxT("=")); + PropertyName = PropertyElement.GetNextToken(); + PropertyValue = PropertyElement.GetNextToken(); + + intPrevValue = intiter->second; + + CaptureString(&PropertyValue, FALSE); + + // Process properties. + + if (PropertyName == wxT("LABEL")){ + + AddressListLabel->erase(*AddressCount); + AddressListLabel->insert(std::make_pair(*AddressCount, PropertyValue)); + + } else if (PropertyName == wxT("LANGUAGE")){ + + AddressListLang->erase(*AddressCount); + AddressListLang->insert(std::make_pair(*AddressCount, PropertyValue)); + + } else if (PropertyName == wxT("ALTID")){ + + AddressListAltID->erase(*AddressCount); + AddressListAltID->insert(std::make_pair(*AddressCount, PropertyValue)); + + } else if (PropertyName == wxT("PID")){ + + AddressListPID->erase(*AddressCount); + AddressListPID->insert(std::make_pair(*AddressCount, PropertyValue)); + + } else if (PropertyName == wxT("GEO")){ + + AddressListGeo->erase(*AddressCount); + AddressListGeo->insert(std::make_pair(*AddressCount, PropertyValue)); + + } else if (PropertyName == wxT("TZ")){ + + AddressListTimezone->erase(*AddressCount); + AddressListTimezone->insert(std::make_pair(*AddressCount, PropertyValue)); + + } else if (PropertyName == wxT("MEDIATYPE")){ + + AddressListMediatype->erase(*AddressCount); + AddressListMediatype->insert(std::make_pair(*AddressCount, PropertyValue)); + + } else if (PropertyName == wxT("PREF")){ + + int PriorityNumber = 0; + bool ValidNumber = TRUE; + + try{ + PriorityNumber = std::stoi(PropertyValue.ToStdString()); + } + + catch(std::invalid_argument &e){ + ValidNumber = FALSE; + } + + if (ValidNumber == TRUE){ + + AddressListPref->erase(*AddressCount); + AddressListPref->insert(std::make_pair(*AddressCount, PriorityNumber)); + + } + + } else { + + if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){ + + if (FirstToken == TRUE){ + + PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue); + FirstToken = FALSE; + + } else { + + PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue); + + } + + } + + } + + } + + // Split the address. + + //std::map::iterator SLiter; + intPropertyLen = PropertySeg2.Len(); + SplitPoints.clear(); + SplitLength.clear(); + intSplitsFound = 0; + intSplitSize = 0; + intPrevValue = 0; + + for (int i = 0; i <= intPropertyLen; i++){ + + intSplitSize++; + + if (PropertySeg2.Mid(i, 1) == wxT(";") && PropertySeg2.Mid((i - 1), 1) != wxT("\\")){ + + intSplitsFound++; + SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1))); + + if (intSplitsFound == 6){ + + SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1))); + break; + + } else { + + SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1))); + + } + + intSplitSize = 0; + + } + + } + + // Split the data into several parts. + + for (std::map::iterator intiter = SplitPoints.begin(); + intiter != SplitPoints.end(); ++intiter){ + + if (intiter->first == 1){ + + // Deal with PO Box. + + SLiter = SplitLength.find(1); + + //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE)); + AddressPOBox = PropertySeg2.Mid(0, SLiter->second); + intPrevValue = intiter->second; + + } else if (intiter->first == 2){ + + // Deal with extended address. + + SLiter = SplitLength.find(2); + + AddressExtended = PropertySeg2.Mid(intPrevValue, SLiter->second); + //txtForename->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE)); + intPrevValue = intiter->second; + + } else if (intiter->first == 3){ + + // Deal with street address. + + SLiter = SplitLength.find(3); + + AddressStreet = PropertySeg2.Mid(intPrevValue, SLiter->second); + //txtOtherNames->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE)); + intPrevValue = intiter->second; + + } else if (intiter->first == 4){ + + // Deal with locality + + SLiter = SplitLength.find(4); + + AddressLocality = PropertySeg2.Mid(intPrevValue, SLiter->second); + //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE)); + intPrevValue = intiter->second; + + //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE)); + + } else if (intiter->first == 5){ + + // Deal with region. + + SLiter = SplitLength.find(5); + + AddressRegion = PropertySeg2.Mid(intPrevValue, SLiter->second); + //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE)); + intPrevValue = intiter->second; + + //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE)); + + } else if (intiter->first == 6){ + + // Deal with post code. + + SLiter = SplitLength.find(6); + + AddressPostalCode = PropertySeg2.Mid(intPrevValue, SLiter->second); + //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE)); + intPrevValue = intiter->second; + + // Deal with country. + + AddressCountry = PropertySeg2.Mid(intPrevValue, wxString::npos); + //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE)); + + break; + + } + + } + + // Add the data to the General/Home/Work address variables. + + CaptureString(&AddressStreet, FALSE); + CaptureString(&AddressLocality, FALSE); + CaptureString(&AddressRegion, FALSE); + CaptureString(&AddressPostalCode, FALSE); + CaptureString(&AddressCountry, FALSE); + + if (!PropertyTokens.IsEmpty()){ + + AddressListTokens->insert(std::make_pair(*AddressCount, PropertyTokens)); + + } + + AddressListCountry->insert(std::make_pair(*AddressCount, AddressCountry)); + AddressList->insert(std::make_pair(*AddressCount, AddressStreet)); + AddressListTown->insert(std::make_pair(*AddressCount, AddressLocality)); + AddressListCounty->insert(std::make_pair(*AddressCount, AddressRegion)); + AddressListPostCode->insert(std::make_pair(*AddressCount, AddressPostalCode)); + + switch(PropType){ + case PROPERTY_NONE: + AddressListType->insert(std::make_pair(*AddressCount, wxT(""))); + break; + case PROPERTY_HOME: + AddressListType->insert(std::make_pair(*AddressCount, wxT("home"))); + break; + case PROPERTY_WORK: + AddressListType->insert(std::make_pair(*AddressCount, wxT("work"))); + break; + } + + AddressListTokens->insert(std::make_pair(*AddressCount, PropertyTokens)); + +} + void SplitValues(wxString *PropertyLine, std::map *SplitPoints, std::map *SplitLength, diff --git a/source/contacteditor/ContactDataObject.h b/source/contacteditor/ContactDataObject.h index abf22dd..f91ea61 100644 --- a/source/contacteditor/ContactDataObject.h +++ b/source/contacteditor/ContactDataObject.h @@ -573,6 +573,7 @@ class ContactDataObject{ void ProcessBirthday(wxString PropertySeg1, wxString PropertySeg2); void ProcessAnniversary(wxString PropertySeg1, wxString PropertySeg2); void ProcessTimeZone(wxString PropertySeg1, wxString PropertySeg2, int *TimeZoneCount); + void ProcessAddress(wxString PropertySeg1, wxString PropertySeg2, int *AddressCount); }; diff --git a/source/tests/LoadCheck-Load4.vcf b/source/tests/LoadCheck-Load4.vcf index 1a6a8b9..c54c535 100644 --- a/source/tests/LoadCheck-Load4.vcf +++ b/source/tests/LoadCheck-Load4.vcf @@ -20,4 +20,16 @@ TZ;TYPE=home;ALTID=15;PID=20;PREF=40;MEDIATYPE=text/plain;MAYBE=not:Europe/P enzance TZ;TYPE=work;PID=70;ALTID=45;PREF=80;MEDIATYPE=text/plain;MAYBE=yes:Europe/S t Austell +ADR;LABEL="1 Lovely Lane\nRodney\nCornwall\nPL99 1AA\nCornwall\nUnited Kingd + om";LANGUAGE=kw;ALTID=15;MAKES=Moo;PREF=98;PID=81;GEO="geo:1.0, 1.0";TZ=Eur + ope/Truro;MEDIATYPE=text/plain;ANIMAL=Cow:;;1 Lovely Lane;Rodney;Cornwall;P + L99 1AA;United Kingdom +ADR;TYPE=home;LABEL="3 Working Plaice\nRoger\nCornwall\nPL75 4ZZ\nCornwall\n + United Kingdom";LANGUAGE=en;ALTID=40;PREF=10;PID=13;GEO="geo:4.0, 4.0";TZ=E + urope/St Ives;MEDIATYPE=text/plain;TOAST=Butter:;;3 Working Plaice;Roger;Co + rnwall;PL75 4ZZ;United Kingdom +ADR;TYPE=work;LABEL="7 Flyby Drive\nElaine\nCornwall\nPL84 9YE\nCornwall\nUn + ited Kingdom";LANGUAGE=en-GB;ALTID=45;PREF=10;PID=28;GEO="geo:7.0, 7.0";TZ= + Europe/Newquay;MEDIATYPE=text/plain;JAM=Red:;;7 Flyby Drive;Elaine;Cornwall + ;PL84 9YE;United Kingdom END:VCARD diff --git a/source/tests/xestiaab_contactload.h b/source/tests/xestiaab_contactload.h index d934194..3b99f75 100644 --- a/source/tests/xestiaab_contactload.h +++ b/source/tests/xestiaab_contactload.h @@ -495,4 +495,275 @@ TEST(ContactLoad, TimeZoneTests){ } +TEST(ContactLoad, AddressTests){ + + ContactDataObject TestFile; + + // Check that the vCard 4.0 file loads OK. + + ASSERT_EQ(CONTACTLOAD_OK, TestFile.LoadFile("LoadCheck-Load4.vcf")); + + std::map::iterator TestFileIter; + std::map::iterator TestFileIntIter; + + // Start with the general address. + + // Check the address street section. + + TestFileIter = TestFile.GeneralAddressList.find(0); + ASSERT_NE(TestFile.GeneralAddressList.end(), TestFileIter); + ASSERT_EQ("1 Lovely Lane", TestFileIter->second); + + // Check the address town section. + + TestFileIter = TestFile.GeneralAddressListTown.find(0); + ASSERT_NE(TestFile.GeneralAddressListTown.end(), TestFileIter); + ASSERT_EQ("Rodney", TestFileIter->second); + + // Check the address county section. + + TestFileIter = TestFile.GeneralAddressListCounty.find(0); + ASSERT_NE(TestFile.GeneralAddressListCounty.end(), TestFileIter); + ASSERT_EQ("Cornwall", TestFileIter->second); + + // Check the address post code section. + + TestFileIter = TestFile.GeneralAddressListPostCode.find(0); + ASSERT_NE(TestFile.GeneralAddressListPostCode.end(), TestFileIter); + ASSERT_EQ("PL99 1AA", TestFileIter->second); + + // Check the address country section. + + TestFileIter = TestFile.GeneralAddressListCountry.find(0); + ASSERT_NE(TestFile.GeneralAddressListCountry.end(), TestFileIter); + ASSERT_EQ("United Kingdom", TestFileIter->second); + + // Check the LABEL section. + + TestFileIter = TestFile.GeneralAddressListLabel.find(0); + ASSERT_NE(TestFile.GeneralAddressListLabel.end(), TestFileIter); + ASSERT_EQ("\"1 Lovely Lane\nRodney\nCornwall\nPL99 1AA\nCornwall\nUnited Kingdom\"", TestFileIter->second); + + // Check the LANGUAGE section. + + TestFileIter = TestFile.GeneralAddressListLang.find(0); + ASSERT_NE(TestFile.GeneralAddressListLang.end(), TestFileIter); + ASSERT_EQ("kw", TestFileIter->second); + + // Check the ALTID section. + + TestFileIter = TestFile.GeneralAddressListAltID.find(0); + ASSERT_NE(TestFile.GeneralAddressListAltID.end(), TestFileIter); + ASSERT_EQ("15", TestFileIter->second); + + // Check the PID section. + + TestFileIter = TestFile.GeneralAddressListPID.find(0); + ASSERT_NE(TestFile.GeneralAddressListPID.end(), TestFileIter); + ASSERT_EQ("81", TestFileIter->second); + + // Check the GEO section. + + TestFileIter = TestFile.GeneralAddressListGeo.find(0); + ASSERT_NE(TestFile.GeneralAddressListGeo.end(), TestFileIter); + ASSERT_EQ("\"geo:1.0, 1.0\"", TestFileIter->second); + + // Check the TZ section. + + TestFileIter = TestFile.GeneralAddressListTimezone.find(0); + ASSERT_NE(TestFile.GeneralAddressListTimezone.end(), TestFileIter); + ASSERT_EQ("Europe/Truro", TestFileIter->second); + + // Check the MEDIATYPE section. + + TestFileIter = TestFile.GeneralAddressListMediatype.find(0); + ASSERT_NE(TestFile.GeneralAddressListMediatype.end(), TestFileIter); + ASSERT_EQ("text/plain", TestFileIter->second); + + // Check the PREF section. + + TestFileIntIter = TestFile.GeneralAddressListPref.find(0); + ASSERT_NE(TestFile.GeneralAddressListPref.end(), TestFileIntIter); + ASSERT_EQ(98, TestFileIntIter->second); + + // Check the extra tokens. + + TestFileIter = TestFile.GeneralAddressListTokens.find(0); + ASSERT_NE(TestFile.GeneralAddressListTokens.end(), TestFileIter); + ASSERT_EQ("MAKES=Moo;ANIMAL=Cow", TestFileIter->second); + + // Process the home address + + // Check the address street section. + + TestFileIter = TestFile.HomeAddressList.find(1); + ASSERT_NE(TestFile.HomeAddressList.end(), TestFileIter); + ASSERT_EQ("3 Working Plaice", TestFileIter->second); + + // Check the address town section. + + TestFileIter = TestFile.HomeAddressListTown.find(1); + ASSERT_NE(TestFile.HomeAddressListTown.end(), TestFileIter); + ASSERT_EQ("Roger", TestFileIter->second); + + // Check the address county section. + + TestFileIter = TestFile.HomeAddressListCounty.find(1); + ASSERT_NE(TestFile.HomeAddressListCounty.end(), TestFileIter); + ASSERT_EQ("Cornwall", TestFileIter->second); + + // Check the address post code section. + + TestFileIter = TestFile.HomeAddressListPostCode.find(1); + ASSERT_NE(TestFile.HomeAddressListPostCode.end(), TestFileIter); + ASSERT_EQ("PL75 4ZZ", TestFileIter->second); + + // Check the address country section. + + TestFileIter = TestFile.HomeAddressListCountry.find(1); + ASSERT_NE(TestFile.HomeAddressListCountry.end(), TestFileIter); + ASSERT_EQ("United Kingdom", TestFileIter->second); + + // Check the LABEL section. + + TestFileIter = TestFile.HomeAddressListLabel.find(1); + ASSERT_NE(TestFile.HomeAddressListLabel.end(), TestFileIter); + ASSERT_EQ("\"3 Working Plaice\nRoger\nCornwall\nPL75 4ZZ\nCornwall\nUnited Kingdom\"", TestFileIter->second); + + // Check the LANGUAGE section. + + TestFileIter = TestFile.HomeAddressListLang.find(1); + ASSERT_NE(TestFile.HomeAddressListLang.end(), TestFileIter); + ASSERT_EQ("en", TestFileIter->second); + + // Check the ALTID section. + + TestFileIter = TestFile.HomeAddressListAltID.find(1); + ASSERT_NE(TestFile.HomeAddressListAltID.end(), TestFileIter); + ASSERT_EQ("40", TestFileIter->second); + + // Check the PID section. + + TestFileIter = TestFile.HomeAddressListPID.find(1); + ASSERT_NE(TestFile.HomeAddressListPID.end(), TestFileIter); + ASSERT_EQ("13", TestFileIter->second); + + // Check the GEO section. + + TestFileIter = TestFile.HomeAddressListGeo.find(1); + ASSERT_NE(TestFile.HomeAddressListGeo.end(), TestFileIter); + ASSERT_EQ("\"geo:4.0, 4.0\"", TestFileIter->second); + + // Check the TZ section. + + TestFileIter = TestFile.HomeAddressListTimezone.find(1); + ASSERT_NE(TestFile.HomeAddressListTimezone.end(), TestFileIter); + ASSERT_EQ("Europe/St Ives", TestFileIter->second); + + // Check the MEDIATYPE section. + + TestFileIter = TestFile.HomeAddressListMediatype.find(1); + ASSERT_NE(TestFile.HomeAddressListMediatype.end(), TestFileIter); + ASSERT_EQ("text/plain", TestFileIter->second); + + // Check the PREF section. + + TestFileIntIter = TestFile.HomeAddressListPref.find(1); + ASSERT_NE(TestFile.HomeAddressListPref.end(), TestFileIntIter); + ASSERT_EQ(10, TestFileIntIter->second); + + // Check the extra tokens. + + TestFileIter = TestFile.HomeAddressListTokens.find(1); + ASSERT_NE(TestFile.HomeAddressListTokens.end(), TestFileIter); + ASSERT_EQ("TOAST=Butter", TestFileIter->second); + + // Process the business address. + + // Check the address street section. + + TestFileIter = TestFile.BusinessAddressList.find(2); + ASSERT_NE(TestFile.BusinessAddressList.end(), TestFileIter); + ASSERT_EQ("7 Flyby Drive", TestFileIter->second); + + // Check the address town section. + + TestFileIter = TestFile.BusinessAddressListTown.find(2); + ASSERT_NE(TestFile.BusinessAddressListTown.end(), TestFileIter); + ASSERT_EQ("Elaine", TestFileIter->second); + + // Check the address county section. + + TestFileIter = TestFile.BusinessAddressListCounty.find(2); + ASSERT_NE(TestFile.BusinessAddressListCounty.end(), TestFileIter); + ASSERT_EQ("Cornwall", TestFileIter->second); + + // Check the address post code section. + + TestFileIter = TestFile.BusinessAddressListPostCode.find(2); + ASSERT_NE(TestFile.BusinessAddressListPostCode.end(), TestFileIter); + ASSERT_EQ("PL84 9YE", TestFileIter->second); + + // Check the address country section. + + TestFileIter = TestFile.BusinessAddressListCountry.find(2); + ASSERT_NE(TestFile.BusinessAddressListCountry.end(), TestFileIter); + ASSERT_EQ("United Kingdom", TestFileIter->second); + + // Check the LABEL section. + + TestFileIter = TestFile.BusinessAddressListLabel.find(2); + ASSERT_NE(TestFile.BusinessAddressListLabel.end(), TestFileIter); + ASSERT_EQ("\"7 Flyby Drive\nElaine\nCornwall\nPL84 9YE\nCornwall\nUnited Kingdom\"", TestFileIter->second); + + // Check the LANGUAGE section. + + TestFileIter = TestFile.BusinessAddressListLang.find(2); + ASSERT_NE(TestFile.BusinessAddressListLang.end(), TestFileIter); + ASSERT_EQ("en-GB", TestFileIter->second); + + // Check the ALTID section. + + TestFileIter = TestFile.BusinessAddressListAltID.find(2); + ASSERT_NE(TestFile.BusinessAddressListAltID.end(), TestFileIter); + ASSERT_EQ("45", TestFileIter->second); + + // Check the PID section. + + TestFileIter = TestFile.BusinessAddressListPID.find(2); + ASSERT_NE(TestFile.BusinessAddressListPID.end(), TestFileIter); + ASSERT_EQ("28", TestFileIter->second); + + // Check the GEO section. + + TestFileIter = TestFile.BusinessAddressListGeo.find(2); + ASSERT_NE(TestFile.BusinessAddressListGeo.end(), TestFileIter); + ASSERT_EQ("\"geo:7.0, 7.0\"", TestFileIter->second); + + // Check the TZ section. + + TestFileIter = TestFile.BusinessAddressListTimezone.find(2); + ASSERT_NE(TestFile.BusinessAddressListTimezone.end(), TestFileIter); + ASSERT_EQ("Europe/Newquay", TestFileIter->second); + + // Check the MEDIATYPE section. + + TestFileIter = TestFile.BusinessAddressListMediatype.find(2); + ASSERT_NE(TestFile.BusinessAddressListMediatype.end(), TestFileIter); + ASSERT_EQ("text/plain", TestFileIter->second); + + // Check the PREF section. + + TestFileIntIter = TestFile.BusinessAddressListPref.find(2); + ASSERT_NE(TestFile.BusinessAddressListPref.end(), TestFileIntIter); + ASSERT_EQ(10, TestFileIntIter->second); + + // Check the extra tokens. + + TestFileIter = TestFile.BusinessAddressListTokens.find(2); + ASSERT_NE(TestFile.BusinessAddressListTokens.end(), TestFileIter); + ASSERT_EQ("JAM=Red", TestFileIter->second); + +} + // TODO: Add tests for the Contact Loading process. \ No newline at end of file -- 2.39.2