1 /*
2 belcard-vcard-tester.cpp
3 Copyright (C) 2015 Belledonne Communications SARL
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19
20 #include "belcard/belcard.hpp"
21 #include "belcard/belcard_parser.hpp"
22 #include "belcard/belcard_utils.hpp"
23 #include "belcard-tester.hpp"
24
25 #include <bctoolbox/tester.h>
26 #include <iostream>
27 #include <fstream>
28 #include <sstream>
29 #include <string>
30
31 using namespace::std;
32 using namespace::belcard;
33
openFile(const char * name)34 static string openFile(const char *name) {
35 ifstream istr(bc_tester_res(name), std::ios::binary);
36 if (!istr.is_open()) {
37 BC_FAIL(name);
38 }
39
40 stringstream vcardStream;
41 vcardStream << istr.rdbuf();
42 string vcard = vcardStream.str();
43 return vcard;
44 }
45
folding(void)46 static void folding(void) {
47 string vcard = openFile("vcards/foldtest.vcf");
48 string folded_vcard = belcard_fold(vcard);
49 string unfolded_vcard = openFile("vcards/unfoldtest.vcf");
50 BC_ASSERT_EQUAL(unfolded_vcard.compare(folded_vcard), 0, int, "%d");
51 }
52
unfolding(void)53 static void unfolding(void) {
54 string vcard = openFile("vcards/unfoldtest.vcf");
55 string unfolded_vcard = belcard_unfold(vcard);
56 string folded_vcard = openFile("vcards/foldtest.vcf");
57 BC_ASSERT_EQUAL(folded_vcard.compare(unfolded_vcard), 0, int, "%d");
58 }
59
vcard_parsing(void)60 static void vcard_parsing(void) {
61 string vcard = openFile("vcards/vcard.vcf");
62
63 BelCardParser *parser = new BelCardParser();
64 shared_ptr<BelCard> belCard = parser->parseOne(vcard);
65 if (!BC_ASSERT_TRUE(belCard!=NULL)) return;
66 BC_ASSERT_TRUE(belCard->assertRFCCompliance());
67
68 string vcard2 = belCard->toFoldedString();
69 BC_ASSERT_EQUAL(vcard2.compare(vcard), 0, int, "%d");
70 delete(parser);
71 }
72
vcards_parsing(void)73 static void vcards_parsing(void) {
74 string vcards = openFile("vcards/vcards.vcf");
75
76 BelCardParser *parser = new BelCardParser();
77 shared_ptr<BelCardList> belCards = parser->parse(vcards);
78 if (!BC_ASSERT_TRUE(belCards!=NULL)) return;
79 BC_ASSERT_EQUAL((unsigned int)belCards->getCards().size(), 2, unsigned int, "%u");
80
81 string vcards2 = belCards->toString();
82 BC_ASSERT_EQUAL(vcards2.compare(vcards), 0, int, "%d");
83 delete(parser);
84 }
85
create_vcard_from_api(void)86 static void create_vcard_from_api(void) {
87 shared_ptr<BelCard> belCard = BelCard::create<BelCard>();
88 if (!BC_ASSERT_TRUE(belCard!=NULL)) return;
89 BC_ASSERT_FALSE(belCard->assertRFCCompliance());
90
91 shared_ptr<BelCardFullName> fn = BelCard::create<BelCardFullName>();
92 fn->setValue("Sylvain Berfini");
93 belCard->setFullName(fn);
94 BC_ASSERT_TRUE(belCard->assertRFCCompliance());
95 BC_ASSERT_STRING_EQUAL(belCard->getFullName()->toString().c_str(), fn->toString().c_str());
96
97 fn = BelCard::create<BelCardFullName>();
98 fn->setValue("Belcard Tester");
99 belCard->setFullName(fn);
100 BC_ASSERT_STRING_EQUAL(belCard->getFullName()->toString().c_str(), fn->toString().c_str());
101
102 string vcard = belCard->toString();
103 BelCardParser *parser = new BelCardParser();
104 shared_ptr<BelCard> belCard2 = parser->parseOne(vcard);
105 if (!BC_ASSERT_TRUE(belCard2!=NULL)) return;
106 BC_ASSERT_TRUE(belCard2->assertRFCCompliance());
107 string vcard2 = belCard2->toString();
108 BC_ASSERT_EQUAL(vcard.compare(vcard2), 0, unsigned, "%u");
109 delete(parser);
110 }
111
property_sort_using_pref_param(void)112 static void property_sort_using_pref_param(void) {
113 shared_ptr<BelCard> belCard = BelCard::create<BelCard>();
114 BC_ASSERT_TRUE(belCard!=NULL);
115
116 shared_ptr<BelCardImpp> impp1 = BelCardImpp::parse("IMPP;TYPE=home;PREF=2:sip:viish@sip.linphone.org\r\n");
117 BC_ASSERT_TRUE(impp1!=NULL);
118
119 shared_ptr<BelCardImpp> impp2 = BelCardImpp::parse("IMPP;PREF=1;TYPE=work:sip:sylvain@sip.linphone.org\r\n");
120 BC_ASSERT_TRUE(impp2!=NULL);
121
122 belCard->addImpp(impp1);
123 belCard->addImpp(impp2);
124
125 const list<shared_ptr<BelCardImpp>> imppList = belCard->getImpp();
126 BC_ASSERT_EQUAL((unsigned int)imppList.size(), 2, unsigned int, "%u");
127 BC_ASSERT_TRUE(imppList.front() == impp2);
128 BC_ASSERT_TRUE(imppList.back() == impp1);
129
130 const list<shared_ptr<BelCardProperty>> propertiesList = belCard->getProperties();
131 BC_ASSERT_EQUAL((unsigned int)propertiesList.size(), 2, unsigned int, "%u");
132
133 belCard->removeImpp(impp1);
134 BC_ASSERT_EQUAL((unsigned int)belCard->getImpp().size(), 1, unsigned int, "%u");
135 BC_ASSERT_EQUAL((unsigned int)belCard->getProperties().size(), 1, unsigned int, "%u");
136 }
137
138 static test_t tests[] = {
139 TEST_NO_TAG("Folding", folding),
140 TEST_NO_TAG("Unfolding", unfolding),
141 TEST_NO_TAG("VCard parsing", vcard_parsing),
142 TEST_NO_TAG("VCards parsing", vcards_parsing),
143 TEST_NO_TAG("VCard created from scratch", create_vcard_from_api),
144 TEST_NO_TAG("Property sort using pref param", property_sort_using_pref_param),
145 };
146
147 test_suite_t vcard_test_suite = {
148 "VCard",
149 NULL,
150 NULL,
151 NULL,
152 NULL,
153 sizeof(tests) / sizeof(tests[0]),
154 tests
155 };
156