+ Сценарий: Добавление шага с параметрами строкой
Этот коммит содержится в:
родитель
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(`^Файл "([^"]*)" должен содержать:$`, файлДолженСодержать)
|
||||
|
||||
// -----------------------
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче