88 lines
1.7 KiB
Go
88 lines
1.7 KiB
Go
// +build go1.7
|
|
|
|
package ini
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestSkipper(t *testing.T) {
|
|
idTok, _, _ := newLitToken([]rune("id"))
|
|
nlTok := newToken(TokenNL, []rune("\n"), NoneType)
|
|
|
|
cases := []struct {
|
|
name string
|
|
Fn func(s *skipper)
|
|
param Token
|
|
expected bool
|
|
expectedShouldSkip bool
|
|
expectedPrevTok Token
|
|
}{
|
|
{
|
|
name: "empty case",
|
|
Fn: func(s *skipper) {
|
|
},
|
|
param: emptyToken,
|
|
expectedPrevTok: emptyToken,
|
|
},
|
|
{
|
|
name: "skip case",
|
|
Fn: func(s *skipper) {
|
|
s.Skip()
|
|
},
|
|
param: idTok,
|
|
expectedShouldSkip: true,
|
|
expected: true,
|
|
expectedPrevTok: emptyToken,
|
|
},
|
|
{
|
|
name: "continue case",
|
|
Fn: func(s *skipper) {
|
|
s.Continue()
|
|
},
|
|
param: emptyToken,
|
|
expectedPrevTok: emptyToken,
|
|
},
|
|
{
|
|
name: "skip then continue case",
|
|
Fn: func(s *skipper) {
|
|
s.Skip()
|
|
s.Continue()
|
|
},
|
|
param: emptyToken,
|
|
expectedPrevTok: emptyToken,
|
|
},
|
|
{
|
|
name: "do not skip case",
|
|
Fn: func(s *skipper) {
|
|
s.Skip()
|
|
s.prevTok = nlTok
|
|
},
|
|
param: idTok,
|
|
expectedShouldSkip: true,
|
|
expectedPrevTok: nlTok,
|
|
},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
|
|
t.Run(c.name, func(t *testing.T) {
|
|
s := newSkipper()
|
|
c.Fn(&s)
|
|
|
|
if e, a := c.expectedShouldSkip, s.shouldSkip; e != a {
|
|
t.Errorf("%s: expected %t, but received %t", c.name, e, a)
|
|
}
|
|
|
|
if e, a := c.expectedPrevTok, s.prevTok; !reflect.DeepEqual(e, a) {
|
|
t.Errorf("%s: expected %v, but received %v", c.name, e, a)
|
|
}
|
|
|
|
if e, a := c.expected, s.ShouldSkip(c.param); e != a {
|
|
t.Errorf("%s: expected %t, but received %t", c.name, e, a)
|
|
}
|
|
})
|
|
}
|
|
}
|