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