+ Сценарий: Добавление функции с параметрами: int, string

Этот коммит содержится в:
Softonik 2025-06-05 03:29:34 +03:00
родитель 4a15650887
коммит 9ad168ae70
6 изменённых файлов: 59 добавлений и 27 удалений

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

@ -34,8 +34,8 @@ func NewASTer() (*ASTer, error) {
return a, nil return a, nil
} }
func (a *ASTer) ДобавитьТестовуюФункцию(func_name string, params map[string]string) error { func (a *ASTer) ДобавитьТестовуюФункцию(func_name string, ps Параметры) error {
return a.добавитьвФайлФункцию(func_name, params) return a.добавитьвФайлФункцию(func_name, ps)
} }
func (a *ASTer) найтиТестовыйФайл() error { func (a *ASTer) найтиТестовыйФайл() error {
@ -47,21 +47,21 @@ func (a *ASTer) сгенеритьИмяФайла() {
a.fname = a.pkg + "_test.go" a.fname = a.pkg + "_test.go"
} }
func (a *ASTer) добавитьвФайлФункцию(func_name string, params map[string]string) error { func (a *ASTer) добавитьвФайлФункцию(func_name string, ps Параметры) error {
err := a.спарситьФайлиДобавитьФункцию(func_name, params) err := a.спарситьФайлиДобавитьФункцию(func_name, ps)
if err != nil { if err != nil {
return err return err
} }
return a.перезаписатьФайл() return a.перезаписатьФайл()
} }
func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name string, params map[string]string) error { func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name string, ps Параметры) error {
err := a.спарситьФайл() err := a.спарситьФайл()
if err != nil { if err != nil {
return err return err
} }
fun := a.создатьФункцию(func_name, params) fun := a.создатьФункцию(func_name, ps)
a.node.Decls = append(a.node.Decls, fun) a.node.Decls = append(a.node.Decls, fun)
return nil return nil
} }
@ -73,7 +73,7 @@ func (a *ASTer) спарситьФайл() error {
return err 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{ f := &ast.FuncDecl{
Name: ast.NewIdent(func_name), Name: ast.NewIdent(func_name),
Type: &ast.FuncType{ Type: &ast.FuncType{
@ -82,15 +82,15 @@ func (a *ASTer) создатьФункцию(func_name string, params map[string
Body: &ast.BlockStmt{}, Body: &ast.BlockStmt{},
} }
a.добавитьПараметрыФункции(params, f) a.добавитьПараметрыФункции(ps, f)
return f return f
} }
func (a *ASTer) добавитьПараметрыФункции(params map[string]string, f *ast.FuncDecl) { func (a *ASTer) добавитьПараметрыФункции(ps Параметры, f *ast.FuncDecl) {
for k, v := range params { for _, p := range ps {
p := &ast.Field{ p := &ast.Field{
Names: []*ast.Ident{ast.NewIdent(k)}, Names: []*ast.Ident{ast.NewIdent(p[0])},
Type: ast.NewIdent(v), Type: ast.NewIdent(p[1]),
} }
f.Type.Params.List = append(f.Type.Params.List, p) f.Type.Params.List = append(f.Type.Params.List, p)
} }

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

@ -13,6 +13,7 @@ import (
type testData struct { type testData struct {
tempdir string tempdir string
params Параметры
} }
var ( var (
@ -56,15 +57,11 @@ func файл(fname string, content *godog.DocString) {
err := lib.WriteFile(fname, content.Content) err := lib.WriteFile(fname, content.Content)
Ok(err) Ok(err)
} }
func добавленаФункция(func_name string) { func параметр(имя, тип string) {
err := ДобавитьТестовуюФункцию(func_name, nil) t.params = append(t.params, Параметр{имя, тип})
Ok(err)
} }
func добавленаФункцияСПараметрами(func_name, arg1, type1 string) { func добавляетсяФункция(func_name string) {
params := map[string]string{ err := ДобавитьТестовуюФункцию(func_name, t.params)
arg1: type1,
}
err := ДобавитьТестовуюФункцию(func_name, params)
Ok(err) Ok(err)
} }
func файлДолженСодержать(fname string, content *godog.DocString) { func файлДолженСодержать(fname string, content *godog.DocString) {
@ -72,4 +69,8 @@ func файлДолженСодержать(fname string, content *godog.DocStri
Ok(err) Ok(err)
Ω(cont).To(Be(content.Content)) Ω(cont).To(Be(content.Content))
pkg, err := получитьИмяGoПакетаФайла(fname)
Ok(err)
Ω(pkg).To(Be("mypkg"))
} }

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

@ -8,7 +8,7 @@
package mypkg package mypkg
``` ```
Сценарий: Добавление функции Сценарий: Добавление функции
Когда Добавлена функция "ПриветМир" Когда Добавляется функция "ПриветМир"
То Файл "mypkg_test.go" должен содержать: То Файл "mypkg_test.go" должен содержать:
``` ```
package mypkg package mypkg
@ -19,7 +19,8 @@
``` ```
Сценарий: Добавление функции с параметрами: int Сценарий: Добавление функции с параметрами: int
Когда Добавлена функция "ПриветМир" с параметрами: "arg1", "int" Дано Параметр: "arg1", "int"
Когда Добавляется функция "ПриветМир"
То Файл "mypkg_test.go" должен содержать: То Файл "mypkg_test.go" должен содержать:
``` ```
package mypkg 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) {
}
```

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

@ -1,10 +1,14 @@
package ast package ast
func ДобавитьТестовуюФункцию(f string, params map[string]string) error { // 0: имя, 1: тип
type Параметр []string
type Параметры []Параметр
func ДобавитьТестовуюФункцию(f string, ps Параметры) error {
a, err := NewASTer() a, err := NewASTer()
if err != nil { if err != nil {
return err return err
} }
return a.ДобавитьТестовуюФункцию(f, params) return a.ДобавитьТестовуюФункцию(f, ps)
} }

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

@ -35,7 +35,7 @@ func получитьИмяGoПакетаВЭтойДире() (pkg_name string,
} }
func получитьИмяGoПакетаФайла(fname string) (string, error) { func получитьИмяGoПакетаФайла(fname string) (string, error) {
fset := token.NewFileSet() fset := token.NewFileSet()
node, err := parser.ParseFile(fset, fname, nil, parser.PackageClauseOnly) node, err := parser.ParseFile(fset, fname, nil, parser.AllErrors)
if err != nil { if err != nil {
return "", err return "", err
} }

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

@ -12,8 +12,8 @@ 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(`^Файл "([^"]*)" должен содержать:$`, файлДолженСодержать) ctx.Step(`^Файл "([^"]*)" должен содержать:$`, файлДолженСодержать)
// ----------------------- // -----------------------