// 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";
	"datafmt";
	"io";
	"os";
	"testing";
)


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