123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package io_writer_to_logger
- import (
- "fmt"
- "io"
- "strings"
- "testing"
- "time"
- )
- func TestLogger1(t *testing.T) {
- tc := []string{
- "hello",
- "gensoukyo",
- "satori",
- "koishi",
- "cirno",
- "reimu",
- }
- lines := make([]string, 0)
- lw := NewWriterLogWrapper(func(msg string) {
- t.Log("[OUT] new line: ", msg)
- lines = append(lines, msg)
- })
- waitCh := make(chan int)
- go func() {
- lw.Run()
- waitCh <- 0
- }()
- t.Log("[LOG] writing...")
- for _, v := range tc {
- writeLineTest(t, lw, v)
- }
- t.Log("[LOG] closing...")
- _ = lw.Close()
- t.Log("[LOG] verifying...")
- verifyStringArray(t, tc, lines)
- t.Log("[LOG] wait for routine exit...")
- <-waitCh
- t.Log("[LOG] done.")
- }
- func writeLineTest(t *testing.T, w io.Writer, a ...interface{}) {
- t.Log("[LOG] write line")
- _, err := fmt.Fprintln(w, a...)
- if err != nil {
- t.Fatalf("[ERR] failed to write line: %v", err)
- }
- }
- func writeTest(t *testing.T, w io.Writer, a ...interface{}) {
- t.Log("[LOG] write")
- _, err := fmt.Fprint(w, a...)
- if err != nil {
- t.Fatalf("[ERR] failed to write line: %v", err)
- }
- }
- func verifyStringArray(t *testing.T, ref, data []string) {
- if len(ref) != len(data) {
- t.Fatalf("[ERR] len(ref) != len(data), ref: %d, data: %d", len(ref), len(data))
- }
- for i, v := range ref {
- if v != data[i] {
- t.Fatalf("[ERR] ref[%d] != data[%d], ref: %s, data: %s", i, i, ref, data)
- }
- }
- }
- func TestLogger2(t *testing.T) {
- tc := [][]string{
- {"hello"},
- {"gensou", "kyo"},
- {"sat", "ori"},
- {"koishi"},
- {"cirn", "o"},
- {"r", "eimu"},
- }
- lines := make([]string, 0)
- lw := NewWriterLogWrapper(func(msg string) {
- t.Log("[OUT] new line: ", msg)
- lines = append(lines, msg)
- })
- waitCh := make(chan int)
- go func() {
- lw.Run()
- waitCh <- 0
- }()
- t.Log("[LOG] writing...")
- for _, v1 := range tc {
- l := len(v1)
- for i, v2 := range v1 {
- if i == l-1 {
- writeLineTest(t, lw, v2)
- } else {
- writeTest(t, lw, v2)
- }
- }
- }
- t.Log("[LOG] closing...")
- _ = lw.Close()
- t.Log("[LOG] verifying...")
- verifyString2DArray(t, tc, lines)
- t.Log("[LOG] wait for routine exit...")
- <-waitCh
- t.Log("[LOG] done.")
- }
- func verifyString2DArray(t *testing.T, ref [][]string, data []string) {
- if len(ref) != len(data) {
- t.Fatalf("[ERR] len(ref) != len(data), ref: %d, data: %d", len(ref), len(data))
- }
- for i, v := range ref {
- na := strings.Join(v, "")
- if na != data[i] {
- t.Fatalf("[ERR] ref[%d] != data[%d], ref: %s, data: %s", i, i, ref, data)
- }
- }
- }
- func TestLogger3(t *testing.T) {
- verify := []string{
- "hello",
- "test",
- "foo",
- "bar",
- }
- lines := make([]string, 0)
- lw := NewWriterLogWrapper(func(msg string) {
- t.Log("[OUT] new line: ", msg)
- lines = append(lines, msg)
- })
- waitCh := make(chan int)
- go func() {
- lw.Run()
- waitCh <- 0
- }()
- t.Log("[LOG] writing...")
- writeTest(t, lw, "hel")
- writeLineTest(t, lw, "lo")
- writeLineTest(t, lw, "test")
- writeLineTest(t, lw, "foo")
- writeTest(t, lw, "bar")
- time.Sleep(time.Second)
- t.Log("[LOG] closing...")
- _ = lw.Close()
- time.Sleep(time.Second)
- t.Log("[LOG] verifying...")
- verifyStringArray(t, verify, lines)
- t.Log("[LOG] wait for routine exit...")
- <-waitCh
- t.Log("[LOG] done.")
- }
|