package csvparser

import(
	"testing"
)


func TestParse(t *testing.T) {
	var parser CsvParser

  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 CsvParser

  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])
      }
    }
  }
}