Skip to content

Commit 73ba850

Browse files
edsonariosAerex
andauthored
Adds PrintCsv() function and unit tests to bluemix/terminal/table (#352)
* added PrintCsv() function and unit tests to bluemix/terminal/table * Added handled errors to function PrintCsv * Added unit test for empty table in function PrintCsv * Added translations for error message and returned it --------- Co-authored-by: Aerex <[email protected]>
1 parent a9bdfaa commit 73ba850

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

bluemix/terminal/table.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package terminal
22

33
import (
4+
"encoding/csv"
45
"fmt"
56
"io"
67
"strings"
78

9+
. "github.com/IBM-Cloud/ibm-cloud-cli-sdk/i18n"
810
"github.com/mattn/go-runewidth"
911
)
1012

@@ -18,6 +20,7 @@ type Table interface {
1820
Add(row ...string)
1921
Print()
2022
PrintJson()
23+
PrintCsv() error
2124
}
2225

2326
type PrintableTable struct {
@@ -157,3 +160,16 @@ func (t *PrintableTable) PrintJson() {
157160
// mimic behavior of Print()
158161
t.rows = [][]string{}
159162
}
163+
164+
func (t *PrintableTable) PrintCsv() error {
165+
csvwriter := csv.NewWriter(t.writer)
166+
err := csvwriter.Write(t.headers)
167+
if err != nil {
168+
return fmt.Errorf(T("Failed, header could not convert to csv format"), err.Error())
169+
}
170+
err = csvwriter.WriteAll(t.rows)
171+
if err != nil {
172+
return fmt.Errorf(T("Failed, rows could not convert to csv format"), err.Error())
173+
}
174+
return nil
175+
}

bluemix/terminal/table_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package terminal_test
22

33
import (
44
"bytes"
5+
"strings"
56
"testing"
67

78
"github.com/stretchr/testify/assert"
@@ -92,3 +93,47 @@ func TestNotEnoughRowEntiresJson(t *testing.T) {
9293
assert.Contains(t, buf.String(), "\"column_1\": \"row1\"")
9394
assert.Contains(t, buf.String(), "\"column_1\": \"\"")
9495
}
96+
97+
func TestPrintCsvSimple(t *testing.T) {
98+
buf := bytes.Buffer{}
99+
testTable := NewTable(&buf, []string{"col1", "col2"})
100+
testTable.Add("row1-col1", "row1-col2")
101+
testTable.Add("row2-col1", "row2-col2")
102+
err := testTable.PrintCsv()
103+
assert.Equal(t, err, nil)
104+
assert.Contains(t, buf.String(), "col1,col2")
105+
assert.Contains(t, buf.String(), "row1-col1,row1-col2")
106+
assert.Contains(t, buf.String(), "row2-col1,row2-col2")
107+
}
108+
109+
func TestNotEnoughColPrintCsv(t *testing.T) {
110+
buf := bytes.Buffer{}
111+
testTable := NewTable(&buf, []string{"", "col2"})
112+
testTable.Add("row1-col1", "row1-col2")
113+
testTable.Add("row2-col1", "row2-col2")
114+
err := testTable.PrintCsv()
115+
assert.Equal(t, err, nil)
116+
assert.Contains(t, buf.String(), ",col2")
117+
assert.Contains(t, buf.String(), "row1-col1,row1-col2")
118+
assert.Contains(t, buf.String(), "row2-col1,row2-col2")
119+
}
120+
121+
func TestNotEnoughRowPrintCsv(t *testing.T) {
122+
buf := bytes.Buffer{}
123+
testTable := NewTable(&buf, []string{"col1", "col2"})
124+
testTable.Add("row1-col1", "row1-col2")
125+
testTable.Add("row2-col1", "")
126+
err := testTable.PrintCsv()
127+
assert.Equal(t, err, nil)
128+
assert.Contains(t, buf.String(), "col1,col2")
129+
assert.Contains(t, buf.String(), "row1-col1,row1-col2")
130+
assert.Contains(t, buf.String(), "row2-col1,")
131+
}
132+
133+
func TestEmptyTable(t *testing.T) {
134+
buf := bytes.Buffer{}
135+
testTable := NewTable(&buf, []string{})
136+
err := testTable.PrintCsv()
137+
assert.Equal(t, err, nil)
138+
assert.Equal(t, len(strings.TrimSpace(buf.String())), 0)
139+
}

0 commit comments

Comments
 (0)