diff --git a/pkg/formatters/ast/ast.go b/pkg/formatters/ast/ast.go index 3933190..5d6e802 100644 --- a/pkg/formatters/ast/ast.go +++ b/pkg/formatters/ast/ast.go @@ -46,18 +46,20 @@ func (a *ASTer) ДобавитьШаг(шаг, f, ps string) error { } func (a *ASTer) найтиТестовыйФайл() error { - a.сгенеритьИмяФайла() _, err := os.Stat(INIT_TEST_GO_FNAME) if err != nil { return err } - _, err = os.Stat(a.pkg_test_go_fname) + имя, err := найтиТестовыйФайлВЭтойДире() + if err != nil { + return errors.Join(errors.New("Не могу найти *_test.go файл"), err) + } + + a.pkg_test_go_fname = имя + return err } -func (a *ASTer) сгенеритьИмяФайла() { - a.pkg_test_go_fname = a.pkg + "_test.go" -} func (a *ASTer) добавитьШаг(шаг, f, ps string) error { err := a.добавитьШагвInitФайл(шаг, f) diff --git a/pkg/formatters/ast/ast/features/app.feature b/pkg/formatters/ast/ast/features/app.feature index 73a01cd..b1d9f24 100644 --- a/pkg/formatters/ast/ast/features/app.feature +++ b/pkg/formatters/ast/ast/features/app.feature @@ -6,9 +6,9 @@ Дано Файл "init_test.go": ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -19,7 +19,7 @@ }) InitializeGomegaForGodog(ctx) } - + ``` Дано Файл "mypkg_test.go": ``` @@ -29,10 +29,10 @@ То Файл "init_test.go" должен содержать: ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { ctx.Step(`^Привет Мир!$`, ПриветМир) - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -43,24 +43,24 @@ }) InitializeGomegaForGodog(ctx) } - + ``` То Файл "mypkg_test.go" должен содержать: ``` package mypkg - + func ПриветМир() { } - + ``` - Сценарий: Добавление шага с параметрами: int + Сценарий: Добавление шага, с другим тестовым файлом Дано Файл "init_test.go": ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -71,7 +71,59 @@ }) InitializeGomegaForGodog(ctx) } + + ``` + Дано Файл "system_test.go": + ``` + package mypkg + ``` + Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "" + То Файл "init_test.go" должен содержать: + ``` + package mypkg + + func InitializeScenario(ctx *godog.ScenarioContext) { + ctx.Step(`^Привет Мир!$`, ПриветМир) + + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { + beforeScenario() + return ctx, nil + }) + ctx.After(func(ctx context.Context, sc *godog.Scenario, err error) (context.Context, error) { + afterScenario() + return ctx, nil + }) + InitializeGomegaForGodog(ctx) + } + + ``` + То Файл "system_test.go" должен содержать: + ``` + package mypkg + + func ПриветМир() { + } + + ``` + Сценарий: Добавление шага с параметрами: int + Дано Файл "init_test.go": + ``` + package mypkg + + func InitializeScenario(ctx *godog.ScenarioContext) { + + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { + beforeScenario() + return ctx, nil + }) + ctx.After(func(ctx context.Context, sc *godog.Scenario, err error) (context.Context, error) { + afterScenario() + return ctx, nil + }) + InitializeGomegaForGodog(ctx) + } + ``` Дано Файл "mypkg_test.go": ``` @@ -81,19 +133,19 @@ То Файл "mypkg_test.go" должен содержать: ``` package mypkg - + func ПриветМир(arg1 int) { } - + ``` Сценарий: Добавление шага с параметрами: int, string Дано Файл "init_test.go": ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -104,7 +156,7 @@ }) InitializeGomegaForGodog(ctx) } - + ``` Дано Файл "mypkg_test.go": ``` @@ -114,19 +166,19 @@ То Файл "mypkg_test.go" должен содержать: ``` package mypkg - + func ПриветМир(arg1 int, arg2 string) { } - + ``` Сценарий: Добавление шага с параметрами: string, int Дано Файл "init_test.go": ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -137,7 +189,7 @@ }) InitializeGomegaForGodog(ctx) } - + ``` Дано Файл "mypkg_test.go": ``` @@ -147,20 +199,20 @@ То Файл "mypkg_test.go" должен содержать: ``` package mypkg - + func ПриветМир(arg1 string, arg2 int) { } - + ``` Сценарий: Добавление шага к существующему Дано Файл "init_test.go": ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { ctx.Step(`сделать чтото`, СделатьЧтото) - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -171,26 +223,26 @@ }) InitializeGomegaForGodog(ctx) } - + ``` Дано Файл "mypkg_test.go": ``` package mypkg - + func СделатьЧтото(arg1 string, arg2 int) { a := 1 } - + ``` Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int" То Файл "init_test.go" должен содержать: ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { ctx.Step(`сделать чтото`, СделатьЧтото) ctx.Step(`^Привет Мир!$`, ПриветМир) - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -201,28 +253,28 @@ }) InitializeGomegaForGodog(ctx) } - + ``` То Файл "mypkg_test.go" должен содержать: ``` package mypkg - + func СделатьЧтото(arg1 string, arg2 int) { a := 1 } func ПриветМир(arg1 int) { } - + ``` Сценарий: Не добавляет если шаг с такой функцией уже есть Дано Файл "init_test.go": ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { ctx.Step(`^Привет Мир!$`, ПриветМир) - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -233,26 +285,26 @@ }) InitializeGomegaForGodog(ctx) } - + ``` Дано Файл "mypkg_test.go": ``` package mypkg - + func ПриветМир(arg1 string, arg2 int) { a := 1 } - + ``` Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int" Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int" То Файл "init_test.go" должен содержать: ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { ctx.Step(`^Привет Мир!$`, ПриветМир) - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -263,25 +315,25 @@ }) InitializeGomegaForGodog(ctx) } - + ``` То Файл "mypkg_test.go" должен содержать: ``` package mypkg - + func ПриветМир(arg1 string, arg2 int) { a := 1 } - + ``` Сценарий: Второй раз - не добавляет Дано Файл "init_test.go": ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -292,22 +344,22 @@ }) InitializeGomegaForGodog(ctx) } - + ``` Дано Файл "mypkg_test.go": ``` package mypkg - + ``` Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int" Когда Добавляется шаг: "^Привет Мир!$" с функцией "ПриветМир" с "arg1 int" То Файл "init_test.go" должен содержать: ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { ctx.Step(`^Привет Мир!$`, ПриветМир) - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -318,24 +370,24 @@ }) InitializeGomegaForGodog(ctx) } - + ``` То Файл "mypkg_test.go" должен содержать: ``` package mypkg - + func ПриветМир(arg1 int) { } - + ``` Сценарий: Добавление шага с параметрами строкой Дано Файл "init_test.go": ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -346,7 +398,7 @@ }) InitializeGomegaForGodog(ctx) } - + ``` Дано Файл "mypkg_test.go": ``` @@ -356,19 +408,19 @@ То Файл "mypkg_test.go" должен содержать: ``` package mypkg - + func ПриветМир(a int, s string, content *godog.DocString) { } - + ``` Сценарий: Добавление шага с параметрами строкой с объединением по типу Дано Файл "init_test.go": ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -379,7 +431,7 @@ }) InitializeGomegaForGodog(ctx) } - + ``` Дано Файл "mypkg_test.go": ``` @@ -389,19 +441,19 @@ То Файл "mypkg_test.go" должен содержать: ``` package mypkg - + func ПриветМир(a, b, c int) { } - + ``` Сценарий: Добавление шага с параметрами строкой с объединением по типам Дано Файл "init_test.go": ``` package mypkg - + func InitializeScenario(ctx *godog.ScenarioContext) { - + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { beforeScenario() return ctx, nil @@ -412,7 +464,7 @@ }) InitializeGomegaForGodog(ctx) } - + ``` Дано Файл "mypkg_test.go": ``` @@ -422,8 +474,8 @@ То Файл "mypkg_test.go" должен содержать: ``` package mypkg - + func ПриветМир(a, b int, s1, s2 string) { } - + ``` diff --git a/pkg/formatters/ast/global.go b/pkg/formatters/ast/global.go index 282c242..b8e9bbd 100644 --- a/pkg/formatters/ast/global.go +++ b/pkg/formatters/ast/global.go @@ -1,10 +1,19 @@ package ast +import "fmt" + // 0: имя, 1: тип type Параметр []string type Параметры []Параметр func ДобавитьШаг(шаг, f string, ps string) error { + err := добавитьШаг(шаг, f, ps) + if err != nil { + fmt.Println("Ошибка добавления тестового шага:", err) + } + return err +} +func добавитьШаг(шаг, f string, ps string) error { a, err := NewASTer() if err != nil { return err diff --git a/pkg/formatters/ast/helpers.go b/pkg/formatters/ast/helpers.go index 23af2cf..52cc088 100644 --- a/pkg/formatters/ast/helpers.go +++ b/pkg/formatters/ast/helpers.go @@ -5,6 +5,7 @@ import ( "go/ast" "os" "path/filepath" + "strings" "time" "errors" @@ -45,6 +46,33 @@ func получитьИмяGoПакетаВЭтойДире() (pkg_name string, return } +func найтиТестовыйФайлВЭтойДире() (name string, err_ret error) { + err_ret = errors.New("not found") + + err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + if !info.IsDir() && strings.HasSuffix(info.Name(), "_test.go") { + if info.Name() == "init_test.go" || + strings.HasSuffix(info.Name(), "_mock_test.go") { + return nil + } + name = info.Name() + err_ret = nil + return filepath.SkipDir + } + return nil + }) + + if err != nil { + return "", err + } + + return +} + func забекапитьФайлСоВременем(fname string) error { os.MkdirAll(BACKUP_DIR, 0755) currentTime := time.Now()