| // Copyright 2020 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package texttab |
| |
| import ( |
| "strings" |
| "testing" |
| ) |
| |
| func TestAlign(t *testing.T) { |
| check := func(s string, a align, w int, want string) { |
| t.Helper() |
| got := a.lpad(s, w) |
| if got != want { |
| t.Errorf("want %q, got %q", want, got) |
| } |
| } |
| |
| check("abc", alignLeft, 10, "abc") |
| check("abc", alignCenter, 10, " abc") |
| check("abc", alignCenter, 11, " abc") |
| check("abc", alignRight, 10, " abc") |
| check("☃", alignRight, 4, " ☃") |
| } |
| |
| func TestTable(t *testing.T) { |
| var tab Table |
| check := func(want string) { |
| t.Helper() |
| var gotBuf strings.Builder |
| tab.Format(&gotBuf) |
| got := gotBuf.String() |
| if want != got { |
| t.Errorf("want:\n%sgot:\n%s", want, got) |
| } |
| // Reset tab. |
| tab = Table{} |
| } |
| |
| // Basic test. |
| tab.Row().Cell("a").Cell("b").Cell("c") |
| tab.Row().Cell("d").Cell("e").Cell("f") |
| check("a b c\nd e f\n") |
| |
| // Basic cell padding. Also checks that we don't print |
| // unnecessary spaces at the ends of lines. |
| tab.Row().Cell("a").Cell("b").Cell("c") |
| tab.Row().Cell("long").Cell("e").Cell("long") |
| check("a b c\nlong e long\n") |
| |
| // Cell alignment. |
| tab.Row().Cell("a", Left).Cell("b", Center).Cell("c", Right) |
| tab.Row().Cell("xxx").Cell("xxx").Cell("xxx") |
| check("a b c\nxxx xxx xxx\n") |
| |
| // Margins. |
| tab.Row().Cell("a").Cell("b", LeftMargin(" ")) |
| tab.Row().Cell("c").Cell("d") |
| tab.Row().Cell("e").Cell("f", LeftMargin("|")) |
| check("a b\nc d\ne |f\n") |
| |
| // Missing cell in the middle. |
| tab.Row().Cell("a").Col(2).Cell("c") |
| tab.Row().Cell("d").Cell("e").Cell("f") |
| check("a c\nd e f\n") |
| |
| // Missing cells at the end. |
| tab.Row().Cell("a") |
| tab.Row().Cell("d").Cell("e").Cell("f") |
| check("a\nd e f\n") |
| |
| // Blank rows. |
| tab.Row().Cell("a") |
| tab.Row() |
| tab.Row() |
| tab.Row().Cell("b") |
| check("a\n\n\nb\n") |
| |
| // Basic spans. |
| tab.Row().Cell("a").Cell("b") |
| tab.Row().Span(2, "abc") |
| check("a b\nabc\n") |
| |
| // Spans expanding other cells. |
| tab.Row().Cell("a").Cell("b") |
| tab.Row().Span(2, "abcdefg") |
| check("a b\nabcdefg\n") |
| |
| // Other cells expanding spans. |
| tab.Row().Cell("abc").Cell("def") |
| tab.Row().Span(2, "a", Right) |
| check("abc def\n a\n") |
| |
| // Some cells are already large enough to complete the span. |
| tab.Row().Cell("a").Cell("def") |
| tab.Row().Span(2, "abdef", Right) |
| check("a def\nabdef\n") |
| |
| // Larger cells are sufficient, but smaller cells need to be |
| // expanded. |
| tab.Row().Cell("a").Cell("def") |
| tab.Row().Span(2, "abcdef", Right) |
| check("a def\nabcdef\n") |
| |
| // Spans with margins. |
| tab.Row().Cell("a").Cell("b", LeftMargin(" ")).Cell("x") |
| tab.Row().Span(2, "a__b").Cell("x") |
| check("a b x\na__b x\n") |
| |
| // Shrink columns. |
| tab.Row().Span(2, "abcdef") |
| tab.Row().Cell("a").Cell("bc") |
| tab.Row().Cell("x").Cell("y") |
| tab.SetShrink(1, true) |
| check("abcdef\na bc\nx y\n") |
| } |