package ast_test

import (
	"testing"
	"time"

	"git.makaay.nl/mauricem/go-toml/ast"
)

func Test_StringFormatting(t *testing.T) {
	testAST(t, func() (error, *ast.Document) {
		tableData := make(ast.Table)
		tableData["x"] = ast.NewValue(ast.TypeBool, true)
		tableData["y"] = ast.NewValue(ast.TypeInteger, 42)
		dateTime, _ := time.Parse(time.RFC3339Nano, "2003-11-01T01:02:03.999999999+10:00")
		doc := ast.NewDocument()
		doc.SetKeyValuePair(ast.NewKey("a"), ast.NewValue(ast.TypeInteger, 1))
		doc.SetKeyValuePair(ast.NewKey("b"), ast.NewValue(ast.TypeFloat, 2.3))
		doc.SetKeyValuePair(ast.NewKey("c"), ast.NewValue(ast.TypeBool, true))
		doc.SetKeyValuePair(ast.NewKey("d"), ast.NewValue(ast.TypeString, "foo"))
		arr := ast.NewArray()
		arr.Append(ast.NewValue(ast.TypeInteger, 1))
		arr.Append(ast.NewValue(ast.TypeInteger, 2))
		doc.SetKeyValuePair(ast.NewKey("e"), ast.NewValue(ast.TypeArray, arr))
		doc.SetKeyValuePair(ast.NewKey("f"), ast.NewValue(ast.TypeTable, tableData))
		doc.SetKeyValuePair(ast.NewKey("g"), ast.NewValue(ast.TypeOffsetDateTime, dateTime))
		doc.SetKeyValuePair(ast.NewKey("h"), ast.NewValue(ast.TypeLocalDateTime, dateTime))
		doc.SetKeyValuePair(ast.NewKey("i"), ast.NewValue(ast.TypeLocalDate, dateTime))
		doc.SetKeyValuePair(ast.NewKey("j"), ast.NewValue(ast.TypeLocalTime, dateTime))
		return nil, doc
	}, "",
		`{"a": 1, `+
			`"b": 2.3, `+
			`"c": true, `+
			`"d": "foo", `+
			`"e": [1, 2], `+
			`"f": {"x": true, "y": 42}, `+
			`"g": 2003-11-01T01:02:03.999999999+10:00, `+
			`"h": 2003-11-01 01:02:03.999999999, `+
			`"i": 2003-11-01, `+
			`"j": 01:02:03.999999999}`)
}
