// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package datafmt

import (
	"fmt"
	"strings"
	"testing"
)


func parse(t *testing.T, form string, fmap FormatterMap) Format {
	f, err := Parse("", strings.Bytes(form), fmap)
	if err != nil {
		t.Errorf("Parse(%s): %v", form, err)
		return nil
	}
	return f
}


func verify(t *testing.T, f Format, expected string, args ...) {
	if f == nil {
		return // allow other tests to run
	}
	result := f.Sprint(args)
	if result != expected {
		t.Errorf(
			"result  : `%s`\nexpected: `%s`\n\n",
			result, expected)
	}
}


func formatter(s *State, value interface{}, rule_name string) bool {
	switch rule_name {
	case "/":
		fmt.Fprintf(s, "%d %d %d", s.Pos().Line, s.LinePos().Column, s.Pos().Column)
		return true
	case "blank":
		s.Write([]byte{' '})
		return true
	case "int":
		if value.(int)&1 == 0 {
			fmt.Fprint(s, "even ")
		} else {
			fmt.Fprint(s, "odd ")
		}
		return true
	case "nil":
		return false
	case "testing.T":
		s.Write(strings.Bytes("testing.T"))
		return true
	}
	panic("unreachable")
	return false
}


func TestCustomFormatters(t *testing.T) {
	fmap0 := FormatterMap{"/": formatter}
	fmap1 := FormatterMap{"int": formatter, "blank": formatter, "nil": formatter}
	fmap2 := FormatterMap{"testing.T": formatter}

	f := parse(t, `int=`, fmap0)
	verify(t, f, ``, 1, 2, 3)

	f = parse(t, `int="#"`, nil)
	verify(t, f, `###`, 1, 2, 3)

	f = parse(t, `int="#";string="%s"`, fmap0)
	verify(t, f, "#1 0 1#1 0 7#1 0 13\n2 0 0foo2 0 8\n", 1, 2, 3, "\n", "foo", "\n")

	f = parse(t, ``, fmap1)
	verify(t, f, `even odd even odd `, 0, 1, 2, 3)

	f = parse(t, `/ =@:blank; float="#"`, fmap1)
	verify(t, f, `# # #`, 0.0, 1.0, 2.0)

	f = parse(t, `float=@:nil`, fmap1)
	verify(t, f, ``, 0.0, 1.0, 2.0)

	f = parse(t, `testing "testing"; ptr=*`, fmap2)
	verify(t, f, `testing.T`, t)

	// TODO needs more tests
}


// ----------------------------------------------------------------------------
// Formatting of basic and simple composite types

func check(t *testing.T, form, expected string, args ...) {
	f := parse(t, form, nil)
	if f == nil {
		return // allow other tests to run
	}
	result := f.Sprint(args)
	if result != expected {
		t.Errorf(
			"format  : %s\nresult  : `%s`\nexpected: `%s`\n\n",
			form, result, expected)
	}
}


func TestBasicTypes(t *testing.T) {
	check(t, ``, ``)
	check(t, `bool=":%v"`, `:true:false`, true, false)
	check(t, `int="%b %d %o 0x%x"`, `101010 42 52 0x2a`, 42)

	check(t, `int="%"`, `%`, 42)
	check(t, `int="%%"`, `%`, 42)
	check(t, `int="**%%**"`, `**%**`, 42)
	check(t, `int="%%%%%%"`, `%%%`, 42)
	check(t, `int="%%%d%%"`, `%42%`, 42)

	const i = -42
	const is = `-42`
	check(t, `int  ="%d"`, is, i)
	check(t, `int8 ="%d"`, is, int8(i))
	check(t, `int16="%d"`, is, int16(i))
	check(t, `int32="%d"`, is, int32(i))
	check(t, `int64="%d"`, is, int64(i))

	const u = 42
	const us = `42`
	check(t, `uint  ="%d"`, us, uint(u))
	check(t, `uint8 ="%d"`, us, uint8(u))
	check(t, `uint16="%d"`, us, uint16(u))
	check(t, `uint32="%d"`, us, uint32(u))
	check(t, `uint64="%d"`, us, uint64(u))

	const f = 3.141592
	const fs = `3.141592`
	check(t, `float  ="%g"`, fs, f)
	check(t, `float32="%g"`, fs, float32(f))
	check(t, `float64="%g"`, fs, float64(f))
}


func TestArrayTypes(t *testing.T) {
	var a0 [10]int
	check(t, `array="array";`, `array`, a0)

	a1 := [...]int{1, 2, 3}
	check(t, `array="array";`, `array`, a1)
	check(t, `array={*}; int="%d";`, `123`, a1)
	check(t, `array={* / ", "}; int="%d";`, `1, 2, 3`, a1)
	check(t, `array={* / *}; int="%d";`, `12233`, a1)

	a2 := []interface{}{42, "foo", 3.14}
	check(t, `array={* / ", "}; interface=*; string="bar"; default="%v";`, `42, bar, 3.14`, a2)
}


func TestChanTypes(t *testing.T) {
	var c0 chan int
	check(t, `chan="chan"`, `chan`, c0)

	c1 := make(chan int)
	go func() { c1 <- 42 }()
	check(t, `chan="chan"`, `chan`, c1)
	// check(t, `chan=*`, `42`, c1);  // reflection support for chans incomplete
}


func TestFuncTypes(t *testing.T) {
	var f0 func() int
	check(t, `func="func"`, `func`, f0)

	f1 := func() int { return 42 }
	check(t, `func="func"`, `func`, f1)
	// check(t, `func=*`, `42`, f1);  // reflection support for funcs incomplete
}


func TestInterfaceTypes(t *testing.T) {
	var i0 interface{}
	check(t, `interface="interface"`, `interface`, i0)

	i0 = "foo"
	check(t, `interface="interface"`, `interface`, i0)
	check(t, `interface=*; string="%s"`, `foo`, i0)
}


func TestMapTypes(t *testing.T) {
	var m0 map[string]int
	check(t, `map="map"`, `map`, m0)

	m1 := map[string]int{}
	check(t, `map="map"`, `map`, m1)
	// check(t, `map=*`, ``, m1);  // reflection support for maps incomplete
}


func TestPointerTypes(t *testing.T) {
	var p0 *int
	check(t, `ptr="ptr"`, `ptr`, p0)
	check(t, `ptr=*`, ``, p0)
	check(t, `ptr=*|"nil"`, `nil`, p0)

	x := 99991
	p1 := &x
	check(t, `ptr="ptr"`, `ptr`, p1)
	check(t, `ptr=*; int="%d"`, `99991`, p1)
}


func TestDefaultRule(t *testing.T) {
	check(t, `default="%v"`, `42foo3.14`, 42, "foo", 3.14)
	check(t, `default="%v"; int="%x"`, `abcdef`, 10, 11, 12, 13, 14, 15)
	check(t, `default="%v"; int="%x"`, `ab**ef`, 10, 11, "**", 14, 15)
	check(t, `default="%x"; int=@:default`, `abcdef`, 10, 11, 12, 13, 14, 15)
}


func TestGlobalSeparatorRule(t *testing.T) {
	check(t, `int="%d"; / ="-"`, `1-2-3-4`, 1, 2, 3, 4)
	check(t, `int="%x%x"; / ="*"`, `aa*aa`, 10, 10)
}


// ----------------------------------------------------------------------------
// Formatting of a struct

type T1 struct {
	a int
}

const F1 = `datafmt "datafmt";` +
	`int = "%d";` +
	`datafmt.T1 = "<" a ">";`

func TestStruct1(t *testing.T) { check(t, F1, "<42>", T1{42}) }


// ----------------------------------------------------------------------------
// Formatting of a struct with an optional field (ptr)

type T2 struct {
	s string
	p *T1
}

const F2a = F1 +
	`string = "%s";` +
	`ptr = *;` +
	`datafmt.T2 = s ["-" p "-"];`

const F2b = F1 +
	`string = "%s";` +
	`ptr = *;` +
	`datafmt.T2 = s ("-" p "-" | "empty");`

func TestStruct2(t *testing.T) {
	check(t, F2a, "foo", T2{"foo", nil})
	check(t, F2a, "bar-<17>-", T2{"bar", &T1{17}})
	check(t, F2b, "fooempty", T2{"foo", nil})
}


// ----------------------------------------------------------------------------
// Formatting of a struct with a repetitive field (slice)

type T3 struct {
	s string
	a []int
}

const F3a = `datafmt "datafmt";` +
	`default = "%v";` +
	`array = *;` +
	`datafmt.T3 = s  {" " a a / ","};`

const F3b = `datafmt "datafmt";` +
	`int = "%d";` +
	`string = "%s";` +
	`array = *;` +
	`nil = ;` +
	`empty = *:nil;` +
	`datafmt.T3 = s [a:empty ": " {a / "-"}]`

func TestStruct3(t *testing.T) {
	check(t, F3a, "foo", T3{"foo", nil})
	check(t, F3a, "foo 00, 11, 22", T3{"foo", []int{0, 1, 2}})
	check(t, F3b, "bar", T3{"bar", nil})
	check(t, F3b, "bal: 2-3-5", T3{"bal", []int{2, 3, 5}})
}


// ----------------------------------------------------------------------------
// Formatting of a struct with alternative field

type T4 struct {
	x *int
	a []int
}

const F4a = `datafmt "datafmt";` +
	`int = "%d";` +
	`ptr = *;` +
	`array = *;` +
	`nil = ;` +
	`empty = *:nil;` +
	`datafmt.T4 = "<" (x:empty x | "-") ">" `

const F4b = `datafmt "datafmt";` +
	`int = "%d";` +
	`ptr = *;` +
	`array = *;` +
	`nil = ;` +
	`empty = *:nil;` +
	`datafmt.T4 = "<" (a:empty {a / ", "} | "-") ">" `

func TestStruct4(t *testing.T) {
	x := 7
	check(t, F4a, "<->", T4{nil, nil})
	check(t, F4a, "<7>", T4{&x, nil})
	check(t, F4b, "<->", T4{nil, nil})
	check(t, F4b, "<2, 3, 7>", T4{nil, []int{2, 3, 7}})
}


// ----------------------------------------------------------------------------
// Formatting a struct (documentation example)

type Point struct {
	name string
	x, y int
}

const FPoint = `datafmt "datafmt";` +
	`int = "%d";` +
	`hexInt = "0x%x";` +
	`string = "---%s---";` +
	`datafmt.Point = name "{" x ", " y:hexInt "}";`

func TestStructPoint(t *testing.T) {
	p := Point{"foo", 3, 15}
	check(t, FPoint, "---foo---{3, 0xf}", p)
}


// ----------------------------------------------------------------------------
// Formatting a slice (documentation example)

const FSlice = `int = "%b";` +
	`array = { * / ", " }`

func TestSlice(t *testing.T) { check(t, FSlice, "10, 11, 101, 111", []int{2, 3, 5, 7}) }


// TODO add more tests
