2019-10-16 18:19:15 +09:00
|
|
|
package token_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
2019-10-21 01:12:02 +09:00
|
|
|
|
|
|
|
"github.com/goccy/go-yaml/token"
|
2019-10-16 18:19:15 +09:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestToken(t *testing.T) {
|
2019-10-21 01:12:02 +09:00
|
|
|
pos := &token.Position{}
|
|
|
|
tokens := token.Tokens{
|
|
|
|
token.SequenceEntry("-", pos),
|
|
|
|
token.MappingKey(pos),
|
|
|
|
token.MappingValue(pos),
|
|
|
|
token.CollectEntry(",", pos),
|
|
|
|
token.SequenceStart("[", pos),
|
|
|
|
token.SequenceEnd("]", pos),
|
|
|
|
token.MappingStart("{", pos),
|
|
|
|
token.MappingEnd("}", pos),
|
|
|
|
token.Comment("#", "#", pos),
|
|
|
|
token.Anchor("&", pos),
|
|
|
|
token.Alias("*", pos),
|
|
|
|
token.Literal("|", "|", pos),
|
|
|
|
token.Folded(">", ">", pos),
|
|
|
|
token.SingleQuote("'", "'", pos),
|
|
|
|
token.DoubleQuote(`"`, `"`, pos),
|
2021-03-01 19:15:44 +09:00
|
|
|
token.Directive("%", pos),
|
2019-10-21 01:12:02 +09:00
|
|
|
token.Space(pos),
|
|
|
|
token.MergeKey("<<", pos),
|
2021-03-01 19:15:44 +09:00
|
|
|
token.DocumentHeader("---", pos),
|
|
|
|
token.DocumentEnd("...", pos),
|
2019-10-21 01:12:02 +09:00
|
|
|
token.New("1", "1", pos),
|
|
|
|
token.New("3.14", "3.14", pos),
|
2019-10-29 21:04:59 +09:00
|
|
|
token.New("-0b101010", "-0b101010", pos),
|
|
|
|
token.New("0xA", "0xA", pos),
|
|
|
|
token.New("685.230_15e+03", "685.230_15e+03", pos),
|
|
|
|
token.New("02472256", "02472256", pos),
|
|
|
|
token.New("0o2472256", "0o2472256", pos),
|
|
|
|
token.New("", "", pos),
|
|
|
|
token.New("_1", "_1", pos),
|
|
|
|
token.New("1.1.1.1", "1.1.1.1", pos),
|
|
|
|
token.New("+", "+", pos),
|
|
|
|
token.New("-", "-", pos),
|
|
|
|
token.New("_", "_", pos),
|
2019-10-30 17:04:22 +09:00
|
|
|
token.New("~", "~", pos),
|
2019-10-21 01:12:02 +09:00
|
|
|
token.New("true", "true", pos),
|
|
|
|
token.New("false", "false", pos),
|
|
|
|
token.New(".nan", ".nan", pos),
|
|
|
|
token.New(".inf", ".inf", pos),
|
|
|
|
token.New("-.inf", "-.inf", pos),
|
|
|
|
token.New("null", "null", pos),
|
|
|
|
token.Tag("!!null", "!!null", pos),
|
|
|
|
token.Tag("!!map", "!!map", pos),
|
|
|
|
token.Tag("!!str", "!!str", pos),
|
|
|
|
token.Tag("!!seq", "!!seq", pos),
|
|
|
|
token.Tag("!!binary", "!!binary", pos),
|
|
|
|
token.Tag("!!omap", "!!omap", pos),
|
|
|
|
token.Tag("!!set", "!!set", pos),
|
|
|
|
token.Tag("!!int", "!!int", pos),
|
|
|
|
token.Tag("!!float", "!!float", pos),
|
|
|
|
token.Tag("!hoge", "!hoge", pos),
|
|
|
|
}
|
|
|
|
tokens.Dump()
|
|
|
|
tokens.Add(token.New("hoge", "hoge", pos))
|
|
|
|
if tokens[len(tokens)-1].PreviousType() != token.TagType {
|
|
|
|
t.Fatal("invalid previous token type")
|
|
|
|
}
|
|
|
|
if tokens[0].PreviousType() != token.UnknownType {
|
|
|
|
t.Fatal("invalid previous token type")
|
|
|
|
}
|
|
|
|
if tokens[len(tokens)-2].NextType() != token.StringType {
|
|
|
|
t.Fatal("invalid next token type")
|
|
|
|
}
|
|
|
|
if tokens[len(tokens)-1].NextType() != token.UnknownType {
|
|
|
|
t.Fatal("invalid next token type")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestIsNeedQuoted(t *testing.T) {
|
2020-08-27 16:35:41 +09:00
|
|
|
needQuotedTests := []string{
|
|
|
|
"",
|
|
|
|
"true",
|
|
|
|
"1.234",
|
|
|
|
"1:1",
|
|
|
|
"hoge # comment",
|
|
|
|
"\\0",
|
|
|
|
"#a b",
|
|
|
|
"*a b",
|
|
|
|
"&a b",
|
|
|
|
"{a b",
|
|
|
|
"}a b",
|
|
|
|
"[a b",
|
|
|
|
"]a b",
|
|
|
|
",a b",
|
|
|
|
"!a b",
|
|
|
|
"|a b",
|
|
|
|
">a b",
|
|
|
|
">a b",
|
|
|
|
"%a b",
|
|
|
|
`'a b`,
|
|
|
|
`"a b`,
|
|
|
|
"a:",
|
|
|
|
"a: b",
|
2023-03-14 15:24:34 +09:00
|
|
|
"y",
|
|
|
|
"Y",
|
|
|
|
"yes",
|
|
|
|
"Yes",
|
|
|
|
"YES",
|
|
|
|
"n",
|
|
|
|
"N",
|
|
|
|
"no",
|
|
|
|
"No",
|
|
|
|
"NO",
|
|
|
|
"on",
|
|
|
|
"On",
|
|
|
|
"ON",
|
|
|
|
"off",
|
|
|
|
"Off",
|
|
|
|
"OFF",
|
2019-10-29 21:04:59 +09:00
|
|
|
}
|
2020-08-27 16:35:41 +09:00
|
|
|
for i, test := range needQuotedTests {
|
|
|
|
if !token.IsNeedQuoted(test) {
|
|
|
|
t.Fatalf("%d: failed to quoted judge for %s", i, test)
|
|
|
|
}
|
2019-10-21 01:12:02 +09:00
|
|
|
}
|
2020-08-27 16:35:41 +09:00
|
|
|
notNeedQuotedTests := []string{
|
|
|
|
"Hello World",
|
2019-10-21 01:12:02 +09:00
|
|
|
}
|
2020-08-27 16:35:41 +09:00
|
|
|
for i, test := range notNeedQuotedTests {
|
|
|
|
if token.IsNeedQuoted(test) {
|
|
|
|
t.Fatalf("%d: failed to quoted judge for %s", i, test)
|
|
|
|
}
|
2019-10-21 01:12:02 +09:00
|
|
|
}
|
2019-10-16 18:19:15 +09:00
|
|
|
}
|