+ Сценарий: Добавление шага с параметрами строкой
Этот коммит содержится в:
родитель
bda4071975
коммит
56522e757a
5 изменённых файлов: 164 добавлений и 45 удалений
|
@ -6,6 +6,7 @@ import (
|
||||||
"go/parser"
|
"go/parser"
|
||||||
"go/token"
|
"go/token"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"errors"
|
"errors"
|
||||||
)
|
)
|
||||||
|
@ -40,7 +41,7 @@ func NewASTer() (*ASTer, error) {
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *ASTer) ДобавитьШаг(шаг, f string, ps Параметры) error {
|
func (a *ASTer) ДобавитьШаг(шаг, f, ps string) error {
|
||||||
return a.добавитьШаг(шаг, f, ps)
|
return a.добавитьШаг(шаг, f, ps)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,8 +59,8 @@ func (a *ASTer) сгенеритьИмяФайла() {
|
||||||
a.pkg_test_go_fname = a.pkg + "_test.go"
|
a.pkg_test_go_fname = a.pkg + "_test.go"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *ASTer) добавитьШаг(шаг, f string, ps Параметры) error {
|
func (a *ASTer) добавитьШаг(шаг, f, ps string) error {
|
||||||
err := a.добавитьШагвInitФайл(шаг, f, ps)
|
err := a.добавитьШагвInitФайл(шаг, f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -71,8 +72,8 @@ func (a *ASTer) добавитьШаг(шаг, f string, ps Параметры)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (a *ASTer) добавитьШагвInitФайл(шаг, f string, ps Параметры) error {
|
func (a *ASTer) добавитьШагвInitФайл(шаг, f string) error {
|
||||||
err := a.спарситьInitФайлиДобавитьШаг(шаг, f, ps)
|
err := a.спарситьInitФайлиДобавитьШаг(шаг, f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -82,7 +83,7 @@ func (a *ASTer) добавитьШагвInitФайл(шаг, f string, ps Пар
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (a *ASTer) добавитьФункциювТестовыйФайл(f string, ps Параметры) error {
|
func (a *ASTer) добавитьФункциювТестовыйФайл(f, ps string) error {
|
||||||
err := a.спарситьФайлиДобавитьФункцию(f, ps)
|
err := a.спарситьФайлиДобавитьФункцию(f, ps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -94,17 +95,17 @@ func (a *ASTer) добавитьФункциювТестовыйФайл(f strin
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *ASTer) спарситьInitФайлиДобавитьШаг(шаг, func_name string, ps Параметры) error {
|
func (a *ASTer) спарситьInitФайлиДобавитьШаг(шаг, func_name string) error {
|
||||||
err := a.спарситьInitФайл()
|
err := a.спарситьInitФайл()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
f := a.создатьШаг(шаг, func_name, ps)
|
f := a.создатьШаг(шаг, func_name)
|
||||||
a.добавитьШагвИнициализаторЕслиНету(f)
|
a.добавитьШагвИнициализаторЕслиНету(f)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name string, ps Параметры) error {
|
func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name, ps string) error {
|
||||||
err := a.спарситьФайл()
|
err := a.спарситьФайл()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -175,7 +176,7 @@ func (a *ASTer) спарситьФайл() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *ASTer) создатьШаг(шаг, func_name string, ps Параметры) *ast.ExprStmt {
|
func (a *ASTer) создатьШаг(шаг, func_name string) *ast.ExprStmt {
|
||||||
st := &ast.ExprStmt{
|
st := &ast.ExprStmt{
|
||||||
X: &ast.CallExpr{
|
X: &ast.CallExpr{
|
||||||
Fun: &ast.SelectorExpr{
|
Fun: &ast.SelectorExpr{
|
||||||
|
@ -194,7 +195,7 @@ func (a *ASTer) создатьШаг(шаг, func_name string, ps Парамет
|
||||||
|
|
||||||
return st
|
return st
|
||||||
}
|
}
|
||||||
func (a *ASTer) создатьФункцию(func_name string, ps Параметры) *ast.FuncDecl {
|
func (a *ASTer) создатьФункцию(func_name, ps string) *ast.FuncDecl {
|
||||||
f := &ast.FuncDecl{
|
f := &ast.FuncDecl{
|
||||||
Name: ast.NewIdent(func_name),
|
Name: ast.NewIdent(func_name),
|
||||||
Type: &ast.FuncType{
|
Type: &ast.FuncType{
|
||||||
|
@ -203,19 +204,52 @@ func (a *ASTer) создатьФункцию(func_name string, ps Парамет
|
||||||
Body: &ast.BlockStmt{},
|
Body: &ast.BlockStmt{},
|
||||||
}
|
}
|
||||||
|
|
||||||
a.добавитьПараметрыФункции(ps, f)
|
a.добавитьПараметрыФункции(f, ps)
|
||||||
|
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
func (a *ASTer) добавитьПараметрыФункции(ps Параметры, f *ast.FuncDecl) {
|
func (a *ASTer) добавитьПараметрыФункции(f *ast.FuncDecl, ps string) {
|
||||||
for _, p := range ps {
|
params := a.сконвертитьСтрокувПараметры(ps)
|
||||||
p := &ast.Field{
|
|
||||||
Names: []*ast.Ident{ast.NewIdent(p[0])},
|
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]),
|
Type: ast.NewIdent(p[1]),
|
||||||
}
|
}
|
||||||
f.Type.Params.List = append(f.Type.Params.List, p)
|
f.Type.Params.List = append(f.Type.Params.List, field)
|
||||||
|
names = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
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 {
|
func (a *ASTer) перезаписатьInitФайл() error {
|
||||||
err := переименоватьФайлСоВременем(INIT_TEST_GO_FNAME)
|
err := переименоватьФайлСоВременем(INIT_TEST_GO_FNAME)
|
||||||
|
|
|
@ -13,7 +13,6 @@ import (
|
||||||
|
|
||||||
type testData struct {
|
type testData struct {
|
||||||
tempdir string
|
tempdir string
|
||||||
params Параметры
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -58,12 +57,8 @@ func файл(fname string, content *godog.DocString) {
|
||||||
Ok(err)
|
Ok(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func параметр(имя, тип string) {
|
func добавляетсяШагСФункциейС(шаг, func_name, params string) {
|
||||||
t.params = append(t.params, Параметр{имя, тип})
|
err := ДобавитьШаг("`"+шаг+"`", func_name, params)
|
||||||
}
|
|
||||||
|
|
||||||
func добавляетсяШагСФункцией(шаг, func_name string) {
|
|
||||||
err := ДобавитьШаг("`"+шаг+"`", func_name, t.params)
|
|
||||||
Ok(err)
|
Ok(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
```
|
```
|
||||||
package mypkg
|
package mypkg
|
||||||
```
|
```
|
||||||
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
|
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с ""
|
||||||
То Файл "init_test.go" должен содержать:
|
То Файл "init_test.go" должен содержать:
|
||||||
```
|
```
|
||||||
package mypkg
|
package mypkg
|
||||||
|
@ -77,8 +77,7 @@
|
||||||
```
|
```
|
||||||
package mypkg
|
package mypkg
|
||||||
```
|
```
|
||||||
Дано Параметр: "arg1", "int"
|
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
|
||||||
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
|
|
||||||
То Файл "mypkg_test.go" должен содержать:
|
То Файл "mypkg_test.go" должен содержать:
|
||||||
```
|
```
|
||||||
package mypkg
|
package mypkg
|
||||||
|
@ -111,9 +110,7 @@
|
||||||
```
|
```
|
||||||
package mypkg
|
package mypkg
|
||||||
```
|
```
|
||||||
Дано Параметр: "arg1", "int"
|
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int, arg2 string"
|
||||||
Дано Параметр: "arg2", "string"
|
|
||||||
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
|
|
||||||
То Файл "mypkg_test.go" должен содержать:
|
То Файл "mypkg_test.go" должен содержать:
|
||||||
```
|
```
|
||||||
package mypkg
|
package mypkg
|
||||||
|
@ -146,9 +143,7 @@
|
||||||
```
|
```
|
||||||
package mypkg
|
package mypkg
|
||||||
```
|
```
|
||||||
Дано Параметр: "arg1", "string"
|
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 string, arg2 int"
|
||||||
Дано Параметр: "arg2", "int"
|
|
||||||
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
|
|
||||||
То Файл "mypkg_test.go" должен содержать:
|
То Файл "mypkg_test.go" должен содержать:
|
||||||
```
|
```
|
||||||
package mypkg
|
package mypkg
|
||||||
|
@ -187,8 +182,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
Дано Параметр: "arg1", "int"
|
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
|
||||||
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
|
|
||||||
То Файл "init_test.go" должен содержать:
|
То Файл "init_test.go" должен содержать:
|
||||||
```
|
```
|
||||||
package mypkg
|
package mypkg
|
||||||
|
@ -250,9 +244,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
Дано Параметр: "arg1", "int"
|
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
|
||||||
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
|
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
|
||||||
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
|
|
||||||
То Файл "init_test.go" должен содержать:
|
То Файл "init_test.go" должен содержать:
|
||||||
```
|
```
|
||||||
package mypkg
|
package mypkg
|
||||||
|
@ -306,9 +299,8 @@
|
||||||
package mypkg
|
package mypkg
|
||||||
|
|
||||||
```
|
```
|
||||||
Дано Параметр: "arg1", "int"
|
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
|
||||||
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
|
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int"
|
||||||
Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир"
|
|
||||||
То Файл "init_test.go" должен содержать:
|
То Файл "init_test.go" должен содержать:
|
||||||
```
|
```
|
||||||
package mypkg
|
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 Параметр []string
|
||||||
type Параметры []Параметр
|
type Параметры []Параметр
|
||||||
|
|
||||||
func ДобавитьШаг(шаг, f string, ps Параметры) error {
|
func ДобавитьШаг(шаг, f string, ps string) error {
|
||||||
a, err := NewASTer()
|
a, err := NewASTer()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -12,8 +12,7 @@ import (
|
||||||
|
|
||||||
func InitializeScenario(ctx *godog.ScenarioContext) {
|
func InitializeScenario(ctx *godog.ScenarioContext) {
|
||||||
ctx.Step(`^Файл "([^"]*)":$`, файл)
|
ctx.Step(`^Файл "([^"]*)":$`, файл)
|
||||||
ctx.Step(`^Параметр: "([^"]*)", "([^"]*)"$`, параметр)
|
ctx.Step(`^Добавляется шаг: "([^"]*)" с функцией "([^"]*)" с "([^"]*)"$`, добавляетсяШагСФункциейС)
|
||||||
ctx.Step(`^Добавляется шаг: "([^"]*)" с функцией "([^"]*)"$`, добавляетсяШагСФункцией)
|
|
||||||
ctx.Step(`^Файл "([^"]*)" должен содержать:$`, файлДолженСодержать)
|
ctx.Step(`^Файл "([^"]*)" должен содержать:$`, файлДолженСодержать)
|
||||||
|
|
||||||
// -----------------------
|
// -----------------------
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче