AST: из Base скопирован/поправлен генератор функций:

с прямой последовательностью и добавлением шагов в тестовые файлы
Этот коммит содержится в:
Softonik 2025-06-06 16:10:49 +03:00
родитель 59344caf33
коммит ccc4a42649

Просмотреть файл

@ -1,12 +1,15 @@
package formatters package formatters
import ( import (
"bytes"
"fmt" "fmt"
"io" "io"
"os" "os"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
"text/template"
"unicode"
"unicode/utf8" "unicode/utf8"
messages "github.com/cucumber/messages/go/v21" messages "github.com/cucumber/messages/go/v21"
@ -15,6 +18,7 @@ import (
"git.golang1.ru/softonik/godog/formatters" "git.golang1.ru/softonik/godog/formatters"
"git.golang1.ru/softonik/godog/internal/models" "git.golang1.ru/softonik/godog/internal/models"
"git.golang1.ru/softonik/godog/internal/utils" "git.golang1.ru/softonik/godog/internal/utils"
"git.golang1.ru/softonik/godog/pkg/formatters/ast"
) )
func ASTRegister() { func ASTRegister() {
@ -348,6 +352,85 @@ func (f *AST) SummaryBottom() {
} }
} }
func (f *AST) Snippets() string {
undefinedStepResults := f.Storage.MustGetPickleStepResultsByStatus(undefined)
if len(undefinedStepResults) == 0 {
return ""
}
var index int
var snips []undefinedSnippet
// build snippets
for _, u := range undefinedStepResults {
pickleStep := f.Storage.MustGetPickleStep(u.PickleStepID)
steps := []string{pickleStep.Text}
arg := pickleStep.Argument
if u.Def != nil {
steps = u.Def.Undefined
arg = nil
}
for _, step := range steps {
expr := snippetExprCleanup.ReplaceAllString(step, "\\$1")
expr = snippetNumbers.ReplaceAllString(expr, "(\\d+)")
expr = snippetExprQuoted.ReplaceAllString(expr, "$1\"([^\"]*)\"$2")
expr = "^" + strings.TrimSpace(expr) + "$"
name := snippetNumbers.ReplaceAllString(step, " ")
name = snippetExprQuoted.ReplaceAllString(name, " ")
name = strings.TrimSpace(snippetMethodName.ReplaceAllString(name, ""))
var words []string
for i, w := range strings.Split(name, " ") {
switch {
case i != 0:
w = strings.Title(w)
case len(w) > 0:
r := []rune(w)
w = string(unicode.ToLower(r[0])) + string(r[1:])
}
words = append(words, w)
}
name = strings.Join(words, "")
if len(name) == 0 {
index++
name = fmt.Sprintf("StepDefinitioninition%d", index)
}
var found bool
for _, snip := range snips {
if snip.Expr == expr {
found = true
break
}
}
if !found {
s := undefinedSnippet{Method: name, Expr: expr, argument: arg}
snips = append(snips, s)
ast.ДобавитьШаг("`"+expr+"`", name, s.Args())
}
}
}
var buf bytes.Buffer
if err := AST_undefinedSnippetsTpl.Execute(&buf, snips); err != nil {
panic(err)
}
// there may be trailing spaces
return strings.Replace(buf.String(), " \n", "\n", -1)
}
var AST_undefinedSnippetsTpl = template.Must(template.New("snippets").Funcs(snippetHelperFuncs).Parse(`
func InitializeScenario(ctx *godog.ScenarioContext) {}
// ---
{{ range . }}func {{ .Method }}({{ .Args }}) {
}
{{end}}{{ range . }}
ctx.Step({{ backticked .Expr }}, {{ .Method }}){{end}}
`))
func (f *AST) printOutlineExample(pickle *messages.Pickle, step *messages.PickleStep, backgroundSteps int) { func (f *AST) printOutlineExample(pickle *messages.Pickle, step *messages.PickleStep, backgroundSteps int) {
var errorMsg string var errorMsg string
var clr = green var clr = green