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);
}
Exemple #6
0
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());
}