annotate 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
rev   line source
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