2015-10-04 17:16:43 +00:00
|
|
|
|
package scanner
|
2015-10-03 18:06:30 +00:00
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"fmt"
|
|
|
|
|
"testing"
|
2015-10-04 17:19:39 +00:00
|
|
|
|
|
|
|
|
|
"github.com/fatih/hcl/token"
|
2015-10-03 18:06:30 +00:00
|
|
|
|
)
|
|
|
|
|
|
2015-10-03 21:20:26 +00:00
|
|
|
|
var f100 = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
|
|
|
|
|
|
2015-10-04 17:19:39 +00:00
|
|
|
|
type tokenPair struct {
|
|
|
|
|
tok token.Token
|
2015-10-03 18:06:30 +00:00
|
|
|
|
text string
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-04 19:17:59 +00:00
|
|
|
|
func testTokenList(t *testing.T, tokenList []tokenPair) {
|
2015-10-03 22:29:13 +00:00
|
|
|
|
// create artifical source code
|
|
|
|
|
buf := new(bytes.Buffer)
|
|
|
|
|
for _, ident := range tokenList {
|
|
|
|
|
fmt.Fprintf(buf, " \t%s\n", ident.text)
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-04 19:17:59 +00:00
|
|
|
|
s, err := NewScanner(buf)
|
2015-10-03 22:29:13 +00:00
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, ident := range tokenList {
|
2015-10-04 19:17:59 +00:00
|
|
|
|
tok := s.Scan()
|
2015-10-03 22:29:13 +00:00
|
|
|
|
if tok != ident.tok {
|
|
|
|
|
t.Errorf("tok = %s want %s for %s\n", tok, ident.tok, ident.text)
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-04 19:17:59 +00:00
|
|
|
|
if s.TokenText() != ident.text {
|
|
|
|
|
t.Errorf("text = %s want %s", s.TokenText(), ident.text)
|
2015-10-03 22:29:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-04 19:17:59 +00:00
|
|
|
|
func TestBool(t *testing.T) {
|
|
|
|
|
var tokenList = []tokenPair{
|
|
|
|
|
{token.BOOL, "true"},
|
|
|
|
|
{token.BOOL, "false"},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
testTokenList(t, tokenList)
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-03 18:06:30 +00:00
|
|
|
|
func TestIdent(t *testing.T) {
|
2015-10-04 17:19:39 +00:00
|
|
|
|
var tokenList = []tokenPair{
|
|
|
|
|
{token.IDENT, "a"},
|
|
|
|
|
{token.IDENT, "a0"},
|
|
|
|
|
{token.IDENT, "foobar"},
|
|
|
|
|
{token.IDENT, "abc123"},
|
|
|
|
|
{token.IDENT, "LGTM"},
|
|
|
|
|
{token.IDENT, "_"},
|
|
|
|
|
{token.IDENT, "_abc123"},
|
|
|
|
|
{token.IDENT, "abc123_"},
|
|
|
|
|
{token.IDENT, "_abc_123_"},
|
|
|
|
|
{token.IDENT, "_äöü"},
|
|
|
|
|
{token.IDENT, "_本"},
|
|
|
|
|
{token.IDENT, "äöü"},
|
|
|
|
|
{token.IDENT, "本"},
|
|
|
|
|
{token.IDENT, "a۰۱۸"},
|
|
|
|
|
{token.IDENT, "foo६४"},
|
|
|
|
|
{token.IDENT, "bar9876"},
|
2015-10-03 18:06:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-10-04 19:17:59 +00:00
|
|
|
|
testTokenList(t, tokenList)
|
2015-10-03 18:06:30 +00:00
|
|
|
|
}
|
2015-10-03 21:20:26 +00:00
|
|
|
|
|
|
|
|
|
func TestString(t *testing.T) {
|
2015-10-04 17:19:39 +00:00
|
|
|
|
var tokenList = []tokenPair{
|
|
|
|
|
{token.STRING, `" "`},
|
|
|
|
|
{token.STRING, `"a"`},
|
|
|
|
|
{token.STRING, `"本"`},
|
2015-10-04 19:01:10 +00:00
|
|
|
|
{token.STRING, `"\a"`},
|
|
|
|
|
{token.STRING, `"\b"`},
|
|
|
|
|
{token.STRING, `"\f"`},
|
|
|
|
|
{token.STRING, `"\n"`},
|
|
|
|
|
{token.STRING, `"\r"`},
|
|
|
|
|
{token.STRING, `"\t"`},
|
|
|
|
|
{token.STRING, `"\v"`},
|
|
|
|
|
{token.STRING, `"\""`},
|
|
|
|
|
{token.STRING, `"\000"`},
|
|
|
|
|
{token.STRING, `"\777"`},
|
|
|
|
|
{token.STRING, `"\x00"`},
|
|
|
|
|
{token.STRING, `"\xff"`},
|
|
|
|
|
{token.STRING, `"\u0000"`},
|
|
|
|
|
{token.STRING, `"\ufA16"`},
|
|
|
|
|
{token.STRING, `"\U00000000"`},
|
|
|
|
|
{token.STRING, `"\U0000ffAB"`},
|
|
|
|
|
{token.STRING, `"` + f100 + `"`},
|
2015-10-03 21:20:26 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-10-04 19:17:59 +00:00
|
|
|
|
testTokenList(t, tokenList)
|
2015-10-03 21:20:26 +00:00
|
|
|
|
}
|
2015-10-04 19:53:20 +00:00
|
|
|
|
|
|
|
|
|
func TestNumber(t *testing.T) {
|
|
|
|
|
var tokenList = []tokenPair{
|
|
|
|
|
{token.NUMBER, "0"},
|
|
|
|
|
{token.NUMBER, "1"},
|
|
|
|
|
{token.NUMBER, "9"},
|
|
|
|
|
{token.NUMBER, "42"},
|
|
|
|
|
{token.NUMBER, "1234567890"},
|
|
|
|
|
{token.NUMBER, "00"},
|
|
|
|
|
{token.NUMBER, "01"},
|
|
|
|
|
{token.NUMBER, "07"},
|
|
|
|
|
{token.NUMBER, "042"},
|
|
|
|
|
{token.NUMBER, "01234567"},
|
2015-10-04 20:21:34 +00:00
|
|
|
|
// {token.NUMBER, "0x0"},
|
|
|
|
|
// {token.NUMBER, "0x1"},
|
|
|
|
|
// {token.NUMBER, "0xf"},
|
|
|
|
|
// {token.NUMBER, "0x42"},
|
|
|
|
|
// {token.NUMBER, "0x123456789abcDEF"},
|
|
|
|
|
// {token.NUMBER, "0x" + f100},
|
|
|
|
|
// {token.NUMBER, "0X0"},
|
|
|
|
|
// {token.NUMBER, "0X1"},
|
|
|
|
|
// {token.NUMBER, "0XF"},
|
|
|
|
|
// {token.NUMBER, "0X42"},
|
|
|
|
|
// {token.NUMBER, "0X123456789abcDEF"},
|
|
|
|
|
// {token.NUMBER, "0X" + f100},
|
|
|
|
|
// {token.FLOAT, "0."},
|
|
|
|
|
// {token.FLOAT, "1."},
|
|
|
|
|
// {token.FLOAT, "42."},
|
|
|
|
|
// {token.FLOAT, "01234567890."},
|
|
|
|
|
// {token.FLOAT, ".0"},
|
|
|
|
|
// {token.FLOAT, ".1"},
|
|
|
|
|
// {token.FLOAT, ".42"},
|
|
|
|
|
// {token.FLOAT, ".0123456789"},
|
|
|
|
|
// {token.FLOAT, "0.0"},
|
|
|
|
|
// {token.FLOAT, "1.0"},
|
|
|
|
|
// {token.FLOAT, "42.0"},
|
|
|
|
|
// {token.FLOAT, "01234567890.0"},
|
|
|
|
|
// {token.FLOAT, "0e0"},
|
|
|
|
|
// {token.FLOAT, "1e0"},
|
|
|
|
|
// {token.FLOAT, "42e0"},
|
|
|
|
|
// {token.FLOAT, "01234567890e0"},
|
|
|
|
|
// {token.FLOAT, "0E0"},
|
|
|
|
|
// {token.FLOAT, "1E0"},
|
|
|
|
|
// {token.FLOAT, "42E0"},
|
|
|
|
|
// {token.FLOAT, "01234567890E0"},
|
|
|
|
|
// {token.FLOAT, "0e+10"},
|
|
|
|
|
// {token.FLOAT, "1e-10"},
|
|
|
|
|
// {token.FLOAT, "42e+10"},
|
|
|
|
|
// {token.FLOAT, "01234567890e-10"},
|
|
|
|
|
// {token.FLOAT, "0E+10"},
|
|
|
|
|
// {token.FLOAT, "1E-10"},
|
|
|
|
|
// {token.FLOAT, "42E+10"},
|
|
|
|
|
// {token.FLOAT, "01234567890E-10"},
|
2015-10-04 19:53:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
testTokenList(t, tokenList)
|
|
|
|
|
}
|