diff --git a/pkg/formatters/ast/ast.go b/pkg/formatters/ast/ast.go index daf41ec..773a478 100644 --- a/pkg/formatters/ast/ast.go +++ b/pkg/formatters/ast/ast.go @@ -34,8 +34,8 @@ func NewASTer() (*ASTer, error) { return a, nil } -func (a *ASTer) ДобавитьТестовуюФункцию(func_name string) error { - return a.добавитьвФайлФункцию(func_name) +func (a *ASTer) ДобавитьТестовуюФункцию(func_name string, params map[string]string) error { + return a.добавитьвФайлФункцию(func_name, params) } func (a *ASTer) найтиТестовыйФайл() error { @@ -47,21 +47,21 @@ func (a *ASTer) сгенеритьИмяФайла() { a.fname = a.pkg + "_test.go" } -func (a *ASTer) добавитьвФайлФункцию(func_name string) error { - err := a.спарситьФайлиДобавитьФункцию(func_name) +func (a *ASTer) добавитьвФайлФункцию(func_name string, params map[string]string) error { + err := a.спарситьФайлиДобавитьФункцию(func_name, params) if err != nil { return err } return a.перезаписатьФайл() } -func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name string) error { +func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name string, params map[string]string) error { err := a.спарситьФайл() if err != nil { return err } - fun := a.пустаяФункция(func_name) + fun := a.создатьФункцию(func_name, params) a.node.Decls = append(a.node.Decls, fun) return nil } @@ -72,15 +72,28 @@ func (a *ASTer) спарситьФайл() error { a.node = node return err } -func (a *ASTer) пустаяФункция(func_name string) *ast.FuncDecl { - return &ast.FuncDecl{ + +func (a *ASTer) создатьФункцию(func_name string, params map[string]string) *ast.FuncDecl { + f := &ast.FuncDecl{ Name: ast.NewIdent(func_name), Type: &ast.FuncType{ - Params: &ast.FieldList{}, - Results: &ast.FieldList{}, + Params: &ast.FieldList{}, }, Body: &ast.BlockStmt{}, } + + a.добавитьПараметрыФункции(params, f) + + return f +} +func (a *ASTer) добавитьПараметрыФункции(params map[string]string, f *ast.FuncDecl) { + for k, v := range params { + p := &ast.Field{ + Names: []*ast.Ident{ast.NewIdent(k)}, + Type: ast.NewIdent(v), + } + f.Type.Params.List = append(f.Type.Params.List, p) + } } func (a *ASTer) перезаписатьФайл() error { diff --git a/pkg/formatters/ast/ast_test.go b/pkg/formatters/ast/ast_test.go index b5cbc5f..67b99fd 100644 --- a/pkg/formatters/ast/ast_test.go +++ b/pkg/formatters/ast/ast_test.go @@ -56,8 +56,15 @@ func файл(fname string, content *godog.DocString) { err := lib.WriteFile(fname, content.Content) Ok(err) } -func добавленаТестоваяФункция(func_name string) { - err := ДобавитьТестовуюФункцию(func_name) +func добавленаФункция(func_name string) { + err := ДобавитьТестовуюФункцию(func_name, nil) + Ok(err) +} +func добавленаФункцияСПараметрами(func_name, arg1, type1 string) { + params := map[string]string{ + arg1: type1, + } + err := ДобавитьТестовуюФункцию(func_name, params) Ok(err) } func файлДолженСодержать(fname string, content *godog.DocString) { diff --git a/pkg/formatters/ast/features/app.feature b/pkg/formatters/ast/features/app.feature index b4a1492..c92bc2d 100644 --- a/pkg/formatters/ast/features/app.feature +++ b/pkg/formatters/ast/features/app.feature @@ -2,12 +2,13 @@ Функционал: AST-редактир go-файлов Сгенерированные функции автоматически добавляются в тест-файл текущего пакета - Сценарий: Добавление сгенерированных функций в тест-файл + Контекст: Дано Файл "mypkg_test.go": ``` package mypkg ``` - Когда Добавлена тестовая функция "ПриветМир" + Сценарий: Добавление функции + Когда Добавлена функция "ПриветМир" То Файл "mypkg_test.go" должен содержать: ``` package mypkg @@ -16,3 +17,14 @@ } ``` + + Сценарий: Добавление функции с параметрами: int + Когда Добавлена функция "ПриветМир" с параметрами: "arg1", "int" + То Файл "mypkg_test.go" должен содержать: + ``` + package mypkg + + func ПриветМир(arg1 int) { + } + + ``` diff --git a/pkg/formatters/ast/global.go b/pkg/formatters/ast/global.go index e254d17..ed4842e 100644 --- a/pkg/formatters/ast/global.go +++ b/pkg/formatters/ast/global.go @@ -1,10 +1,10 @@ package ast -func ДобавитьТестовуюФункцию(f string) error { +func ДобавитьТестовуюФункцию(f string, params map[string]string) error { a, err := NewASTer() if err != nil { return err } - return a.ДобавитьТестовуюФункцию(f) + return a.ДобавитьТестовуюФункцию(f, params) } diff --git a/pkg/formatters/ast/init_test.go b/pkg/formatters/ast/init_test.go index 5b82c6f..df76f67 100644 --- a/pkg/formatters/ast/init_test.go +++ b/pkg/formatters/ast/init_test.go @@ -12,7 +12,8 @@ import ( func InitializeScenario(ctx *godog.ScenarioContext) { ctx.Step(`^Файл "([^"]*)":$`, файл) - ctx.Step(`^Добавлена тестовая функция "([^"]*)"$`, добавленаТестоваяФункция) + ctx.Step(`^Добавлена функция "([^"]*)"$`, добавленаФункция) + ctx.Step(`^Добавлена функция "([^"]*)" с параметрами: "([^"]*)", "([^"]*)"$`, добавленаФункцияСПараметрами) ctx.Step(`^Файл "([^"]*)" должен содержать:$`, файлДолженСодержать) // -----------------------