diff --git a/pkg/formatters/ast/ast.go b/pkg/formatters/ast/ast.go index 773a478..58f7aee 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, params map[string]string) error { - return a.добавитьвФайлФункцию(func_name, params) +func (a *ASTer) ДобавитьТестовуюФункцию(func_name string, ps Параметры) error { + return a.добавитьвФайлФункцию(func_name, ps) } func (a *ASTer) найтиТестовыйФайл() error { @@ -47,21 +47,21 @@ func (a *ASTer) сгенеритьИмяФайла() { a.fname = a.pkg + "_test.go" } -func (a *ASTer) добавитьвФайлФункцию(func_name string, params map[string]string) error { - err := a.спарситьФайлиДобавитьФункцию(func_name, params) +func (a *ASTer) добавитьвФайлФункцию(func_name string, ps Параметры) error { + err := a.спарситьФайлиДобавитьФункцию(func_name, ps) if err != nil { return err } return a.перезаписатьФайл() } -func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name string, params map[string]string) error { +func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name string, ps Параметры) error { err := a.спарситьФайл() if err != nil { return err } - fun := a.создатьФункцию(func_name, params) + fun := a.создатьФункцию(func_name, ps) a.node.Decls = append(a.node.Decls, fun) return nil } @@ -73,7 +73,7 @@ func (a *ASTer) спарситьФайл() error { return err } -func (a *ASTer) создатьФункцию(func_name string, params map[string]string) *ast.FuncDecl { +func (a *ASTer) создатьФункцию(func_name string, ps Параметры) *ast.FuncDecl { f := &ast.FuncDecl{ Name: ast.NewIdent(func_name), Type: &ast.FuncType{ @@ -82,15 +82,15 @@ func (a *ASTer) создатьФункцию(func_name string, params map[string Body: &ast.BlockStmt{}, } - a.добавитьПараметрыФункции(params, f) + a.добавитьПараметрыФункции(ps, f) return f } -func (a *ASTer) добавитьПараметрыФункции(params map[string]string, f *ast.FuncDecl) { - for k, v := range params { +func (a *ASTer) добавитьПараметрыФункции(ps Параметры, f *ast.FuncDecl) { + for _, p := range ps { p := &ast.Field{ - Names: []*ast.Ident{ast.NewIdent(k)}, - Type: ast.NewIdent(v), + Names: []*ast.Ident{ast.NewIdent(p[0])}, + Type: ast.NewIdent(p[1]), } f.Type.Params.List = append(f.Type.Params.List, p) } diff --git a/pkg/formatters/ast/ast_test.go b/pkg/formatters/ast/ast_test.go index 67b99fd..8a247fc 100644 --- a/pkg/formatters/ast/ast_test.go +++ b/pkg/formatters/ast/ast_test.go @@ -13,6 +13,7 @@ import ( type testData struct { tempdir string + params Параметры } var ( @@ -56,15 +57,11 @@ func файл(fname string, content *godog.DocString) { err := lib.WriteFile(fname, content.Content) Ok(err) } -func добавленаФункция(func_name string) { - err := ДобавитьТестовуюФункцию(func_name, nil) - Ok(err) +func параметр(имя, тип string) { + t.params = append(t.params, Параметр{имя, тип}) } -func добавленаФункцияСПараметрами(func_name, arg1, type1 string) { - params := map[string]string{ - arg1: type1, - } - err := ДобавитьТестовуюФункцию(func_name, params) +func добавляетсяФункция(func_name string) { + err := ДобавитьТестовуюФункцию(func_name, t.params) Ok(err) } func файлДолженСодержать(fname string, content *godog.DocString) { @@ -72,4 +69,8 @@ func файлДолженСодержать(fname string, content *godog.DocStri Ok(err) Ω(cont).To(Be(content.Content)) + + pkg, err := получитьИмяGoПакетаФайла(fname) + Ok(err) + Ω(pkg).To(Be("mypkg")) } diff --git a/pkg/formatters/ast/features/app.feature b/pkg/formatters/ast/features/app.feature index c92bc2d..0a61b81 100644 --- a/pkg/formatters/ast/features/app.feature +++ b/pkg/formatters/ast/features/app.feature @@ -8,7 +8,7 @@ package mypkg ``` Сценарий: Добавление функции - Когда Добавлена функция "ПриветМир" + Когда Добавляется функция "ПриветМир" То Файл "mypkg_test.go" должен содержать: ``` package mypkg @@ -19,7 +19,8 @@ ``` Сценарий: Добавление функции с параметрами: int - Когда Добавлена функция "ПриветМир" с параметрами: "arg1", "int" + Дано Параметр: "arg1", "int" + Когда Добавляется функция "ПриветМир" То Файл "mypkg_test.go" должен содержать: ``` package mypkg @@ -28,3 +29,29 @@ } ``` + + Сценарий: Добавление функции с параметрами: int, string + Дано Параметр: "arg1", "int" + Дано Параметр: "arg2", "string" + Когда Добавляется функция "ПриветМир" + То Файл "mypkg_test.go" должен содержать: + ``` + package mypkg + + func ПриветМир(arg1 int, arg2 string) { + } + + ``` + + Сценарий: Добавление функции с параметрами: string, int + Дано Параметр: "arg1", "string" + Дано Параметр: "arg2", "int" + Когда Добавляется функция "ПриветМир" + То Файл "mypkg_test.go" должен содержать: + ``` + package mypkg + + func ПриветМир(arg1 string, arg2 int) { + } + + ``` diff --git a/pkg/formatters/ast/global.go b/pkg/formatters/ast/global.go index ed4842e..c419afe 100644 --- a/pkg/formatters/ast/global.go +++ b/pkg/formatters/ast/global.go @@ -1,10 +1,14 @@ package ast -func ДобавитьТестовуюФункцию(f string, params map[string]string) error { +// 0: имя, 1: тип +type Параметр []string +type Параметры []Параметр + +func ДобавитьТестовуюФункцию(f string, ps Параметры) error { a, err := NewASTer() if err != nil { return err } - return a.ДобавитьТестовуюФункцию(f, params) + return a.ДобавитьТестовуюФункцию(f, ps) } diff --git a/pkg/formatters/ast/helpers.go b/pkg/formatters/ast/helpers.go index 77c3922..1e57b44 100644 --- a/pkg/formatters/ast/helpers.go +++ b/pkg/formatters/ast/helpers.go @@ -35,7 +35,7 @@ func получитьИмяGoПакетаВЭтойДире() (pkg_name string, } func получитьИмяGoПакетаФайла(fname string) (string, error) { fset := token.NewFileSet() - node, err := parser.ParseFile(fset, fname, nil, parser.PackageClauseOnly) + node, err := parser.ParseFile(fset, fname, nil, parser.AllErrors) if err != nil { return "", err } diff --git a/pkg/formatters/ast/init_test.go b/pkg/formatters/ast/init_test.go index df76f67..6d60406 100644 --- a/pkg/formatters/ast/init_test.go +++ b/pkg/formatters/ast/init_test.go @@ -12,8 +12,8 @@ import ( func InitializeScenario(ctx *godog.ScenarioContext) { ctx.Step(`^Файл "([^"]*)":$`, файл) - ctx.Step(`^Добавлена функция "([^"]*)"$`, добавленаФункция) - ctx.Step(`^Добавлена функция "([^"]*)" с параметрами: "([^"]*)", "([^"]*)"$`, добавленаФункцияСПараметрами) + ctx.Step(`^Параметр: "([^"]*)", "([^"]*)"$`, параметр) + ctx.Step(`^Добавляется функция "([^"]*)"$`, добавляетсяФункция) ctx.Step(`^Файл "([^"]*)" должен содержать:$`, файлДолженСодержать) // -----------------------