| // 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 "src/developer/debug/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 |