AST: из Base скопирован/поправлен генератор функций:
с прямой последовательностью и добавлением шагов в тестовые файлы
Этот коммит содержится в:
родитель
59344caf33
коммит
ccc4a42649
1 изменённых файлов: 83 добавлений и 0 удалений
|
@ -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
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче