github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/yaml/token/token_test.go (about) 1 package token_test 2 3 import ( 4 "testing" 5 6 "github.com/bingoohuang/gg/pkg/yaml/token" 7 ) 8 9 func 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 79 func TestIsNeedQuoted(t *testing.T) { 80 needQuotedTests := []string{ 81 "", 82 "true", 83 "1.234", 84 "1:1", 85 "hoge # comment", 86 "\\0", 87 "#a b", 88 "*a b", 89 "&a b", 90 "{a b", 91 "}a b", 92 "[a b", 93 "]a b", 94 ",a b", 95 "!a b", 96 "|a b", 97 ">a b", 98 ">a b", 99 "%a b", 100 `'a b`, 101 `"a b`, 102 "a:", 103 "a: b", 104 } 105 for i, test := range needQuotedTests { 106 if !token.IsNeedQuoted(test) { 107 t.Fatalf("%d: failed to quoted judge for %s", i, test) 108 } 109 } 110 notNeedQuotedTests := []string{ 111 "Hello World", 112 } 113 for i, test := range notNeedQuotedTests { 114 if token.IsNeedQuoted(test) { 115 t.Fatalf("%d: failed to quoted judge for %s", i, test) 116 } 117 } 118 }