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 // }