proto_conversion_unittest.cc 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/query_tiles/internal/proto_conversion.h"
  5. #include "base/strings/string_number_conversions.h"
  6. #include "components/query_tiles/internal/tile_iterator.h"
  7. #include "components/query_tiles/test/test_utils.h"
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. namespace query_tiles {
  10. namespace {
  11. using TileInfoGroup = query_tiles::proto::TileInfoGroup;
  12. constexpr char kTestLocale[] = "en";
  13. std::string BuildIdForSampleTile(size_t level, size_t pos) {
  14. return base::NumberToString(level) + "-" + base::NumberToString(pos);
  15. }
  16. void VerifySampleTileId(int level, int pos, const std::string& id) {
  17. auto expect_id = BuildIdForSampleTile(level, pos);
  18. EXPECT_EQ(expect_id, id);
  19. }
  20. // Build a fake two level response proto.
  21. void InitResponseProto(ResponseGroupProto* response,
  22. size_t num_tiles_each_tile) {
  23. TileInfoGroup* info_group = response->mutable_tile_group();
  24. info_group->set_locale(kTestLocale);
  25. // Add top level tiles.
  26. for (size_t i = 0; i < num_tiles_each_tile; i++) {
  27. auto* new_top_level_tile = info_group->add_tiles();
  28. new_top_level_tile->set_tile_id(BuildIdForSampleTile(0, i));
  29. new_top_level_tile->set_is_top_level(true);
  30. // Add sub-tiles.
  31. for (size_t j = 0; j < num_tiles_each_tile; j++) {
  32. auto new_tile_id = BuildIdForSampleTile(1, i * num_tiles_each_tile + j);
  33. new_top_level_tile->add_sub_tile_ids(new_tile_id);
  34. auto* new_tile = info_group->add_tiles();
  35. new_tile->set_tile_id(new_tile_id);
  36. new_tile->set_is_top_level(false);
  37. auto* param = new_tile->add_search_params();
  38. *param = "xyz=1";
  39. }
  40. }
  41. }
  42. void TestTileConversion(Tile& expected) {
  43. query_tiles::proto::Tile proto;
  44. Tile actual;
  45. TileToProto(&expected, &proto);
  46. TileFromProto(&proto, &actual);
  47. EXPECT_TRUE(test::AreTilesIdentical(expected, actual))
  48. << "actual: \n"
  49. << actual.DebugString() << "expected: \n"
  50. << expected.DebugString();
  51. }
  52. void TestTileGroupConversion(TileGroup& expected) {
  53. query_tiles::proto::TileGroup proto;
  54. TileGroup actual;
  55. TileGroupToProto(&expected, &proto);
  56. TileGroupFromProto(&proto, &actual);
  57. EXPECT_TRUE(test::AreTileGroupsIdentical(expected, actual))
  58. << "actual: \n"
  59. << actual.DebugString() << "expected: \n"
  60. << expected.DebugString();
  61. }
  62. TEST(TileProtoConversionTest, TileConversions) {
  63. Tile entry;
  64. test::ResetTestEntry(&entry);
  65. TestTileConversion(entry);
  66. }
  67. TEST(TileProtoConversionTest, TileGroupConversions) {
  68. TileGroup group;
  69. test::ResetTestGroup(&group);
  70. TestTileGroupConversion(group);
  71. }
  72. TEST(TileProtoConversionTest, TileGroupFromResponseConversions) {
  73. ResponseGroupProto server_response;
  74. const int num_tiles_each_tile = 3;
  75. InitResponseProto(&server_response, num_tiles_each_tile);
  76. TileGroup tile_group;
  77. TileGroupFromResponse(server_response, &tile_group);
  78. std::string server_response_str;
  79. server_response.SerializeToString(&server_response_str);
  80. EXPECT_EQ(tile_group.locale, "en") << std::endl
  81. << server_response_str << std::endl
  82. << tile_group.DebugString();
  83. TileIterator iter(tile_group, TileIterator::kAllTiles);
  84. size_t count = 0;
  85. while (iter.HasNext()) {
  86. const auto* next = iter.Next();
  87. int level = count >= num_tiles_each_tile ? 1 : 0;
  88. int pos = count - (level == 0 ? 0 : num_tiles_each_tile);
  89. VerifySampleTileId(level, pos, next->id);
  90. count++;
  91. }
  92. EXPECT_EQ(count, 12u) << tile_group.DebugString();
  93. }
  94. } // namespace
  95. } // namespace query_tiles