test tag parsing and merging
Этот коммит содержится в:
родитель
951b1357b4
коммит
7e9d56a900
3 изменённых файлов: 40 добавлений и 6 удалений
|
@ -130,9 +130,6 @@ func (p *parser) parseFeature() (ft *Feature, err error) {
|
||||||
ft = &Feature{Path: p.path, AST: p.ast}
|
ft = &Feature{Path: p.path, AST: p.ast}
|
||||||
switch p.peek().Type {
|
switch p.peek().Type {
|
||||||
case lexer.EOF:
|
case lexer.EOF:
|
||||||
// if p.ast.tail != nil {
|
|
||||||
// log.Println("peeked at:", p.peek().Type, p.ast.tail.prev.value.Type)
|
|
||||||
// }
|
|
||||||
return ft, ErrEmpty
|
return ft, ErrEmpty
|
||||||
case lexer.TAGS:
|
case lexer.TAGS:
|
||||||
ft.Tags = p.parseTags()
|
ft.Tags = p.parseTags()
|
||||||
|
@ -151,7 +148,6 @@ func (p *parser) parseFeature() (ft *Feature, err error) {
|
||||||
ft.Description = strings.Join(desc, "\n")
|
ft.Description = strings.Join(desc, "\n")
|
||||||
|
|
||||||
for tok = p.peek(); tok.Type != lexer.EOF; tok = p.peek() {
|
for tok = p.peek(); tok.Type != lexer.EOF; tok = p.peek() {
|
||||||
// log.Println("loop peeked:", tok.Type)
|
|
||||||
// there may be a background
|
// there may be a background
|
||||||
if tok.Type == lexer.BACKGROUND {
|
if tok.Type == lexer.BACKGROUND {
|
||||||
if ft.Background != nil {
|
if ft.Background != nil {
|
||||||
|
@ -167,9 +163,13 @@ func (p *parser) parseFeature() (ft *Feature, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// there may be tags before scenario
|
// there may be tags before scenario
|
||||||
sc := &Scenario{}
|
sc := &Scenario{Tags: ft.Tags}
|
||||||
if tok.Type == lexer.TAGS {
|
if tok.Type == lexer.TAGS {
|
||||||
sc.Tags = p.parseTags()
|
for _, t := range p.parseTags() {
|
||||||
|
if !sc.Tags.Has(t) {
|
||||||
|
sc.Tags = append(sc.Tags, t)
|
||||||
|
}
|
||||||
|
}
|
||||||
tok = p.peek()
|
tok = p.peek()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,12 @@ func (f *Feature) assertTitle(title string, t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *Feature) assertHasNumScenarios(n int, t *testing.T) {
|
||||||
|
if len(f.Scenarios) != n {
|
||||||
|
t.Fatalf("expected feature to have '%d' scenarios, but got '%d'", n, len(f.Scenarios))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func Test_parse_normal_feature(t *testing.T) {
|
func Test_parse_normal_feature(t *testing.T) {
|
||||||
p := &parser{
|
p := &parser{
|
||||||
lx: lexer.New(strings.NewReader(testFeatureSamples["feature"])),
|
lx: lexer.New(strings.NewReader(testFeatureSamples["feature"])),
|
||||||
|
|
|
@ -7,6 +7,18 @@ import (
|
||||||
"github.com/l3pp4rd/go-behat/gherkin/lexer"
|
"github.com/l3pp4rd/go-behat/gherkin/lexer"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (s *Scenario) assertHasTag(tag string, t *testing.T) {
|
||||||
|
if !s.Tags.Has(Tag(tag)) {
|
||||||
|
t.Fatalf("expected scenario '%s' to have '%s' tag, but it did not", s.Title, tag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Scenario) assertHasNumTags(n int, t *testing.T) {
|
||||||
|
if len(s.Tags) != n {
|
||||||
|
t.Fatalf("expected scenario '%s' to have '%d' tags, but it has '%d'", s.Title, n, len(s.Tags))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func Test_parse_feature_file(t *testing.T) {
|
func Test_parse_feature_file(t *testing.T) {
|
||||||
|
|
||||||
content := strings.Join([]string{
|
content := strings.Join([]string{
|
||||||
|
@ -70,4 +82,20 @@ func Test_parse_feature_file(t *testing.T) {
|
||||||
lexer.TAGS,
|
lexer.TAGS,
|
||||||
lexer.SCENARIO,
|
lexer.SCENARIO,
|
||||||
}, t)
|
}, t)
|
||||||
|
|
||||||
|
ft.assertHasNumScenarios(3, t)
|
||||||
|
|
||||||
|
ft.Scenarios[0].assertHasNumTags(2, t)
|
||||||
|
ft.Scenarios[0].assertHasTag("global-one", t)
|
||||||
|
ft.Scenarios[0].assertHasTag("cust", t)
|
||||||
|
|
||||||
|
ft.Scenarios[1].assertHasNumTags(3, t)
|
||||||
|
ft.Scenarios[1].assertHasTag("global-one", t)
|
||||||
|
ft.Scenarios[1].assertHasTag("cust", t)
|
||||||
|
ft.Scenarios[1].assertHasTag("user", t)
|
||||||
|
|
||||||
|
ft.Scenarios[2].assertHasNumTags(3, t)
|
||||||
|
ft.Scenarios[2].assertHasTag("global-one", t)
|
||||||
|
ft.Scenarios[2].assertHasTag("cust", t)
|
||||||
|
ft.Scenarios[2].assertHasTag("todo", t)
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче