TEST_F(PrinterTests, test_compute_query_data_lengths) { std::map<std::string, size_t> lengths; for (const auto& row : q) { computeRowLengths(row, lengths); } // Check that all value lengths were maxed. std::map<std::string, size_t> expected = { {"name", 10}, {"age", 4}, {"food", 23}, {"number", 2}}; EXPECT_EQ(lengths, expected); // Then compute lengths of column names. computeRowLengths(q.front(), lengths, true); expected = {{"name", 10}, {"age", 4}, {"food", 23}, {"number", 6}}; EXPECT_EQ(lengths, expected); }
TEST_F(PrinterTests, test_unicode) { Row r = {{"name", "Àlex Smith"}}; std::map<std::string, size_t> lengths; computeRowLengths(r, lengths); std::map<std::string, size_t> expected = {{"name", 10}}; EXPECT_EQ(lengths, expected); }
TEST_F(PrinterTests, test_generate_row) { std::map<std::string, size_t> lengths; for (const auto& row : q) { computeRowLengths(row, lengths); } auto results = generateRow(q.front(), lengths, order); auto expected = "| Mike Jones | 39 | mac and cheese | 1 |\n"; EXPECT_EQ(results, expected); }
TEST_F(PrinterTests, test_generate_header) { std::map<std::string, size_t> lengths; for (const auto& row : q) { computeRowLengths(row, lengths); } auto results = generateHeader(lengths, order); auto expected = "| name | age | food | number |\n"; EXPECT_EQ(results, expected); }
TEST_F(PrinterTests, test_generate_separator) { std::map<std::string, size_t> lengths; for (const auto& row : q) { computeRowLengths(row, lengths); } auto results = generateToken(lengths, order); auto expected = "+------------+------+-------------------------+----+\n"; EXPECT_EQ(results, expected); }
void prettyPrint(const QueryData& results, const std::vector<std::string>& columns, std::map<std::string, size_t>& lengths) { if (results.size() == 0) { return; } // Call a final compute using the column names as minimum lengths. computeRowLengths(results.front(), lengths, true); // Output a nice header wrapping the column names. auto separator = generateToken(lengths, columns); auto header = separator + generateHeader(lengths, columns) + separator; printf("%s", header.c_str()); // Iterate each row and pretty print. for (const auto& row : results) { printf("%s", generateRow(row, lengths, columns).c_str()); } printf("%s", separator.c_str()); }