// 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 log

// These tests are too simple.

import (
	"bufio";
	"os";
	"regexp";
	"testing";
)

const (
	Rdate = `[0-9][0-9][0-9][0-9]/[0-9][0-9][0-9][0-9]`;
	Rtime = `[0-9][0-9]:[0-9][0-9]:[0-9][0-9]`;
	Rmicroseconds = `\.[0-9][0-9][0-9][0-9][0-9][0-9]`;
	Rline = `[0-9]+:`;
	Rlongfile = `/[A-Za-z0-9_/\-]+\.go:` + Rline;
	Rshortfile = `[A-Za-z0-9_\-]+\.go:` + Rline;
)

type tester struct {
	flag	int;
	prefix	string;
	pattern	string;	// regexp that log output must match; we add ^ and expected_text$ always
}

var tests = []tester {
	// individual pieces:
	tester{ 0,	"", "" },
	tester{ 0, "XXX", "XXX" },
	tester{ Lok|Ldate, "", Rdate+" " },
	tester{ Lok|Ltime, "", Rtime+" " },
	tester{ Lok|Ltime|Lmicroseconds, "", Rtime+Rmicroseconds+" " },
	tester{ Lok|Lmicroseconds, "", Rtime+Rmicroseconds+" " },	// microsec implies time
	tester{ Lok|Llongfile, "", Rlongfile+" " },
	tester{ Lok|Lshortfile, "", Rshortfile+" " },
	tester{ Lok|Llongfile|Lshortfile, "", Rshortfile+" " },	// shortfile overrides longfile
	// everything at once:
	tester{ Lok|Ldate|Ltime|Lmicroseconds|Llongfile, "XXX", "XXX"+Rdate+" "+Rtime+Rmicroseconds+" "+Rlongfile+" " },
	tester{ Lok|Ldate|Ltime|Lmicroseconds|Lshortfile, "XXX", "XXX"+Rdate+" "+Rtime+Rmicroseconds+" "+Rshortfile+" " },
}

// Test using Log("hello", 23, "world") or using Logf("hello %d world", 23)
func testLog(t *testing.T, flag int, prefix string, pattern string, useLogf bool) {
	r, w, err1 := os.Pipe();
	if err1 != nil {
		t.Fatal("pipe", err1);
	}
	defer r.Close();
	defer w.Close();
	buf := bufio.NewReader(r);
	l := New(w, nil, prefix, flag);
	if useLogf {
		l.Logf("hello %d world", 23);
	} else {
		l.Log("hello", 23, "world");
	}
	line, err3 := buf.ReadString('\n');
	if err3 != nil {
		t.Fatal("log error", err3);
	}
	line = line[0:len(line)-1];
	pattern = "^"+pattern+"hello 23 world$";
	matched, err4 := regexp.MatchString(pattern, line);
	if err4 != nil{
		t.Fatal("pattern did not compile:", err4);
	}
	if !matched {
		t.Errorf("log output should match %q is %q", pattern, line);
	}
}

func TestAllLog(t *testing.T) {
	for _, testcase := range tests {
		testLog(t, testcase.flag, testcase.prefix, testcase.pattern, false);
		testLog(t, testcase.flag, testcase.prefix, testcase.pattern, true);
	}
}
