179 lines
4.8 KiB
Go
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)
|
|
}
|