Commit 9f839b30 authored by Hesen Zhang's avatar Hesen Zhang Committed by Commit Bot

[Query Tiles]: Prepare for exposing tile group data to WebUI.

- Move print string functions for Tile or TileGroup from test utils to
class member functions.
- Have GetTileGroupForTesting API internally, LogSource will read data
through this API, and then provide to logger's observer(WebUI).

Bug: 1066556
Change-Id: I7baff1cdc5b1e9d3bcebcc08f31d134a60470086
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2268886
Commit-Queue: Hesen Zhang <hesen@chromium.org>
Reviewed-by: default avatarMin Qin <qinmin@chromium.org>
Auto-Submit: Hesen Zhang <hesen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#784193}
parent 805f7657
...@@ -55,8 +55,8 @@ void TestTileConversion(Tile& expected) { ...@@ -55,8 +55,8 @@ void TestTileConversion(Tile& expected) {
TileFromProto(&proto, &actual); TileFromProto(&proto, &actual);
EXPECT_TRUE(test::AreTilesIdentical(expected, actual)) EXPECT_TRUE(test::AreTilesIdentical(expected, actual))
<< "actual: \n" << "actual: \n"
<< test::DebugString(&actual) << "expected: \n" << actual.DebugString() << "expected: \n"
<< test::DebugString(&expected); << expected.DebugString();
} }
void TestTileGroupConversion(TileGroup& expected) { void TestTileGroupConversion(TileGroup& expected) {
...@@ -66,8 +66,8 @@ void TestTileGroupConversion(TileGroup& expected) { ...@@ -66,8 +66,8 @@ void TestTileGroupConversion(TileGroup& expected) {
TileGroupFromProto(&proto, &actual); TileGroupFromProto(&proto, &actual);
EXPECT_TRUE(test::AreTileGroupsIdentical(expected, actual)) EXPECT_TRUE(test::AreTileGroupsIdentical(expected, actual))
<< "actual: \n" << "actual: \n"
<< test::DebugString(&actual) << "expected: \n" << actual.DebugString() << "expected: \n"
<< test::DebugString(&expected); << expected.DebugString();
} }
TEST(TileProtoConversionTest, TileConversions) { TEST(TileProtoConversionTest, TileConversions) {
...@@ -92,7 +92,7 @@ TEST(TileProtoConversionTest, TileGroupFromResponseConversions) { ...@@ -92,7 +92,7 @@ TEST(TileProtoConversionTest, TileGroupFromResponseConversions) {
server_response.SerializeToString(&server_response_str); server_response.SerializeToString(&server_response_str);
EXPECT_EQ(tile_group.locale, "en") << std::endl EXPECT_EQ(tile_group.locale, "en") << std::endl
<< server_response_str << std::endl << server_response_str << std::endl
<< test::DebugString(&tile_group); << tile_group.DebugString();
TileIterator iter(tile_group, TileIterator::kAllTiles); TileIterator iter(tile_group, TileIterator::kAllTiles);
size_t count = 0; size_t count = 0;
while (iter.HasNext()) { while (iter.HasNext()) {
...@@ -102,7 +102,7 @@ TEST(TileProtoConversionTest, TileGroupFromResponseConversions) { ...@@ -102,7 +102,7 @@ TEST(TileProtoConversionTest, TileGroupFromResponseConversions) {
VerifySampleTileId(level, pos, next->id); VerifySampleTileId(level, pos, next->id);
count++; count++;
} }
EXPECT_EQ(count, 12u) << test::DebugString(&tile_group); EXPECT_EQ(count, 12u) << tile_group.DebugString();
} }
} // namespace } // namespace
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "components/query_tiles/internal/tile_group.h" #include "components/query_tiles/internal/tile_group.h"
#include <sstream>
#include <utility> #include <utility>
namespace query_tiles { namespace query_tiles {
...@@ -50,4 +51,14 @@ TileGroup& TileGroup::operator=(const TileGroup& other) { ...@@ -50,4 +51,14 @@ TileGroup& TileGroup::operator=(const TileGroup& other) {
TileGroup& TileGroup::operator=(TileGroup&& other) = default; TileGroup& TileGroup::operator=(TileGroup&& other) = default;
std::string TileGroup::DebugString() {
std::stringstream out;
out << "Group detail: \n";
out << "id: " << this->id << " | locale: " << this->locale
<< " | last_updated_ts: " << this->last_updated_ts << " \n";
for (const auto& tile : this->tiles)
out << tile->DebugString();
return out.str();
}
} // namespace query_tiles } // namespace query_tiles
...@@ -39,6 +39,9 @@ struct TileGroup { ...@@ -39,6 +39,9 @@ struct TileGroup {
// Top level tiles. // Top level tiles.
std::vector<std::unique_ptr<Tile>> tiles; std::vector<std::unique_ptr<Tile>> tiles;
// Print pretty formatted content in TileGroup struct.
std::string DebugString();
}; };
} // namespace query_tiles } // namespace query_tiles
......
...@@ -103,6 +103,11 @@ class TileManagerImpl : public TileManager { ...@@ -103,6 +103,11 @@ class TileManagerImpl : public TileManager {
accept_languages_ = accept_languages; accept_languages_ = accept_languages;
} }
void GetTileGroupForTesting(TileGroup* tile_group) override {
if (tile_group_)
*tile_group = *tile_group_.get();
}
void OnTileStoreInitialized( void OnTileStoreInitialized(
TileGroupStatusCallback callback, TileGroupStatusCallback callback,
bool success, bool success,
......
...@@ -50,14 +50,16 @@ class TileManager { ...@@ -50,14 +50,16 @@ class TileManager {
// Delete everything in db. Used for debugging and testing only. // Delete everything in db. Used for debugging and testing only.
virtual TileGroupStatus PurgeDb() = 0; virtual TileGroupStatus PurgeDb() = 0;
virtual void SetAcceptLanguagesForTesting(
const std::string& accept_languages) = 0;
TileManager(); TileManager();
virtual ~TileManager() = default; virtual ~TileManager() = default;
TileManager(const TileManager& other) = delete; TileManager(const TileManager& other) = delete;
TileManager& operator=(const TileManager& other) = delete; TileManager& operator=(const TileManager& other) = delete;
//-------Debug and Testing-----------------------------------------
virtual void GetTileGroupForTesting(TileGroup* group) = 0;
virtual void SetAcceptLanguagesForTesting(
const std::string& accept_languages) = 0;
}; };
} // namespace query_tiles } // namespace query_tiles
......
...@@ -337,6 +337,16 @@ TEST_F(TileManagerTest, PurgeDb) { ...@@ -337,6 +337,16 @@ TEST_F(TileManagerTest, PurgeDb) {
GetTiles(std::vector<Tile>() /*expect an empty result*/); GetTiles(std::vector<Tile>() /*expect an empty result*/);
} }
TEST_F(TileManagerTest, GetTileGroup) {
TileGroup expected;
test::ResetTestGroup(&expected);
InitWithData(TileGroupStatus::kSuccess, {expected});
TileGroup actual;
manager()->GetTileGroupForTesting(&actual);
EXPECT_TRUE(test::AreTileGroupsIdentical(actual, expected));
}
} // namespace } // namespace
} // namespace query_tiles } // namespace query_tiles
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include <utility>
#include <vector>
#include "base/bind.h" #include "base/bind.h"
#include "base/bind_helpers.h" #include "base/bind_helpers.h"
...@@ -37,6 +39,7 @@ class MockTileManager : public TileManager { ...@@ -37,6 +39,7 @@ class MockTileManager : public TileManager {
void(std::unique_ptr<TileGroup>, TileGroupStatusCallback)); void(std::unique_ptr<TileGroup>, TileGroupStatusCallback));
MOCK_METHOD1(SetAcceptLanguagesForTesting, void(const std::string&)); MOCK_METHOD1(SetAcceptLanguagesForTesting, void(const std::string&));
MOCK_METHOD0(PurgeDb, TileGroupStatus()); MOCK_METHOD0(PurgeDb, TileGroupStatus());
MOCK_METHOD1(GetTileGroupForTesting, void(TileGroup*));
}; };
class MockTileServiceScheduler : public TileServiceScheduler { class MockTileServiceScheduler : public TileServiceScheduler {
......
...@@ -80,8 +80,8 @@ class TileStoreTest : public testing::Test { ...@@ -80,8 +80,8 @@ class TileStoreTest : public testing::Test {
auto& expected_group = expected->at(it->first); auto& expected_group = expected->at(it->first);
EXPECT_TRUE( EXPECT_TRUE(
test::AreTileGroupsIdentical(actual_loaded_group, expected_group)) test::AreTileGroupsIdentical(actual_loaded_group, expected_group))
<< "\n Actual: " << test::DebugString(&actual_loaded_group) << "\n Actual: " << actual_loaded_group.DebugString()
<< "\n Expected: " << test::DebugString(&expected_group); << "\n Expected: " << expected_group.DebugString();
} }
} }
......
...@@ -5,12 +5,8 @@ ...@@ -5,12 +5,8 @@
#include "components/query_tiles/test/test_utils.h" #include "components/query_tiles/test/test_utils.h"
#include <algorithm> #include <algorithm>
#include <deque>
#include <map>
#include <memory> #include <memory>
#include <sstream>
#include <utility> #include <utility>
#include <vector>
namespace query_tiles { namespace query_tiles {
namespace test { namespace test {
...@@ -19,65 +15,8 @@ namespace { ...@@ -19,65 +15,8 @@ namespace {
const char kTimeStr[] = "03/18/20 01:00:00 AM"; const char kTimeStr[] = "03/18/20 01:00:00 AM";
void SerializeEntry(const Tile* entry, std::stringstream& out) {
if (!entry)
return;
out << "entry id: " << entry->id << " query text: " << entry->query_text
<< " display text: " << entry->display_text
<< " accessibility_text: " << entry->accessibility_text << " \n";
for (const auto& image : entry->image_metadatas)
out << "image url: " << image.url.possibly_invalid_spec() << " \n";
}
} // namespace } // namespace
std::string DebugString(const Tile* root) {
if (!root)
return std::string();
std::stringstream out;
out << "Entries detail: \n";
std::map<std::string, std::vector<std::string>> cache;
std::deque<const Tile*> queue;
queue.emplace_back(root);
while (!queue.empty()) {
size_t size = queue.size();
for (size_t i = 0; i < size; i++) {
auto* parent = queue.front();
SerializeEntry(parent, out);
queue.pop_front();
for (size_t j = 0; j < parent->sub_tiles.size(); j++) {
cache[parent->id].emplace_back(parent->sub_tiles[j]->id);
queue.emplace_back(parent->sub_tiles[j].get());
}
}
}
out << "Tree table: \n";
for (auto& pair : cache) {
std::string line;
line += pair.first + " : [";
std::sort(pair.second.begin(), pair.second.end());
for (const auto& child : pair.second)
line += " " + child;
line += " ]\n";
out << line;
}
return out.str();
}
std::string DebugString(const TileGroup* group) {
if (!group)
return std::string();
std::stringstream out;
out << "Group detail: \n";
out << "id: " << group->id << " locale: " << group->locale
<< " last_updated_ts: " << group->last_updated_ts << " \n";
for (const auto& tile : group->tiles) {
out << DebugString(tile.get());
}
return out.str();
}
void ResetTestEntry(Tile* entry) { void ResetTestEntry(Tile* entry) {
entry->id = "guid-1-1"; entry->id = "guid-1-1";
entry->query_text = "test query str"; entry->query_text = "test query str";
......
...@@ -14,13 +14,6 @@ ...@@ -14,13 +14,6 @@
namespace query_tiles { namespace query_tiles {
namespace test { namespace test {
// Print data in Tile, also with tree represent by adjacent nodes
// key-value[parent id: {children id}] pairs.
std::string DebugString(const Tile* entry);
// Print data in TileGroup.
std::string DebugString(const TileGroup* group);
// Build and reset the TileGroup for test usage. // Build and reset the TileGroup for test usage.
void ResetTestGroup(TileGroup* group); void ResetTestGroup(TileGroup* group);
......
...@@ -4,6 +4,10 @@ ...@@ -4,6 +4,10 @@
#include "components/query_tiles/tile.h" #include "components/query_tiles/tile.h"
#include <algorithm>
#include <deque>
#include <map>
#include <sstream>
#include <utility> #include <utility>
namespace query_tiles { namespace query_tiles {
...@@ -26,6 +30,50 @@ void DeepCopyTiles(const Tile& input, Tile* out) { ...@@ -26,6 +30,50 @@ void DeepCopyTiles(const Tile& input, Tile* out) {
} }
} }
void SerializeEntry(const Tile* entry, std::stringstream& out) {
if (!entry)
return;
out << "entry id: " << entry->id << " query text: " << entry->query_text
<< " display text: " << entry->display_text
<< " accessibility_text: " << entry->accessibility_text << " \n";
for (const auto& image : entry->image_metadatas)
out << "image url: " << image.url.possibly_invalid_spec() << " \n";
}
std::string DebugStringInternal(const Tile* root) {
if (!root)
return std::string();
std::stringstream out;
out << "Entries detail: \n";
std::map<std::string, std::vector<std::string>> cache;
std::deque<const Tile*> queue;
queue.emplace_back(root);
while (!queue.empty()) {
size_t size = queue.size();
for (size_t i = 0; i < size; i++) {
auto* parent = queue.front();
SerializeEntry(parent, out);
queue.pop_front();
for (size_t j = 0; j < parent->sub_tiles.size(); j++) {
cache[parent->id].emplace_back(parent->sub_tiles[j]->id);
queue.emplace_back(parent->sub_tiles[j].get());
}
}
}
out << "Tree table: \n";
for (auto& pair : cache) {
std::string line;
line += pair.first + " : [";
std::sort(pair.second.begin(), pair.second.end());
for (const auto& child : pair.second)
line += " " + child;
line += " ]\n";
out << line;
}
return out.str();
}
} // namespace } // namespace
ImageMetadata::ImageMetadata() = default; ImageMetadata::ImageMetadata() = default;
...@@ -70,4 +118,8 @@ Tile& Tile::operator=(const Tile& other) { ...@@ -70,4 +118,8 @@ Tile& Tile::operator=(const Tile& other) {
Tile& Tile::operator=(Tile&& other) noexcept = default; Tile& Tile::operator=(Tile&& other) noexcept = default;
std::string Tile::DebugString() {
return DebugStringInternal(this);
}
} // namespace query_tiles } // namespace query_tiles
...@@ -59,6 +59,9 @@ struct Tile { ...@@ -59,6 +59,9 @@ struct Tile {
// Additional params for search query. // Additional params for search query.
std::vector<std::string> search_params; std::vector<std::string> search_params;
// Print pretty formatted content in Tile struct.
std::string DebugString();
}; };
} // namespace query_tiles } // namespace query_tiles
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment