mirror of
				https://github.com/goccy/go-yaml.git
				synced 2025-10-31 13:21:07 +00:00 
			
		
		
		
	 61bc6c1078
			
		
	
	
		61bc6c1078
		
			
		
	
	
	
	
		
			
			* Quote the numbers even if they are out of range https://github.com/goccy/go-yaml/issues/586 * Keep the original interface of the ToNumber function
		
			
				
	
	
		
			153 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package token_test
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/goccy/go-yaml/token"
 | |
| )
 | |
| 
 | |
| func TestToken(t *testing.T) {
 | |
| 	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),
 | |
| 		token.Directive("%", pos),
 | |
| 		token.Space(pos),
 | |
| 		token.MergeKey("<<", pos),
 | |
| 		token.DocumentHeader("---", pos),
 | |
| 		token.DocumentEnd("...", pos),
 | |
| 		token.New("1", "1", pos),
 | |
| 		token.New("3.14", "3.14", pos),
 | |
| 		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),
 | |
| 		token.New("~", "~", pos),
 | |
| 		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) {
 | |
| 	needQuotedTests := []string{
 | |
| 		"",
 | |
| 		"true",
 | |
| 		"1.234",
 | |
| 		"0b11111111111111111111111111111111111111111111111111111111111111111",
 | |
| 		"0o7777777777777777777777777777777777777777",
 | |
| 		"999999999999999999999999999999999999999999",
 | |
| 		"0xffffffffffffffffffffffffffffffffffffffff",
 | |
| 		"1:1",
 | |
| 		"2001-12-15T02:59:43.1Z",
 | |
| 		"2001-12-14t21:59:43.10-05:00",
 | |
| 		"2001-12-15 2:59:43.10",
 | |
| 		"2002-12-14",
 | |
| 		"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",
 | |
| 		"y",
 | |
| 		"Y",
 | |
| 		"yes",
 | |
| 		"Yes",
 | |
| 		"YES",
 | |
| 		"n",
 | |
| 		"N",
 | |
| 		"no",
 | |
| 		"No",
 | |
| 		"NO",
 | |
| 		"on",
 | |
| 		"On",
 | |
| 		"ON",
 | |
| 		"off",
 | |
| 		"Off",
 | |
| 		"OFF",
 | |
| 		"@test",
 | |
| 		" a",
 | |
| 		" a ",
 | |
| 		"a ",
 | |
| 		"null",
 | |
| 		"Null",
 | |
| 		"NULL",
 | |
| 		"~",
 | |
| 	}
 | |
| 	for i, test := range needQuotedTests {
 | |
| 		if !token.IsNeedQuoted(test) {
 | |
| 			t.Errorf("%d: failed to quoted judge for %s", i, test)
 | |
| 		}
 | |
| 	}
 | |
| 	notNeedQuotedTests := []string{
 | |
| 		"Hello World",
 | |
| 		// time.Parse cannot handle: "2001-12-14 21:59:43.10 -5" from the examples.
 | |
| 		// https://yaml.org/type/timestamp.html
 | |
| 		"2001-12-14 21:59:43.10 -5",
 | |
| 	}
 | |
| 	for i, test := range notNeedQuotedTests {
 | |
| 		if token.IsNeedQuoted(test) {
 | |
| 			t.Errorf("%d: failed to quoted judge for %s", i, test)
 | |
| 		}
 | |
| 	}
 | |
| }
 |