bettercap/vendor/github.com/adrianmo/go-nmea/parser_test.go
2018-03-23 15:25:11 +01:00

226 lines
4.6 KiB
Go

package nmea
import (
"testing"
"github.com/stretchr/testify/assert"
)
var parsertests = []struct {
name string
fields []string
expected interface{}
hasErr bool
parse func(p *parser) interface{}
}{
{
name: "String",
fields: []string{"foo", "bar"},
expected: "bar",
parse: func(p *parser) interface{} {
return p.String(1, "")
},
},
{
name: "String out of range",
fields: []string{"wot"},
expected: "",
hasErr: true,
parse: func(p *parser) interface{} {
return p.String(5, "thing")
},
},
{
name: "String with existing error",
expected: "",
hasErr: true,
parse: func(p *parser) interface{} {
p.SetErr("context", "value")
return p.String(123, "blah")
},
},
{
name: "EnumString",
fields: []string{"a", "b", "c"},
expected: "b",
parse: func(p *parser) interface{} {
return p.EnumString(1, "context", "b", "d")
},
},
{
name: "EnumString invalid",
fields: []string{"a", "b", "c"},
expected: "",
hasErr: true,
parse: func(p *parser) interface{} {
return p.EnumString(1, "context", "x", "y")
},
},
{
name: "EnumString with existing error",
fields: []string{"a", "b", "c"},
expected: "",
hasErr: true,
parse: func(p *parser) interface{} {
p.SetErr("context", "value")
return p.EnumString(1, "context", "a", "b")
},
},
{
name: "Int64",
fields: []string{"123"},
expected: int64(123),
parse: func(p *parser) interface{} {
return p.Int64(0, "context")
},
},
{
name: "Int64 empty field is zero",
fields: []string{""},
expected: int64(0),
parse: func(p *parser) interface{} {
return p.Int64(0, "context")
},
},
{
name: "Int64 invalid",
fields: []string{"abc"},
expected: int64(0),
hasErr: true,
parse: func(p *parser) interface{} {
return p.Int64(0, "context")
},
},
{
name: "Int64 with existing error",
fields: []string{"123"},
expected: int64(0),
hasErr: true,
parse: func(p *parser) interface{} {
p.SetErr("context", "value")
return p.Int64(0, "context")
},
},
{
name: "Float64",
fields: []string{"123.123"},
expected: float64(123.123),
parse: func(p *parser) interface{} {
return p.Float64(0, "context")
},
},
{
name: "Float64 empty field is zero",
fields: []string{""},
expected: float64(0),
parse: func(p *parser) interface{} {
return p.Float64(0, "context")
},
},
{
name: "Float64 invalid",
fields: []string{"abc"},
expected: float64(0),
hasErr: true,
parse: func(p *parser) interface{} {
return p.Float64(0, "context")
},
},
{
name: "Float64 with existing error",
fields: []string{"123.123"},
expected: float64(0),
hasErr: true,
parse: func(p *parser) interface{} {
p.SetErr("context", "value")
return p.Float64(0, "context")
},
},
{
name: "Time",
fields: []string{"123456"},
expected: Time{true, 12, 34, 56, 0},
parse: func(p *parser) interface{} {
return p.Time(0, "context")
},
},
{
name: "Time empty field is zero",
fields: []string{""},
expected: Time{},
parse: func(p *parser) interface{} {
return p.Time(0, "context")
},
},
{
name: "Time with existing error",
fields: []string{"123456"},
expected: Time{},
hasErr: true,
parse: func(p *parser) interface{} {
p.SetErr("context", "value")
return p.Time(0, "context")
},
},
{
name: "Time invalid",
fields: []string{"wrong"},
expected: Time{},
hasErr: true,
parse: func(p *parser) interface{} {
return p.Time(0, "context")
},
},
{
name: "Date",
fields: []string{"010203"},
expected: Date{true, 1, 2, 3},
parse: func(p *parser) interface{} {
return p.Date(0, "context")
},
},
{
name: "Date empty field is zero",
fields: []string{""},
expected: Date{},
parse: func(p *parser) interface{} {
return p.Date(0, "context")
},
},
{
name: "Date invalid",
fields: []string{"Hello"},
expected: Date{},
hasErr: true,
parse: func(p *parser) interface{} {
return p.Date(0, "context")
},
},
{
name: "Date with existing error",
fields: []string{"010203"},
expected: Date{},
hasErr: true,
parse: func(p *parser) interface{} {
p.SetErr("context", "value")
return p.Date(0, "context")
},
},
}
func TestParser(t *testing.T) {
for _, tt := range parsertests {
t.Run(tt.name, func(t *testing.T) {
p := newParser(Sent{
Type: "type",
Fields: tt.fields,
}, "type")
assert.Equal(t, tt.expected, tt.parse(p))
if tt.hasErr {
assert.Error(t, p.Err())
} else {
assert.NoError(t, p.Err())
}
})
}
}