...

Source file src/github.com/cli/go-gh/v2/pkg/tableprinter/table_test.go

Documentation: github.com/cli/go-gh/v2/pkg/tableprinter

     1  package tableprinter
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"log"
     7  	"os"
     8  	"strings"
     9  	"testing"
    10  
    11  	"github.com/MakeNowJust/heredoc"
    12  )
    13  
    14  func ExampleTablePrinter() {
    15  	// information about the terminal can be obtained using the [pkg/term] package
    16  	isTTY := true
    17  	termWidth := 14
    18  	red := func(s string) string {
    19  		return "\x1b[31m" + s + "\x1b[m"
    20  	}
    21  
    22  	t := New(os.Stdout, isTTY, termWidth)
    23  	t.AddField("9", WithTruncate(nil))
    24  	t.AddField("hello")
    25  	t.EndRow()
    26  	t.AddField("10", WithTruncate(nil))
    27  	t.AddField("long description", WithColor(red))
    28  	t.EndRow()
    29  	if err := t.Render(); err != nil {
    30  		log.Fatal(err)
    31  	}
    32  	// stdout now contains:
    33  	// 9   hello
    34  	// 10  long de...
    35  }
    36  
    37  func Test_ttyTablePrinter_autoTruncate(t *testing.T) {
    38  	buf := bytes.Buffer{}
    39  	tp := New(&buf, true, 5)
    40  
    41  	tp.AddField("1")
    42  	tp.AddField("hello")
    43  	tp.EndRow()
    44  	tp.AddField("2")
    45  	tp.AddField("world")
    46  	tp.EndRow()
    47  
    48  	err := tp.Render()
    49  	if err != nil {
    50  		t.Fatalf("unexpected error: %v", err)
    51  	}
    52  
    53  	expected := "1  he\n2  wo\n"
    54  	if buf.String() != expected {
    55  		t.Errorf("expected: %q, got: %q", expected, buf.String())
    56  	}
    57  }
    58  
    59  func Test_ttyTablePrinter_WithTruncate(t *testing.T) {
    60  	buf := bytes.Buffer{}
    61  	tp := New(&buf, true, 15)
    62  
    63  	tp.AddField("long SHA", WithTruncate(nil))
    64  	tp.AddField("hello")
    65  	tp.EndRow()
    66  	tp.AddField("another SHA", WithTruncate(nil))
    67  	tp.AddField("world")
    68  	tp.EndRow()
    69  
    70  	err := tp.Render()
    71  	if err != nil {
    72  		t.Fatalf("unexpected error: %v", err)
    73  	}
    74  
    75  	expected := "long SHA     he\nanother SHA  wo\n"
    76  	if buf.String() != expected {
    77  		t.Errorf("expected: %q, got: %q", expected, buf.String())
    78  	}
    79  }
    80  
    81  func Test_ttyTablePrinter_AddHeader(t *testing.T) {
    82  	buf := bytes.Buffer{}
    83  	tp := New(&buf, true, 80)
    84  
    85  	tp.AddHeader([]string{"ONE", "TWO", "THREE"}, WithColor(func(s string) string {
    86  		return fmt.Sprintf("\x1b[4m%s\x1b[m", s)
    87  	}))
    88  	// Subsequent calls to AddHeader are ignored.
    89  	tp.AddHeader([]string{"SHOULD", "NOT", "EXIST"})
    90  
    91  	tp.AddField("hello")
    92  	tp.AddField("beautiful")
    93  	tp.AddField("people")
    94  	tp.EndRow()
    95  
    96  	err := tp.Render()
    97  	if err != nil {
    98  		t.Fatalf("unexpected error: %v", err)
    99  	}
   100  
   101  	expected := heredoc.Docf(`
   102  		%[1]s[4mONE  %[1]s[m  %[1]s[4mTWO      %[1]s[m  %[1]s[4mTHREE%[1]s[m
   103  		hello  beautiful  people
   104  	`, "\x1b")
   105  	if buf.String() != expected {
   106  		t.Errorf("expected: %q, got: %q", expected, buf.String())
   107  	}
   108  }
   109  
   110  func Test_ttyTablePrinter_WithPadding(t *testing.T) {
   111  	buf := bytes.Buffer{}
   112  	tp := New(&buf, true, 80)
   113  
   114  	// Center the headers.
   115  	tp.AddHeader([]string{"A", "B", "C"}, WithPadding(func(width int, s string) string {
   116  		left := (width - len(s)) / 2
   117  		return strings.Repeat(" ", left) + s + strings.Repeat(" ", width-left-len(s))
   118  	}))
   119  
   120  	tp.AddField("hello")
   121  	tp.AddField("beautiful")
   122  	tp.AddField("people")
   123  	tp.EndRow()
   124  
   125  	err := tp.Render()
   126  	if err != nil {
   127  		t.Fatalf("unexpected error: %v", err)
   128  	}
   129  
   130  	expected := heredoc.Doc(`
   131  		  A        B        C   
   132  		hello  beautiful  people
   133  	`)
   134  	if buf.String() != expected {
   135  		t.Errorf("expected: %q, got: %q", expected, buf.String())
   136  	}
   137  }
   138  
   139  func Test_tsvTablePrinter(t *testing.T) {
   140  	buf := bytes.Buffer{}
   141  	tp := New(&buf, false, 0)
   142  
   143  	tp.AddField("1")
   144  	tp.AddField("hello")
   145  	tp.EndRow()
   146  	tp.AddField("2")
   147  	tp.AddField("world")
   148  	tp.EndRow()
   149  
   150  	err := tp.Render()
   151  	if err != nil {
   152  		t.Fatalf("unexpected error: %v", err)
   153  	}
   154  
   155  	expected := "1\thello\n2\tworld\n"
   156  	if buf.String() != expected {
   157  		t.Errorf("expected: %q, got: %q", expected, buf.String())
   158  	}
   159  }
   160  
   161  func Test_tsvTablePrinter_AddHeader(t *testing.T) {
   162  	buf := bytes.Buffer{}
   163  	tp := New(&buf, false, 0)
   164  
   165  	// Headers are not output in TSV output.
   166  	tp.AddHeader([]string{"ONE", "TWO", "THREE"})
   167  
   168  	tp.AddField("hello")
   169  	tp.AddField("beautiful")
   170  	tp.AddField("people")
   171  	tp.EndRow()
   172  	tp.AddField("1")
   173  	tp.AddField("2")
   174  	tp.AddField("3")
   175  	tp.EndRow()
   176  
   177  	err := tp.Render()
   178  	if err != nil {
   179  		t.Fatalf("unexpected error: %v", err)
   180  	}
   181  
   182  	expected := "hello\tbeautiful\tpeople\n1\t2\t3\n"
   183  	if buf.String() != expected {
   184  		t.Errorf("expected: %q, got: %q", expected, buf.String())
   185  	}
   186  }
   187  

View as plain text