cql 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/cql.gemspec +2 -2
- data/fixtures/features/scen_outlines/{test_with_scenarios.feature → basic/test_with_scenarios.feature} +0 -0
- data/fixtures/features/scen_outlines/multiple_examples/test_with_scenarios.feature +19 -0
- data/fixtures/features/{simple → scenario/simple}/simple.feature +0 -0
- data/fixtures/features/{simple → scenario/simple}/test.feature +1 -1
- data/fixtures/features/scenario/simple/test2.feature +5 -0
- data/fixtures/features/{simple2 → scenario/simple}/test_full.feature +1 -1
- data/fixtures/features/{simple → scenario/simple2}/test_full.feature +1 -0
- data/fixtures/features/{table → scenario/table}/simple.feature +0 -0
- data/fixtures/features/{tagged_features → scenario/tagged_features}/simple.feature +0 -0
- data/fixtures/features/{tagged_features → scenario/tagged_features}/test.feature +0 -0
- data/fixtures/features/{tagged_features → scenario/tagged_features}/test2.feature +0 -0
- data/fixtures/features/{tagged_features → scenario/tagged_features}/test_full.feature +0 -0
- data/fixtures/features/{tags → scenario/tags}/simple.feature +0 -0
- data/fixtures/features/{tags2 → scenario/tags2}/simple.feature +0 -0
- data/fixtures/features/{tags2 → scenario/tags2}/simple2.feature +0 -0
- data/lib/dsl.rb +22 -17
- data/lib/map_reduce.rb +64 -0
- data/lib/{gherkin_repo.rb → repo.rb} +1 -5
- data/spec/filter_dsl_spec.rb +57 -10
- data/spec/map_reduce_spec.rb +34 -69
- data/spec/select_feature_dsl_spec.rb +50 -0
- data/spec/select_scen_outline_dsl_spec.rb +126 -0
- data/spec/select_scenario_dsl_spec.rb +73 -0
- data/spec/unit_spec.rb +1 -1
- metadata +25 -22
- data/fixtures/features/simple/test2.feature +0 -5
- data/lib/gherkin_map_reduce.rb +0 -68
- data/spec/select_dsl_spec.rb +0 -53
data/cql.gemspec
CHANGED
@@ -4,7 +4,7 @@ require "cucumber/platform"
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = 'cql'
|
7
|
-
s.version = "0.0.
|
7
|
+
s.version = "0.0.2"
|
8
8
|
s.authors = ["Jarrod Folino"]
|
9
9
|
s.description = 'Cucumber Query Language'
|
10
10
|
s.summary = "cucumber-#{s.version}"
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.post_install_message = %{
|
15
15
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
16
16
|
|
17
|
-
Thank you for installing
|
17
|
+
Thank you for installing cql (Cucumber Query Language)
|
18
18
|
|
19
19
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
20
20
|
|
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Feature: Test Feature
|
2
|
+
|
3
|
+
Scenario Outline: An Outline
|
4
|
+
Given something happend
|
5
|
+
Then I expect something else
|
6
|
+
Examples: One
|
7
|
+
| var_a | var_b |
|
8
|
+
| 1 | a |
|
9
|
+
| 2 | b |
|
10
|
+
|
11
|
+
Examples: Two
|
12
|
+
| var_a | var_b |
|
13
|
+
| 1 | a |
|
14
|
+
| 2 | b |
|
15
|
+
|
16
|
+
|
17
|
+
Scenario: A Scenario
|
18
|
+
Given something happend
|
19
|
+
Then I expect something else
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/dsl.rb
CHANGED
@@ -1,11 +1,18 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/map_reduce"
|
1
2
|
module CQL
|
3
|
+
DSL_KEYWORDS = %w(features scenario_outlines scenarios all step_lines examples)
|
2
4
|
module Dsl
|
3
|
-
|
4
|
-
|
5
|
-
|
5
|
+
(CQL::QUERY_VALUES + CQL::DSL_KEYWORDS).each do |method_name|
|
6
|
+
define_method(method_name) { |*args|
|
7
|
+
return method_name if args.size == 0
|
8
|
+
{method_name=>args}
|
9
|
+
}
|
6
10
|
end
|
7
11
|
|
8
|
-
|
12
|
+
alias :everything :all
|
13
|
+
alias :complete :all
|
14
|
+
|
15
|
+
def select *what
|
9
16
|
@what = what
|
10
17
|
end
|
11
18
|
|
@@ -15,12 +22,15 @@ module CQL
|
|
15
22
|
end
|
16
23
|
|
17
24
|
def tags *tags
|
25
|
+
return "tags" if tags.size == 0
|
18
26
|
{'tags'=>tags}
|
19
27
|
end
|
20
28
|
|
21
29
|
def with filter
|
22
30
|
if filter.has_key? 'tags'
|
23
|
-
@data = CQL::MapReduce.
|
31
|
+
@data = CQL::MapReduce.filter_features(@data, 'tags'=>filter['tags'])
|
32
|
+
elsif filter.has_key? 'name'
|
33
|
+
@data = CQL::MapReduce.filter_features(@data, 'feature'=>filter['name'])
|
24
34
|
end
|
25
35
|
@data
|
26
36
|
end
|
@@ -32,20 +42,15 @@ module CQL
|
|
32
42
|
def initialize features, &block
|
33
43
|
@data = features
|
34
44
|
@data = self.instance_eval(&block)
|
35
|
-
|
36
|
-
if
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
@data= CQL::MapReduce.find_child(@data, 'what'=>'scenario_outline')
|
42
|
-
elsif key== "names-scenarios"
|
43
|
-
@data = CQL::MapReduce.find_child(@data, 'what'=>'scenario')
|
45
|
+
|
46
|
+
@data= CQL::MapReduce.filter_sso(@data, 'what'=>@from[0, @from.size-1]) if @from != "features"
|
47
|
+
result = Array.new(@data.size)
|
48
|
+
result = result.map { |e| {} }
|
49
|
+
@what.each do |w|
|
50
|
+
CQL::MapReduce.send(w, @data).each_with_index { |e, i| result[i][w]=e }
|
44
51
|
end
|
45
|
-
@data
|
52
|
+
@data = result.size == 1 ? result.first : result
|
46
53
|
end
|
47
54
|
end
|
48
|
-
|
49
55
|
end
|
50
|
-
|
51
56
|
end
|
data/lib/map_reduce.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/dsl"
|
2
|
+
module CQL
|
3
|
+
|
4
|
+
QUERY_VALUES = %w(name uri line description type steps id tags examples)
|
5
|
+
|
6
|
+
class MapReduce
|
7
|
+
|
8
|
+
CQL::QUERY_VALUES.each do |property|
|
9
|
+
define_singleton_method(property) do |input|
|
10
|
+
input = [input] if input.class != Array
|
11
|
+
input.map { |a| a[property] }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
%w(all everything complete).each do |method_name|
|
16
|
+
define_singleton_method(method_name){|input|input}
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.step_lines input
|
20
|
+
input = [input] if input.class != Array
|
21
|
+
steps(input).map do |scen|
|
22
|
+
scen.map { |line| line['keyword'] + line['name'] }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.filter_features input, args
|
27
|
+
if args.has_key?('feature') && args['feature'][0].class == String
|
28
|
+
input = input.find_all { |feature| feature['name'] == args['feature'][0] }
|
29
|
+
elsif args.has_key?('feature') && args['feature'][0].class == Regexp
|
30
|
+
input = input.find_all { |feature| feature['name'] =~ args['feature'][0] }
|
31
|
+
end
|
32
|
+
input = input.find_all { |feature| has_tags feature['tags'], args['tags'] } if args.has_key? 'tags'
|
33
|
+
input
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.filter_sso input, args
|
37
|
+
results = []
|
38
|
+
input = filter_features(input, 'feature'=>args['feature']) if args.has_key?('feature')
|
39
|
+
input.each do |feature|
|
40
|
+
feature['elements'].each do |element|
|
41
|
+
results.push element if element['type'] == args['what']
|
42
|
+
end
|
43
|
+
end
|
44
|
+
results
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.tag_set input
|
48
|
+
tags = Set.new
|
49
|
+
input.each do |feature|
|
50
|
+
feature['elements'].each do |element|
|
51
|
+
break if element['tags'] == nil
|
52
|
+
element['tags'].each { |tag| tags.add tag['name'] }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
tags.to_a
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.has_tags given, search
|
59
|
+
return false if given == nil
|
60
|
+
search.count { |tag_for_search| given.map { |t| t["name"] }.include?(tag_for_search) }==search.size
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
@@ -1,14 +1,10 @@
|
|
1
1
|
require 'gherkin/parser/parser'
|
2
2
|
require 'gherkin/formatter/json_formatter'
|
3
3
|
require 'stringio'
|
4
|
-
require 'json'
|
5
|
-
require 'set'
|
6
|
-
|
7
|
-
require File.dirname(__FILE__) + "/gherkin_map_reduce"
|
8
4
|
require File.dirname(__FILE__) + "/dsl"
|
9
5
|
|
10
6
|
module CQL
|
11
|
-
class
|
7
|
+
class Repository
|
12
8
|
include Dsl
|
13
9
|
attr_reader :parsed_feature_files
|
14
10
|
|
data/spec/filter_dsl_spec.rb
CHANGED
@@ -1,39 +1,86 @@
|
|
1
1
|
require 'rspec'
|
2
|
-
require File.dirname(__FILE__) + "/../lib/"
|
2
|
+
require File.dirname(__FILE__) + "/../lib/repo"
|
3
3
|
|
4
4
|
describe "cql" do
|
5
5
|
|
6
|
-
describe 'filter' do
|
6
|
+
describe 'filter features by name' do
|
7
|
+
it 'should filter by name' do
|
8
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/tagged_features"
|
9
|
+
|
10
|
+
result = gs.query do
|
11
|
+
select name
|
12
|
+
from features
|
13
|
+
with name 'Test2 Feature'
|
14
|
+
end
|
15
|
+
|
16
|
+
result.should == {"name"=> "Test2 Feature"}
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should filter by name regexp' do
|
20
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/tagged_features"
|
21
|
+
|
22
|
+
result = gs.query do
|
23
|
+
select name
|
24
|
+
from features
|
25
|
+
with name /Test2 Feature/
|
26
|
+
end
|
27
|
+
|
28
|
+
result.should == {"name"=> "Test2 Feature"}
|
29
|
+
|
30
|
+
result = gs.query do
|
31
|
+
select name
|
32
|
+
from features
|
33
|
+
with name /Feature/
|
34
|
+
end
|
35
|
+
|
36
|
+
result.size.should == 3
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'filter features by tag' do
|
7
41
|
it 'should filter by a single tag' do
|
8
|
-
gs = CQL::
|
42
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/tagged_features"
|
9
43
|
|
10
44
|
result = gs.query do
|
11
|
-
select
|
45
|
+
select name
|
12
46
|
from features
|
13
47
|
with tags '@one'
|
14
48
|
end
|
15
49
|
|
16
|
-
result.should == ["Test Feature", "Test3 Feature"]
|
50
|
+
result.should == [{"name"=> "Test Feature"}, {"name"=>"Test3 Feature"}]
|
51
|
+
|
52
|
+
result = gs.query do
|
53
|
+
select name
|
54
|
+
from features
|
55
|
+
with tags '@two'
|
56
|
+
end
|
57
|
+
|
58
|
+
result.should == [{"name"=> "Test2 Feature"}, {"name"=>"Test3 Feature"}]
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should filter by multiple filters' do
|
62
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/tagged_features"
|
17
63
|
|
18
64
|
result = gs.query do
|
19
|
-
select
|
65
|
+
select name
|
20
66
|
from features
|
21
67
|
with tags '@two'
|
68
|
+
with tags '@one'
|
22
69
|
end
|
23
70
|
|
24
|
-
result.should ==
|
71
|
+
result.should == {"name"=>"Test3 Feature"}
|
25
72
|
end
|
26
73
|
|
27
74
|
it 'should filter by a multiple tags' do
|
28
|
-
gs = CQL::
|
75
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/tagged_features"
|
29
76
|
|
30
77
|
result = gs.query do
|
31
|
-
select
|
78
|
+
select name
|
32
79
|
from features
|
33
80
|
with tags '@one', '@two'
|
34
81
|
end
|
35
82
|
|
36
|
-
result.should == "Test3 Feature"
|
83
|
+
result.should == {"name"=>"Test3 Feature"}
|
37
84
|
end
|
38
85
|
end
|
39
86
|
|
data/spec/map_reduce_spec.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'rspec'
|
2
|
-
require File.dirname(__FILE__) + "/../lib/"
|
2
|
+
require File.dirname(__FILE__) + "/../lib/repo"
|
3
3
|
|
4
4
|
describe "cql" do
|
5
5
|
|
6
6
|
describe "file parsing" do
|
7
7
|
it 'should find the physical files' do
|
8
|
-
gs = CQL::
|
8
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/simple"
|
9
9
|
result = CQL::MapReduce.uri(gs.parsed_feature_files)
|
10
10
|
result[0].should =~ /simple\.feature/
|
11
11
|
result[1].should =~ /test\.feature/
|
@@ -16,8 +16,8 @@ describe "cql" do
|
|
16
16
|
|
17
17
|
describe "tags" do
|
18
18
|
it "retrieve tags from a scenario" do
|
19
|
-
gs = CQL::
|
20
|
-
CQL::MapReduce.
|
19
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/tags2"
|
20
|
+
CQL::MapReduce.tag_set(gs.parsed_feature_files).sort.should == ["@five", "@four", "@one", "@two"].sort
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should filter features by tag' do
|
@@ -25,32 +25,39 @@ describe "cql" do
|
|
25
25
|
{"keyword"=>"Feature", "name"=>"Test Feature", "line"=>2, "description"=>"", "tags"=>[{"name"=>"@one", "line"=>1}], "id"=>"test-feature"},
|
26
26
|
{"keyword"=>"Feature", "name"=>"Test2 Feature", "line"=>1, "description"=>"", "id"=>"test2-feature"},
|
27
27
|
{"keyword"=>"Feature", "name"=>"Test3 Feature", "line"=>2, "description"=>"", "tags"=>[{"name"=>"@one", "line"=>1}], "id"=>"test3-feature"}]
|
28
|
-
result = CQL::MapReduce.
|
28
|
+
result = CQL::MapReduce.filter_features(input, 'tags'=>['@one'])
|
29
29
|
result.size.should == 2
|
30
30
|
result[0]['name'].should == "Test Feature"
|
31
31
|
result[1]['name'].should == "Test3 Feature"
|
32
32
|
end
|
33
33
|
|
34
|
+
it 'should filter by multiple tags' do
|
35
|
+
input = [{"keyword"=>"Feature", "name"=>"Simple", "line"=>1, "description"=>"", "id"=>"simple"},
|
36
|
+
{"keyword"=>"Feature", "name"=>"Test Feature", "line"=>2, "description"=>"", "tags"=>[{"name"=>"@one", "line"=>1}], "id"=>"test-feature"},
|
37
|
+
{"keyword"=>"Feature", "name"=>"Test2 Feature", "line"=>2, "description"=>"", "tags"=>[{"name"=>"@two", "line"=>1}], "id"=>"test2-feature"},
|
38
|
+
{"keyword"=>"Feature", "name"=>"Test3 Feature", "line"=>2, "description"=>"", "tags"=>[{"name"=>"@one", "line"=>1}, {"name"=>"@two", "line"=>1}], "id"=>"test3-feature"}]
|
39
|
+
result = CQL::MapReduce.filter_features(input, 'tags'=>['@one', '@two'])
|
40
|
+
result.should == [{"keyword"=>"Feature", "name"=>"Test3 Feature",
|
41
|
+
"line"=>2, "description"=>"",
|
42
|
+
"tags"=>[{"name"=>"@one", "line"=>1},
|
43
|
+
{"name"=>"@two", "line"=>1}],
|
44
|
+
"id"=>"test3-feature"}]
|
45
|
+
end
|
34
46
|
end
|
35
47
|
|
36
48
|
describe 'features query' do
|
37
49
|
it 'should find all feature names' do
|
38
|
-
gs = CQL::
|
39
|
-
CQL::MapReduce.
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'should filter by a scenario by feature and then by tag' do
|
43
|
-
gs = CQL::GherkinRepository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/tags2"
|
44
|
-
CQL::MapReduce.scenario_by_feature_and_tag(gs.parsed_feature_files, "Not here", "@three").should == []
|
50
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/simple"
|
51
|
+
CQL::MapReduce.name(gs.parsed_feature_files).should eql ["Simple", "Test Feature", "Test2 Feature", "Test3 Feature"]
|
45
52
|
end
|
46
53
|
|
47
54
|
it 'should retrieve a full feature' do
|
48
|
-
gs = CQL::
|
49
|
-
result = CQL::MapReduce.
|
50
|
-
result['name'].should == "Test Feature"
|
51
|
-
result['elements'][0]['name'].should == "Testing the slurping"
|
52
|
-
result['elements'].should == [{"keyword"=>"Scenario", "name"=>"Testing the slurping", "line"=>3,
|
53
|
-
"description"=>"", "id"=>"test-feature;testing-the-slurping", "type"=>"scenario",
|
55
|
+
gs = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scenario/simple"
|
56
|
+
result = CQL::MapReduce.filter_features(gs.parsed_feature_files, {'feature'=>["Test Feature"]})
|
57
|
+
result[0]['name'].should == "Test Feature"
|
58
|
+
result[0]['elements'][0]['name'].should == "Testing the slurping 1"
|
59
|
+
result[0]['elements'].should == [{"keyword"=>"Scenario", "name"=>"Testing the slurping 1", "line"=>3,
|
60
|
+
"description"=>"", "id"=>"test-feature;testing-the-slurping-1", "type"=>"scenario",
|
54
61
|
"steps"=>[{"keyword"=>"Given ", "name"=>"something happend", "line"=>4},
|
55
62
|
{"keyword"=>"Then ", "name"=>"I expect something else", "line"=>5}]},
|
56
63
|
{"keyword"=>"Scenario", "name"=>"Testing the slurping not to be found", "line"=>7,
|
@@ -61,62 +68,20 @@ describe "cql" do
|
|
61
68
|
|
62
69
|
describe 'scenario query' do
|
63
70
|
it 'should get all scenarios as a list' do
|
64
|
-
gs = CQL::
|
65
|
-
CQL::MapReduce.
|
66
|
-
|
67
|
-
|
68
|
-
it 'should get a full scenario' do
|
69
|
-
simple_path = File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/simple"
|
70
|
-
gs = CQL::GherkinRepository.new simple_path
|
71
|
-
expected = {"keyword"=>"Scenario", "name"=>"Testing the slurping", "line"=>3,
|
72
|
-
"description"=>"", "id"=>"test-feature;testing-the-slurping", "type"=>"scenario",
|
73
|
-
"steps"=>[{"keyword"=>"Given ", "name"=>"something happend", "line"=>4},
|
74
|
-
{"keyword"=>"Then ", "name"=>"I expect something else", "line"=>5}]}
|
75
|
-
CQL::MapReduce.scenario(gs.parsed_feature_files, {'what'=>'scenario', 'feature'=>"Test Feature", 'child_name'=>"Testing the slurping"}).should == expected
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'should find scenarios by a single tag' do
|
79
|
-
gs = CQL::GherkinRepository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/tags"
|
80
|
-
CQL::MapReduce.scenario_by_feature_and_tag(gs.parsed_feature_files, "Simple", true, "@one").should == ['Next', 'Another']
|
81
|
-
CQL::MapReduce.scenario_by_feature_and_tag(gs.parsed_feature_files, "Simple", true, "@two").should == ['Has a table', 'Blah']
|
82
|
-
|
83
|
-
gs = CQL::GherkinRepository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/tags2"
|
84
|
-
CQL::MapReduce.scenario_by_feature_and_tag(gs.parsed_feature_files, "Simple", true, "@one").should == ['Next', 'Another']
|
85
|
-
CQL::MapReduce.scenario_by_feature_and_tag(gs.parsed_feature_files, "Simple", true, "@two").should == ['Has a table', 'Blah']
|
86
|
-
CQL::MapReduce.scenario_by_feature_and_tag(gs.parsed_feature_files, "Simple 2", true, "@one").should == ['Next', 'Another']
|
87
|
-
CQL::MapReduce.scenario_by_feature_and_tag(gs.parsed_feature_files, "Simple 2", true, "@two").should == ['Has a table hmmm', 'Blah blah']
|
88
|
-
|
89
|
-
CQL::MapReduce.scenario_by_feature_and_tag(gs.parsed_feature_files, "Simple", true, "@three").should == []
|
90
|
-
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'should find scenarios that do not have a specified tag' do
|
94
|
-
gs = CQL::GherkinRepository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/tags"
|
95
|
-
CQL::MapReduce.scenario_by_feature_and_tag(gs.parsed_feature_files, "Simple", false, "@one").should == ['Has a table', 'Blah', 'Yet Another']
|
96
|
-
#GQL::MapReduce.scenario_by_feature_wo_tag(gs.parsed_feature_files, "Simple", "@two").should == ['Has a table', 'Blah']
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'should find scenarios by multiple tags' do
|
100
|
-
gs = CQL::GherkinRepository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/tags2"
|
101
|
-
CQL::MapReduce.scenario_by_feature_and_tag(gs.parsed_feature_files, "Simple 2", true, "@two", "@four").should == ['Has a table hmmm']
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'should retrieve the table data' do
|
105
|
-
gs = CQL::GherkinRepository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/table"
|
106
|
-
expected = {"keyword"=>"Scenario", "name"=>"Has a table", "line"=>3, "description"=>"", "id"=>"simple;has-a-table", "type"=>"scenario",
|
107
|
-
"steps"=>[{"keyword"=>"Given ", "name"=>"Something", "line"=>4,
|
108
|
-
"rows"=>[{"cells"=>["a", "a"], "line"=>5},
|
109
|
-
{"cells"=>["s", "a"], "line"=>6}, {"cells"=>["s", "s"], "line"=>7}]},
|
110
|
-
{"keyword"=>"Then ", "name"=>"something else", "line"=>8}]}
|
111
|
-
CQL::MapReduce.scenario(gs.parsed_feature_files, {'what'=>'scenario', 'feature'=>"Simple", 'child_name'=>"Has a table"}).should == expected
|
71
|
+
gs = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scen_outlines/basic"
|
72
|
+
result = CQL::MapReduce.filter_sso(gs.parsed_feature_files, {'feature'=>["Test Feature"], 'what'=>'scenario'})
|
73
|
+
result.should == [{"keyword"=>"Scenario", "name"=>"A Scenario", "line"=>13, "description"=>"", "id"=>"test-feature;a-scenario", "type"=>"scenario", "steps"=>[{"keyword"=>"Given ", "name"=>"something happend", "line"=>14}, {"keyword"=>"Then ", "name"=>"I expect something else", "line"=>15}]}]
|
112
74
|
end
|
113
75
|
end
|
114
76
|
|
115
77
|
describe 'scenario outline query' do
|
116
78
|
it 'should get scenario outlines as a list' do
|
117
|
-
gs = CQL::
|
118
|
-
CQL::MapReduce.
|
119
|
-
|
79
|
+
gs = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scen_outlines/basic"
|
80
|
+
result = CQL::MapReduce.filter_sso(gs.parsed_feature_files, {'feature'=>["Test Feature"], 'what'=> 'scenario'})
|
81
|
+
result.should == [{"keyword"=>"Scenario", "name"=>"A Scenario", "line"=>13, "description"=>"", "id"=>"test-feature;a-scenario", "type"=>"scenario", "steps"=>[{"keyword"=>"Given ", "name"=>"something happend", "line"=>14}, {"keyword"=>"Then ", "name"=>"I expect something else", "line"=>15}]}]
|
82
|
+
|
83
|
+
result = CQL::MapReduce.filter_sso(gs.parsed_feature_files, {'feature'=> ["Test Feature"], 'what'=> 'scenario_outline'})
|
84
|
+
result.should == [{"keyword"=>"Scenario Outline", "name"=>"An Outline", "line"=>3, "description"=>"", "id"=>"test-feature;an-outline", "type"=>"scenario_outline", "steps"=>[{"keyword"=>"Given ", "name"=>"something happend", "line"=>4}, {"keyword"=>"Then ", "name"=>"I expect something else", "line"=>5}], "examples"=>[{"keyword"=>"Examples", "name"=>"", "line"=>6, "description"=>"", "id"=>"test-feature;an-outline;", "rows"=>[{"cells"=>["var_a", "var_b"], "line"=>7, "id"=>"test-feature;an-outline;;1"}, {"cells"=>["1", "a"], "line"=>8, "id"=>"test-feature;an-outline;;2"}, {"cells"=>["2", "b"], "line"=>9, "id"=>"test-feature;an-outline;;3"}, {"cells"=>["3", "c"], "line"=>10, "id"=>"test-feature;an-outline;;4"}, {"cells"=>["4", "d"], "line"=>11, "id"=>"test-feature;an-outline;;5"}]}]}]
|
120
85
|
end
|
121
86
|
end
|
122
87
|
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require File.dirname(__FILE__) + "/../lib/repo"
|
3
|
+
|
4
|
+
describe "select" do
|
5
|
+
describe "feature" do
|
6
|
+
it 'should return multiple feature file names' do
|
7
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/simple"
|
8
|
+
result = gs.query do
|
9
|
+
select name
|
10
|
+
from features
|
11
|
+
end
|
12
|
+
result.should == [{"name"=>"Simple"}, {"name"=>"Test Feature"},
|
13
|
+
{"name"=>"Test2 Feature"}, {"name"=>"Test3 Feature"}]
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should find the feature description' do
|
17
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/simple2"
|
18
|
+
result = gs.query do
|
19
|
+
select description
|
20
|
+
from features
|
21
|
+
end
|
22
|
+
result.should == {"description"=>"The cat in the hat"}
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should find the feature file uri' do
|
26
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/simple"
|
27
|
+
result = gs.query do
|
28
|
+
select uri
|
29
|
+
from features
|
30
|
+
end
|
31
|
+
result[0]['uri'].should =~ /simple\.feature/
|
32
|
+
result[1]['uri'].should =~ /test\.feature/
|
33
|
+
result[2]['uri'].should =~ /test2\.feature/
|
34
|
+
result[3]['uri'].should =~ /test\_full\.feature/
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should return multiple feature file names with associated tags' do
|
38
|
+
gs = CQL::Repository.new File.dirname(__FILE__) + "/../fixtures/features/scenario/tagged_features"
|
39
|
+
result = gs.query do
|
40
|
+
select name, tags
|
41
|
+
from features
|
42
|
+
end
|
43
|
+
result.should == [{"name"=>"Simple", "tags"=>nil},
|
44
|
+
{"name"=>"Test Feature", "tags"=>[{"name"=>"@one", "line"=>1}]},
|
45
|
+
{"name"=>"Test2 Feature", "tags"=>[{"name"=>"@two", "line"=>1}]},
|
46
|
+
{"name"=>"Test3 Feature", "tags"=>[{"name"=>"@one", "line"=>1}, {"name"=>"@two", "line"=>1}]}]
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require File.dirname(__FILE__) + "/../lib/repo"
|
3
|
+
|
4
|
+
describe "select" do
|
5
|
+
describe "single value, single results" do
|
6
|
+
it 'should get scenario outlines line number' do
|
7
|
+
gs = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scen_outlines/basic"
|
8
|
+
result = gs.query do
|
9
|
+
select line
|
10
|
+
from scenario_outlines
|
11
|
+
end
|
12
|
+
result.should == {"line"=>3}
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should get scenario outlines name' do
|
16
|
+
gs = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scen_outlines/basic"
|
17
|
+
result = gs.query do
|
18
|
+
select name
|
19
|
+
from scenario_outlines
|
20
|
+
end
|
21
|
+
result.should == {"name"=> "An Outline"}
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return the examples used" do
|
25
|
+
gr = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scen_outlines/basic"
|
26
|
+
result = gr.query do
|
27
|
+
select examples
|
28
|
+
from scenario_outlines
|
29
|
+
end
|
30
|
+
result.should == {"examples"=>[{"keyword"=>"Examples", "name"=>"", "line"=>6,
|
31
|
+
"description"=>"", "id"=>"test-feature;an-outline;",
|
32
|
+
"rows"=>[{"cells"=>["var_a", "var_b"], "line"=>7, "id"=>"test-feature;an-outline;;1"},
|
33
|
+
{"cells"=>["1", "a"], "line"=>8, "id"=>"test-feature;an-outline;;2"},
|
34
|
+
{"cells"=>["2", "b"], "line"=>9, "id"=>"test-feature;an-outline;;3"},
|
35
|
+
{"cells"=>["3", "c"], "line"=>10, "id"=>"test-feature;an-outline;;4"},
|
36
|
+
{"cells"=>["4", "d"], "line"=>11, "id"=>"test-feature;an-outline;;5"}]
|
37
|
+
}]}
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return multiple examples used for a single scenario outline" do
|
41
|
+
gr = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scen_outlines/multiple_examples"
|
42
|
+
result = gr.query do
|
43
|
+
select examples
|
44
|
+
from scenario_outlines
|
45
|
+
end
|
46
|
+
result.should == {"examples"=>[{"keyword"=>"Examples", "name"=>"One", "line"=>6, "description"=>"", "id"=>"test-feature;an-outline;one",
|
47
|
+
"rows"=>[{"cells"=>["var_a", "var_b"], "line"=>7, "id"=>"test-feature;an-outline;one;1"},
|
48
|
+
{"cells"=>["1", "a"], "line"=>8, "id"=>"test-feature;an-outline;one;2"},
|
49
|
+
{"cells"=>["2", "b"], "line"=>9, "id"=>"test-feature;an-outline;one;3"}]},
|
50
|
+
{"keyword"=>"Examples", "name"=>"Two", "line"=>11, "description"=>"", "id"=>"test-feature;an-outline;two",
|
51
|
+
"rows"=>[{"cells"=>["var_a", "var_b"], "line"=>12, "id"=>"test-feature;an-outline;two;1"},
|
52
|
+
{"cells"=>["1", "a"], "line"=>13, "id"=>"test-feature;an-outline;two;2"},
|
53
|
+
{"cells"=>["2", "b"], "line"=>14, "id"=>"test-feature;an-outline;two;3"}]}]}
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "single value, multiple results" do
|
59
|
+
it 'should get scenario outlines as is when no select criteria given' do
|
60
|
+
expected = {"all"=>{"keyword"=>"Scenario Outline",
|
61
|
+
"name"=>"An Outline",
|
62
|
+
"line"=>3, "description"=>"",
|
63
|
+
"id"=>"test-feature;an-outline", "type"=>"scenario_outline",
|
64
|
+
"steps"=>[{"keyword"=>"Given ", "name"=>"something happend", "line"=>4},
|
65
|
+
{"keyword"=>"Then ", "name"=>"I expect something else", "line"=>5}],
|
66
|
+
"examples"=>[{"keyword"=>"Examples", "name"=>"", "line"=>6, "description"=>"", "id"=>"test-feature;an-outline;",
|
67
|
+
"rows"=>[{"cells"=>["var_a", "var_b"], "line"=>7, "id"=>"test-feature;an-outline;;1"},
|
68
|
+
{"cells"=>["1", "a"], "line"=>8, "id"=>"test-feature;an-outline;;2"},
|
69
|
+
{"cells"=>["2", "b"], "line"=>9, "id"=>"test-feature;an-outline;;3"},
|
70
|
+
{"cells"=>["3", "c"], "line"=>10, "id"=>"test-feature;an-outline;;4"},
|
71
|
+
{"cells"=>["4", "d"], "line"=>11, "id"=>"test-feature;an-outline;;5"}]}]}}
|
72
|
+
|
73
|
+
gs = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scen_outlines/basic"
|
74
|
+
result = gs.query do
|
75
|
+
select all
|
76
|
+
from scenario_outlines
|
77
|
+
end
|
78
|
+
result.should == expected
|
79
|
+
|
80
|
+
result = gs.query do
|
81
|
+
select everything
|
82
|
+
from scenario_outlines
|
83
|
+
end
|
84
|
+
result.should == expected
|
85
|
+
|
86
|
+
result = gs.query do
|
87
|
+
select complete
|
88
|
+
from scenario_outlines
|
89
|
+
end
|
90
|
+
result.should == expected
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "select all" do
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "special selectors" do
|
99
|
+
it 'should get the full step line scenario outlines' do
|
100
|
+
gs = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scen_outlines/basic"
|
101
|
+
result = gs.query do
|
102
|
+
select step_lines
|
103
|
+
from scenario_outlines
|
104
|
+
end
|
105
|
+
result.should == {"step_lines"=> ["Given something happend", "Then I expect something else"]}
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "multiple values" do
|
110
|
+
it 'should get scenario outlines name and line numbers as a map' do
|
111
|
+
gs = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scen_outlines/basic"
|
112
|
+
result = gs.query do
|
113
|
+
select name, line, type, step_lines, id, steps
|
114
|
+
from scenario_outlines
|
115
|
+
end
|
116
|
+
result.should == {'name'=>"An Outline",
|
117
|
+
'line'=>3,
|
118
|
+
'id'=>'test-feature;an-outline',
|
119
|
+
'type'=>'scenario_outline',
|
120
|
+
"steps"=>[{"keyword"=>"Given ", "name"=>"something happend", "line"=>4}, {"keyword"=>"Then ", "name"=>"I expect something else", "line"=>5}],
|
121
|
+
"step_lines"=>["Given something happend", "Then I expect something else"]
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require File.dirname(__FILE__) + "/../lib/repo"
|
3
|
+
|
4
|
+
describe "select" do
|
5
|
+
|
6
|
+
describe "single value, multiple results" do
|
7
|
+
it 'should get scenario line number' do
|
8
|
+
gr = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scenario/simple2"
|
9
|
+
result = gr.query do
|
10
|
+
select line
|
11
|
+
from scenarios
|
12
|
+
end
|
13
|
+
result.should == [{"line"=> 6}, {"line"=> 11}, {"line"=> 16}, {"line"=> 21}]
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should get scenario name' do
|
17
|
+
gr = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scenario/simple2"
|
18
|
+
result = gr.query do
|
19
|
+
select name
|
20
|
+
from scenarios
|
21
|
+
end
|
22
|
+
result.should == [{"name"=> "Testing the slurping"}, {"name"=> "Testing again"},
|
23
|
+
{"name"=> "Testing yet again"}, {"name"=> "Testing yet again part 2"}]
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should get scenario name from multiple feature files' do
|
27
|
+
gr = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scenario/simple"
|
28
|
+
result = gr.query do
|
29
|
+
select name
|
30
|
+
from scenarios
|
31
|
+
end
|
32
|
+
result.should == [{"name"=> "Has a table"}, {"name"=> "Testing the slurping 1"},
|
33
|
+
{"name"=> "Testing the slurping not to be found"}, {"name"=> "Testing the slurping 2"},
|
34
|
+
{"name"=> "Testing the slurping 3"}, {"name"=> "Testing again"},
|
35
|
+
{"name"=> "Testing yet again"}, {"name"=> "Testing yet again part 2"}]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "multiple values" do
|
40
|
+
it 'should get multiple scenarios as a list of maps' do
|
41
|
+
gr = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scenario/simple2"
|
42
|
+
result = gr.query do
|
43
|
+
select line, name
|
44
|
+
from scenarios
|
45
|
+
end
|
46
|
+
result.should == [{'line'=>6, 'name'=>"Testing the slurping"}, {'line'=>11, 'name'=>"Testing again"},
|
47
|
+
{'line'=>16, 'name'=>"Testing yet again"}, {'line'=>21, 'name'=>"Testing yet again part 2"}]
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should select all" do
|
51
|
+
gr = CQL::Repository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scenario/table"
|
52
|
+
expected = {"all"=>{"keyword"=>"Scenario", "name"=>"Has a table", "line"=>3,
|
53
|
+
"description"=>"", "id"=>"simple;has-a-table", "type"=>"scenario",
|
54
|
+
"steps"=>[{"keyword"=>"Given ", "name"=>"Something", "line"=>4,
|
55
|
+
"rows"=>[{"cells"=>["a", "a"], "line"=>5}, {"cells"=>["s", "a"], "line"=>6},
|
56
|
+
{"cells"=>["s", "s"], "line"=>7}]},
|
57
|
+
{"keyword"=>"Then ", "name"=>"something else", "line"=>8}]}}
|
58
|
+
|
59
|
+
result = gr.query do
|
60
|
+
select all
|
61
|
+
from scenarios
|
62
|
+
end
|
63
|
+
result.should == expected
|
64
|
+
|
65
|
+
result = gr.query do
|
66
|
+
select complete
|
67
|
+
from scenarios
|
68
|
+
end
|
69
|
+
result.should == expected
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
data/spec/unit_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: gherkin
|
@@ -85,27 +85,30 @@ files:
|
|
85
85
|
- README.md
|
86
86
|
- cql.gemspec
|
87
87
|
- fixtures/.gitkeep
|
88
|
-
- fixtures/features/scen_outlines/test_with_scenarios.feature
|
89
|
-
- fixtures/features/
|
90
|
-
- fixtures/features/simple/
|
91
|
-
- fixtures/features/simple/
|
92
|
-
- fixtures/features/simple/
|
93
|
-
- fixtures/features/
|
94
|
-
- fixtures/features/
|
95
|
-
- fixtures/features/
|
96
|
-
- fixtures/features/tagged_features/
|
97
|
-
- fixtures/features/tagged_features/
|
98
|
-
- fixtures/features/tagged_features/
|
99
|
-
- fixtures/features/
|
100
|
-
- fixtures/features/
|
101
|
-
- fixtures/features/tags2/
|
88
|
+
- fixtures/features/scen_outlines/basic/test_with_scenarios.feature
|
89
|
+
- fixtures/features/scen_outlines/multiple_examples/test_with_scenarios.feature
|
90
|
+
- fixtures/features/scenario/simple/simple.feature
|
91
|
+
- fixtures/features/scenario/simple/test.feature
|
92
|
+
- fixtures/features/scenario/simple/test2.feature
|
93
|
+
- fixtures/features/scenario/simple/test_full.feature
|
94
|
+
- fixtures/features/scenario/simple2/test_full.feature
|
95
|
+
- fixtures/features/scenario/table/simple.feature
|
96
|
+
- fixtures/features/scenario/tagged_features/simple.feature
|
97
|
+
- fixtures/features/scenario/tagged_features/test.feature
|
98
|
+
- fixtures/features/scenario/tagged_features/test2.feature
|
99
|
+
- fixtures/features/scenario/tagged_features/test_full.feature
|
100
|
+
- fixtures/features/scenario/tags/simple.feature
|
101
|
+
- fixtures/features/scenario/tags2/simple.feature
|
102
|
+
- fixtures/features/scenario/tags2/simple2.feature
|
102
103
|
- lib/dsl.rb
|
103
|
-
- lib/
|
104
|
-
- lib/
|
104
|
+
- lib/map_reduce.rb
|
105
|
+
- lib/repo.rb
|
105
106
|
- projectFilesBackup/.idea/workspace.xml
|
106
107
|
- spec/filter_dsl_spec.rb
|
107
108
|
- spec/map_reduce_spec.rb
|
108
|
-
- spec/
|
109
|
+
- spec/select_feature_dsl_spec.rb
|
110
|
+
- spec/select_scen_outline_dsl_spec.rb
|
111
|
+
- spec/select_scenario_dsl_spec.rb
|
109
112
|
- spec/unit_spec.rb
|
110
113
|
homepage:
|
111
114
|
licenses: []
|
@@ -114,7 +117,7 @@ post_install_message: ! '
|
|
114
117
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
115
118
|
|
116
119
|
|
117
|
-
Thank you for installing
|
120
|
+
Thank you for installing cql (Cucumber Query Language)
|
118
121
|
|
119
122
|
|
120
123
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
@@ -139,8 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
142
|
version: '0'
|
140
143
|
requirements: []
|
141
144
|
rubyforge_project:
|
142
|
-
rubygems_version: 1.8.
|
145
|
+
rubygems_version: 1.8.24
|
143
146
|
signing_key:
|
144
147
|
specification_version: 3
|
145
|
-
summary: cucumber-0.0.
|
148
|
+
summary: cucumber-0.0.2
|
146
149
|
test_files: []
|
data/lib/gherkin_map_reduce.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
module CQL
|
2
|
-
class MapReduce
|
3
|
-
|
4
|
-
def self.overview input
|
5
|
-
input.class == Array ? input.map { |a| a['name'] } : input['name']
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.uri input
|
9
|
-
input.map { |a| a['uri'] }
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.find_feature input, args
|
13
|
-
input = input.find_all { |feature| feature['name'] == args['feature'] } if args.has_key? 'feature'
|
14
|
-
input = input.find_all { |feature| has_tags feature['tags'], args['tags'] } if args.has_key? 'tags'
|
15
|
-
if input.size == 1
|
16
|
-
input = input.first
|
17
|
-
end
|
18
|
-
input
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.scenario_by_feature_and_tag input, feature_to_find, condition, *tags_to_find
|
22
|
-
scenarios = []
|
23
|
-
input.each do |feature|
|
24
|
-
if feature['name'] == feature_to_find
|
25
|
-
feature['elements'].each do |element|
|
26
|
-
if element['type'] == "scenario" and has_tags(element['tags'], tags_to_find) == condition
|
27
|
-
scenarios.push element['name']
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
scenarios
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.scenario input, args
|
36
|
-
input = find_feature(input, 'feature'=>args['feature'])
|
37
|
-
input['elements'].find{|element|element['name'] == args['child_name'] }
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.find_child input, args
|
41
|
-
results = []
|
42
|
-
input = [find_feature(input, 'feature'=>args['feature'])] if args.has_key?('feature')
|
43
|
-
input.each do |feature|
|
44
|
-
feature['elements'].each do |element|
|
45
|
-
results.push element['name'] if element['type'] == args['what']
|
46
|
-
end
|
47
|
-
end
|
48
|
-
results
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.tags input
|
52
|
-
tags = Set.new
|
53
|
-
input.each do |feature|
|
54
|
-
feature['elements'].each do |element|
|
55
|
-
break if element['tags'] == nil
|
56
|
-
element['tags'].each { |tag| tags.add tag['name'] }
|
57
|
-
end
|
58
|
-
end
|
59
|
-
tags.to_a
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.has_tags given, search
|
63
|
-
return false if given == nil
|
64
|
-
search.count { |tag_for_search| given.map { |t| t["name"] }.include?(tag_for_search) }==search.size
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
end
|
data/spec/select_dsl_spec.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'rspec'
|
2
|
-
require File.dirname(__FILE__) + "/../lib/" + "gherkin_repo"
|
3
|
-
|
4
|
-
describe "cql" do
|
5
|
-
describe "select" do
|
6
|
-
it 'should find the feature file names' do
|
7
|
-
gs = CQL::GherkinRepository.new File.dirname(__FILE__) + "/../fixtures/features/simple"
|
8
|
-
|
9
|
-
result = gs.query do
|
10
|
-
select names
|
11
|
-
from features
|
12
|
-
end
|
13
|
-
|
14
|
-
result.should == ["Simple", "Test Feature", "Test2 Feature", "Test3 Feature"]
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should find the feature file names' do
|
18
|
-
gs = CQL::GherkinRepository.new File.dirname(__FILE__) + "/../fixtures/features/simple"
|
19
|
-
|
20
|
-
result = gs.query do
|
21
|
-
select uri
|
22
|
-
from features
|
23
|
-
end
|
24
|
-
|
25
|
-
result[0].should =~ /simple\.feature/
|
26
|
-
result[1].should =~ /test\.feature/
|
27
|
-
result[2].should =~ /test2\.feature/
|
28
|
-
result[3].should =~ /test_full\.feature/
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'should get scenario outlines as a list' do
|
32
|
-
gs = CQL::GherkinRepository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/scen_outlines"
|
33
|
-
|
34
|
-
result = gs.query do
|
35
|
-
select names
|
36
|
-
from scenario_outlines
|
37
|
-
end
|
38
|
-
|
39
|
-
result.should == ["An Outline"]
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'should get scenario as a list' do
|
43
|
-
gr = CQL::GherkinRepository.new File.expand_path(File.dirname(__FILE__)) + "/../fixtures/features/simple2"
|
44
|
-
|
45
|
-
result = gr.query do
|
46
|
-
select names
|
47
|
-
from scenarios
|
48
|
-
end
|
49
|
-
|
50
|
-
result.should == ["Testing the slurping", "Testing again", "Testing yet again", "Testing yet again part 2"]
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|