Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuri Gorshenin <y@maps.me>2017-06-20 16:11:46 +0300
committerYuri Gorshenin <mipt.vi002@gmail.com>2017-07-05 16:41:38 +0300
commitf30a26682dea84584e6865890934cba7755d09c9 (patch)
treeeb84755e68c5882bbc2632f54f5ced8d9a2a7f98 /ugc/ugc_tests
parentf5bdec0ba48a300b4c5718da3fbbc932531ffb09 (diff)
[ugc] Basic SerDes.
Diffstat (limited to 'ugc/ugc_tests')
-rw-r--r--ugc/ugc_tests/CMakeLists.txt10
-rw-r--r--ugc/ugc_tests/serdes_tests.cpp117
2 files changed, 127 insertions, 0 deletions
diff --git a/ugc/ugc_tests/CMakeLists.txt b/ugc/ugc_tests/CMakeLists.txt
new file mode 100644
index 0000000000..6156b432cd
--- /dev/null
+++ b/ugc/ugc_tests/CMakeLists.txt
@@ -0,0 +1,10 @@
+project(ugc_tests)
+
+set(
+ SRC
+ serdes_tests.cpp
+)
+
+omim_add_test(${PROJECT_NAME} ${SRC})
+omim_link_libraries(${PROJECT_NAME} platform coding geometry base)
+link_qt5_core(${PROJECT_NAME})
diff --git a/ugc/ugc_tests/serdes_tests.cpp b/ugc/ugc_tests/serdes_tests.cpp
new file mode 100644
index 0000000000..5e13420555
--- /dev/null
+++ b/ugc/ugc_tests/serdes_tests.cpp
@@ -0,0 +1,117 @@
+#include "testing/testing.hpp"
+
+#include "ugc/serdes.hpp"
+#include "ugc/types.hpp"
+
+#include "coding/reader.hpp"
+#include "coding/writer.hpp"
+
+#include <chrono>
+#include <cstdint>
+#include <vector>
+
+using namespace std;
+using namespace ugc;
+
+namespace
+{
+using Buffer = vector<uint8_t>;
+using Ser = Serializer<MemWriter<Buffer>>;
+using Des = DeserializerV0<ReaderSource<MemReader>>;
+
+chrono::hours FromDays(uint32_t days)
+{
+ return std::chrono::hours(days * 24);
+}
+
+Rating GetTestRating()
+{
+ vector<RatingRecord> records;
+ records.emplace_back("music" /* key */, 5.0 /* value */);
+ records.emplace_back("service" /* key */, 4.0 /* value */);
+
+ return Rating(records, 4.5 /* aggValue */);
+}
+
+UGC GetTestUGC()
+{
+ Rating rating;
+ rating.m_ratings.emplace_back("food" /* key */, 4.0 /* value */);
+ rating.m_ratings.emplace_back("service" /* key */, 5.0 /* value */);
+ rating.m_ratings.emplace_back("music" /* key */, 5.0 /* value */);
+ rating.m_aggValue = 4.5;
+
+ vector<Review> reviews;
+ reviews.emplace_back(20 /* id */, Text("Damn good coffee", StringUtf8Multilang::kEnglishCode),
+ Author(UID(987654321 /* hi */, 123456789 /* lo */), "Cole"),
+ 5.0 /* rating */, Review::Sentiment::Positive,
+ Review::Time(FromDays(10)));
+ reviews.emplace_back(67812 /* id */,
+ Text("Clean place, reasonably priced", StringUtf8Multilang::kDefaultCode),
+ Author(UID(0 /* hi */, 315 /* lo */), "Cooper"), 5.0 /* rating */,
+ Review::Sentiment::Positive, Review::Time(FromDays(1)));
+
+ vector<Attribute> attributes;
+ attributes.emplace_back("best-drink", "Coffee");
+
+ return UGC(rating, reviews, attributes);
+}
+
+MemWriter<Buffer> MakeSink(Buffer & buffer)
+{
+ return MemWriter<Buffer>(buffer);
+}
+
+ReaderSource<MemReader> MakeSource(Buffer const & buffer)
+{
+ MemReader reader(buffer.data(), buffer.size());
+ return ReaderSource<MemReader>(reader);
+}
+
+UNIT_TEST(SerDes_Rating)
+{
+ auto const expectedRating = GetTestRating();
+ TEST_EQUAL(expectedRating, expectedRating, ());
+
+ HeaderV0 header;
+
+ Buffer buffer;
+
+ {
+ auto sink = MakeSink(buffer);
+ Ser(sink, header)(expectedRating);
+ }
+
+ Rating actualRating({} /* ratings */, {} /* aggValue */);
+
+ {
+ auto source = MakeSource(buffer);
+ Des(source, header)(actualRating);
+ }
+
+ TEST_EQUAL(expectedRating, actualRating, ());
+}
+
+UNIT_TEST(SerDes_UGC)
+{
+ auto const expectedUGC = GetTestUGC();
+ TEST_EQUAL(expectedUGC, expectedUGC, ());
+
+ HeaderV0 header;
+
+ Buffer buffer;
+
+ {
+ auto sink = MakeSink(buffer);
+ Ser(sink, header)(expectedUGC);
+ }
+
+ UGC actualUGC({} /* rating */, {} /* reviews */, {} /* attributes */);
+ {
+ auto source = MakeSource(buffer);
+ Des(source, header)(actualUGC);
+ }
+
+ TEST_EQUAL(expectedUGC, actualUGC, ());
+}
+} // namespace