123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/query_tiles/internal/proto_conversion.h"
- #include "base/strings/string_number_conversions.h"
- #include "components/query_tiles/internal/tile_iterator.h"
- #include "components/query_tiles/test/test_utils.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace query_tiles {
- namespace {
- using TileInfoGroup = query_tiles::proto::TileInfoGroup;
- constexpr char kTestLocale[] = "en";
- std::string BuildIdForSampleTile(size_t level, size_t pos) {
- return base::NumberToString(level) + "-" + base::NumberToString(pos);
- }
- void VerifySampleTileId(int level, int pos, const std::string& id) {
- auto expect_id = BuildIdForSampleTile(level, pos);
- EXPECT_EQ(expect_id, id);
- }
- // Build a fake two level response proto.
- void InitResponseProto(ResponseGroupProto* response,
- size_t num_tiles_each_tile) {
- TileInfoGroup* info_group = response->mutable_tile_group();
- info_group->set_locale(kTestLocale);
- // Add top level tiles.
- for (size_t i = 0; i < num_tiles_each_tile; i++) {
- auto* new_top_level_tile = info_group->add_tiles();
- new_top_level_tile->set_tile_id(BuildIdForSampleTile(0, i));
- new_top_level_tile->set_is_top_level(true);
- // Add sub-tiles.
- for (size_t j = 0; j < num_tiles_each_tile; j++) {
- auto new_tile_id = BuildIdForSampleTile(1, i * num_tiles_each_tile + j);
- new_top_level_tile->add_sub_tile_ids(new_tile_id);
- auto* new_tile = info_group->add_tiles();
- new_tile->set_tile_id(new_tile_id);
- new_tile->set_is_top_level(false);
- auto* param = new_tile->add_search_params();
- *param = "xyz=1";
- }
- }
- }
- void TestTileConversion(Tile& expected) {
- query_tiles::proto::Tile proto;
- Tile actual;
- TileToProto(&expected, &proto);
- TileFromProto(&proto, &actual);
- EXPECT_TRUE(test::AreTilesIdentical(expected, actual))
- << "actual: \n"
- << actual.DebugString() << "expected: \n"
- << expected.DebugString();
- }
- void TestTileGroupConversion(TileGroup& expected) {
- query_tiles::proto::TileGroup proto;
- TileGroup actual;
- TileGroupToProto(&expected, &proto);
- TileGroupFromProto(&proto, &actual);
- EXPECT_TRUE(test::AreTileGroupsIdentical(expected, actual))
- << "actual: \n"
- << actual.DebugString() << "expected: \n"
- << expected.DebugString();
- }
- TEST(TileProtoConversionTest, TileConversions) {
- Tile entry;
- test::ResetTestEntry(&entry);
- TestTileConversion(entry);
- }
- TEST(TileProtoConversionTest, TileGroupConversions) {
- TileGroup group;
- test::ResetTestGroup(&group);
- TestTileGroupConversion(group);
- }
- TEST(TileProtoConversionTest, TileGroupFromResponseConversions) {
- ResponseGroupProto server_response;
- const int num_tiles_each_tile = 3;
- InitResponseProto(&server_response, num_tiles_each_tile);
- TileGroup tile_group;
- TileGroupFromResponse(server_response, &tile_group);
- std::string server_response_str;
- server_response.SerializeToString(&server_response_str);
- EXPECT_EQ(tile_group.locale, "en") << std::endl
- << server_response_str << std::endl
- << tile_group.DebugString();
- TileIterator iter(tile_group, TileIterator::kAllTiles);
- size_t count = 0;
- while (iter.HasNext()) {
- const auto* next = iter.Next();
- int level = count >= num_tiles_each_tile ? 1 : 0;
- int pos = count - (level == 0 ? 0 : num_tiles_each_tile);
- VerifySampleTileId(level, pos, next->id);
- count++;
- }
- EXPECT_EQ(count, 12u) << tile_group.DebugString();
- }
- } // namespace
- } // namespace query_tiles
|