cucumber_analytics 0.0.6 → 0.0.7
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/.simplecov +4 -0
- data/History.rdoc +9 -1
- data/Rakefile +12 -0
- data/cucumber_analytics.gemspec +4 -3
- data/features/analysis/feature_collection.feature +11 -7
- data/features/modeling/background_modeling.feature +9 -0
- data/features/modeling/directory_modeling.feature +9 -0
- data/features/modeling/example_modeling.feature +9 -1
- data/features/modeling/feature_file_modeling.feature +9 -0
- data/features/modeling/feature_modeling.feature +9 -0
- data/features/modeling/outline_modeling.feature +9 -0
- data/features/modeling/scenario_modeling.feature +9 -0
- data/features/step_definitions/spec_steps.rb +15 -0
- data/features/step_definitions/world_steps.rb +3 -2
- data/features/support/env.rb +3 -1
- data/lib/cucumber_analytics/feature_element.rb +1 -0
- data/lib/cucumber_analytics/logging.rb +6 -1
- data/lib/cucumber_analytics/outline_example.rb +6 -6
- data/lib/cucumber_analytics/parsed_directory.rb +15 -2
- data/lib/cucumber_analytics/parsed_feature.rb +1 -1
- data/lib/cucumber_analytics/parsed_file.rb +15 -3
- data/lib/cucumber_analytics/parsed_scenario.rb +6 -4
- data/lib/cucumber_analytics/parsed_scenario_outline.rb +7 -6
- data/lib/cucumber_analytics/step.rb +1 -0
- data/lib/cucumber_analytics/test_element.rb +14 -3
- data/lib/cucumber_analytics/version.rb +1 -1
- data/lib/cucumber_analytics/world.rb +1 -1
- data/spec/background_spec.rb +23 -0
- data/spec/directory_spec.rb +18 -0
- data/spec/example_spec.rb +37 -0
- data/spec/feature_spec.rb +20 -0
- data/spec/file_spec.rb +20 -0
- data/spec/outline_spec.rb +32 -0
- data/spec/scenario_spec.rb +33 -0
- data/spec/spec_helper.rb +27 -0
- data/spec/step_spec.rb +24 -0
- metadata +39 -2
data/.simplecov
ADDED
data/History.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== Version 0.0.7 / 2013-02-01
|
2
|
+
|
3
|
+
* Bug fix: Feature collection no longer returns nil values for feature files
|
4
|
+
that do not contain features.
|
5
|
+
* Elements now know the element that contains them.
|
6
|
+
* Adjusted the default logging level so tht logging does not occur by default.
|
7
|
+
|
8
|
+
|
1
9
|
=== Version 0.0.6 / 2013-01-07
|
2
10
|
|
3
11
|
* Improved support for example blocks in outlines.
|
@@ -7,7 +15,7 @@
|
|
7
15
|
|
8
16
|
=== Version 0.0.5 / 2012-12-16
|
9
17
|
|
10
|
-
* Bug fix: a missing 'require' statement that was causing loading
|
18
|
+
* Bug fix: a missing 'require' statement that was causing loading errors has
|
11
19
|
been fixed.
|
12
20
|
|
13
21
|
|
data/Rakefile
CHANGED
@@ -1,2 +1,14 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
require "bundler/gem_tasks"
|
3
|
+
require 'cucumber/rake/task'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
desc 'Run all acceptance tests for the gem'
|
9
|
+
Cucumber::Rake::Task.new(:tests)
|
10
|
+
|
11
|
+
desc 'Run all API specifications for the gem'
|
12
|
+
RSpec::Core::RakeTask.new(:specs)
|
13
|
+
|
14
|
+
task :default => :tests
|
data/cucumber_analytics.gemspec
CHANGED
@@ -15,7 +15,8 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = CucumberAnalytics::VERSION
|
17
17
|
|
18
|
-
gem.add_development_dependency(
|
19
|
-
gem.add_development_dependency(
|
20
|
-
gem.add_development_dependency(
|
18
|
+
gem.add_development_dependency('rake')
|
19
|
+
gem.add_development_dependency('cucumber')
|
20
|
+
gem.add_development_dependency('rspec')
|
21
|
+
gem.add_development_dependency('simplecov')
|
21
22
|
end
|
@@ -14,13 +14,17 @@ Feature: Features can be collected from arbitrary parts of the codebase.
|
|
14
14
|
"""
|
15
15
|
Feature: The test feature 1.
|
16
16
|
"""
|
17
|
+
And the following feature file "empty.feature":
|
18
|
+
"""
|
19
|
+
"""
|
17
20
|
And the file "test_file_1.feature" is read
|
21
|
+
And the file "empty.feature" is read
|
18
22
|
And a directory "feature_directory/nested_directory"
|
19
|
-
And the following feature file "
|
23
|
+
And the following feature file "test_file_3.feature":
|
20
24
|
"""
|
21
|
-
Feature: The test feature
|
25
|
+
Feature: The test feature 3.
|
22
26
|
"""
|
23
|
-
And the file "
|
27
|
+
And the file "test_file_3.feature" is read
|
24
28
|
When the directory "feature_directory" is read
|
25
29
|
And the directory "feature_directory/nested_directory" is read
|
26
30
|
|
@@ -28,12 +32,12 @@ Feature: Features can be collected from arbitrary parts of the codebase.
|
|
28
32
|
Scenario: Features can be collected from files
|
29
33
|
Then the features collected from file "1" are as follows:
|
30
34
|
| The test feature 1. |
|
31
|
-
Then the features collected from file "
|
32
|
-
| The test feature
|
35
|
+
Then the features collected from file "3" are as follows:
|
36
|
+
| The test feature 3. |
|
33
37
|
|
34
38
|
Scenario: Features can be collected from directories
|
35
39
|
Then the features collected from directory "1" are as follows:
|
36
40
|
| The test feature 1. |
|
37
|
-
| The test feature
|
41
|
+
| The test feature 3. |
|
38
42
|
And the features collected from directory "2" are as follows:
|
39
|
-
| The test feature
|
43
|
+
| The test feature 3. |
|
@@ -170,3 +170,12 @@ Feature: Background elements can be modeled.
|
|
170
170
|
| '*' |
|
171
171
|
| ' some more text' |
|
172
172
|
| """ |
|
173
|
+
|
174
|
+
Scenario Outline: Background models pass all other specifications
|
175
|
+
Exact specifications detailing the API for Background models.
|
176
|
+
Given that there are "<additional specifications>" detailing models
|
177
|
+
When the corresponding unit tests are run
|
178
|
+
Then all of those specifications are met
|
179
|
+
Examples:
|
180
|
+
| additional specifications |
|
181
|
+
| background_spec.rb |
|
@@ -84,3 +84,12 @@ Feature: Directories can be modeled.
|
|
84
84
|
And directory "2" feature files are as follows:
|
85
85
|
| test_file_4.feature |
|
86
86
|
| test_file_5.feature |
|
87
|
+
|
88
|
+
Scenario Outline: Directory models pass all other specifications
|
89
|
+
Exact specifications detailing the API for directory models.
|
90
|
+
Given that there are "<additional specifications>" detailing models
|
91
|
+
When the corresponding unit tests are run
|
92
|
+
Then all of those specifications are met
|
93
|
+
Examples:
|
94
|
+
| additional specifications |
|
95
|
+
| directory_spec.rb |
|
@@ -90,7 +90,6 @@ Feature: Example elements can be modeled.
|
|
90
90
|
| param1 |
|
91
91
|
And the test example block "3" has no parameters
|
92
92
|
|
93
|
-
|
94
93
|
Scenario: The examples' rows are modeled.
|
95
94
|
Then the test example block "1" rows are as follows:
|
96
95
|
| x,y,? |
|
@@ -98,3 +97,12 @@ Feature: Example elements can be modeled.
|
|
98
97
|
And the test example block "2" rows are as follows:
|
99
98
|
| a |
|
100
99
|
And the test example block "3" has no rows
|
100
|
+
|
101
|
+
Scenario Outline: Example models pass all other specifications
|
102
|
+
Exact specifications detailing the API for Examples models.
|
103
|
+
Given that there are "<additional specifications>" detailing models
|
104
|
+
When the corresponding unit tests are run
|
105
|
+
Then all of those specifications are met
|
106
|
+
Examples:
|
107
|
+
| additional specifications |
|
108
|
+
| example_spec.rb |
|
@@ -46,3 +46,12 @@ Feature: Feature files can be modeled.
|
|
46
46
|
| path | path_to/why_would_you_make_an_empty_file.feature |
|
47
47
|
| feature_count | 0 |
|
48
48
|
And file "3" has no features
|
49
|
+
|
50
|
+
Scenario Outline: Feature file models pass all other specifications
|
51
|
+
Exact specifications detailing the API for .feature file models.
|
52
|
+
Given that there are "<additional specifications>" detailing models
|
53
|
+
When the corresponding unit tests are run
|
54
|
+
Then all of those specifications are met
|
55
|
+
Examples:
|
56
|
+
| additional specifications |
|
57
|
+
| file_spec.rb |
|
@@ -192,3 +192,12 @@ Feature: Features can be modeled.
|
|
192
192
|
And feature "3" is found to have the following properties:
|
193
193
|
| has_background? | false |
|
194
194
|
And feature "3" has no background
|
195
|
+
|
196
|
+
Scenario Outline: Feature models pass all other specifications
|
197
|
+
Exact specifications detailing the API for Feature models.
|
198
|
+
Given that there are "<additional specifications>" detailing models
|
199
|
+
When the corresponding unit tests are run
|
200
|
+
Then all of those specifications are met
|
201
|
+
Examples:
|
202
|
+
| additional specifications |
|
203
|
+
| feature_spec.rb |
|
@@ -205,3 +205,12 @@ Feature: Scenario Outline elements can be modeled.
|
|
205
205
|
And the test example blocks are as follows:
|
206
206
|
| text describing the significance of the examples |
|
207
207
|
| some examples with different significance and a tag |
|
208
|
+
|
209
|
+
Scenario Outline: Outline models pass all other specifications
|
210
|
+
Exact specifications detailing the API for Scenario Outline models.
|
211
|
+
Given that there are "<additional specifications>" detailing models
|
212
|
+
When the corresponding unit tests are run
|
213
|
+
Then all of those specifications are met
|
214
|
+
Examples:
|
215
|
+
| additional specifications |
|
216
|
+
| outline_spec.rb |
|
@@ -182,3 +182,12 @@ Feature: Scenario elements can be modeled.
|
|
182
182
|
Scenario: The scenario applied tags are modeled.
|
183
183
|
Then the test is found to have the following applied tags:
|
184
184
|
| @a_feature_level_tag |
|
185
|
+
|
186
|
+
Scenario Outline: Scenario models pass all other specifications
|
187
|
+
Exact specifications detailing the API for Scenario models.
|
188
|
+
Given that there are "<additional specifications>" detailing models
|
189
|
+
When the corresponding unit tests are run
|
190
|
+
Then all of those specifications are met
|
191
|
+
Examples:
|
192
|
+
| additional specifications |
|
193
|
+
| scenario_spec.rb |
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Given /^that there are "([^"]*)" detailing models$/ do |spec_file|
|
2
|
+
fail "The spec file does not exist: #{spec_file}" unless File.exists?(File.join(SPEC_DIRECTORY, spec_file))
|
3
|
+
|
4
|
+
@spec_file = spec_file
|
5
|
+
end
|
6
|
+
|
7
|
+
When /^the corresponding unit tests are run$/ do
|
8
|
+
command = "rspec spec/#{@spec_file}"
|
9
|
+
|
10
|
+
@specs_passed = system(command)
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^all of those specifications are met$/ do
|
14
|
+
fail "There were unmet specifications." unless @specs_passed
|
15
|
+
end
|
@@ -144,9 +144,10 @@ end
|
|
144
144
|
Then /^the features collected from directory "([^"]*)" are as follows:$/ do |directory, features|
|
145
145
|
directory ||= 1
|
146
146
|
|
147
|
-
|
147
|
+
expected = features.raw.flatten.sort
|
148
|
+
actual = CucumberAnalytics::World.features_in(@parsed_directories[directory - 1]).collect { |feature| feature.name }
|
148
149
|
|
149
|
-
assert
|
150
|
+
assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
|
150
151
|
end
|
151
152
|
|
152
153
|
Then /^the files collected from directory "([^"]*)" are as follows:$/ do |directory, files|
|
data/features/support/env.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
unless RUBY_VERSION.to_s < '1.9.0'
|
2
2
|
require 'simplecov'
|
3
|
-
SimpleCov.
|
3
|
+
SimpleCov.command_name('cucumber_tests')
|
4
4
|
end
|
5
5
|
|
6
6
|
include Test::Unit::Assertions
|
@@ -16,6 +16,8 @@ DEFAULT_FILE_DIRECTORY = "#{File.dirname(__FILE__)}/../temp_files"
|
|
16
16
|
TEST_FILE_DIRECTORY = "#{File.dirname(__FILE__)}/../test_files"
|
17
17
|
TEST_STEP_FILE_LOCATION = "#{DEFAULT_FILE_DIRECTORY}/#{DEFAULT_STEP_FILE_NAME}"
|
18
18
|
|
19
|
+
SPEC_DIRECTORY = "#{File.dirname(__FILE__)}/../../spec"
|
20
|
+
|
19
21
|
|
20
22
|
Before do
|
21
23
|
@default_feature_file_name = DEFAULT_FEATURE_FILE_NAME
|
@@ -5,7 +5,6 @@ module CucumberAnalytics
|
|
5
5
|
attr_accessor :tags
|
6
6
|
attr_accessor :rows
|
7
7
|
attr_accessor :parameters
|
8
|
-
attr_accessor :parent_element
|
9
8
|
|
10
9
|
|
11
10
|
# Creates a new OutlineExample object and, if *source_lines* is provided,
|
@@ -13,9 +12,7 @@ module CucumberAnalytics
|
|
13
12
|
def initialize(source_lines = nil)
|
14
13
|
CucumberAnalytics::Logging.logger.info('OutlineExample#initialize')
|
15
14
|
CucumberAnalytics::Logging.logger.debug('source lines')
|
16
|
-
source_lines.each
|
17
|
-
CucumberAnalytics::Logging.logger.debug(line.chomp)
|
18
|
-
end
|
15
|
+
source_lines.each { |line| CucumberAnalytics::Logging.logger.debug(line.chomp) } if source_lines
|
19
16
|
|
20
17
|
super
|
21
18
|
|
@@ -49,8 +46,7 @@ module CucumberAnalytics
|
|
49
46
|
@rows.delete_at(location) if location
|
50
47
|
end
|
51
48
|
|
52
|
-
# Returns tags which
|
53
|
-
# inherited from the outline level.
|
49
|
+
# Returns tags which have been inherited from the outline level.
|
54
50
|
def applied_tags
|
55
51
|
additional_tags = @parent_element.tags
|
56
52
|
additional_tags.concat(@parent_element.applied_tags) if @parent_element.respond_to?(:applied_tags)
|
@@ -58,6 +54,10 @@ module CucumberAnalytics
|
|
58
54
|
additional_tags
|
59
55
|
end
|
60
56
|
|
57
|
+
# Returns all tags which are applicable to the scenario.
|
58
|
+
def all_tags
|
59
|
+
applied_tags.concat(@tags)
|
60
|
+
end
|
61
61
|
|
62
62
|
private
|
63
63
|
|
@@ -4,6 +4,7 @@ module CucumberAnalytics
|
|
4
4
|
|
5
5
|
attr_reader :feature_files
|
6
6
|
attr_reader :feature_directories
|
7
|
+
attr_accessor :parent_element
|
7
8
|
|
8
9
|
|
9
10
|
# Creates a new ParsedDirectory object and, if *directory_parsed* is
|
@@ -51,8 +52,20 @@ module CucumberAnalytics
|
|
51
52
|
|
52
53
|
entries.each do |entry|
|
53
54
|
entry = @directory + '/' + entry
|
54
|
-
|
55
|
-
|
55
|
+
|
56
|
+
if File.directory?(entry)
|
57
|
+
found_directory = ParsedDirectory.new(entry)
|
58
|
+
found_directory.parent_element = self
|
59
|
+
|
60
|
+
@feature_directories << found_directory
|
61
|
+
end
|
62
|
+
|
63
|
+
if entry =~ /\.feature$/
|
64
|
+
found_feature_file = ParsedFile.new(entry)
|
65
|
+
found_feature_file.parent_element = self
|
66
|
+
|
67
|
+
@feature_files << found_feature_file
|
68
|
+
end
|
56
69
|
end
|
57
70
|
end
|
58
71
|
|
@@ -3,6 +3,7 @@ module CucumberAnalytics
|
|
3
3
|
|
4
4
|
|
5
5
|
attr_reader :feature
|
6
|
+
attr_accessor :parent_element
|
6
7
|
|
7
8
|
|
8
9
|
# Creates a new ParsedFile object and, if *file_parsed* is provided,
|
@@ -26,7 +27,7 @@ module CucumberAnalytics
|
|
26
27
|
# Returns the immediate child elements of the feature file(i.e. its
|
27
28
|
# feature).
|
28
29
|
def contains
|
29
|
-
[@feature]
|
30
|
+
@feature ? [@feature] : []
|
30
31
|
end
|
31
32
|
|
32
33
|
# Returns the number of features contained in the file.
|
@@ -67,7 +68,15 @@ module CucumberAnalytics
|
|
67
68
|
end
|
68
69
|
|
69
70
|
# create a new feature bases on the collected lines
|
70
|
-
|
71
|
+
if feature_lines.empty?
|
72
|
+
@feature = nil
|
73
|
+
else
|
74
|
+
found_feature = ParsedFeature.new(feature_lines)
|
75
|
+
found_feature.parent_element = self
|
76
|
+
|
77
|
+
@feature = found_feature
|
78
|
+
end
|
79
|
+
|
71
80
|
|
72
81
|
if file_lines.first =~ /^\s*Background:/
|
73
82
|
|
@@ -92,7 +101,10 @@ module CucumberAnalytics
|
|
92
101
|
end
|
93
102
|
|
94
103
|
# create a new background based on the collected lines
|
95
|
-
|
104
|
+
found_background = ParsedBackground.new(background_lines)
|
105
|
+
found_background.parent_element = @feature
|
106
|
+
|
107
|
+
@feature.background = found_background
|
96
108
|
end
|
97
109
|
|
98
110
|
parse_tests(file_lines)
|
@@ -3,7 +3,6 @@ module CucumberAnalytics
|
|
3
3
|
|
4
4
|
|
5
5
|
attr_accessor :tags
|
6
|
-
attr_accessor :parent_element
|
7
6
|
|
8
7
|
|
9
8
|
# Creates a new ParsedScenario object and, if *source_lines* is provided,
|
@@ -11,9 +10,7 @@ module CucumberAnalytics
|
|
11
10
|
def initialize(source_lines = nil)
|
12
11
|
CucumberAnalytics::Logging.logger.info('ParsedScenario#initialize')
|
13
12
|
CucumberAnalytics::Logging.logger.debug('source lines')
|
14
|
-
source_lines.each
|
15
|
-
CucumberAnalytics::Logging.logger.debug(line.chomp)
|
16
|
-
end
|
13
|
+
source_lines.each { |line| CucumberAnalytics::Logging.logger.debug(line.chomp) } if source_lines
|
17
14
|
|
18
15
|
super
|
19
16
|
|
@@ -31,6 +28,11 @@ module CucumberAnalytics
|
|
31
28
|
additional_tags
|
32
29
|
end
|
33
30
|
|
31
|
+
# Returns all tags which are applicable to the scenario.
|
32
|
+
def all_tags
|
33
|
+
applied_tags.concat(@tags)
|
34
|
+
end
|
35
|
+
|
34
36
|
|
35
37
|
private
|
36
38
|
|
@@ -4,7 +4,6 @@ module CucumberAnalytics
|
|
4
4
|
|
5
5
|
attr_accessor :tags
|
6
6
|
attr_accessor :examples
|
7
|
-
attr_accessor :parent_element
|
8
7
|
|
9
8
|
|
10
9
|
# Creates a new ParsedScenarioOutline object and, if *source_lines* is
|
@@ -12,9 +11,7 @@ module CucumberAnalytics
|
|
12
11
|
def initialize(source_lines = nil)
|
13
12
|
CucumberAnalytics::Logging.logger.info('ParsedScenarioOutline#initialize')
|
14
13
|
CucumberAnalytics::Logging.logger.debug('source lines')
|
15
|
-
source_lines.each
|
16
|
-
CucumberAnalytics::Logging.logger.debug(line.chomp)
|
17
|
-
end
|
14
|
+
source_lines.each { |line| CucumberAnalytics::Logging.logger.debug(line.chomp) } if source_lines
|
18
15
|
|
19
16
|
super
|
20
17
|
|
@@ -30,8 +27,7 @@ module CucumberAnalytics
|
|
30
27
|
@examples
|
31
28
|
end
|
32
29
|
|
33
|
-
# Returns tags which
|
34
|
-
# inherited from the feature level.
|
30
|
+
# Returns tags which have been inherited from the feature level.
|
35
31
|
def applied_tags
|
36
32
|
additional_tags = @parent_element.tags
|
37
33
|
additional_tags.concat(@parent_element.applied_tags) if @parent_element.respond_to?(:applied_tags)
|
@@ -39,6 +35,11 @@ module CucumberAnalytics
|
|
39
35
|
additional_tags
|
40
36
|
end
|
41
37
|
|
38
|
+
# Returns all tags which are applicable to the scenario.
|
39
|
+
def all_tags
|
40
|
+
applied_tags.concat(@tags)
|
41
|
+
end
|
42
|
+
|
42
43
|
|
43
44
|
private
|
44
45
|
|
@@ -38,13 +38,24 @@ module CucumberAnalytics
|
|
38
38
|
case
|
39
39
|
when line =~ /^\s*"""/
|
40
40
|
block = extract_doc_block(source_lines)
|
41
|
-
|
41
|
+
|
42
|
+
found_step = Step.new(@steps.last.keyword + ' ' + @steps.last.base, block)
|
43
|
+
found_step.parent_element = self
|
44
|
+
|
45
|
+
@steps[@steps.size - 1] = found_step
|
42
46
|
when line =~ /^\s*\|/
|
43
47
|
block = extract_table_block(source_lines)
|
44
|
-
|
48
|
+
|
49
|
+
found_step = Step.new(@steps.last.keyword + ' ' + @steps.last.base, block)
|
50
|
+
found_step.parent_element = self
|
51
|
+
|
52
|
+
@steps[@steps.size - 1] = found_step
|
45
53
|
else
|
46
54
|
unless World.ignored_line?(line)
|
47
|
-
|
55
|
+
found_step = Step.new(line.strip)
|
56
|
+
found_step.parent_element = self
|
57
|
+
|
58
|
+
@steps << found_step
|
48
59
|
end
|
49
60
|
|
50
61
|
source_lines.shift
|
@@ -147,7 +147,7 @@ module CucumberAnalytics
|
|
147
147
|
|
148
148
|
# Recursively gathers all features found in the passed container.
|
149
149
|
def self.collect_features(accumulated_features, container)
|
150
|
-
accumulated_features << container.feature if container.respond_to?(:feature)
|
150
|
+
accumulated_features << container.feature if container.respond_to?(:feature) && container.feature
|
151
151
|
|
152
152
|
if container.respond_to?(:contains)
|
153
153
|
container.contains.each do |child_container|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
SimpleCov.command_name('ParsedBackground') unless RUBY_VERSION.to_s < '1.9.0'
|
4
|
+
|
5
|
+
describe "ParsedBackground" do
|
6
|
+
|
7
|
+
it 'knows its parent element' do
|
8
|
+
file_path = "#{@default_file_directory}/#{@default_feature_file_name}"
|
9
|
+
|
10
|
+
File.open(file_path, "w") { |file|
|
11
|
+
file.puts('Feature: Test feature')
|
12
|
+
file.puts(' Background: Test background')
|
13
|
+
}
|
14
|
+
|
15
|
+
file = CucumberAnalytics::ParsedFile.new(file_path)
|
16
|
+
|
17
|
+
feature = file.feature
|
18
|
+
background = feature.background
|
19
|
+
|
20
|
+
background.parent_element.should equal feature
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
SimpleCov.command_name('ParsedDirectory') unless RUBY_VERSION.to_s < '1.9.0'
|
4
|
+
|
5
|
+
describe "ParsedDirectory" do
|
6
|
+
|
7
|
+
it 'knows its parent element' do
|
8
|
+
directory = @default_file_directory
|
9
|
+
nested_directory = "#{directory}/nested_directory"
|
10
|
+
FileUtils.mkdir(nested_directory)
|
11
|
+
|
12
|
+
directory = CucumberAnalytics::ParsedDirectory.new(@default_file_directory)
|
13
|
+
nested_directory = directory.feature_directories.first
|
14
|
+
|
15
|
+
nested_directory.parent_element.should equal directory
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
SimpleCov.command_name('OutlineExample') unless RUBY_VERSION.to_s < '1.9.0'
|
4
|
+
|
5
|
+
describe "OutlineExample" do
|
6
|
+
|
7
|
+
it "knows all of its tags" do
|
8
|
+
feature = CucumberAnalytics::ParsedFeature.new
|
9
|
+
feature.tags = ['@feature_tag']
|
10
|
+
outline = CucumberAnalytics::ParsedScenarioOutline.new
|
11
|
+
outline.tags = ['@outline_tag']
|
12
|
+
example = CucumberAnalytics::OutlineExample.new
|
13
|
+
example.tags = ['@example_tag']
|
14
|
+
|
15
|
+
outline.parent_element = feature
|
16
|
+
example.parent_element = outline
|
17
|
+
example.all_tags.sort.should == ['@feature_tag', '@outline_tag', '@example_tag'].sort
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'knows its parent element' do
|
21
|
+
file_path = "#{@default_file_directory}/#{@default_feature_file_name}"
|
22
|
+
|
23
|
+
File.open(file_path, "w") { |file|
|
24
|
+
file.puts('Feature: Test feature')
|
25
|
+
file.puts(' Scenario Outline: Test outline')
|
26
|
+
file.puts(' Examples: test examples')
|
27
|
+
}
|
28
|
+
|
29
|
+
file = CucumberAnalytics::ParsedFile.new(file_path)
|
30
|
+
|
31
|
+
outline = file.feature.tests.first
|
32
|
+
example = outline.examples.first
|
33
|
+
|
34
|
+
example.parent_element.should equal outline
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
SimpleCov.command_name('ParsedFeature') unless RUBY_VERSION.to_s < '1.9.0'
|
4
|
+
|
5
|
+
describe "ParsedFeature" do
|
6
|
+
|
7
|
+
it 'knows its parent element' do
|
8
|
+
file_path = "#{@default_file_directory}/#{@default_feature_file_name}"
|
9
|
+
|
10
|
+
File.open(file_path, "w") { |file|
|
11
|
+
file.puts('Feature: Test feature')
|
12
|
+
}
|
13
|
+
|
14
|
+
file = CucumberAnalytics::ParsedFile.new(file_path)
|
15
|
+
feature = file.feature
|
16
|
+
|
17
|
+
feature.parent_element.should equal file
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/spec/file_spec.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
SimpleCov.command_name('ParsedFile') unless RUBY_VERSION.to_s < '1.9.0'
|
4
|
+
|
5
|
+
describe "ParsedFile" do
|
6
|
+
|
7
|
+
it 'knows its parent element' do
|
8
|
+
file_path = "#{@default_file_directory}/#{@default_feature_file_name}"
|
9
|
+
|
10
|
+
File.open(file_path, "w") { |file|
|
11
|
+
file.puts('Feature: Test feature')
|
12
|
+
}
|
13
|
+
|
14
|
+
directory = CucumberAnalytics::ParsedDirectory.new(@default_file_directory)
|
15
|
+
file = directory.feature_files.first
|
16
|
+
|
17
|
+
file.parent_element.should equal directory
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
SimpleCov.command_name('ParsedOutline') unless RUBY_VERSION.to_s < '1.9.0'
|
4
|
+
|
5
|
+
describe "ParsedOutline" do
|
6
|
+
|
7
|
+
it "knows all of its tags" do
|
8
|
+
feature = CucumberAnalytics::ParsedFeature.new
|
9
|
+
feature.tags = ['@feature_tag']
|
10
|
+
outline = CucumberAnalytics::ParsedScenarioOutline.new
|
11
|
+
outline.tags = ['@outline_tag']
|
12
|
+
|
13
|
+
outline.parent_element = feature
|
14
|
+
outline.all_tags.sort.should == ['@feature_tag', '@outline_tag'].sort
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'knows its parent element' do
|
18
|
+
file_path = "#{@default_file_directory}/#{@default_feature_file_name}"
|
19
|
+
|
20
|
+
File.open(file_path, "w") { |file|
|
21
|
+
file.puts('Feature: Test feature')
|
22
|
+
file.puts(' Scenario Outline: Test outline')
|
23
|
+
}
|
24
|
+
|
25
|
+
file = CucumberAnalytics::ParsedFile.new(file_path)
|
26
|
+
|
27
|
+
feature = file.feature
|
28
|
+
outline = feature.tests.first
|
29
|
+
|
30
|
+
outline.parent_element.should equal feature
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
SimpleCov.command_name('ParsedScenario') unless RUBY_VERSION.to_s < '1.9.0'
|
4
|
+
|
5
|
+
describe "ParsedScenario" do
|
6
|
+
|
7
|
+
it "knows all of its tags" do
|
8
|
+
feature = CucumberAnalytics::ParsedFeature.new
|
9
|
+
feature.tags = ['@feature_tag']
|
10
|
+
scenario = CucumberAnalytics::ParsedScenario.new
|
11
|
+
scenario.tags = ['@scenario_tag']
|
12
|
+
|
13
|
+
scenario.parent_element = feature
|
14
|
+
scenario.all_tags.sort.should == ['@feature_tag', '@scenario_tag'].sort
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'knows its parent element' do
|
18
|
+
file_path = "#{@default_file_directory}/#{@default_feature_file_name}"
|
19
|
+
|
20
|
+
File.open(file_path, "w") { |file|
|
21
|
+
file.puts('Feature: Test feature')
|
22
|
+
file.puts(' Scenario: Test scenario')
|
23
|
+
}
|
24
|
+
|
25
|
+
file = CucumberAnalytics::ParsedFile.new(file_path)
|
26
|
+
|
27
|
+
feature = file.feature
|
28
|
+
scenario = feature.tests.first
|
29
|
+
|
30
|
+
scenario.parent_element.should equal feature
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
|
3
|
+
require 'simplecov' unless RUBY_VERSION.to_s < '1.9.0'
|
4
|
+
|
5
|
+
require "#{File.dirname(__FILE__)}/../lib/cucumber_analytics"
|
6
|
+
|
7
|
+
CucumberAnalytics::Logging.set_log_level(Logger::FATAL)
|
8
|
+
|
9
|
+
|
10
|
+
DEFAULT_FEATURE_FILE_NAME = 'test_feature.feature'
|
11
|
+
DEFAULT_FILE_DIRECTORY = "#{File.dirname(__FILE__)}/temp_files"
|
12
|
+
|
13
|
+
|
14
|
+
RSpec.configure do |config|
|
15
|
+
config.before(:all) do
|
16
|
+
@default_feature_file_name = DEFAULT_FEATURE_FILE_NAME
|
17
|
+
@default_file_directory = DEFAULT_FILE_DIRECTORY
|
18
|
+
end
|
19
|
+
|
20
|
+
config.before(:each) do
|
21
|
+
FileUtils.mkdir(@default_file_directory)
|
22
|
+
end
|
23
|
+
|
24
|
+
config.after(:each) do
|
25
|
+
FileUtils.remove_dir(@default_file_directory, true)
|
26
|
+
end
|
27
|
+
end
|
data/spec/step_spec.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
SimpleCov.command_name('Step') unless RUBY_VERSION.to_s < '1.9.0'
|
4
|
+
|
5
|
+
describe 'Step' do
|
6
|
+
|
7
|
+
it 'knows its parent element' do
|
8
|
+
file_path = "#{@default_file_directory}/#{@default_feature_file_name}"
|
9
|
+
|
10
|
+
File.open(file_path, "w") { |file|
|
11
|
+
file.puts('Feature: Test feature')
|
12
|
+
file.puts(' Scenario: Test scenario')
|
13
|
+
file.puts(' Given a test step')
|
14
|
+
}
|
15
|
+
|
16
|
+
file = CucumberAnalytics::ParsedFile.new(file_path)
|
17
|
+
|
18
|
+
scenario = file.feature.tests.first
|
19
|
+
step = scenario.steps.first
|
20
|
+
|
21
|
+
step.parent_element.should equal scenario
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber_analytics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
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: 2013-
|
12
|
+
date: 2013-02-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: simplecov
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,6 +83,7 @@ extensions: []
|
|
67
83
|
extra_rdoc_files: []
|
68
84
|
files:
|
69
85
|
- .gitignore
|
86
|
+
- .simplecov
|
70
87
|
- Gemfile
|
71
88
|
- History.rdoc
|
72
89
|
- LICENSE
|
@@ -93,6 +110,7 @@ files:
|
|
93
110
|
- features/step_definitions/file_steps.rb
|
94
111
|
- features/step_definitions/outline_steps.rb
|
95
112
|
- features/step_definitions/setup_steps.rb
|
113
|
+
- features/step_definitions/spec_steps.rb
|
96
114
|
- features/step_definitions/test_steps.rb
|
97
115
|
- features/step_definitions/world_steps.rb
|
98
116
|
- features/support/env.rb
|
@@ -111,6 +129,15 @@ files:
|
|
111
129
|
- lib/cucumber_analytics/test_element.rb
|
112
130
|
- lib/cucumber_analytics/version.rb
|
113
131
|
- lib/cucumber_analytics/world.rb
|
132
|
+
- spec/background_spec.rb
|
133
|
+
- spec/directory_spec.rb
|
134
|
+
- spec/example_spec.rb
|
135
|
+
- spec/feature_spec.rb
|
136
|
+
- spec/file_spec.rb
|
137
|
+
- spec/outline_spec.rb
|
138
|
+
- spec/scenario_spec.rb
|
139
|
+
- spec/spec_helper.rb
|
140
|
+
- spec/step_spec.rb
|
114
141
|
homepage: https://github.com/enkessler/cucumber_analytics
|
115
142
|
licenses: []
|
116
143
|
post_install_message:
|
@@ -157,8 +184,18 @@ test_files:
|
|
157
184
|
- features/step_definitions/file_steps.rb
|
158
185
|
- features/step_definitions/outline_steps.rb
|
159
186
|
- features/step_definitions/setup_steps.rb
|
187
|
+
- features/step_definitions/spec_steps.rb
|
160
188
|
- features/step_definitions/test_steps.rb
|
161
189
|
- features/step_definitions/world_steps.rb
|
162
190
|
- features/support/env.rb
|
163
191
|
- features/support/transforms.rb
|
192
|
+
- spec/background_spec.rb
|
193
|
+
- spec/directory_spec.rb
|
194
|
+
- spec/example_spec.rb
|
195
|
+
- spec/feature_spec.rb
|
196
|
+
- spec/file_spec.rb
|
197
|
+
- spec/outline_spec.rb
|
198
|
+
- spec/scenario_spec.rb
|
199
|
+
- spec/spec_helper.rb
|
200
|
+
- spec/step_spec.rb
|
164
201
|
has_rdoc:
|