cucumber_analytics 0.0.9 → 1.0.0

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.
Files changed (94) hide show
  1. checksums.yaml +15 -0
  2. data/History.rdoc +16 -0
  3. data/README.rdoc +5 -3
  4. data/Rakefile +7 -2
  5. data/cucumber_analytics.gemspec +7 -5
  6. data/features/analysis/step_collection.feature +44 -45
  7. data/features/modeling/background_modeling.feature +14 -144
  8. data/features/modeling/directory_modeling.feature +3 -2
  9. data/features/modeling/doc_string_modeling.feature +46 -0
  10. data/features/modeling/example_modeling.feature +13 -34
  11. data/features/modeling/feature_file_modeling.feature +3 -2
  12. data/features/modeling/feature_modeling.feature +18 -80
  13. data/features/modeling/outline_modeling.feature +25 -164
  14. data/features/modeling/scenario_modeling.feature +17 -144
  15. data/features/modeling/step_modeling.feature +68 -0
  16. data/features/modeling/table_modeling.feature +41 -0
  17. data/features/step_definitions/background_steps.rb +12 -11
  18. data/features/step_definitions/directory_steps.rb +6 -3
  19. data/features/step_definitions/doc_string_steps.rb +50 -0
  20. data/features/step_definitions/{file_steps.rb → feature_file_steps.rb} +8 -2
  21. data/features/step_definitions/feature_steps.rb +8 -4
  22. data/features/step_definitions/outline_steps.rb +12 -6
  23. data/features/step_definitions/setup_steps.rb +2 -2
  24. data/features/step_definitions/spec_steps.rb +6 -3
  25. data/features/step_definitions/step_steps.rb +91 -0
  26. data/features/step_definitions/table_steps.rb +10 -0
  27. data/features/step_definitions/test_steps.rb +6 -10
  28. data/features/step_definitions/world_steps.rb +28 -19
  29. data/features/support/env.rb +0 -2
  30. data/lib/cucumber_analytics/background.rb +16 -0
  31. data/lib/cucumber_analytics/containing.rb +18 -0
  32. data/lib/cucumber_analytics/directory.rb +83 -0
  33. data/lib/cucumber_analytics/doc_string.rb +55 -0
  34. data/lib/cucumber_analytics/example.rb +100 -0
  35. data/lib/cucumber_analytics/feature.rb +120 -0
  36. data/lib/cucumber_analytics/feature_element.rb +22 -40
  37. data/lib/cucumber_analytics/feature_file.rb +74 -0
  38. data/lib/cucumber_analytics/outline.rb +49 -0
  39. data/lib/cucumber_analytics/parsing.rb +30 -0
  40. data/lib/cucumber_analytics/scenario.rb +31 -0
  41. data/lib/cucumber_analytics/step.rb +142 -32
  42. data/lib/cucumber_analytics/table.rb +51 -0
  43. data/lib/cucumber_analytics/taggable.rb +35 -0
  44. data/lib/cucumber_analytics/test_element.rb +36 -91
  45. data/lib/cucumber_analytics/version.rb +1 -1
  46. data/lib/cucumber_analytics/world.rb +109 -153
  47. data/lib/cucumber_analytics.rb +12 -8
  48. data/spec/integration/background_integration_spec.rb +18 -0
  49. data/spec/integration/directory_integration_spec.rb +24 -0
  50. data/spec/{feature_spec.rb → integration/feature_file_integration_spec.rb} +5 -5
  51. data/spec/integration/feature_integration_spec.rb +86 -0
  52. data/spec/integration/outline_integration_spec.rb +22 -0
  53. data/spec/integration/scenario_integration_spec.rb +18 -0
  54. data/spec/integration/step_integration_spec.rb +116 -0
  55. data/spec/integration/world_integration_spec.rb +40 -0
  56. data/spec/spec_helper.rb +7 -3
  57. data/spec/unit/background_unit_spec.rb +22 -0
  58. data/spec/unit/bare_bones_unit_specs.rb +13 -0
  59. data/spec/unit/containing_element_unit_specs.rb +17 -0
  60. data/spec/unit/directory_unit_spec.rb +91 -0
  61. data/spec/unit/doc_string_unit_spec.rb +65 -0
  62. data/spec/unit/example_unit_spec.rb +171 -0
  63. data/spec/unit/feature_element_unit_spec.rb +19 -0
  64. data/spec/unit/feature_element_unit_specs.rb +39 -0
  65. data/spec/unit/feature_file_unit_spec.rb +82 -0
  66. data/spec/unit/feature_unit_spec.rb +81 -0
  67. data/spec/unit/nested_element_unit_specs.rb +24 -0
  68. data/spec/unit/outline_unit_spec.rb +56 -0
  69. data/spec/unit/parsing_unit_spec.rb +21 -0
  70. data/spec/unit/prepopulated_unit_specs.rb +13 -0
  71. data/spec/unit/scenario_unit_spec.rb +36 -0
  72. data/spec/unit/step_unit_spec.rb +231 -0
  73. data/spec/unit/table_unit_spec.rb +52 -0
  74. data/spec/unit/taggable_unit_spec.rb +63 -0
  75. data/spec/unit/tagged_element_unit_specs.rb +48 -0
  76. data/spec/unit/test_element_unit_spec.rb +40 -0
  77. data/spec/unit/test_element_unit_specs.rb +31 -0
  78. data/spec/unit/world_unit_spec.rb +167 -0
  79. metadata +106 -41
  80. data/lib/cucumber_analytics/logging.rb +0 -28
  81. data/lib/cucumber_analytics/outline_example.rb +0 -110
  82. data/lib/cucumber_analytics/parsed_background.rb +0 -45
  83. data/lib/cucumber_analytics/parsed_directory.rb +0 -78
  84. data/lib/cucumber_analytics/parsed_feature.rb +0 -97
  85. data/lib/cucumber_analytics/parsed_file.rb +0 -199
  86. data/lib/cucumber_analytics/parsed_scenario.rb +0 -67
  87. data/lib/cucumber_analytics/parsed_scenario_outline.rb +0 -122
  88. data/spec/background_spec.rb +0 -23
  89. data/spec/directory_spec.rb +0 -18
  90. data/spec/example_spec.rb +0 -37
  91. data/spec/file_spec.rb +0 -20
  92. data/spec/outline_spec.rb +0 -32
  93. data/spec/scenario_spec.rb +0 -33
  94. data/spec/step_spec.rb +0 -24
@@ -3,25 +3,23 @@ Then /^the(?: feature "([^"]*)")? background is found to have the following prop
3
3
  properties = properties.rows_hash
4
4
 
5
5
  properties.each do |property, expected_value|
6
- assert expected_value == @parsed_files[file - 1].feature.background.send(property.to_sym).to_s
6
+ expected = expected_value
7
+ actual = @parsed_files[file - 1].feature.background.send(property.to_sym).to_s
8
+
9
+ actual.should == expected
7
10
  end
8
11
  end
9
12
 
10
13
  Then /^the(?: feature "([^"]*)")? background's descriptive lines are as follows:$/ do |file, lines|
11
14
  file ||= 1
12
15
  expected_description = lines.raw.flatten
16
+ actual_description = @parsed_files[file - 1].feature.background.description
13
17
 
14
- assert @parsed_files[file - 1].feature.background.description == expected_description
18
+ actual_description.should == expected_description
15
19
  end
16
20
 
17
- Then /^the(?: feature "([^"]*)")? background's steps(?: "([^"]*)" arguments)?(?: "([^"]*)" keywords)? are as follows:$/ do |file, arguments, keywords, steps|
21
+ Then /^the(?: feature "([^"]*)")? background's steps are as follows:$/ do |file, steps|
18
22
  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
23
 
26
24
  steps = steps.raw.flatten.collect do |step|
27
25
  if step.start_with? "'"
@@ -33,11 +31,14 @@ Then /^the(?: feature "([^"]*)")? background's steps(?: "([^"]*)" arguments)?(?:
33
31
 
34
32
  actual_steps = Array.new.tap do |steps|
35
33
  @parsed_files[file - 1].feature.background.steps.each do |step|
36
- steps << step.step_text(options)
34
+ steps << step.base
37
35
  end
38
36
  end
39
37
 
40
- assert actual_steps.flatten == steps
38
+ expected = steps
39
+ actual = actual_steps.flatten
40
+
41
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
41
42
  end
42
43
 
43
44
  When /^step "([^"]*)" of the background (?:of feature "([^"]*)" )?has the following block:$/ do |step, file, block|
@@ -7,7 +7,10 @@ Then /^(?:the )?directory(?: "([^"]*)")? is found to have the following properti
7
7
  expected_value.sub!('path_to', @default_file_directory)
8
8
  end
9
9
 
10
- assert expected_value == @parsed_directories[directory - 1].send(property.to_sym).to_s
10
+ expected = expected_value
11
+ actual = @parsed_directories[directory - 1].send(property.to_sym).to_s
12
+
13
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
11
14
  end
12
15
  end
13
16
 
@@ -23,7 +26,7 @@ When /^(?:the )?directory(?: "([^"]*)")? directories are as follows:$/ do |direc
23
26
  directory ||= 1
24
27
 
25
28
  expected = directories.raw.flatten.sort
26
- actual = @parsed_directories[directory - 1].feature_directories.collect { |sub_directory| sub_directory.name }
29
+ actual = @parsed_directories[directory - 1].directories.collect { |sub_directory| sub_directory.name }
27
30
 
28
31
  assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
29
32
  end
@@ -32,7 +35,7 @@ When /^(?:the )?directory(?: "([^"]*)")? has no directories$/ do |directory|
32
35
  directory ||= 1
33
36
 
34
37
  expected = []
35
- actual = @parsed_directories[directory - 1].feature_directories
38
+ actual = @parsed_directories[directory - 1].directories
36
39
 
37
40
  assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
38
41
  end
@@ -0,0 +1,50 @@
1
+ Then /^(?:the )?(?:feature "([^"]*)" )?(?:test(?: "([^"]*)")? )?(?:step(?: "([^"]*)") )?doc string content type is "([^"]*)"$/ do |file, test, step, type|
2
+ file ||= 1
3
+ test ||= 1
4
+ step ||= 1
5
+
6
+ expected = type
7
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].block.content_type
8
+
9
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
10
+ end
11
+
12
+ Then /^(?:the )?(?:feature "([^"]*)" )?(?:test(?: "([^"]*)")? )?(?:step(?: "([^"]*)") )?doc string has no content type$/ do |file, test, step|
13
+ file ||= 1
14
+ test ||= 1
15
+ step ||= 1
16
+
17
+ expected = nil
18
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].block.content_type
19
+
20
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
21
+ end
22
+
23
+ Then /^(?:the )?(?:feature "([^"]*)" )?(?:test(?: "([^"]*)")? )?(?:step(?: "([^"]*)") )?doc string has the following contents:$/ do |file, test, step, contents|
24
+ file ||= 1
25
+ test ||= 1
26
+ step ||= 1
27
+
28
+ expected = contents.raw.flatten.collect do |cell_value|
29
+ if cell_value.start_with? "'"
30
+ cell_value.slice(1..cell_value.length - 2)
31
+ else
32
+ cell_value
33
+ end
34
+ end
35
+
36
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].block.contents
37
+
38
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
39
+ end
40
+
41
+ Then /^(?:the )?(?:feature "([^"]*)" )?(?:test(?: "([^"]*)")? )?(?:step(?: "([^"]*)") )?doc string contents are empty$/ do |file, test, step|
42
+ file ||= 1
43
+ test ||= 1
44
+ step ||= 1
45
+
46
+ expected = []
47
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].block.contents
48
+
49
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
50
+ end
@@ -7,14 +7,20 @@ Then /^(?:the )?file(?: "([^"]*)")? is found to have the following properties:$/
7
7
  expected_value.sub!('path_to', @test_directory)
8
8
  end
9
9
 
10
- assert expected_value == @parsed_files[file - 1].send(property.to_sym).to_s
10
+ expected = expected_value
11
+ actual = @parsed_files[file - 1].send(property.to_sym).to_s
12
+
13
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
11
14
  end
12
15
  end
13
16
 
14
17
  When /^(?:the )?file(?: "([^"]*)")? features are as follows:$/ do |file, feature|
15
18
  file ||= 1
16
19
 
17
- assert @parsed_files[file - 1].feature.name == feature.raw.flatten.first
20
+ expected = feature.raw.flatten.first
21
+ actual = @parsed_files[file - 1].feature.name
22
+
23
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
18
24
  end
19
25
 
20
26
  When /^(?:the )?file(?: "([^"]*)")? has no features$/ do |file|
@@ -18,9 +18,10 @@ Then /^the descriptive lines of feature "([^"]*)" are as follows:$/ do |file, li
18
18
  end
19
19
 
20
20
  Then /^feature "([^"]*)" is found to have the following tags:$/ do |file, tags|
21
- expected_tags = tags.raw.flatten
21
+ expected = tags.raw.flatten
22
+ actual = @parsed_files[file - 1].feature.tags
22
23
 
23
- assert @parsed_files[file - 1].feature.tags == expected_tags
24
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
24
25
  end
25
26
 
26
27
  Then /^feature "([^"]*)" has no descriptive lines$/ do |file|
@@ -44,13 +45,16 @@ When /^(?:the )?feature(?: "([^"]*)")? outlines are as follows:$/ do |file, outl
44
45
 
45
46
  actual_outlines = @parsed_files[file - 1].feature.outlines.collect { |outline| outline.name }
46
47
 
47
- assert actual_outlines.flatten.sort == outlines.raw.flatten.sort
48
+ expected = outlines.raw.flatten.sort
49
+ actual = actual_outlines.flatten.sort
50
+
51
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
48
52
  end
49
53
 
50
54
  When /^(?:the )?feature(?: "([^"]*)")? background is as follows:$/ do |file, background|
51
55
  file ||= 1
52
56
 
53
- assert @parsed_files[file - 1].feature.background.name == background.raw.flatten.first
57
+ @parsed_files[file - 1].feature.background.name.should == background.raw.flatten.first
54
58
  end
55
59
 
56
60
  When /^feature "([^"]*)" has no scenarios$/ do |file|
@@ -2,9 +2,10 @@ When /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example blocks are as
2
2
  file ||= 1
3
3
  test ||= 1
4
4
 
5
- names = names.raw.flatten
5
+ expected = names.raw.flatten
6
+ actual = @parsed_files[file - 1].feature.tests[test - 1].examples.collect { |example| example.name }
6
7
 
7
- assert @parsed_files[file - 1].feature.tests[test - 1].examples.collect { |example| example.name } == names
8
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
8
9
  end
9
10
 
10
11
  Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? is found to have the following properties:$/ do |file, test, example, properties|
@@ -34,9 +35,11 @@ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^
34
35
  test ||= 1
35
36
  example ||= 1
36
37
 
37
- tags = tags.raw.flatten
38
38
 
39
- assert @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].tags == tags
39
+ expected = tags.raw.flatten
40
+ actual = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].tags
41
+
42
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
40
43
  end
41
44
 
42
45
  Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? is found to have the following applied tags:$/ do |file, test, example, tags|
@@ -57,7 +60,10 @@ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^
57
60
  test ||= 1
58
61
  example ||= 1
59
62
 
60
- assert @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].tags == []
63
+ expected = []
64
+ actual = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].tags
65
+
66
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
61
67
  end
62
68
 
63
69
  Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? rows are as follows:$/ do |file, test, example, rows|
@@ -108,7 +114,7 @@ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^
108
114
  parameters = parameters.raw.flatten
109
115
 
110
116
  expected = parameters
111
- actual =@parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].parameters
117
+ actual = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].parameters
112
118
 
113
119
  assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
114
120
  end
@@ -12,7 +12,7 @@ When /^the file(?: "([^"]*)")? is read$/ do |file_name|
12
12
  @test_directory ||= @default_file_directory
13
13
  file_name ||= @default_feature_file_name
14
14
 
15
- @parsed_files << CucumberAnalytics::ParsedFile.new("#{@test_directory}/#{file_name}")
15
+ @parsed_files << CucumberAnalytics::FeatureFile.new("#{@test_directory}/#{file_name}")
16
16
  end
17
17
 
18
18
  When /^the step definition file "([^"]*)" is read$/ do |file_name|
@@ -37,7 +37,7 @@ When /^the directory(?: "([^"]*)")? is read$/ do |directory_name|
37
37
  @parsed_directories ||= []
38
38
  @test_directory = "#{@default_file_directory}/#{directory_name}" if directory_name
39
39
 
40
- @parsed_directories << CucumberAnalytics::ParsedDirectory.new(@test_directory)
40
+ @parsed_directories << CucumberAnalytics::Directory.new(@test_directory)
41
41
  end
42
42
 
43
43
  When /^the following step definition file(?: "([^"]*)")?:$/ do |file_name, file_text|
@@ -1,15 +1,18 @@
1
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))
2
+ sub_directory = spec_file =~ /integration/ ? 'integration' : 'unit'
3
+ spec_file = "#{SPEC_DIRECTORY}/#{sub_directory}/#{spec_file}"
4
+
5
+ fail "The spec file does not exist: #{spec_file}" unless File.exists?(spec_file)
3
6
 
4
7
  @spec_file = spec_file
5
8
  end
6
9
 
7
10
  When /^the corresponding unit tests are run$/ do
8
- command = "rspec spec/#{@spec_file}"
11
+ command = "rspec #{@spec_file}"
9
12
 
10
13
  @specs_passed = system(command)
11
14
  end
12
15
 
13
16
  Then /^all of those specifications are met$/ do
14
- fail "There were unmet specifications." unless @specs_passed
17
+ fail "There were unmet specifications in '#{@spec_file}'." unless @specs_passed
15
18
  end
@@ -0,0 +1,91 @@
1
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? step(?: "([^"]*)")? keyword is "([^"]*)"$/ do |file, test, step, keyword|
2
+ file ||= 1
3
+ test ||= 1
4
+ step ||= 1
5
+
6
+ expected = keyword
7
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].keyword
8
+
9
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
10
+ end
11
+
12
+ Then /^(?:the )?(?:feature "([^"]*)" )?(?:test(?: "([^"]*)")? )?step(?: "([^"]*)")? has the following block:$/ do |file, test, step, block|
13
+ file ||= 1
14
+ test ||= 1
15
+ step ||= 1
16
+
17
+ expected = block.raw.flatten.collect do |cell_value|
18
+ if cell_value.start_with? "'"
19
+ cell_value.slice(1..cell_value.length - 2)
20
+ else
21
+ cell_value
22
+ end
23
+ end
24
+
25
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].block.flatten
26
+
27
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
28
+ end
29
+
30
+ Then /^(?:the )?(?:feature "([^"]*)" )?(?:test(?: "([^"]*)")? )?step(?: "([^"]*)")? has no block$/ do |file, test, step|
31
+ file ||= 1
32
+ test ||= 1
33
+ step ||= 1
34
+
35
+ expected = nil
36
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].block
37
+
38
+ actual.should == expected
39
+ end
40
+
41
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? step(?: "([^"]*)")? text is "([^"]*)"$/ do |file, test, step, text|
42
+ file ||= 1
43
+ test ||= 1
44
+ step ||= 1
45
+
46
+ expected = text
47
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].base
48
+
49
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
50
+ end
51
+
52
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? step(?: "([^"]*)")? arguments are:$/ do |file, test, step, arguments|
53
+ file ||= 1
54
+ test ||= 1
55
+ step ||= 1
56
+
57
+ expected = arguments.raw.flatten
58
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].arguments
59
+
60
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
61
+ end
62
+
63
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? step(?: "([^"]*)")? has no arguments$/ do |file, test, step|
64
+ file ||= 1
65
+ test ||= 1
66
+ step ||= 1
67
+
68
+ expected = []
69
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].arguments
70
+
71
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
72
+ end
73
+
74
+ Then /^(?:the )?(?:feature "([^"]*)" )?(?:test(?: "([^"]*)")? )?step(?: "([^"]*)")? has a "([^"]*)"$/ do |file, test, step, type|
75
+ file ||= 1
76
+ test ||= 1
77
+ step ||= 1
78
+
79
+ case type
80
+ when 'doc string'
81
+ expected = CucumberAnalytics::DocString
82
+ when 'table'
83
+ expected = CucumberAnalytics::Table
84
+ else
85
+ raise(ArgumentError, "Unknown block type: #{type}")
86
+ end
87
+
88
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].block.class
89
+
90
+ actual.should == expected
91
+ end
@@ -0,0 +1,10 @@
1
+ Then /^(?:the )?(?:feature "([^"]*)" )?(?:test(?: "([^"]*)")? )?(?:step(?: "([^"]*)") )?table has the following contents:$/ do |file, test, step, contents|
2
+ file ||= 1
3
+ test ||= 1
4
+ step ||= 1
5
+
6
+ expected = contents.raw
7
+ actual = @parsed_files[file - 1].feature.tests[test - 1].steps[step - 1].block.contents
8
+
9
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
10
+ end
@@ -17,16 +17,9 @@ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? descriptive lines are
17
17
  assert @parsed_files[file - 1].feature.tests[test - 1].description == lines
18
18
  end
19
19
 
20
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? steps(?: "([^"]*)" arguments)?(?: "([^"]*)" keywords)? are as follows:$/ do |file, test, arguments, keywords, steps|
20
+ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? steps are as follows:$/ do |file, test, steps|
21
21
  file ||= 1
22
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
23
 
31
24
  steps = steps.raw.flatten.collect do |step|
32
25
  if step.start_with? "'"
@@ -38,7 +31,7 @@ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? steps(?: "([^"]*)" ar
38
31
 
39
32
  actual_steps = Array.new.tap do |steps|
40
33
  @parsed_files[file - 1].feature.tests[test - 1].steps.each do |step|
41
- steps << step.step_text(options)
34
+ steps << step.base
42
35
  end
43
36
  end
44
37
 
@@ -84,7 +77,10 @@ Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? is equal to test "([^
84
77
  file ||= 1
85
78
  first_test ||= 1
86
79
 
87
- assert @parsed_files[file - 1].feature.tests[first_test - 1] == @parsed_files[file - 1].feature.tests[second_test - 1]
80
+ expected = true
81
+ actual = @parsed_files[file - 1].feature.tests[first_test - 1] == @parsed_files[file - 1].feature.tests[second_test - 1]
82
+
83
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
88
84
  end
89
85
 
90
86
  Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? is not equal to test "([^"]*)"$/ do |file, first_test, second_test|
@@ -39,7 +39,7 @@ Then /^the(?: "([^"]*)")? steps collected from feature "([^"]*)" background are
39
39
  expected_steps = CucumberAnalytics::World.steps_in(container)
40
40
  end
41
41
 
42
- assert expected_steps.collect { |step| step.step_text }.flatten.sort == steps.sort
42
+ assert expected_steps.collect { |step| step.base }.flatten.sort == steps.sort
43
43
  end
44
44
 
45
45
  Then /^the(?: "([^"]*)")? steps collected from feature "([^"]*)" test "([^"]*)" are as follows:$/ do |defined, file, test, steps|
@@ -56,57 +56,63 @@ Then /^the(?: "([^"]*)")? steps collected from feature "([^"]*)" test "([^"]*)"
56
56
  expected_steps = CucumberAnalytics::World.steps_in(container)
57
57
  end
58
58
 
59
- assert expected_steps.collect { |step| step.step_text }.flatten.sort == steps.sort
59
+ assert expected_steps.collect { |step| step.base }.flatten.sort == steps.sort
60
60
  end
61
61
 
62
62
  When /^the(?: "([^"]*)")? steps collected from (?:the )?feature(?: "([^"]*)")? are as follows:$/ do |defined, file, steps|
63
63
  file ||= 1
64
- steps = steps.raw.flatten
65
64
  container = @parsed_files[file - 1].feature
66
65
 
67
66
  case defined
68
67
  when 'defined'
69
- expected_steps = CucumberAnalytics::World.defined_steps_in(container)
68
+ actual_steps = CucumberAnalytics::World.defined_steps_in(container)
70
69
  when 'undefined'
71
- expected_steps = CucumberAnalytics::World.undefined_steps_in(container)
70
+ actual_steps = CucumberAnalytics::World.undefined_steps_in(container)
72
71
  else
73
- expected_steps = CucumberAnalytics::World.steps_in(container)
72
+ actual_steps = CucumberAnalytics::World.steps_in(container)
74
73
  end
75
74
 
76
- assert expected_steps.collect { |step| step.step_text }.flatten.sort == steps.sort
75
+ expected = steps.raw.flatten.sort
76
+ actual = actual_steps.collect { |step| step.base }.flatten.sort
77
+
78
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
77
79
  end
78
80
 
79
81
  When /^the(?: "([^"]*)")? steps collected from (?:the )?file(?: "([^"]*)")? are as follows:$/ do |defined, file, steps|
80
82
  file ||= 1
81
- steps = steps.raw.flatten
82
83
  container = @parsed_files[file - 1]
83
84
 
84
85
  case defined
85
86
  when 'defined'
86
- expected_steps = CucumberAnalytics::World.defined_steps_in(container)
87
+ actual_steps = CucumberAnalytics::World.defined_steps_in(container)
87
88
  when 'undefined'
88
- expected_steps = CucumberAnalytics::World.undefined_steps_in(container)
89
+ actual_steps = CucumberAnalytics::World.undefined_steps_in(container)
89
90
  else
90
- expected_steps = CucumberAnalytics::World.steps_in(container)
91
+ actual_steps = CucumberAnalytics::World.steps_in(container)
91
92
  end
92
93
 
93
- assert expected_steps.collect { |step| step.step_text }.flatten.sort == steps.sort
94
+ expected = steps.raw.flatten.sort
95
+ actual = actual_steps.collect { |step| step.base }.flatten.sort
96
+
97
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
94
98
  end
95
99
 
96
100
  When /^the(?: "([^"]*)")? steps collected from the directory are as follows:$/ do |defined, steps|
97
- steps = steps.raw.flatten
98
101
  container = @parsed_directories.last
99
102
 
100
103
  case defined
101
104
  when 'defined'
102
- expected_steps = CucumberAnalytics::World.defined_steps_in(container)
105
+ actual_steps = CucumberAnalytics::World.defined_steps_in(container)
103
106
  when 'undefined'
104
- expected_steps = CucumberAnalytics::World.undefined_steps_in(container)
107
+ actual_steps = CucumberAnalytics::World.undefined_steps_in(container)
105
108
  else
106
- expected_steps = CucumberAnalytics::World.steps_in(container)
109
+ actual_steps = CucumberAnalytics::World.steps_in(container)
107
110
  end
108
111
 
109
- assert expected_steps.collect { |step| step.step_text }.flatten.sort == steps.sort
112
+ expected = steps.raw.flatten.sort
113
+ actual = actual_steps.collect { |step| step.base }.flatten.sort
114
+
115
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
110
116
  end
111
117
 
112
118
  Then /^the tests collected from feature "([^"]*)" are as follows:$/ do |file, tests|
@@ -153,9 +159,12 @@ end
153
159
  Then /^the files collected from directory "([^"]*)" are as follows:$/ do |directory, files|
154
160
  directory ||= 1
155
161
 
156
- actual_files = CucumberAnalytics::World.files_in(@parsed_directories[directory - 1]).collect { |file| file.name }
162
+ actual_files = CucumberAnalytics::World.feature_files_in(@parsed_directories[directory - 1]).collect { |file| file.name }
157
163
 
158
- assert actual_files.flatten.sort == files.raw.flatten.sort
164
+ expected = files.raw.flatten.sort
165
+ actual = actual_files.flatten.sort
166
+
167
+ assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
159
168
  end
160
169
 
161
170
  Then /^the directories collected from directory "([^"]*)" are as follows:$/ do |directory, directories|
@@ -7,8 +7,6 @@ include Test::Unit::Assertions
7
7
 
8
8
  require File.dirname(__FILE__) + '/../../lib/cucumber_analytics'
9
9
 
10
- CucumberAnalytics::Logging.set_log_level(Logger::FATAL)
11
-
12
10
 
13
11
  DEFAULT_FEATURE_FILE_NAME = 'test_feature.feature'
14
12
  DEFAULT_STEP_FILE_NAME = 'test_steps.rb'
@@ -0,0 +1,16 @@
1
+ module CucumberAnalytics
2
+
3
+ # A class modeling a Cucumber feature's Background.
4
+
5
+ class Background < TestElement
6
+
7
+ # Creates a new Background object and, if *source* is provided, populates
8
+ # the object.
9
+ def initialize(source = nil)
10
+ parsed_background = process_source(source)
11
+
12
+ super(parsed_background)
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module CucumberAnalytics
2
+
3
+
4
+ module Containing
5
+
6
+
7
+ private
8
+
9
+
10
+ def build_child_element(clazz, element_data)
11
+ element = clazz.new(element_data)
12
+ element.parent_element = self
13
+
14
+ element
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,83 @@
1
+ module CucumberAnalytics
2
+
3
+ # A class modeling a directory containing .feature files.
4
+
5
+ class Directory
6
+
7
+ include Containing
8
+
9
+
10
+ # The FeatureFile objects contained by the Directory
11
+ attr_accessor :feature_files
12
+
13
+ # The Directory objects contained by the Directory
14
+ attr_accessor :directories
15
+
16
+ # The parent object that contains *self*
17
+ attr_accessor :parent_element
18
+
19
+
20
+ # Creates a new Directory object and, if *directory_parsed* is provided,
21
+ # populates the object.
22
+ def initialize(directory_parsed = nil)
23
+ @directory = directory_parsed
24
+
25
+ @feature_files = []
26
+ @directories = []
27
+
28
+ if directory_parsed
29
+ raise(ArgumentError, "Unknown directory: #{directory_parsed.inspect}") unless File.exists?(directory_parsed)
30
+ build_directory
31
+ end
32
+ end
33
+
34
+ # Returns the name of the directory.
35
+ def name
36
+ File.basename(@directory.gsub('\\', '/'))
37
+ end
38
+
39
+ # Returns the path of the directory.
40
+ def path
41
+ @directory
42
+ end
43
+
44
+ # Returns the number of sub-directories contained in the directory.
45
+ def directory_count
46
+ @directories.count
47
+ end
48
+
49
+ # Returns the number of features files contained in the directory.
50
+ def feature_file_count
51
+ @feature_files.count
52
+ end
53
+
54
+ # Returns the immediate child elements of the directory (i.e. its Directory
55
+ # and FeatureFile objects).
56
+ def contains
57
+ @feature_files + @directories
58
+ end
59
+
60
+
61
+ private
62
+
63
+
64
+ def build_directory
65
+ entries = Dir.entries(@directory)
66
+ entries.delete '.'
67
+ entries.delete '..'
68
+
69
+ entries.each do |entry|
70
+ entry = "#{@directory}/#{entry}"
71
+
72
+ case
73
+ when File.directory?(entry)
74
+ @directories << build_child_element(Directory, entry)
75
+ when entry =~ /\.feature$/
76
+ @feature_files << build_child_element(FeatureFile, entry)
77
+ end
78
+ end
79
+
80
+ end
81
+
82
+ end
83
+ end