do not split gherkin table to separate types
Этот коммит содержится в:
родитель
2807b07739
коммит
0f6ec04318
2 изменённых файлов: 21 добавлений и 26 удалений
|
@ -111,13 +111,20 @@ func (a *Arg) Bytes() []byte {
|
||||||
return []byte(s)
|
return []byte(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PyString converts an argument gherkin PyString node
|
// PyString converts an argument to *gherkin.PyString node
|
||||||
func (a *Arg) PyString() *gherkin.PyString {
|
func (a *Arg) PyString() *gherkin.PyString {
|
||||||
s, ok := a.value.(*gherkin.PyString)
|
s, ok := a.value.(*gherkin.PyString)
|
||||||
a.must(ok, "*gherkin.PyString")
|
a.must(ok, "*gherkin.PyString")
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Table converts an argument to *gherkin.Table node
|
||||||
|
func (a *Arg) Table() *gherkin.Table {
|
||||||
|
s, ok := a.value.(*gherkin.Table)
|
||||||
|
a.must(ok, "*gherkin.Table")
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
func (a *Arg) must(ok bool, expected string) {
|
func (a *Arg) must(ok bool, expected string) {
|
||||||
if !ok {
|
if !ok {
|
||||||
panic(fmt.Sprintf(`cannot convert "%v" of type "%T" to type "%s"`, a.value, a.value, expected))
|
panic(fmt.Sprintf(`cannot convert "%v" of type "%T" to type "%s"`, a.value, a.value, expected))
|
||||||
|
|
|
@ -102,7 +102,7 @@ type Scenario struct {
|
||||||
Title string
|
Title string
|
||||||
Steps []*Step
|
Steps []*Step
|
||||||
Tags Tags
|
Tags Tags
|
||||||
Examples *ExampleTable
|
Examples *Table
|
||||||
Feature *Feature
|
Feature *Feature
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ type Step struct {
|
||||||
Text string
|
Text string
|
||||||
Type string
|
Type string
|
||||||
PyString *PyString
|
PyString *PyString
|
||||||
Table *StepTable
|
Table *Table
|
||||||
Scenario *Scenario
|
Scenario *Scenario
|
||||||
Background *Background
|
Background *Background
|
||||||
}
|
}
|
||||||
|
@ -149,23 +149,13 @@ func (p *PyString) String() string {
|
||||||
return p.Raw
|
return p.Raw
|
||||||
}
|
}
|
||||||
|
|
||||||
// Table is a row group object used with step definition
|
// Table is a row group object used with
|
||||||
type table struct {
|
// step definition or outline scenario
|
||||||
|
type Table struct {
|
||||||
*Token
|
*Token
|
||||||
rows [][]string
|
|
||||||
}
|
|
||||||
|
|
||||||
// ExampleTable is a row group object for
|
|
||||||
// scenario outline examples
|
|
||||||
type ExampleTable struct {
|
|
||||||
*table
|
|
||||||
OutlineScenario *Scenario
|
OutlineScenario *Scenario
|
||||||
}
|
|
||||||
|
|
||||||
// StepTable is a row group object for steps
|
|
||||||
type StepTable struct {
|
|
||||||
*table
|
|
||||||
Step *Step
|
Step *Step
|
||||||
|
rows [][]string
|
||||||
}
|
}
|
||||||
|
|
||||||
var allSteps = []TokenType{
|
var allSteps = []TokenType{
|
||||||
|
@ -324,11 +314,10 @@ func (p *parser) parseScenario() (s *Scenario, err error) {
|
||||||
"but got '" + peek.Type.String() + "' instead, for scenario outline examples",
|
"but got '" + peek.Type.String() + "' instead, for scenario outline examples",
|
||||||
}, " "), examples.Line)
|
}, " "), examples.Line)
|
||||||
}
|
}
|
||||||
tbl, err := p.parseTable()
|
if s.Examples, err = p.parseTable(); err != nil {
|
||||||
if err != nil {
|
|
||||||
return s, err
|
return s, err
|
||||||
}
|
}
|
||||||
s.Examples = &ExampleTable{OutlineScenario: s, table: tbl}
|
s.Examples.OutlineScenario = s
|
||||||
}
|
}
|
||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
@ -347,11 +336,10 @@ func (p *parser) parseSteps() (steps []*Step, err error) {
|
||||||
}
|
}
|
||||||
step.PyString.Step = step
|
step.PyString.Step = step
|
||||||
case TABLE_ROW:
|
case TABLE_ROW:
|
||||||
tbl, err := p.parseTable()
|
if step.Table, err = p.parseTable(); err != nil {
|
||||||
if err != nil {
|
|
||||||
return steps, err
|
return steps, err
|
||||||
}
|
}
|
||||||
step.Table = &StepTable{Step: step, table: tbl}
|
step.Table.Step = step
|
||||||
default:
|
default:
|
||||||
return steps, p.err("pystring or table row was expected, but got: '"+tok.Type.String()+"' instead", tok.Line)
|
return steps, p.err("pystring or table row was expected, but got: '"+tok.Type.String()+"' instead", tok.Line)
|
||||||
}
|
}
|
||||||
|
@ -380,8 +368,8 @@ func (p *parser) parsePystring() (*PyString, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *parser) parseTable() (*table, error) {
|
func (p *parser) parseTable() (*Table, error) {
|
||||||
tbl := &table{}
|
tbl := &Table{}
|
||||||
for row := p.peek(); row.Type == TABLE_ROW; row = p.peek() {
|
for row := p.peek(); row.Type == TABLE_ROW; row = p.peek() {
|
||||||
var cols []string
|
var cols []string
|
||||||
for _, r := range strings.Split(strings.Trim(row.Value, "|"), "|") {
|
for _, r := range strings.Split(strings.Trim(row.Value, "|"), "|") {
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче