2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file test_address.cpp
18 * @author Tomasz Swierczek (t.swierczek@samsung.com)
20 * @brief This file is the implementation file of serialization tests
28 #include <dpl/test/test_runner.h>
29 #include <dpl/serialization.h>
31 RUNNER_TEST_GROUP_INIT(DPL)
34 class BinaryStream : public DPL::IStream {
36 virtual void Read(size_t num, void * bytes)
38 for (unsigned i = 0; i < num; ++i) {
39 ((unsigned char*)bytes)[i] = data[i + readPosition];
43 virtual void Write(size_t num, const void * bytes)
45 for (unsigned i = 0; i < num; ++i) {
46 data.push_back(((unsigned char*)bytes)[i]);
53 virtual ~BinaryStream(){};
56 std::vector<unsigned char> data;
57 unsigned readPosition;
60 //test ISerializable class
61 class TestClass : public DPL::ISerializable {
63 TestClass(int val, std::string str1, std::string str2)
69 c.push_back(str1 + str2);
71 TestClass(DPL::IStream& stream)
73 DPL::Deserialization::Deserialize(stream,a);
74 DPL::Deserialization::Deserialize(stream,b);
75 DPL::Deserialization::Deserialize(stream,c);
77 virtual void Serialize(DPL::IStream& stream) const
79 DPL::Serialization::Serialize(stream,a);
80 DPL::Serialization::Serialize(stream,b);
81 DPL::Serialization::Serialize(stream,c);
83 virtual ~TestClass(){}
84 virtual bool operator==(const TestClass& other)
86 return (a == other.a &&
88 c.size() == other.c.size() &&
96 std::vector<std::string> c;
99 RUNNER_TEST(Serialize_primitives)
105 DPL::Serialization::Serialize(stream,a);
106 DPL::Serialization::Serialize(stream,b);
107 DPL::Serialization::Serialize(stream,c);
109 DPL::Deserialization::Deserialize(stream,test_int);
110 RUNNER_ASSERT(test_int == a);
112 DPL::Deserialization::Deserialize(stream,test_bool);
113 RUNNER_ASSERT(test_bool == b);
114 unsigned test_unsigned;
115 DPL::Deserialization::Deserialize(stream,test_unsigned);
116 RUNNER_ASSERT(test_unsigned == c);
119 RUNNER_TEST(Serialize_primitive_pointers)
125 DPL::Serialization::Serialize(stream,&a);
126 DPL::Serialization::Serialize(stream,&b);
127 DPL::Serialization::Serialize(stream,&c);
129 DPL::Deserialization::Deserialize(stream,test_int);
130 RUNNER_ASSERT(test_int != NULL && *test_int == a);
132 DPL::Deserialization::Deserialize(stream,test_bool);
133 RUNNER_ASSERT(test_bool != NULL && *test_bool == b);
134 unsigned* test_unsigned;
135 DPL::Deserialization::Deserialize(stream,test_unsigned);
136 RUNNER_ASSERT(test_unsigned != NULL && *test_unsigned == c);
139 delete test_unsigned;
142 RUNNER_TEST(Serialize_strings)
144 std::string str1 = "ALA MA KOTA";
145 std::string str2 = "MULTILINE\nTEST";
147 DPL::Serialization::Serialize(stream,str1);
148 DPL::Serialization::Serialize(stream,str2);
149 std::string test_str1;
150 DPL::Deserialization::Deserialize(stream,test_str1);
151 RUNNER_ASSERT(test_str1 == str1);
152 std::string test_str2;
153 DPL::Deserialization::Deserialize(stream,test_str2);
154 RUNNER_ASSERT(test_str2 == str2);
157 RUNNER_TEST(Serialize_string_pointers)
159 std::string str1 = "ALA MA KOTA";
160 std::string str2 = "MULTILINE\nTEST";
162 DPL::Serialization::Serialize(stream,&str1);
163 DPL::Serialization::Serialize(stream,&str2);
164 std::string* test_str1;
165 DPL::Deserialization::Deserialize(stream,test_str1);
166 RUNNER_ASSERT(test_str1 != NULL && *test_str1 == str1);
167 std::string* test_str2;
168 DPL::Deserialization::Deserialize(stream,test_str2);
169 RUNNER_ASSERT(test_str2 != NULL && *test_str2 == str2);
174 RUNNER_TEST(Serialize_containers)
176 std::vector<int> vec;
179 std::list<bool> list;
180 list.push_back(true);
181 list.push_back(false);
182 std::pair<int,unsigned> pair;
185 std::map<int,std::string> map;
186 map.insert(std::pair<int,std::string>(45, "ALA MA CZARNEGO KOTA"));
187 map.insert(std::pair<int,std::string>(-78, "...A MOZE\nMA\nWIELE LINIJEK"));
189 DPL::Serialization::Serialize(stream,vec);
190 DPL::Serialization::Serialize(stream,list);
191 DPL::Serialization::Serialize(stream,pair);
192 DPL::Serialization::Serialize(stream,map);
193 std::vector<int> test_vec;
194 DPL::Deserialization::Deserialize(stream,test_vec);
195 RUNNER_ASSERT(test_vec.size() == vec.size() &&
196 test_vec[0] == vec[0] && test_vec[1] == vec[1]);
197 std::list<bool> test_list;
198 DPL::Deserialization::Deserialize(stream,test_list);
199 RUNNER_ASSERT(test_list.size() == list.size() &&
200 test_list.front() == list.front() &&
201 test_list.back() == test_list.back());
202 std::pair<int,unsigned> test_pair;
203 DPL::Deserialization::Deserialize(stream,test_pair);
204 RUNNER_ASSERT(test_pair.first == pair.first &&
205 test_pair.second == pair.second);
206 std::map<int,std::string> test_map;
207 DPL::Deserialization::Deserialize(stream,test_map);
208 RUNNER_ASSERT(test_map.size() == map.size() &&
209 test_map.at(45) == map.at(45) &&
210 test_map.at(-78) == map.at(-78));
213 RUNNER_TEST(Serialize_objects)
215 TestClass a(123,"ASDGHUADB\n\n5679b^^()*","TEST_STRING"),
216 b(679,"HUSPIDNSAHDPA","\nASDSADASD\naDSADASD8");
218 DPL::Serialization::Serialize(stream,a);
219 DPL::Serialization::Serialize(stream,b);
220 TestClass test_a(0,"",""), test_b(0,"","");
221 DPL::Deserialization::Deserialize(stream, test_a);
222 RUNNER_ASSERT(test_a == a);
223 DPL::Deserialization::Deserialize(stream, test_b);
224 RUNNER_ASSERT(test_b == b);
227 RUNNER_TEST(Serialize_all)
229 std::map<std::string, std::vector<TestClass*> > map;
230 std::vector<TestClass*> vec;
231 vec.push_back(new TestClass(123,"ASDGHUADB\n\n5679b^^()*","TEST_STRING"));
232 vec.push_back(new TestClass(679,"HUSPIDNSAHDPA","\nASDSADASD\naDSADASD8"));
233 map.insert(std::pair<std::string,std::vector<TestClass*> >("KEY1",vec));
234 map.insert(std::pair<std::string,std::vector<TestClass*> >("KEY2",vec));
237 DPL::Serialization::Serialize(stream, map);
239 std::map<std::string, std::vector<TestClass*> > test_map;
240 DPL::Deserialization::Deserialize(stream,test_map);
241 RUNNER_ASSERT(map.size() == test_map.size());
242 std::vector<TestClass*> test_vec1,test_vec2;
243 test_vec1 = map.at("KEY1");
244 test_vec2 = test_map.at("KEY1");
245 RUNNER_ASSERT(test_vec1.size() == test_vec2.size());
247 for (i = 0; i < test_vec1.size(); ++i)
249 RUNNER_ASSERT((*test_vec1[i]) == (*test_vec2[i]));
251 test_vec1 = map.at("KEY2");
252 test_vec2 = test_map.at("KEY2");
253 RUNNER_ASSERT(test_vec1.size() == test_vec2.size());
254 for (i = 0; i < test_vec1.size(); ++i)
256 RUNNER_ASSERT((*test_vec1[i]) == (*test_vec2[i]));