69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package csvparser
|
|
|
|
import(
|
|
"testing"
|
|
)
|
|
|
|
|
|
func TestParse(t *testing.T) {
|
|
var parser Parser
|
|
|
|
var CsvTestValues = [...]string {
|
|
"field1 field2 field3", // standard CSV
|
|
" field1 field2 field3 ", // Space or multiple spaces as delimiters
|
|
" field1 field2 field3 ", // Spaces + tabs as delimiters
|
|
" \"field1\" field2 field3 ", // Enclosed fields
|
|
" \"field1\" field2 [field3] ", // Enclosed fields
|
|
}
|
|
var CsvExpectedValues = [...]string {
|
|
"field1",
|
|
"field2",
|
|
"field3",
|
|
}
|
|
|
|
parser.Init()
|
|
for _, v := range CsvTestValues {
|
|
err := parser.Parse(v)
|
|
if err != nil {
|
|
t.Error("Parse error:", err, " in ", v)
|
|
}
|
|
if len(parser.Fields) != len(CsvExpectedValues) {
|
|
t.Error("Extracted field number does not match expected", parser.Fields)
|
|
}
|
|
for i,val := range CsvExpectedValues {
|
|
if parser.Fields[i] != val {
|
|
t.Error("Field values do not match", i, " expected ", val, " got ", parser.Fields[i])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
func TestParseWithEscape(t *testing.T) {
|
|
var parser Parser
|
|
|
|
var CsvTestValues = [...]string {
|
|
"\"\\\"field1 and more\" field2 [\\[field3] ", // Enclosed fields
|
|
}
|
|
var CsvExpectedValues = [...]string {
|
|
"\\\"field1 and more",
|
|
"field2",
|
|
"\\[field3",
|
|
}
|
|
|
|
|
|
parser.Init()
|
|
for _, v := range CsvTestValues {
|
|
err := parser.Parse(v)
|
|
if err != nil {
|
|
t.Error("Parse error:", err, " in ", v)
|
|
}
|
|
if len(parser.Fields) != len(CsvExpectedValues) {
|
|
t.Error("Extracted field number does not match expected", parser.Fields)
|
|
}
|
|
for i,val := range CsvExpectedValues {
|
|
if parser.Fields[i] != val {
|
|
t.Error("Field values do not match", i, " expected ", val, " got ", parser.Fields[i])
|
|
}
|
|
}
|
|
}
|
|
}
|