85 lines
2.1 KiB
Go
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
|
|
// }
|