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  }