godog/_examples/custom-formatter/emoji.go
Softonik f6ed69097f
Некоторые проверки провалились
test / test (1.16.x) (push) Has been cancelled
test / test (1.17.x) (push) Has been cancelled
Модуль переименован для публикации
2025-04-03 05:36:58 +03:00

122 строки
3 КиБ
Go
Исходный Авторство История

Этот файл содержит неоднозначные символы Юникода

Этот файл содержит символы Юникода, которые легко спутать с похожими. Если так и должно быть, можете спокойно игнорировать это предупреждение. Отобразить символы можно кнопкой Экранирования.

package main
import (
"fmt"
"io"
"math"
"git.golang1.ru/softonik/godog"
)
const (
passedEmoji = "✅"
skippedEmoji = ""
failedEmoji = "❌"
undefinedEmoji = "❓"
pendingEmoji = "🚧"
)
func init() {
godog.Format("emoji", "Progress formatter with emojis", emojiFormatterFunc)
}
func emojiFormatterFunc(suite string, out io.Writer) godog.Formatter {
return newEmojiFmt(suite, out)
}
func newEmojiFmt(suite string, out io.Writer) *emojiFmt {
return &emojiFmt{
ProgressFmt: godog.NewProgressFmt(suite, out),
out: out,
}
}
type emojiFmt struct {
*godog.ProgressFmt
out io.Writer
}
func (f *emojiFmt) TestRunStarted() {}
func (f *emojiFmt) Passed(scenario *godog.Scenario, step *godog.Step, match *godog.StepDefinition) {
f.ProgressFmt.Base.Passed(scenario, step, match)
f.ProgressFmt.Base.Lock.Lock()
defer f.ProgressFmt.Base.Lock.Unlock()
f.step(step.Id)
}
func (f *emojiFmt) Skipped(scenario *godog.Scenario, step *godog.Step, match *godog.StepDefinition) {
f.ProgressFmt.Base.Skipped(scenario, step, match)
f.ProgressFmt.Base.Lock.Lock()
defer f.ProgressFmt.Base.Lock.Unlock()
f.step(step.Id)
}
func (f *emojiFmt) Undefined(scenario *godog.Scenario, step *godog.Step, match *godog.StepDefinition) {
f.ProgressFmt.Base.Undefined(scenario, step, match)
f.ProgressFmt.Base.Lock.Lock()
defer f.ProgressFmt.Base.Lock.Unlock()
f.step(step.Id)
}
func (f *emojiFmt) Failed(scenario *godog.Scenario, step *godog.Step, match *godog.StepDefinition, err error) {
f.ProgressFmt.Base.Failed(scenario, step, match, err)
f.ProgressFmt.Base.Lock.Lock()
defer f.ProgressFmt.Base.Lock.Unlock()
f.step(step.Id)
}
func (f *emojiFmt) Pending(scenario *godog.Scenario, step *godog.Step, match *godog.StepDefinition) {
f.ProgressFmt.Base.Pending(scenario, step, match)
f.ProgressFmt.Base.Lock.Lock()
defer f.ProgressFmt.Base.Lock.Unlock()
f.step(step.Id)
}
func (f *emojiFmt) Summary() {
f.printSummaryLegend()
f.ProgressFmt.Summary()
}
func (f *emojiFmt) printSummaryLegend() {
fmt.Fprint(f.out, "\n\nOutput Legend:\n")
fmt.Fprint(f.out, fmt.Sprintf("\t%s Passed\n", passedEmoji))
fmt.Fprint(f.out, fmt.Sprintf("\t%s Failed\n", failedEmoji))
fmt.Fprint(f.out, fmt.Sprintf("\t%s Skipped\n", skippedEmoji))
fmt.Fprint(f.out, fmt.Sprintf("\t%s Undefined\n", undefinedEmoji))
fmt.Fprint(f.out, fmt.Sprintf("\t%s Pending\n", pendingEmoji))
}
func (f *emojiFmt) step(pickleStepID string) {
pickleStepResult := f.Storage.MustGetPickleStepResult(pickleStepID)
switch pickleStepResult.Status {
case godog.StepPassed:
fmt.Fprint(f.out, fmt.Sprintf(" %s", passedEmoji))
case godog.StepSkipped:
fmt.Fprint(f.out, fmt.Sprintf(" %s", skippedEmoji))
case godog.StepFailed:
fmt.Fprint(f.out, fmt.Sprintf(" %s", failedEmoji))
case godog.StepUndefined:
fmt.Fprint(f.out, fmt.Sprintf(" %s", undefinedEmoji))
case godog.StepPending:
fmt.Fprint(f.out, fmt.Sprintf(" %s", pendingEmoji))
}
*f.Steps++
if math.Mod(float64(*f.Steps), float64(f.StepsPerRow)) == 0 {
fmt.Fprintf(f.out, " %d\n", *f.Steps)
}
}