1package token_test
2
3import (
4	"testing"
5
6	"github.com/goccy/go-yaml/token"
7)
8
9func TestToken(t *testing.T) {
10	pos := &token.Position{}
11	tokens := token.Tokens{
12		token.SequenceEntry("-", pos),
13		token.MappingKey(pos),
14		token.MappingValue(pos),
15		token.CollectEntry(",", pos),
16		token.SequenceStart("[", pos),
17		token.SequenceEnd("]", pos),
18		token.MappingStart("{", pos),
19		token.MappingEnd("}", pos),
20		token.Comment("#", "#", pos),
21		token.Anchor("&", pos),
22		token.Alias("*", pos),
23		token.Literal("|", "|", pos),
24		token.Folded(">", ">", pos),
25		token.SingleQuote("'", "'", pos),
26		token.DoubleQuote(`"`, `"`, pos),
27		token.Directive(pos),
28		token.Space(pos),
29		token.MergeKey("<<", pos),
30		token.DocumentHeader(pos),
31		token.DocumentEnd(pos),
32		token.New("1", "1", pos),
33		token.New("3.14", "3.14", pos),
34		token.New("-0b101010", "-0b101010", pos),
35		token.New("0xA", "0xA", pos),
36		token.New("685.230_15e+03", "685.230_15e+03", pos),
37		token.New("02472256", "02472256", pos),
38		token.New("0o2472256", "0o2472256", pos),
39		token.New("", "", pos),
40		token.New("_1", "_1", pos),
41		token.New("1.1.1.1", "1.1.1.1", pos),
42		token.New("+", "+", pos),
43		token.New("-", "-", pos),
44		token.New("_", "_", pos),
45		token.New("~", "~", pos),
46		token.New("true", "true", pos),
47		token.New("false", "false", pos),
48		token.New(".nan", ".nan", pos),
49		token.New(".inf", ".inf", pos),
50		token.New("-.inf", "-.inf", pos),
51		token.New("null", "null", pos),
52		token.Tag("!!null", "!!null", pos),
53		token.Tag("!!map", "!!map", pos),
54		token.Tag("!!str", "!!str", pos),
55		token.Tag("!!seq", "!!seq", pos),
56		token.Tag("!!binary", "!!binary", pos),
57		token.Tag("!!omap", "!!omap", pos),
58		token.Tag("!!set", "!!set", pos),
59		token.Tag("!!int", "!!int", pos),
60		token.Tag("!!float", "!!float", pos),
61		token.Tag("!hoge", "!hoge", pos),
62	}
63	tokens.Dump()
64	tokens.Add(token.New("hoge", "hoge", pos))
65	if tokens[len(tokens)-1].PreviousType() != token.TagType {
66		t.Fatal("invalid previous token type")
67	}
68	if tokens[0].PreviousType() != token.UnknownType {
69		t.Fatal("invalid previous token type")
70	}
71	if tokens[len(tokens)-2].NextType() != token.StringType {
72		t.Fatal("invalid next token type")
73	}
74	if tokens[len(tokens)-1].NextType() != token.UnknownType {
75		t.Fatal("invalid next token type")
76	}
77}
78
79func TestIsNeedQuoted(t *testing.T) {
80	if !token.IsNeedQuoted("") {
81		t.Fatal("failed to quoted judge for empty string")
82	}
83	if !token.IsNeedQuoted("true") {
84		t.Fatal("failed to quoted judge for boolean")
85	}
86	if !token.IsNeedQuoted("1.234") {
87		t.Fatal("failed to quoted judge for number")
88	}
89	if !token.IsNeedQuoted("1:1") {
90		t.Fatal("failed to quoted judge for time")
91	}
92	if !token.IsNeedQuoted("hoge # comment") {
93		t.Fatal("failed to quoted judge for comment")
94	}
95	if !token.IsNeedQuoted("\\0") {
96		t.Fatal("failed to quoted judge for escaped token")
97	}
98	if token.IsNeedQuoted("Hello World") {
99		t.Fatal("failed to unquoted judge")
100	}
101}
102