feat: support auto converting doc strings to plain strings
Этот коммит содержится в:
родитель
3bdc35e28e
коммит
2b6c9dc82e
5 изменённых файлов: 55 добавлений и 6 удалений
|
@ -262,3 +262,16 @@ Feature: run features
|
||||||
another undefined step
|
another undefined step
|
||||||
"""
|
"""
|
||||||
And the suite should have failed
|
And the suite should have failed
|
||||||
|
|
||||||
|
Scenario: should be able to convert a Doc String to a `*godog.DocString` argument
|
||||||
|
Given call func(*godog.DocString) with:
|
||||||
|
"""
|
||||||
|
text
|
||||||
|
"""
|
||||||
|
|
||||||
|
Scenario: should be able to convert a Doc String to a `string` argument
|
||||||
|
Given call func(string) with:
|
||||||
|
"""
|
||||||
|
text
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
|
@ -161,11 +161,16 @@ func (sd *StepDefinition) Run() interface{} {
|
||||||
|
|
||||||
func (sd *StepDefinition) shouldBeString(idx int) (string, error) {
|
func (sd *StepDefinition) shouldBeString(idx int) (string, error) {
|
||||||
arg := sd.Args[idx]
|
arg := sd.Args[idx]
|
||||||
s, ok := arg.(string)
|
switch arg := arg.(type) {
|
||||||
if !ok {
|
case string:
|
||||||
|
return arg, nil
|
||||||
|
case *messages.PickleStepArgument:
|
||||||
|
return arg.GetDocString().Content, nil
|
||||||
|
case *messages.PickleStepArgument_PickleDocString:
|
||||||
|
return arg.Content, nil
|
||||||
|
default:
|
||||||
return "", fmt.Errorf(`cannot convert argument %d: "%v" of type "%T" to string`, idx, arg, arg)
|
return "", fmt.Errorf(`cannot convert argument %d: "%v" of type "%T" to string`, idx, arg, arg)
|
||||||
}
|
}
|
||||||
return s, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetInternalStepDefinition ...
|
// GetInternalStepDefinition ...
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package models_test
|
package models_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -149,3 +150,26 @@ func TestUnexpectedArguments(t *testing.T) {
|
||||||
// t.Fatalf("expected an error due to wrong argument type, but got none")
|
// t.Fatalf("expected an error due to wrong argument type, but got none")
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestShouldSupportDocStringToStringConversion(t *testing.T) {
|
||||||
|
fn := func(a string) error {
|
||||||
|
if a != "hello" {
|
||||||
|
return fmt.Errorf("did not get hello")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
def := &models.StepDefinition{
|
||||||
|
StepDefinition: formatters.StepDefinition{
|
||||||
|
Handler: fn,
|
||||||
|
},
|
||||||
|
HandlerValue: reflect.ValueOf(fn),
|
||||||
|
Args: []interface{}{&messages.PickleStepArgument_PickleDocString{
|
||||||
|
Content: "hello",
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := def.Run(); err != nil {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -413,11 +413,11 @@ func Test_AllFeaturesRun(t *testing.T) {
|
||||||
...................................................................... 140
|
...................................................................... 140
|
||||||
...................................................................... 210
|
...................................................................... 210
|
||||||
...................................................................... 280
|
...................................................................... 280
|
||||||
.......................... 306
|
............................ 308
|
||||||
|
|
||||||
|
|
||||||
79 scenarios (79 passed)
|
81 scenarios (81 passed)
|
||||||
306 steps (306 passed)
|
308 steps (308 passed)
|
||||||
0s
|
0s
|
||||||
`
|
`
|
||||||
|
|
||||||
|
|
|
@ -101,6 +101,13 @@ func InitializeScenario(ctx *ScenarioContext) {
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ctx.Step(`^call func\(\*godog\.DocString\) with:$`, func(arg *DocString) error {
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
ctx.Step(`^call func\(string\) with:$`, func(arg string) error {
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
ctx.BeforeStep(tc.inject)
|
ctx.BeforeStep(tc.inject)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче