learning_go/pkg/mod/gopkg.in/dixonwille/wlog.v2@v2.0.0/wlog_test.go
a.pivkin 59666d0dd6 wer
2025-09-06 13:02:52 +03:00

179 lines
4.8 KiB
Go

package wlog
import (
"bytes"
"io"
"os"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
var newCases = []struct {
in io.Reader
out io.Writer
err io.Writer
}{
{strings.NewReader("Hello Worlds\r\n"), os.Stdout, nil},
{nil, nil, nil},
{os.Stdin, nil, os.Stderr},
}
var addColorCases = []struct {
logColor Color
outputColor Color
successColor Color
infoColor Color
errorColor Color
warnColor Color
runningColor Color
askColor Color
responseColor Color
}{
{None, Blue, Green, Red, Yellow, Cyan, Magenta, White, Black},
{None, None, None, None, None, None, None, None, None},
{BrightBlue, BrightGreen, BrightRed, BrightYellow, BrightCyan, BrightMagenta, BrightWhite, BrightBlack, None},
}
var addPrefixCases = []struct {
ask string
err string
inf string
log string
out string
suc string
run string
war string
}{
{"", "", "", "", "", "", "", ""},
{" ", " ", " ", " ", " ", " ", " ", " "},
{" ", " ", " ", " ", " ", " ", " ", " "},
{Cross, Check, "!", "~", "@", "#", "+", "="},
{"%", "^", "&", "*", "@", ":", ",", "?"},
}
var trimCases = []struct {
input string
trim string
}{
{" 123 \r\n", " "},
{" 123 \r\n", " "},
{"!!123!!\r\n", "!"},
{" !!123!! \r\n", "! "},
}
func Example() {
var ui UI
reader := strings.NewReader("User Input\r\n") //Simulate user typing "User Input" then pressing [enter] when reading from os.Stdin
ui = New(reader, os.Stdout, os.Stdout)
ui = AddPrefix("?", Cross, " ", "", "", "~", Check, "!", ui)
ui = AddConcurrent(ui)
ui.Ask("Ask question", " ")
ui.Error("Error message")
ui.Info("Info message")
ui.Output("Output message")
ui.Running("Running message")
ui.Success("Success message")
ui.Warn("Warning message")
// Output:
// ? Ask question
// ✗ Error message
// Info message
// Output message
// ~ Running message
// ✓ Success message
// ! Warning message
}
func TestNew(t *testing.T) {
assert := assert.New(t)
for _, c := range newCases {
basic := New(c.in, c.out, c.err)
assert.Equal(c.in, basic.Reader)
assert.Equal(c.out, basic.Writer)
assert.Equal(c.err, basic.ErrorWriter)
}
}
func TestAskTrim(t *testing.T) {
assert := assert.New(t)
for _, c := range trimCases {
writer, errWriter, in := initTest(c.input)
basic := New(in, writer, errWriter)
res, err := basic.Ask("Awesome string", c.trim)
if err != nil {
assert.Fail(err.Error())
}
out, err := writer.ReadString((byte)('\n'))
if err != nil {
assert.Fail(err.Error())
}
_, err = errWriter.ReadString((byte)('\n'))
expectedString := "Awesome string\n"
assert.Equal("EOF", err.Error())
assert.Equal(expectedString, out)
expectedAns := strings.Replace(c.input, "\r", "", -1)
expectedAns = strings.Replace(expectedAns, "\n", "", -1)
expectedAns = strings.Trim(expectedAns, c.trim)
assert.Equal(expectedAns, res)
}
}
func TestAddColor(t *testing.T) {
assert := assert.New(t)
basic := New(os.Stdin, os.Stdout, os.Stderr)
for _, c := range addColorCases {
color := AddColor(c.askColor, c.errorColor, c.infoColor, c.logColor, c.outputColor, c.responseColor, c.runningColor, c.successColor, c.warnColor, basic)
assert.Equal(None, color.AskBGColor)
assert.Equal(None, color.ErrorBGColor)
assert.Equal(None, color.InfoBGColor)
assert.Equal(None, color.LogBGColor)
assert.Equal(None, color.OutputBGColor)
assert.Equal(None, color.ResponseBGColor)
assert.Equal(None, color.RunningBGColor)
assert.Equal(None, color.SuccessBGColor)
assert.Equal(None, color.WarnBGColor)
assert.Equal(c.askColor, color.AskFGColor)
assert.Equal(c.errorColor, color.ErrorFGColor)
assert.Equal(c.infoColor, color.InfoFGColor)
assert.Equal(c.logColor, color.LogFGColor)
assert.Equal(c.outputColor, color.OutputFGColor)
assert.Equal(c.responseColor, color.ResponseFGColor)
assert.Equal(c.runningColor, color.RunningFGColor)
assert.Equal(c.successColor, color.SuccessFGColor)
assert.Equal(c.warnColor, color.WarnFGColor)
assert.Equal(basic, color.UI)
}
}
func TestAddPrefix(t *testing.T) {
assert := assert.New(t)
basic := New(os.Stdin, os.Stdout, os.Stderr)
for _, c := range addPrefixCases {
prefix := AddPrefix(c.ask, c.err, c.inf, c.log, c.out, c.run, c.suc, c.war, basic)
assert.Equal(c.ask, prefix.AskPrefix)
assert.Equal(c.err, prefix.ErrorPrefix)
assert.Equal(c.inf, prefix.InfoPrefix)
assert.Equal(c.log, prefix.LogPrefix)
assert.Equal(c.out, prefix.OutputPrefix)
assert.Equal(c.run, prefix.RunningPrefix)
assert.Equal(c.suc, prefix.SuccessPrefix)
assert.Equal(c.war, prefix.WarnPrefix)
assert.Equal(basic, prefix.UI)
}
}
func TestAddConcurrent(t *testing.T) {
basic := New(os.Stdin, os.Stdout, os.Stderr)
con := AddConcurrent(basic)
assert.Equal(t, basic, con.UI)
}
func initTest(input string) (*bytes.Buffer, *bytes.Buffer, io.Reader) {
var b []byte
var e []byte
return bytes.NewBuffer(b), bytes.NewBuffer(e), strings.NewReader(input)
}