* bdde4c4 fix test suite and migration changes * a3b6e01 refactor pretty formatter * 2c0c7ba fix outline scenario handling * f6b411d add a different language test feature add a different language test feature
		
			
				
	
	
		
			143 строки
		
	
	
	
		
			3,4 КиБ
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			143 строки
		
	
	
	
		
			3,4 КиБ
		
	
	
	
		
			Go
		
	
	
	
	
	
package godog
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"strconv"
 | 
						|
 | 
						|
	"github.com/cucumber/gherkin-go"
 | 
						|
)
 | 
						|
 | 
						|
// Arg is an argument for StepHandler parsed from
 | 
						|
// the regexp submatch to handle the step.
 | 
						|
//
 | 
						|
// In future versions, it may be replaced with
 | 
						|
// an argument injection toolkit using reflect
 | 
						|
// package.
 | 
						|
type Arg struct {
 | 
						|
	value interface{}
 | 
						|
}
 | 
						|
 | 
						|
// StepArgument func creates a step argument.
 | 
						|
// used in cases when calling another step from
 | 
						|
// within a StepHandler function.
 | 
						|
func StepArgument(value interface{}) *Arg {
 | 
						|
	return &Arg{value: value}
 | 
						|
}
 | 
						|
 | 
						|
// Float64 converts an argument to float64
 | 
						|
// or panics if unable to convert it
 | 
						|
func (a *Arg) Float64() float64 {
 | 
						|
	s, ok := a.value.(string)
 | 
						|
	a.must(ok, "string")
 | 
						|
	v, err := strconv.ParseFloat(s, 64)
 | 
						|
	if err == nil {
 | 
						|
		return v
 | 
						|
	}
 | 
						|
	panic(fmt.Sprintf(`cannot convert "%s" to float64: %s`, s, err))
 | 
						|
}
 | 
						|
 | 
						|
// Float32 converts an argument to float32
 | 
						|
// or panics if unable to convert it
 | 
						|
func (a *Arg) Float32() float32 {
 | 
						|
	s, ok := a.value.(string)
 | 
						|
	a.must(ok, "string")
 | 
						|
	v, err := strconv.ParseFloat(s, 32)
 | 
						|
	if err == nil {
 | 
						|
		return float32(v)
 | 
						|
	}
 | 
						|
	panic(fmt.Sprintf(`cannot convert "%s" to float32: %s`, s, err))
 | 
						|
}
 | 
						|
 | 
						|
// Int converts an argument to int
 | 
						|
// or panics if unable to convert it
 | 
						|
func (a *Arg) Int() int {
 | 
						|
	s, ok := a.value.(string)
 | 
						|
	a.must(ok, "string")
 | 
						|
	v, err := strconv.ParseInt(s, 10, 0)
 | 
						|
	if err == nil {
 | 
						|
		return int(v)
 | 
						|
	}
 | 
						|
	panic(fmt.Sprintf(`cannot convert "%s" to int: %s`, s, err))
 | 
						|
}
 | 
						|
 | 
						|
// Int64 converts an argument to int64
 | 
						|
// or panics if unable to convert it
 | 
						|
func (a *Arg) Int64() int64 {
 | 
						|
	s, ok := a.value.(string)
 | 
						|
	a.must(ok, "string")
 | 
						|
	v, err := strconv.ParseInt(s, 10, 64)
 | 
						|
	if err == nil {
 | 
						|
		return v
 | 
						|
	}
 | 
						|
	panic(fmt.Sprintf(`cannot convert "%s" to int64: %s`, s, err))
 | 
						|
}
 | 
						|
 | 
						|
// Int32 converts an argument to int32
 | 
						|
// or panics if unable to convert it
 | 
						|
func (a *Arg) Int32() int32 {
 | 
						|
	s, ok := a.value.(string)
 | 
						|
	a.must(ok, "string")
 | 
						|
	v, err := strconv.ParseInt(s, 10, 32)
 | 
						|
	if err == nil {
 | 
						|
		return int32(v)
 | 
						|
	}
 | 
						|
	panic(fmt.Sprintf(`cannot convert "%s" to int32: %s`, s, err))
 | 
						|
}
 | 
						|
 | 
						|
// Int16 converts an argument to int16
 | 
						|
// or panics if unable to convert it
 | 
						|
func (a *Arg) Int16() int16 {
 | 
						|
	s, ok := a.value.(string)
 | 
						|
	a.must(ok, "string")
 | 
						|
	v, err := strconv.ParseInt(s, 10, 16)
 | 
						|
	if err == nil {
 | 
						|
		return int16(v)
 | 
						|
	}
 | 
						|
	panic(fmt.Sprintf(`cannot convert "%s" to int16: %s`, s, err))
 | 
						|
}
 | 
						|
 | 
						|
// Int8 converts an argument to int8
 | 
						|
// or panics if unable to convert it
 | 
						|
func (a *Arg) Int8() int8 {
 | 
						|
	s, ok := a.value.(string)
 | 
						|
	a.must(ok, "string")
 | 
						|
	v, err := strconv.ParseInt(s, 10, 8)
 | 
						|
	if err == nil {
 | 
						|
		return int8(v)
 | 
						|
	}
 | 
						|
	panic(fmt.Sprintf(`cannot convert "%s" to int8: %s`, s, err))
 | 
						|
}
 | 
						|
 | 
						|
// String converts an argument to string
 | 
						|
func (a *Arg) String() string {
 | 
						|
	s, ok := a.value.(string)
 | 
						|
	a.must(ok, "string")
 | 
						|
	return s
 | 
						|
}
 | 
						|
 | 
						|
// Bytes converts an argument string to bytes
 | 
						|
func (a *Arg) Bytes() []byte {
 | 
						|
	s, ok := a.value.(string)
 | 
						|
	a.must(ok, "string")
 | 
						|
	return []byte(s)
 | 
						|
}
 | 
						|
 | 
						|
// DocString converts an argument to *gherkin.DocString node
 | 
						|
func (a *Arg) DocString() *gherkin.DocString {
 | 
						|
	s, ok := a.value.(*gherkin.DocString)
 | 
						|
	a.must(ok, "*gherkin.DocString")
 | 
						|
	return s
 | 
						|
}
 | 
						|
 | 
						|
// DataTable converts an argument to *gherkin.DataTable node
 | 
						|
func (a *Arg) DataTable() *gherkin.DataTable {
 | 
						|
	s, ok := a.value.(*gherkin.DataTable)
 | 
						|
	a.must(ok, "*gherkin.DataTable")
 | 
						|
	return s
 | 
						|
}
 | 
						|
 | 
						|
func (a *Arg) must(ok bool, expected string) {
 | 
						|
	if !ok {
 | 
						|
		panic(fmt.Sprintf(`cannot convert "%v" of type "%T" to type "%s"`, a.value, a.value, expected))
 | 
						|
	}
 | 
						|
}
 |