+ Сценарий: Добавление шага с параметрами строкой

Этот коммит содержится в:
Softonik 2025-06-06 04:28:47 +03:00
родитель bda4071975
коммит 56522e757a
5 изменённых файлов: 164 добавлений и 45 удалений

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

@ -6,6 +6,7 @@ import (
"go/parser"
"go/token"
"os"
"strings"
"errors"
)
@ -40,7 +41,7 @@ func NewASTer() (*ASTer, error) {
return a, nil
}
func (a *ASTer) ДобавитьШаг(шаг, f string, ps Параметры) error {
func (a *ASTer) ДобавитьШаг(шаг, f, ps string) error {
return a.добавитьШаг(шаг, f, ps)
}
@ -58,8 +59,8 @@ func (a *ASTer) сгенеритьИмяФайла() {
a.pkg_test_go_fname = a.pkg + "_test.go"
}
func (a *ASTer) добавитьШаг(шаг, f string, ps Параметры) error {
err := a.добавитьШагвInitФайл(шаг, f, ps)
func (a *ASTer) добавитьШаг(шаг, f, ps string) error {
err := a.добавитьШагвInitФайл(шаг, f)
if err != nil {
return err
}
@ -71,8 +72,8 @@ func (a *ASTer) добавитьШаг(шаг, f string, ps Параметры)
return nil
}
func (a *ASTer) добавитьШагвInitФайл(шаг, f string, ps Параметры) error {
err := a.спарситьInitФайлиДобавитьШаг(шаг, f, ps)
func (a *ASTer) добавитьШагвInitФайл(шаг, f string) error {
err := a.спарситьInitФайлиДобавитьШаг(шаг, f)
if err != nil {
return err
}
@ -82,7 +83,7 @@ func (a *ASTer) добавитьШагвInitФайл(шаг, f string, ps Пар
}
return nil
}
func (a *ASTer) добавитьФункциювТестовыйФайл(f string, ps Параметры) error {
func (a *ASTer) добавитьФункциювТестовыйФайл(f, ps string) error {
err := a.спарситьФайлиДобавитьФункцию(f, ps)
if err != nil {
return err
@ -94,17 +95,17 @@ func (a *ASTer) добавитьФункциювТестовыйФайл(f strin
return nil
}
func (a *ASTer) спарситьInitФайлиДобавитьШаг(шаг, func_name string, ps Параметры) error {
func (a *ASTer) спарситьInitФайлиДобавитьШаг(шаг, func_name string) error {
err := a.спарситьInitФайл()
if err != nil {
return err
}
f := a.создатьШаг(шаг, func_name, ps)
f := a.создатьШаг(шаг, func_name)
a.добавитьШагвИнициализаторЕслиНету(f)
return nil
}
func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name string, ps Параметры) error {
func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name, ps string) error {
err := a.спарситьФайл()
if err != nil {
return err
@ -175,7 +176,7 @@ func (a *ASTer) спарситьФайл() error {
return err
}
func (a *ASTer) создатьШаг(шаг, func_name string, ps Параметры) *ast.ExprStmt {
func (a *ASTer) создатьШаг(шаг, func_name string) *ast.ExprStmt {
st := &ast.ExprStmt{
X: &ast.CallExpr{
Fun: &ast.SelectorExpr{
@ -194,7 +195,7 @@ func (a *ASTer) создатьШаг(шаг, func_name string, ps Парамет
return st
}
func (a *ASTer) создатьФункцию(func_name string, ps Параметры) *ast.FuncDecl {
func (a *ASTer) создатьФункцию(func_name, ps string) *ast.FuncDecl {
f := &ast.FuncDecl{
Name: ast.NewIdent(func_name),
Type: &ast.FuncType{
@ -203,19 +204,52 @@ func (a *ASTer) создатьФункцию(func_name string, ps Парамет
Body: &ast.BlockStmt{},
}
a.добавитьПараметрыФункции(ps, f)
a.добавитьПараметрыФункции(f, ps)
return f
}
func (a *ASTer) добавитьПараметрыФункции(ps Параметры, f *ast.FuncDecl) {
for _, p := range ps {
p := &ast.Field{
Names: []*ast.Ident{ast.NewIdent(p[0])},
Type: ast.NewIdent(p[1]),
func (a *ASTer) добавитьПараметрыФункции(f *ast.FuncDecl, ps string) {
params := a.сконвертитьСтрокувПараметры(ps)
var names []*ast.Ident
for _, p := range params {
switch len(p) {
case 0:
continue
case 1:
names = append(names, ast.NewIdent(p[0]))
case 2:
names = append(names, ast.NewIdent(p[0]))
field := &ast.Field{
Names: names,
Type: ast.NewIdent(p[1]),
}
f.Type.Params.List = append(f.Type.Params.List, field)
names = nil
}
f.Type.Params.List = append(f.Type.Params.List, p)
}
}
func (a *ASTer) сконвертитьСтрокувПараметры(in string) (ret Параметры) {
params := strings.Split(in, ",")
for _, p := range params {
ps := strings.Fields(p)
параметр := Параметр{}
switch len(ps) {
case 0:
continue
case 1:
параметр = append(параметр, ps[0])
case 2:
параметр = append(параметр, ps[0], ps[1])
}
ret = append(ret, параметр)
}
return
}
func (a *ASTer) перезаписатьInitФайл() error {
err := переименоватьФайлСоВременем(INIT_TEST_GO_FNAME)

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

@ -13,7 +13,6 @@ import (
type testData struct {
tempdir string
params Параметры
}
var (
@ -58,12 +57,8 @@ func файл(fname string, content *godog.DocString) {
Ok(err)
}
func параметр(имя, тип string) {
t.params = append(t.params, Параметр{имя, тип})
}
func добавляетсяШагСФункцией(шаг, func_name string) {
err := ДобавитьШаг("`"+шаг+"`", func_name, t.params)
func добавляетсяШагСФункциейС(шаг, func_name, params string) {
err := ДобавитьШаг("`"+шаг+"`", func_name, params)
Ok(err)
}

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

@ -25,7 +25,7 @@
```
package mypkg
```
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с ""
То Файл "init_test.go" должен содержать:
```
package mypkg
@ -77,8 +77,7 @@
```
package mypkg
```
Дано Параметр: "arg1", "int"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
То Файл "mypkg_test.go" должен содержать:
```
package mypkg
@ -111,9 +110,7 @@
```
package mypkg
```
Дано Параметр: "arg1", "int"
Дано Параметр: "arg2", "string"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int, arg2 string"
То Файл "mypkg_test.go" должен содержать:
```
package mypkg
@ -146,9 +143,7 @@
```
package mypkg
```
Дано Параметр: "arg1", "string"
Дано Параметр: "arg2", "int"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 string, arg2 int"
То Файл "mypkg_test.go" должен содержать:
```
package mypkg
@ -187,8 +182,7 @@
}
```
Дано Параметр: "arg1", "int"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
То Файл "init_test.go" должен содержать:
```
package mypkg
@ -250,9 +244,8 @@
}
```
Дано Параметр: "arg1", "int"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
То Файл "init_test.go" должен содержать:
```
package mypkg
@ -306,9 +299,8 @@
package mypkg
```
Дано Параметр: "arg1", "int"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
То Файл "init_test.go" должен содержать:
```
package mypkg
@ -336,3 +328,102 @@
}
```
Сценарий: Добавление шага с параметрами строкой
Дано Файл "init_test.go":
```
package mypkg
func InitializeScenario(ctx *godog.ScenarioContext) {
ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) {
beforeScenario()
return ctx, nil
})
ctx.After(func(ctx context.Context, sc *godog.Scenario, err error) (context.Context, error) {
afterScenario()
return ctx, nil
})
InitializeGomegaForGodog(ctx)
}
```
Дано Файл "mypkg_test.go":
```
package mypkg
```
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "a int, s string, content *godog.DocString"
То Файл "mypkg_test.go" должен содержать:
```
package mypkg
func ПриветМир(a int, s string, content *godog.DocString) {
}
```
Сценарий: Добавление шага с параметрами строкой с объединением по типу
Дано Файл "init_test.go":
```
package mypkg
func InitializeScenario(ctx *godog.ScenarioContext) {
ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) {
beforeScenario()
return ctx, nil
})
ctx.After(func(ctx context.Context, sc *godog.Scenario, err error) (context.Context, error) {
afterScenario()
return ctx, nil
})
InitializeGomegaForGodog(ctx)
}
```
Дано Файл "mypkg_test.go":
```
package mypkg
```
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "a, b, c int"
То Файл "mypkg_test.go" должен содержать:
```
package mypkg
func ПриветМир(a, b, c int) {
}
```
Сценарий: Добавление шага с параметрами строкой с объединением по типам
Дано Файл "init_test.go":
```
package mypkg
func InitializeScenario(ctx *godog.ScenarioContext) {
ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) {
beforeScenario()
return ctx, nil
})
ctx.After(func(ctx context.Context, sc *godog.Scenario, err error) (context.Context, error) {
afterScenario()
return ctx, nil
})
InitializeGomegaForGodog(ctx)
}
```
Дано Файл "mypkg_test.go":
```
package mypkg
```
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "a, b int, s1, s2 string"
То Файл "mypkg_test.go" должен содержать:
```
package mypkg
func ПриветМир(a, b int, s1, s2 string) {
}
```

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

@ -4,7 +4,7 @@ package ast
type Параметр []string
type Параметры []Параметр
func ДобавитьШаг(шаг, f string, ps Параметры) error {
func ДобавитьШаг(шаг, f string, ps string) error {
a, err := NewASTer()
if err != nil {
return err

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

@ -12,8 +12,7 @@ import (
func InitializeScenario(ctx *godog.ScenarioContext) {
ctx.Step(`^Файл "([^"]*)":$`, файл)
ctx.Step(`^Параметр: "([^"]*)", "([^"]*)"$`, параметр)
ctx.Step(`^Добавляется шаг: "([^"]*)" с функцией "([^"]*)"$`, добавляетсяШагСФункцией)
ctx.Step(`^Добавляется шаг: "([^"]*)" с функцией "([^"]*)" с "([^"]*)"$`, добавляетсяШагСФункциейС)
ctx.Step(`^Файл "([^"]*)" должен содержать:$`, файлДолженСодержать)
// -----------------------