// 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";
	"os";
	"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
