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

Этот коммит содержится в:
Softonik 2025-06-05 03:02:37 +03:00
родитель 6f2a5fef98
коммит 4a15650887
5 изменённых файлов: 50 добавлений и 17 удалений

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

@ -34,8 +34,8 @@ func NewASTer() (*ASTer, error) {
return a, nil return a, nil
} }
func (a *ASTer) ДобавитьТестовуюФункцию(func_name string) error { func (a *ASTer) ДобавитьТестовуюФункцию(func_name string, params map[string]string) error {
return a.добавитьвФайлФункцию(func_name) return a.добавитьвФайлФункцию(func_name, params)
} }
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) error { func (a *ASTer) добавитьвФайлФункцию(func_name string, params map[string]string) error {
err := a.спарситьФайлиДобавитьФункцию(func_name) err := a.спарситьФайлиДобавитьФункцию(func_name, params)
if err != nil { if err != nil {
return err return err
} }
return a.перезаписатьФайл() return a.перезаписатьФайл()
} }
func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name string) error { func (a *ASTer) спарситьФайлиДобавитьФункцию(func_name string, params map[string]string) error {
err := a.спарситьФайл() err := a.спарситьФайл()
if err != nil { if err != nil {
return err return err
} }
fun := a.пустаяФункция(func_name) fun := a.создатьФункцию(func_name, params)
a.node.Decls = append(a.node.Decls, fun) a.node.Decls = append(a.node.Decls, fun)
return nil return nil
} }
@ -72,15 +72,28 @@ func (a *ASTer) спарситьФайл() error {
a.node = node a.node = node
return err 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), Name: ast.NewIdent(func_name),
Type: &ast.FuncType{ Type: &ast.FuncType{
Params: &ast.FieldList{}, Params: &ast.FieldList{},
Results: &ast.FieldList{},
}, },
Body: &ast.BlockStmt{}, 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 { func (a *ASTer) перезаписатьФайл() error {

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

@ -56,8 +56,15 @@ 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 добавленаФункция(func_name string) {
err := ДобавитьТестовуюФункцию(func_name) err := ДобавитьТестовуюФункцию(func_name, nil)
Ok(err)
}
func добавленаФункцияСПараметрами(func_name, arg1, type1 string) {
params := map[string]string{
arg1: type1,
}
err := ДобавитьТестовуюФункцию(func_name, params)
Ok(err) Ok(err)
} }
func файлДолженСодержать(fname string, content *godog.DocString) { func файлДолженСодержать(fname string, content *godog.DocString) {

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

@ -2,12 +2,13 @@
Функционал: AST-редактир go-файлов Функционал: AST-редактир go-файлов
Сгенерированные функции автоматически добавляются в тест-файл текущего пакета Сгенерированные функции автоматически добавляются в тест-файл текущего пакета
Сценарий: Добавление сгенерированных функций в тест-файл Контекст:
Дано Файл "mypkg_test.go": Дано Файл "mypkg_test.go":
``` ```
package mypkg package mypkg
``` ```
Когда Добавлена тестовая функция "ПриветМир" Сценарий: Добавление функции
Когда Добавлена функция "ПриветМир"
То Файл "mypkg_test.go" должен содержать: То Файл "mypkg_test.go" должен содержать:
``` ```
package mypkg package mypkg
@ -16,3 +17,14 @@
} }
``` ```
Сценарий: Добавление функции с параметрами: int
Когда Добавлена функция "ПриветМир" с параметрами: "arg1", "int"
То Файл "mypkg_test.go" должен содержать:
```
package mypkg
func ПриветМир(arg1 int) {
}
```

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

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

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

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