// 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"
	"testing"
)


func parse(t *testing.T, form string, fmap FormatterMap) Format {
	f, err := Parse("", []byte(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([]byte("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
