go-csv-table/gocsvtable_test.go
2025-03-30 13:14:15 -03:00

85 lines
2.1 KiB
Go

package gocsvtable
import (
"io"
"testing"
)
const testFile = "test.csv"
func TestOpenCSV(t *testing.T) {
gct := GoCSVtable{}
err := gct.OpenCSV(testFile)
if err != nil {
t.Errorf("\nError opening csv file:\n - %#v\n", err.Error())
}
}
func TestGetHeaders(t *testing.T) {
const letters = 0
const numbers = 1
gct := GoCSVtable{}
gct.OpenCSV(testFile)
gotLettersCol := gct.Headers["Letters"]
if gotLettersCol != letters {
t.Errorf("Error reading correct 'Letters' column. Expected: '%v'. Got: '%v'.\n", letters, gotLettersCol)
}
gotNumbersCol := gct.Headers["Numbers"]
if gotNumbersCol != numbers {
t.Errorf("Error reading correct 'Numbers' column. Expected: '%v'. Got: '%v'.\n", numbers, gotNumbersCol)
}
}
func TestNext(t *testing.T) {
gct := GoCSVtable{}
gct.OpenCSV(testFile)
for row := 2; row < 5; row++ {
err := gct.Next()
if err != nil {
t.Errorf("Error passing to next row. CSV file have 5 rows, not %v", row)
}
}
// Try to go to different row, it should receive io.EOF
err := gct.Next()
if err != io.EOF {
t.Errorf("Error on Next(), row should be inexistent. Expected: '%v'; Got: %v", io.EOF, err)
}
}
// // GetNumberOfRows will return the number of data rows, not considering the
// // header
// func (gct *GoCSVtable) GetNumberOfRows() int {
// return gct.lastRow
// }
// // Read return a specific field from active row
// func (gct *GoCSVtable) Read(field string) string {
// col := gct.Headers[field]
// return gct.data[gct.Row][col]
// }
// // Read and return the entire row
// func (gct *GoCSVtable) ReadRow(row int) ([]string, error) {
// if row > gct.lastRow {
// return []string{}, fmt.Errorf("Not possible to read row %v. Data has max of %v rows.\n", row, gct.lastRow)
// }
// return gct.data[row], nil
// }
// // ReadCol will return a slice with all row values from a single column (field)
// func (gct *GoCSVtable) ReadCol(field string) ([]string, error) {
// data := []string{}
// fieldNumber := gct.Headers[field]
// for row := 1; row <= gct.lastRow; row++ {
// data = append(data, gct.data[row][fieldNumber])
// }
// return data, nil
// }