comparison 3rdparty/vmime/tests/net/messageSetTest.cpp @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:a4671277546c
1 //
2 // VMime library (http://www.vmime.org)
3 // Copyright (C) 2002-2013 Vincent Richard <vincent@vmime.org>
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License as
7 // published by the Free Software Foundation; either version 3 of
8 // the License, or (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 GNU
13 // General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License along
16 // with this program; if not, write to the Free Software Foundation, Inc.,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 //
19 // Linking this library statically or dynamically with other modules is making
20 // a combined work based on this library. Thus, the terms and conditions of
21 // the GNU General Public License cover the whole combination.
22 //
23
24 #include "tests/testUtils.hpp"
25
26 #include "vmime/net/messageSet.hpp"
27
28
29 VMIME_TEST_SUITE_BEGIN(messageSetTest)
30
31 VMIME_TEST_LIST_BEGIN
32 VMIME_TEST(testNumberSet_Single)
33 VMIME_TEST(testNumberSet_Range)
34 VMIME_TEST(testNumberSet_InfiniteRange)
35 VMIME_TEST(testNumberSet_Multiple)
36 VMIME_TEST(testUIDSet_Single)
37 VMIME_TEST(testUIDSet_Range)
38 VMIME_TEST(testUIDSet_InfiniteRange)
39 VMIME_TEST(testUIDSet_MultipleNumeric)
40 VMIME_TEST(testUIDSet_MultipleNonNumeric)
41 VMIME_TEST(testIsNumberSet)
42 VMIME_TEST(testIsUIDSet)
43 VMIME_TEST_LIST_END
44
45
46 class messageSetStringEnumerator : public vmime::net::messageSetEnumerator
47 {
48 public:
49
50 messageSetStringEnumerator()
51 : m_first(true)
52 {
53 }
54
55 void enumerateNumberMessageRange(const vmime::net::numberMessageRange& range)
56 {
57 if (!m_first)
58 m_oss << ",";
59
60 if (range.getFirst() == range.getLast())
61 m_oss << range.getFirst();
62 else
63 m_oss << range.getFirst() << ":" << range.getLast();
64
65 m_first = false;
66 }
67
68 void enumerateUIDMessageRange(const vmime::net::UIDMessageRange& range)
69 {
70 if (!m_first)
71 m_oss << ",";
72
73 if (range.getFirst() == range.getLast())
74 m_oss << range.getFirst();
75 else
76 m_oss << range.getFirst() << ":" << range.getLast();
77
78 m_first = false;
79 }
80
81 const std::string str() const
82 {
83 return m_oss.str();
84 }
85
86 private:
87
88 std::ostringstream m_oss;
89 bool m_first;
90 };
91
92
93 const std::string enumerateAsString(const vmime::net::messageSet& set)
94 {
95 messageSetStringEnumerator en;
96 set.enumerate(en);
97
98 return en.str();
99 }
100
101
102 void testNumberSet_Single()
103 {
104 VASSERT_EQ("str", "42", enumerateAsString(vmime::net::messageSet::byNumber(42)));
105 }
106
107 void testNumberSet_Range()
108 {
109 VASSERT_EQ("str", "42:100", enumerateAsString(vmime::net::messageSet::byNumber(42, 100)));
110 }
111
112 void testNumberSet_InfiniteRange()
113 {
114 VASSERT_EQ("str", "42:-1", enumerateAsString(vmime::net::messageSet::byNumber(42, -1)));
115 }
116
117 void testNumberSet_Multiple()
118 {
119 std::vector <int> numbers;
120 numbers.push_back(1); // test grouping 1:3
121 numbers.push_back(89); // test sorting
122 numbers.push_back(2);
123 numbers.push_back(3);
124 numbers.push_back(42);
125 numbers.push_back(53); // test grouping 53:57
126 numbers.push_back(54);
127 numbers.push_back(55);
128 numbers.push_back(56);
129 numbers.push_back(56); // test duplicates
130 numbers.push_back(57);
131 numbers.push_back(99);
132
133 VASSERT_EQ("str", "1:3,42,53:57,89,99", enumerateAsString(vmime::net::messageSet::byNumber(numbers)));
134 }
135
136
137 void testUIDSet_Single()
138 {
139 VASSERT_EQ("str", "abcdef", enumerateAsString(vmime::net::messageSet::byUID("abcdef")));
140 }
141
142 void testUIDSet_Range()
143 {
144 VASSERT_EQ("str", "abc:def", enumerateAsString(vmime::net::messageSet::byUID("abc:def")));
145 }
146
147 void testUIDSet_InfiniteRange()
148 {
149 VASSERT_EQ("str", "abc:*", enumerateAsString(vmime::net::messageSet::byUID("abc", "*")));
150 }
151
152 void testUIDSet_MultipleNumeric()
153 {
154 std::vector <vmime::net::message::uid> uids;
155 uids.push_back("1"); // test grouping 1:3
156 uids.push_back("89"); // test sorting
157 uids.push_back("2");
158 uids.push_back("3");
159 uids.push_back("42");
160 uids.push_back("53"); // test grouping 53:57
161 uids.push_back("54");
162 uids.push_back("55");
163 uids.push_back("56");
164 uids.push_back("56"); // test duplicates
165 uids.push_back("57");
166 uids.push_back("99");
167
168 VASSERT_EQ("str", "1:3,42,53:57,89,99", enumerateAsString(vmime::net::messageSet::byUID(uids)));
169 }
170
171 void testUIDSet_MultipleNonNumeric()
172 {
173 std::vector <vmime::net::message::uid> uids;
174 uids.push_back("12");
175 uids.push_back("34");
176 uids.push_back("ab56");
177 uids.push_back("78cd");
178
179 VASSERT_EQ("str", "12,34,ab56,78cd", enumerateAsString(vmime::net::messageSet::byUID(uids)));
180 }
181
182 void testIsNumberSet()
183 {
184 VASSERT_TRUE("number1", vmime::net::messageSet::byNumber(42).isNumberSet());
185 VASSERT_FALSE("uid1", vmime::net::messageSet::byUID("42").isNumberSet());
186
187 VASSERT_TRUE("number2", vmime::net::messageSet::byNumber(42, -1).isNumberSet());
188 VASSERT_FALSE("uid2", vmime::net::messageSet::byUID("42", "*").isNumberSet());
189 }
190
191 void testIsUIDSet()
192 {
193 VASSERT_FALSE("number1", vmime::net::messageSet::byNumber(42).isUIDSet());
194 VASSERT_TRUE("uid1", vmime::net::messageSet::byUID("42").isUIDSet());
195
196 VASSERT_FALSE("number2", vmime::net::messageSet::byNumber(42, -1).isUIDSet());
197 VASSERT_TRUE("uid2", vmime::net::messageSet::byUID("42", "*").isUIDSet());
198 }
199
200 VMIME_TEST_SUITE_END