+ Сценарий: Добавление функции с параметрами: int, string
Этот коммит содержится в:
родитель
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(`^Файл "([^"]*)" должен содержать:$`, файлДолженСодержать)
|
||||
|
||||
// -----------------------
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче