cql 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|