+ Сценарий: Добавление функции с параметрами: 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
}
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)
}

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

@ -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"))
}

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

@ -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) {
}
```

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

@ -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)
}

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

@ -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
}

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

@ -12,8 +12,8 @@ import (
func InitializeScenario(ctx *godog.ScenarioContext) {
ctx.Step(`^Файл "([^"]*)":$`, файл)
ctx.Step(`^Добавлена функция "([^"]*)"$`, добавленаФункция)
ctx.Step(`^Добавлена функция "([^"]*)" с параметрами: "([^"]*)", "([^"]*)"$`, добавленаФункцияСПараметрами)
ctx.Step(`^Параметр: "([^"]*)", "([^"]*)"$`, параметр)
ctx.Step(`^Добавляется функция "([^"]*)"$`, добавляетсяФункция)
ctx.Step(`^Файл "([^"]*)" должен содержать:$`, файлДолженСодержать)
// -----------------------