cucumber_analytics 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +22 -0
  4. data/README.rdoc +76 -0
  5. data/Rakefile +2 -0
  6. data/cucumber_analytics.gemspec +22 -0
  7. data/features/analysis/feature_collection.feature +39 -0
  8. data/features/analysis/feature_file_collection.feature +36 -0
  9. data/features/analysis/step_collection.feature +137 -0
  10. data/features/analysis/tag_collection.feature +91 -0
  11. data/features/analysis/test_collection.feature +69 -0
  12. data/features/analysis/test_comparison.feature +123 -0
  13. data/features/modeling/background_modeling.feature +147 -0
  14. data/features/modeling/directory_modeling.feature +86 -0
  15. data/features/modeling/feature_file_modeling.feature +37 -0
  16. data/features/modeling/feature_modeling.feature +163 -0
  17. data/features/modeling/outline_modeling.feature +186 -0
  18. data/features/modeling/scenario_modeling.feature +154 -0
  19. data/features/step_definitions/background_steps.rb +55 -0
  20. data/features/step_definitions/directory_steps.rb +20 -0
  21. data/features/step_definitions/feature_steps.rb +62 -0
  22. data/features/step_definitions/file_steps.rb +18 -0
  23. data/features/step_definitions/outline_steps.rb +26 -0
  24. data/features/step_definitions/setup_steps.rb +50 -0
  25. data/features/step_definitions/test_steps.rb +82 -0
  26. data/features/step_definitions/world_steps.rb +158 -0
  27. data/features/support/env.rb +29 -0
  28. data/features/support/transforms.rb +3 -0
  29. data/lib/cucumber_analytics/feature_element.rb +54 -0
  30. data/lib/cucumber_analytics/outline_example.rb +31 -0
  31. data/lib/cucumber_analytics/parsed_background.rb +23 -0
  32. data/lib/cucumber_analytics/parsed_directory.rb +56 -0
  33. data/lib/cucumber_analytics/parsed_feature.rb +70 -0
  34. data/lib/cucumber_analytics/parsed_file.rb +140 -0
  35. data/lib/cucumber_analytics/parsed_scenario.rb +29 -0
  36. data/lib/cucumber_analytics/parsed_scenario_outline.rb +57 -0
  37. data/lib/cucumber_analytics/step.rb +81 -0
  38. data/lib/cucumber_analytics/test_element.rb +93 -0
  39. data/lib/cucumber_analytics/version.rb +3 -0
  40. data/lib/cucumber_analytics/world.rb +182 -0
  41. data/lib/cucumber_analytics.rb +12 -0
  42. metadata +174 -0
@@ -0,0 +1,154 @@
1
+ Feature: Scenario elements can be modeled.
2
+
3
+
4
+ Acceptance criteria
5
+
6
+ All conceptual pieces of a Scenario can be modeled:
7
+ 1. the scenario's name
8
+ 2. the scenario's description
9
+ 3. the scenario's steps
10
+ 4. the scenario's tags
11
+
12
+
13
+ Background: Test file setup.
14
+ Given the following feature file:
15
+ """
16
+ @a_feature_level_tag
17
+ Feature: The test feature name.
18
+ Some more feature description.
19
+
20
+ @a_tag
21
+
22
+ @another_tag@yet_another_tag
23
+ Scenario: The first scenario's name.
24
+ #a comment
25
+
26
+ Some text describing the scenario.
27
+ More text.
28
+ Given this *parameterized* step takes a table:
29
+ | data |
30
+ | more data |
31
+ And some setup step
32
+ #
33
+ When a step with a *parameter*
34
+ And a big step:
35
+ #random comment
36
+ \"\"\"
37
+ some text
38
+
39
+ #some comments
40
+ Scenario:
41
+ Scenario Outline:
42
+ Examples:
43
+ @
44
+ Feature:
45
+ |
46
+ Given
47
+ When
48
+ Then
49
+ *
50
+ some more text
51
+ \"\"\"
52
+ Then *lots* *of* *parameters*
53
+
54
+ """
55
+ And parameter delimiters of "*" and "*"
56
+ When the file is read
57
+
58
+
59
+ Scenario: The scenario name is modeled.
60
+ Then the test is found to have the following properties:
61
+ | name | The first scenario's name. |
62
+
63
+ Scenario: The scenario description is modeled.
64
+ Then the test descriptive lines are as follows:
65
+ | Some text describing the scenario. |
66
+ | More text. |
67
+
68
+ Scenario: The scenario steps are modeled.
69
+ Then the test steps are as follows:
70
+ | Given this *parameterized* step takes a table: |
71
+ | \| data \| |
72
+ | \| more data \| |
73
+ | And some setup step |
74
+ | When a step with a *parameter* |
75
+ | And a big step: |
76
+ | """ |
77
+ | 'some text' |
78
+ | '' |
79
+ | '#some comments' |
80
+ | 'Scenario:' |
81
+ | 'Scenario Outline:' |
82
+ | 'Examples:' |
83
+ | '@' |
84
+ | 'Feature:' |
85
+ | '\|' |
86
+ | 'Given' |
87
+ | 'When' |
88
+ | 'Then' |
89
+ | '*' |
90
+ | ' some more text' |
91
+ | """ |
92
+ | Then *lots* *of* *parameters* |
93
+ And the test steps "without" arguments are as follows:
94
+ | Given this ** step takes a table: |
95
+ | And some setup step |
96
+ | When a step with a ** |
97
+ | And a big step: |
98
+ | Then ** ** ** |
99
+ And the test steps "without" keywords are as follows:
100
+ | this *parameterized* step takes a table: |
101
+ | \| data \| |
102
+ | \| more data \| |
103
+ | some setup step |
104
+ | a step with a *parameter* |
105
+ | a big step: |
106
+ | """ |
107
+ | 'some text' |
108
+ | '' |
109
+ | '#some comments' |
110
+ | 'Scenario:' |
111
+ | 'Scenario Outline:' |
112
+ | 'Examples:' |
113
+ | '@' |
114
+ | 'Feature:' |
115
+ | '\|' |
116
+ | 'Given' |
117
+ | 'When' |
118
+ | 'Then' |
119
+ | '*' |
120
+ | ' some more text' |
121
+ | """ |
122
+ | *lots* *of* *parameters* |
123
+ And the test steps "without" arguments "without" keywords are as follows:
124
+ | this ** step takes a table: |
125
+ | some setup step |
126
+ | a step with a ** |
127
+ | a big step: |
128
+ | ** ** ** |
129
+ And the test step "1" has the following block:
130
+ | \| data \| |
131
+ | \| more data \| |
132
+ And the test step "4" has the following block:
133
+ | """ |
134
+ | 'some text' |
135
+ | '' |
136
+ | '#some comments' |
137
+ | 'Scenario:' |
138
+ | 'Scenario Outline:' |
139
+ | 'Examples:' |
140
+ | '@' |
141
+ | 'Feature:' |
142
+ | '\|' |
143
+ | 'Given' |
144
+ | 'When' |
145
+ | 'Then' |
146
+ | '*' |
147
+ | ' some more text' |
148
+ | """ |
149
+
150
+ Scenario: The scenario tags are modeled.
151
+ Then the test is found to have the following tags:
152
+ | @a_tag |
153
+ | @another_tag |
154
+ | @yet_another_tag |
@@ -0,0 +1,55 @@
1
+ Then /^the(?: feature "([^"]*)")? background is found to have the following properties:$/ do |file, properties|
2
+ file ||= 1
3
+ properties = properties.rows_hash
4
+
5
+ properties.each do |property, expected_value|
6
+ assert { expected_value == @parsed_files[file - 1].feature.background.send(property.to_sym).to_s }
7
+ end
8
+ end
9
+
10
+ Then /^the(?: feature "([^"]*)")? background's descriptive lines are as follows:$/ do |file, lines|
11
+ file ||= 1
12
+ expected_description = lines.raw.flatten
13
+
14
+ assert { @parsed_files[file - 1].feature.background.description == expected_description }
15
+ end
16
+
17
+ Then /^the(?: feature "([^"]*)")? background's steps(?: "([^"]*)" arguments)?(?: "([^"]*)" keywords)? are as follows:$/ do |file, arguments, keywords, steps|
18
+ file ||= 1
19
+ arguments ||= 'with'
20
+ keywords ||= 'with'
21
+ translate = {'with' => true,
22
+ 'without' => false}
23
+
24
+ options = {:with_keywords => translate[keywords], :with_arguments => translate[arguments]}
25
+
26
+ steps = steps.raw.flatten.collect do |step|
27
+ if step.start_with? "'"
28
+ step.slice(1..step.length - 2)
29
+ else
30
+ step
31
+ end
32
+ end
33
+
34
+ actual_steps = Array.new.tap do |steps|
35
+ @parsed_files[file - 1].feature.background.steps.each do |step|
36
+ steps << step.step_text(options)
37
+ end
38
+ end
39
+
40
+ assert { actual_steps.flatten == steps }
41
+ end
42
+
43
+ When /^step "([^"]*)" of the background (?:of feature "([^"]*)" )?has the following block:$/ do |step, file, block|
44
+ file ||= 1
45
+
46
+ block = block.raw.flatten.collect do |line|
47
+ if line.start_with? "'"
48
+ line.slice(1..line.length - 2)
49
+ else
50
+ line
51
+ end
52
+ end
53
+
54
+ assert { @parsed_files[file - 1].feature.background.steps[step - 1].block == block }
55
+ end
@@ -0,0 +1,20 @@
1
+ Then /^(?:the )?directory(?: "([^"]*)")? is found to have the following properties:$/ do |directory, properties|
2
+ directory ||= 1
3
+ properties = properties.rows_hash
4
+
5
+ properties.each do |property, expected_value|
6
+ if property == 'path'
7
+ expected_value.sub!('path_to', @default_file_directory)
8
+ end
9
+
10
+ assert { expected_value == @parsed_directories[directory - 1].send(property.to_sym).to_s }
11
+ end
12
+ end
13
+
14
+ When /^(?:the )?directory(?: "([^"]*)")? feature files are as follows:$/ do |directory, files|
15
+ directory ||= 1
16
+
17
+ actual_files = @parsed_directories[directory - 1].feature_files.collect { |file| file.name }
18
+
19
+ assert { actual_files.flatten.sort == files.raw.flatten.sort }
20
+ end
@@ -0,0 +1,62 @@
1
+ Then /^(?:the )?feature(?: "([^"]*)")? is found to have the following properties:$/ do |file, properties|
2
+ file ||= 1
3
+ properties = properties.rows_hash
4
+
5
+ properties.each do |property, expected_value|
6
+ assert { expected_value == @parsed_files[file - 1].feature.send(property.to_sym).to_s }
7
+ end
8
+ end
9
+
10
+ Then /^the descriptive lines of feature "([^"]*)" are as follows:$/ do |file, lines|
11
+ expected_description = lines.raw.flatten
12
+
13
+ assert { @parsed_files[file - 1].feature.description == expected_description }
14
+ end
15
+
16
+ Then /^feature "([^"]*)" is found to have the following tags:$/ do |file, tags|
17
+ expected_tags = tags.raw.flatten
18
+
19
+ assert { @parsed_files[file - 1].feature.tags == expected_tags }
20
+ end
21
+
22
+ Then /^feature "([^"]*)" has no descriptive lines$/ do |file|
23
+ assert { @parsed_files[file - 1].feature.description == [] }
24
+ end
25
+
26
+ Then /^feature "([^"]*)" has no tags$/ do |file|
27
+ assert { @parsed_files[file - 1].feature.tags == [] }
28
+ end
29
+
30
+ When /^(?:the )?feature(?: "([^"]*)")? scenarios are as follows:$/ do |file, scenarios|
31
+ file ||= 1
32
+
33
+ actual_scenarios = @parsed_files[file - 1].feature.scenarios.collect { |scenario| scenario.name }
34
+
35
+ assert { actual_scenarios.flatten.sort == scenarios.raw.flatten.sort }
36
+ end
37
+
38
+ When /^(?:the )?feature(?: "([^"]*)")? outlines are as follows:$/ do |file, outlines|
39
+ file ||= 1
40
+
41
+ actual_outlines = @parsed_files[file - 1].feature.outlines.collect { |outline| outline.name }
42
+
43
+ assert { actual_outlines.flatten.sort == outlines.raw.flatten.sort }
44
+ end
45
+
46
+ When /^(?:the )?feature(?: "([^"]*)")? background is as follows:$/ do |file, background|
47
+ file ||= 1
48
+
49
+ assert { @parsed_files[file - 1].feature.background.name == background.raw.flatten.first }
50
+ end
51
+
52
+ When /^feature "([^"]*)" has no scenarios$/ do |file|
53
+ assert { @parsed_files[file - 1].feature.scenarios == [] }
54
+ end
55
+
56
+ When /^feature "([^"]*)" has no outlines/ do |file|
57
+ assert { @parsed_files[file - 1].feature.outlines == [] }
58
+ end
59
+
60
+ When /^feature "([^"]*)" has no background/ do |file|
61
+ assert { @parsed_files[file - 1].feature.has_background? == false }
62
+ end
@@ -0,0 +1,18 @@
1
+ Then /^(?:the )?file(?: "([^"]*)")? is found to have the following properties:$/ do |file, properties|
2
+ file ||= 1
3
+ properties = properties.rows_hash
4
+
5
+ properties.each do |property, expected_value|
6
+ if property == 'path'
7
+ expected_value.sub!('path_to', @test_directory)
8
+ end
9
+
10
+ assert { expected_value == @parsed_files[file - 1].send(property.to_sym).to_s }
11
+ end
12
+ end
13
+
14
+ When /^(?:the )?file(?: "([^"]*)")? features are as follows:$/ do |file, feature|
15
+ file ||= 1
16
+
17
+ assert { @parsed_files[file - 1].feature.name == feature.raw.flatten.first }
18
+ end
@@ -0,0 +1,26 @@
1
+ Then /^(?:feature "([^"]*)" )?"([^"]*)" example "([^"]*)" has a "([^"]*)"$/ do |file, test, example, name|
2
+ file ||= 1
3
+
4
+ assert { @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].name == name }
5
+ end
6
+
7
+ When /^(?:feature "([^"]*)" )?"([^"]*)" example "([^"]*)" descriptive lines are as follows:$/ do |file, test, example, lines|
8
+ file ||= 1
9
+ lines = lines.raw.flatten.delete_if { |line| line == '' }
10
+
11
+ assert { @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].description == lines }
12
+ end
13
+
14
+ When /^(?:feature "([^"]*)" )?"([^"]*)" example "([^"]*)" tags are as follows:$/ do |file, test, example, tags|
15
+ file ||= 1
16
+ tags = tags.raw.flatten.delete_if { |line| line == '' }
17
+
18
+ assert { @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].tags == tags }
19
+ end
20
+
21
+ When /^(?:feature "([^"]*)" )?"([^"]*)" example "([^"]*)" rows are as follows:$/ do |file, test, example, rows|
22
+ file ||= 1
23
+ rows = rows.raw.flatten
24
+
25
+ assert { @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].rows == rows }
26
+ end
@@ -0,0 +1,50 @@
1
+ Given /^the following(?: feature)? file(?: "([^"]*)")?:$/ do |file_name, file_text|
2
+ @test_directory ||= @default_file_directory
3
+ file_name ||= @default_feature_file_name
4
+
5
+ File.open("#{@test_directory}/#{file_name}", 'w') { |file|
6
+ file.write(file_text)
7
+ }
8
+ end
9
+
10
+ When /^the file(?: "([^"]*)")? is read$/ do |file_name|
11
+ @parsed_files ||= []
12
+ @test_directory ||= @default_file_directory
13
+ file_name ||= @default_feature_file_name
14
+
15
+ @parsed_files << CucumberAnalytics::ParsedFile.new("#{@test_directory}/#{file_name}")
16
+ end
17
+
18
+ When /^the step definition file "([^"]*)" is read$/ do |file_name|
19
+ @test_directory ||= @default_file_directory
20
+ file_name ||= @default_step_file_name
21
+
22
+ CucumberAnalytics::World.load_step_file("#{@test_directory}/#{file_name}")
23
+ end
24
+
25
+ When /^parameter delimiters of "([^"]*)" and "([^"]*)"$/ do |left_delimiter, right_delimiter|
26
+ CucumberAnalytics::World.left_delimiter = left_delimiter
27
+ CucumberAnalytics::World.right_delimiter = right_delimiter
28
+ end
29
+
30
+ Given /^a directory "([^"]*)"$/ do |directory_name|
31
+ @test_directory = "#{@default_file_directory}/#{directory_name}"
32
+
33
+ FileUtils.mkdir(@test_directory) unless File.exists?(@test_directory)
34
+ end
35
+
36
+ When /^the directory(?: "([^"]*)")? is read$/ do |directory_name|
37
+ @parsed_directories ||= []
38
+ @test_directory = "#{@default_file_directory}/#{directory_name}" if directory_name
39
+
40
+ @parsed_directories << CucumberAnalytics::ParsedDirectory.new(@test_directory)
41
+ end
42
+
43
+ When /^the following step definition file(?: "([^"]*)")?:$/ do |file_name, file_text|
44
+ @test_directory ||= @default_file_directory
45
+ file_name ||= @default_step_file_name
46
+
47
+ File.open("#{@test_directory}/#{file_name}", 'w') { |file|
48
+ file.write(file_text)
49
+ }
50
+ end
@@ -0,0 +1,82 @@
1
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? is found to have the following properties:$/ do |file, test, properties|
2
+ file ||= 1
3
+ test ||= 1
4
+
5
+ properties = properties.rows_hash
6
+
7
+ properties.each do |property, value|
8
+ assert { value == @parsed_files[file - 1].feature.tests[test - 1].send(property.to_sym).to_s }
9
+ end
10
+ end
11
+
12
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? descriptive lines are as follows:$/ do |file, test, lines|
13
+ file ||= 1
14
+ test ||= 1
15
+ lines = lines.raw.flatten
16
+
17
+ assert { @parsed_files[file - 1].feature.tests[test - 1].description == lines }
18
+ end
19
+
20
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? steps(?: "([^"]*)" arguments)?(?: "([^"]*)" keywords)? are as follows:$/ do |file, test, arguments, keywords, steps|
21
+ file ||= 1
22
+ test ||= 1
23
+ arguments ||= 'with'
24
+ keywords ||= 'with'
25
+ translate = {'with' => true,
26
+ 'without' => false}
27
+
28
+ options = {:with_keywords => translate[keywords], :with_arguments => translate[arguments]}
29
+
30
+
31
+ steps = steps.raw.flatten.collect do |step|
32
+ if step.start_with? "'"
33
+ step.slice(1..step.length - 2)
34
+ else
35
+ step
36
+ end
37
+ end
38
+
39
+ actual_steps = Array.new.tap do |steps|
40
+ @parsed_files[file - 1].feature.tests[test - 1].steps.each do |step|
41
+ steps << step.step_text(options)
42
+ end
43
+ end
44
+
45
+ assert { actual_steps.flatten == steps }
46
+ end
47
+
48
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? is found to have the following tags:$/ do |file, test, tags|
49
+ file ||= 1
50
+ test ||= 1
51
+
52
+ assert { @parsed_files[file - 1].feature.tests[test - 1].tags == tags.raw.flatten }
53
+ end
54
+
55
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? step "([^"]*)" has the following block:$/ do |file, test, step, block|
56
+ file ||= 1
57
+ test ||= 1
58
+
59
+ block = block.raw.flatten.collect do |line|
60
+ if line.start_with? "'"
61
+ line.slice(1..line.length - 2)
62
+ else
63
+ line
64
+ end
65
+ end
66
+
67
+ assert { @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].block == block }
68
+ end
69
+
70
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? is equal to test "([^"]*)"$/ do |file, first_test, second_test|
71
+ file ||= 1
72
+ first_test ||= 1
73
+
74
+ assert { @parsed_files[file - 1].feature.tests[first_test - 1] == @parsed_files[file - 1].feature.tests[second_test - 1] }
75
+ end
76
+
77
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? is not equal to test "([^"]*)"$/ do |file, first_test, second_test|
78
+ file ||= 1
79
+ first_test ||= 1
80
+
81
+ assert { @parsed_files[file - 1].feature.tests[first_test - 1] != @parsed_files[file - 1].feature.tests[second_test - 1] }
82
+ end
@@ -0,0 +1,158 @@
1
+ Then /^the tags collected from (?:feature "([^"]*)" )?test "([^"]*)" are as follows:$/ do |file, test, tags|
2
+ file ||= 1
3
+ tags = tags.raw.flatten
4
+
5
+ assert { CucumberAnalytics::World.tags_in(@parsed_files[file - 1].feature.tests[test - 1]).sort == tags.sort }
6
+ end
7
+
8
+ Then /^the tags collected from feature "([^"]*)" are as follows:$/ do |file, tags|
9
+ file ||= 1
10
+ tags = tags.raw.flatten
11
+
12
+ assert { CucumberAnalytics::World.tags_in(@parsed_files[file - 1].feature).sort == tags.sort }
13
+ end
14
+
15
+ Then /^the tags collected from file "([^"]*)" are as follows:$/ do |file, tags|
16
+ file ||= 1
17
+ tags = tags.raw.flatten
18
+
19
+ assert { CucumberAnalytics::World.tags_in(@parsed_files[file - 1]).sort == tags.sort }
20
+ end
21
+
22
+ Then /^the tags collected from directory are as follows:$/ do |tags|
23
+ tags = tags.raw.flatten
24
+
25
+ assert { CucumberAnalytics::World.tags_in(@parsed_directories.last).sort == tags.sort }
26
+ end
27
+
28
+ Then /^the(?: "([^"]*)")? steps collected from feature "([^"]*)" background are as follows:$/ do |defined, file, steps|
29
+ file ||= 1
30
+ steps = steps.raw.flatten
31
+ container = @parsed_files[file - 1].feature.background
32
+
33
+ case defined
34
+ when 'defined'
35
+ expected_steps = CucumberAnalytics::World.defined_steps_in(container)
36
+ when 'undefined'
37
+ expected_steps = CucumberAnalytics::World.undefined_steps_in(container)
38
+ else
39
+ expected_steps = CucumberAnalytics::World.steps_in(container)
40
+ end
41
+
42
+ assert { expected_steps.collect { |step| step.step_text }.flatten.sort == steps.sort }
43
+ end
44
+
45
+ Then /^the(?: "([^"]*)")? steps collected from feature "([^"]*)" test "([^"]*)" are as follows:$/ do |defined, file, test, steps|
46
+ file ||= 1
47
+ steps = steps.raw.flatten
48
+ container = @parsed_files[file - 1].feature.tests[test - 1]
49
+
50
+ case defined
51
+ when 'defined'
52
+ expected_steps = CucumberAnalytics::World.defined_steps_in(container)
53
+ when 'undefined'
54
+ expected_steps = CucumberAnalytics::World.undefined_steps_in(container)
55
+ else
56
+ expected_steps = CucumberAnalytics::World.steps_in(container)
57
+ end
58
+
59
+ assert { expected_steps.collect { |step| step.step_text }.flatten.sort == steps.sort }
60
+ end
61
+
62
+ When /^the(?: "([^"]*)")? steps collected from (?:the )?feature(?: "([^"]*)")? are as follows:$/ do |defined, file, steps|
63
+ file ||= 1
64
+ steps = steps.raw.flatten
65
+ container = @parsed_files[file - 1].feature
66
+
67
+ case defined
68
+ when 'defined'
69
+ expected_steps = CucumberAnalytics::World.defined_steps_in(container)
70
+ when 'undefined'
71
+ expected_steps = CucumberAnalytics::World.undefined_steps_in(container)
72
+ else
73
+ expected_steps = CucumberAnalytics::World.steps_in(container)
74
+ end
75
+
76
+ assert { expected_steps.collect { |step| step.step_text }.flatten.sort == steps.sort }
77
+ end
78
+
79
+ When /^the(?: "([^"]*)")? steps collected from (?:the )?file(?: "([^"]*)")? are as follows:$/ do |defined, file, steps|
80
+ file ||= 1
81
+ steps = steps.raw.flatten
82
+ container = @parsed_files[file - 1]
83
+
84
+ case defined
85
+ when 'defined'
86
+ expected_steps = CucumberAnalytics::World.defined_steps_in(container)
87
+ when 'undefined'
88
+ expected_steps = CucumberAnalytics::World.undefined_steps_in(container)
89
+ else
90
+ expected_steps = CucumberAnalytics::World.steps_in(container)
91
+ end
92
+
93
+ assert { expected_steps.collect { |step| step.step_text }.flatten.sort == steps.sort }
94
+ end
95
+
96
+ When /^the(?: "([^"]*)")? steps collected from the directory are as follows:$/ do |defined, steps|
97
+ steps = steps.raw.flatten
98
+ container = @parsed_directories.last
99
+
100
+ case defined
101
+ when 'defined'
102
+ expected_steps = CucumberAnalytics::World.defined_steps_in(container)
103
+ when 'undefined'
104
+ expected_steps = CucumberAnalytics::World.undefined_steps_in(container)
105
+ else
106
+ expected_steps = CucumberAnalytics::World.steps_in(container)
107
+ end
108
+
109
+ assert { expected_steps.collect { |step| step.step_text }.flatten.sort == steps.sort }
110
+ end
111
+
112
+ Then /^the tests collected from feature "([^"]*)" are as follows:$/ do |file, tests|
113
+ file ||= 1
114
+
115
+ actual_tests = CucumberAnalytics::World.tests_in(@parsed_files[file - 1].feature).collect { |test| test.name }
116
+
117
+ assert { actual_tests.flatten.sort == tests.raw.flatten.sort }
118
+ end
119
+
120
+ Then /^the tests collected from file "([^"]*)" are as follows:$/ do |file, tests|
121
+ file ||= 1
122
+
123
+ actual_tests = CucumberAnalytics::World.tests_in(@parsed_files[file - 1]).collect { |test| test.name }
124
+
125
+ assert { actual_tests.flatten.sort == tests.raw.flatten.sort }
126
+ end
127
+
128
+ Then /^the tests collected from directory "([^"]*)" are as follows:$/ do |directory, tests|
129
+ directory ||= 1
130
+
131
+ actual_tests = CucumberAnalytics::World.tests_in(@parsed_directories[directory - 1]).collect { |test| test.name }
132
+
133
+ assert { actual_tests.flatten.sort == tests.raw.flatten.sort }
134
+ end
135
+
136
+ Then /^the features collected from file "([^"]*)" are as follows:$/ do |file, features|
137
+ file ||= 1
138
+
139
+ actual_features = CucumberAnalytics::World.features_in(@parsed_files[file - 1]).collect { |feature| feature.name }
140
+
141
+ assert { actual_features.flatten.sort == features.raw.flatten.sort }
142
+ end
143
+
144
+ Then /^the features collected from directory "([^"]*)" are as follows:$/ do |directory, features|
145
+ directory ||= 1
146
+
147
+ actual_features = CucumberAnalytics::World.features_in(@parsed_directories[directory - 1]).collect { |feature| feature.name }
148
+
149
+ assert { actual_features.flatten.sort == features.raw.flatten.sort }
150
+ end
151
+
152
+ Then /^the files collected from directory "([^"]*)" are as follows:$/ do |directory, files|
153
+ directory ||= 1
154
+
155
+ actual_files = CucumberAnalytics::World.files_in(@parsed_directories[directory - 1]).collect { |file| file.name }
156
+
157
+ assert { actual_files.flatten.sort == files.raw.flatten.sort }
158
+ end
@@ -0,0 +1,29 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'wrong'
5
+ include Wrong
6
+
7
+ require File.dirname(__FILE__) + '/../../lib/cucumber_analytics'
8
+
9
+
10
+ DEFAULT_FEATURE_FILE_NAME = 'test_feature.feature'
11
+ DEFAULT_STEP_FILE_NAME = 'test_steps.rb'
12
+ DEFAULT_FILE_DIRECTORY = "#{File.dirname(__FILE__)}/../temp_files"
13
+ TEST_FILE_DIRECTORY = "#{File.dirname(__FILE__)}/../test_files"
14
+ TEST_STEP_FILE_LOCATION = "#{DEFAULT_FILE_DIRECTORY}/#{DEFAULT_STEP_FILE_NAME}"
15
+
16
+
17
+ Before do
18
+ @default_feature_file_name = DEFAULT_FEATURE_FILE_NAME
19
+ @default_step_file_name = DEFAULT_STEP_FILE_NAME
20
+ @test_file_directory = TEST_FILE_DIRECTORY
21
+ @default_file_directory = DEFAULT_FILE_DIRECTORY
22
+ @test_step_file_location = TEST_STEP_FILE_LOCATION
23
+
24
+ FileUtils.mkdir(@default_file_directory)
25
+ end
26
+
27
+ After do
28
+ FileUtils.remove_dir(@default_file_directory, true)
29
+ end
@@ -0,0 +1,3 @@
1
+ Transform /^(-?\d+)$/ do |number|
2
+ number.to_i
3
+ end