blob: e8c2c280ee6eaa2f3b7acc83e6e9aca95436c54e [file] [log] [blame]
// Copyright 2018 The Fuchsia 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 "garnet/bin/zxdb/console/format_table.h"
#include "gtest/gtest.h"
namespace zxdb {
TEST(FormatTable, Basic) {
// Test with no data.
OutputBuffer out;
std::vector<std::vector<std::string>> rows;
FormatTable({ColSpec(), ColSpec()}, rows, &out);
EXPECT_EQ("", out.AsString());
// Heading only.
out = OutputBuffer();
FormatTable(
{ColSpec(Align::kLeft, 0, "One"), ColSpec(Align::kLeft, 0, "Two")}, rows,
&out);
EXPECT_EQ("One Two\n", out.AsString());
// Two rows for all tests below.
rows.push_back(std::vector<std::string>{"0", "Hello, world"});
rows.push_back(std::vector<std::string>{"12345", "Hello"});
// Left align.
out = OutputBuffer();
FormatTable({ColSpec(), ColSpec()}, rows, &out);
EXPECT_EQ("0 Hello, world\n12345 Hello\n", out.AsString());
// Right align with padding.
out = OutputBuffer();
FormatTable(
{ColSpec(Align::kRight), ColSpec(Align::kRight, 0, std::string(), 2)},
rows, &out);
EXPECT_EQ(" 0 Hello, world\n12345 Hello\n", out.AsString());
// Max width + heading.
out = OutputBuffer();
FormatTable(
{ColSpec(Align::kRight, 3, "One"), ColSpec(Align::kLeft, 3, "Two")}, rows,
&out);
EXPECT_EQ("One Two\n 0 Hello, world\n12345 Hello\n", out.AsString());
// Overflowing cells shouldn't force the whole column to max width.
out = OutputBuffer();
FormatTable({ColSpec(Align::kRight, 1), ColSpec(Align::kLeft, 0)}, rows,
&out);
EXPECT_EQ("0 Hello, world\n12345 Hello\n", out.AsString());
// The last item in a row expands to fill all remaining columns. Make the
// last row have only one really long string.
out = OutputBuffer();
rows[1].resize(1);
rows[1][0] = "This is a really long contents.";
FormatTable({ColSpec(Align::kLeft, 1), ColSpec(Align::kLeft, 0)}, rows, &out);
EXPECT_EQ("0 Hello, world\nThis is a really long contents.\n",
out.AsString());
}
} // namespace zxdb