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