1// +build go1.7
2
3package ini
4
5import (
6	"bytes"
7	"io"
8	"reflect"
9	"testing"
10)
11
12func TestTokenize(t *testing.T) {
13	numberToken := newToken(TokenLit, []rune("123"), IntegerType)
14	numberToken.base = 10
15	cases := []struct {
16		r              io.Reader
17		expectedTokens []Token
18		expectedError  bool
19	}{
20		{
21			r: bytes.NewBuffer([]byte(`x = 123`)),
22			expectedTokens: []Token{
23				newToken(TokenLit, []rune("x"), StringType),
24				newToken(TokenWS, []rune(" "), NoneType),
25				newToken(TokenOp, []rune("="), NoneType),
26				newToken(TokenWS, []rune(" "), NoneType),
27				numberToken,
28			},
29		},
30		{
31			r: bytes.NewBuffer([]byte(`[ foo ]`)),
32			expectedTokens: []Token{
33				newToken(TokenSep, []rune("["), NoneType),
34				newToken(TokenWS, []rune(" "), NoneType),
35				newToken(TokenLit, []rune("foo"), StringType),
36				newToken(TokenWS, []rune(" "), NoneType),
37				newToken(TokenSep, []rune("]"), NoneType),
38			},
39		},
40	}
41
42	for _, c := range cases {
43		lex := iniLexer{}
44		tokens, err := lex.Tokenize(c.r)
45
46		if e, a := c.expectedError, err != nil; e != a {
47			t.Errorf("expected %t, but received %t", e, a)
48		}
49
50		if e, a := c.expectedTokens, tokens; !reflect.DeepEqual(e, a) {
51			t.Errorf("expected %v, but received %v", e, a)
52		}
53	}
54}
55