cuke_modeler 1.5.0 → 3.1.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 (129) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +341 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +22 -15
  5. data/cuke_modeler.gemspec +15 -9
  6. data/lib/cuke_modeler/adapters/gherkin_10_adapter.rb +12 -0
  7. data/lib/cuke_modeler/adapters/gherkin_11_adapter.rb +12 -0
  8. data/lib/cuke_modeler/adapters/gherkin_12_adapter.rb +12 -0
  9. data/lib/cuke_modeler/adapters/gherkin_13_adapter.rb +12 -0
  10. data/lib/cuke_modeler/adapters/gherkin_14_adapter.rb +12 -0
  11. data/lib/cuke_modeler/adapters/{gherkin_6_adapter.rb → gherkin_9_adapter.rb} +75 -64
  12. data/lib/cuke_modeler/containing.rb +3 -0
  13. data/lib/cuke_modeler/described.rb +1 -0
  14. data/lib/cuke_modeler/models/background.rb +1 -1
  15. data/lib/cuke_modeler/models/cell.rb +1 -1
  16. data/lib/cuke_modeler/models/comment.rb +1 -1
  17. data/lib/cuke_modeler/models/directory.rb +2 -2
  18. data/lib/cuke_modeler/models/doc_string.rb +1 -1
  19. data/lib/cuke_modeler/models/example.rb +1 -1
  20. data/lib/cuke_modeler/models/feature.rb +1 -1
  21. data/lib/cuke_modeler/models/feature_file.rb +2 -2
  22. data/lib/cuke_modeler/models/outline.rb +1 -1
  23. data/lib/cuke_modeler/models/row.rb +1 -1
  24. data/lib/cuke_modeler/models/scenario.rb +1 -1
  25. data/lib/cuke_modeler/models/step.rb +32 -3
  26. data/lib/cuke_modeler/models/table.rb +1 -1
  27. data/lib/cuke_modeler/models/tag.rb +1 -1
  28. data/lib/cuke_modeler/named.rb +1 -0
  29. data/lib/cuke_modeler/nested.rb +1 -0
  30. data/lib/cuke_modeler/parsed.rb +1 -0
  31. data/lib/cuke_modeler/parsing.rb +89 -94
  32. data/lib/cuke_modeler/sourceable.rb +1 -0
  33. data/lib/cuke_modeler/stepped.rb +1 -0
  34. data/lib/cuke_modeler/taggable.rb +1 -0
  35. data/lib/cuke_modeler/version.rb +1 -1
  36. data/testing/cucumber/features/analysis/step_comparison.feature +25 -0
  37. data/testing/cucumber/features/analysis/test_comparison.feature +1 -1
  38. metadata +56 -142
  39. data/.gitignore +0 -18
  40. data/.simplecov +0 -7
  41. data/.travis.yml +0 -60
  42. data/Gemfile +0 -36
  43. data/History.md +0 -196
  44. data/Rakefile +0 -63
  45. data/appveyor.yml +0 -61
  46. data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +0 -273
  47. data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +0 -296
  48. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +0 -308
  49. data/testing/cucumber/step_definitions/action_steps.rb +0 -13
  50. data/testing/cucumber/step_definitions/background_steps.rb +0 -1
  51. data/testing/cucumber/step_definitions/directory_steps.rb +0 -6
  52. data/testing/cucumber/step_definitions/doc_string_steps.rb +0 -1
  53. data/testing/cucumber/step_definitions/feature_file_steps.rb +0 -16
  54. data/testing/cucumber/step_definitions/feature_steps.rb +0 -7
  55. data/testing/cucumber/step_definitions/modeling_steps.rb +0 -44
  56. data/testing/cucumber/step_definitions/setup_steps.rb +0 -32
  57. data/testing/cucumber/step_definitions/step_steps.rb +0 -3
  58. data/testing/cucumber/step_definitions/table_steps.rb +0 -1
  59. data/testing/cucumber/step_definitions/tag_steps.rb +0 -3
  60. data/testing/cucumber/step_definitions/verification_steps.rb +0 -173
  61. data/testing/cucumber/support/env.rb +0 -30
  62. data/testing/dialect_helper.rb +0 -48
  63. data/testing/file_helper.rb +0 -47
  64. data/testing/gemfiles/gherkin2.gemfile +0 -32
  65. data/testing/gemfiles/gherkin3.gemfile +0 -26
  66. data/testing/gemfiles/gherkin4.gemfile +0 -27
  67. data/testing/gemfiles/gherkin5.gemfile +0 -27
  68. data/testing/gemfiles/gherkin6.gemfile +0 -10
  69. data/testing/rspec/spec/integration/background_integration_spec.rb +0 -442
  70. data/testing/rspec/spec/integration/cell_integration_spec.rb +0 -335
  71. data/testing/rspec/spec/integration/comment_integration_spec.rb +0 -177
  72. data/testing/rspec/spec/integration/directory_integration_spec.rb +0 -218
  73. data/testing/rspec/spec/integration/doc_string_integration_spec.rb +0 -402
  74. data/testing/rspec/spec/integration/example_integration_spec.rb +0 -741
  75. data/testing/rspec/spec/integration/feature_file_integration_spec.rb +0 -272
  76. data/testing/rspec/spec/integration/feature_integration_spec.rb +0 -650
  77. data/testing/rspec/spec/integration/gherkin_2_adapter_spec.rb +0 -166
  78. data/testing/rspec/spec/integration/gherkin_3_adapter_spec.rb +0 -166
  79. data/testing/rspec/spec/integration/gherkin_4_adapter_spec.rb +0 -165
  80. data/testing/rspec/spec/integration/gherkin_6_adapter_spec.rb +0 -166
  81. data/testing/rspec/spec/integration/model_integration_spec.rb +0 -15
  82. data/testing/rspec/spec/integration/nested_integration_spec.rb +0 -91
  83. data/testing/rspec/spec/integration/outline_integration_spec.rb +0 -624
  84. data/testing/rspec/spec/integration/parsing_integration_spec.rb +0 -122
  85. data/testing/rspec/spec/integration/row_integration_spec.rb +0 -291
  86. data/testing/rspec/spec/integration/scenario_integration_spec.rb +0 -479
  87. data/testing/rspec/spec/integration/shared/models_integration_specs.rb +0 -18
  88. data/testing/rspec/spec/integration/step_integration_spec.rb +0 -475
  89. data/testing/rspec/spec/integration/table_integration_spec.rb +0 -337
  90. data/testing/rspec/spec/integration/tag_integration_spec.rb +0 -259
  91. data/testing/rspec/spec/spec_helper.rb +0 -122
  92. data/testing/rspec/spec/unit/background_unit_spec.rb +0 -83
  93. data/testing/rspec/spec/unit/cell_unit_spec.rb +0 -68
  94. data/testing/rspec/spec/unit/comment_unit_spec.rb +0 -68
  95. data/testing/rspec/spec/unit/described_unit_spec.rb +0 -23
  96. data/testing/rspec/spec/unit/directory_unit_spec.rb +0 -127
  97. data/testing/rspec/spec/unit/doc_string_unit_spec.rb +0 -100
  98. data/testing/rspec/spec/unit/example_unit_spec.rb +0 -133
  99. data/testing/rspec/spec/unit/feature_file_unit_spec.rb +0 -125
  100. data/testing/rspec/spec/unit/feature_unit_spec.rb +0 -157
  101. data/testing/rspec/spec/unit/model_unit_spec.rb +0 -15
  102. data/testing/rspec/spec/unit/named_unit_spec.rb +0 -23
  103. data/testing/rspec/spec/unit/nested_unit_spec.rb +0 -43
  104. data/testing/rspec/spec/unit/outline_unit_spec.rb +0 -117
  105. data/testing/rspec/spec/unit/parsed_unit_spec.rb +0 -27
  106. data/testing/rspec/spec/unit/parsing_unit_spec.rb +0 -54
  107. data/testing/rspec/spec/unit/row_unit_spec.rb +0 -68
  108. data/testing/rspec/spec/unit/scenario_unit_spec.rb +0 -86
  109. data/testing/rspec/spec/unit/shared/bare_bones_models_unit_specs.rb +0 -14
  110. data/testing/rspec/spec/unit/shared/containing_models_unit_specs.rb +0 -127
  111. data/testing/rspec/spec/unit/shared/described_models_unit_specs.rb +0 -38
  112. data/testing/rspec/spec/unit/shared/keyworded_models_unit_specs.rb +0 -58
  113. data/testing/rspec/spec/unit/shared/models_unit_specs.rb +0 -15
  114. data/testing/rspec/spec/unit/shared/named_models_unit_specs.rb +0 -39
  115. data/testing/rspec/spec/unit/shared/nested_models_unit_specs.rb +0 -51
  116. data/testing/rspec/spec/unit/shared/parsed_models_unit_specs.rb +0 -39
  117. data/testing/rspec/spec/unit/shared/prepopulated_models_unit_specs.rb +0 -18
  118. data/testing/rspec/spec/unit/shared/sourced_models_unit_specs.rb +0 -39
  119. data/testing/rspec/spec/unit/shared/stepped_models_unit_specs.rb +0 -46
  120. data/testing/rspec/spec/unit/shared/stringifiable_models_unit_specs.rb +0 -18
  121. data/testing/rspec/spec/unit/shared/tagged_models_unit_specs.rb +0 -72
  122. data/testing/rspec/spec/unit/sourceable_unit_spec.rb +0 -27
  123. data/testing/rspec/spec/unit/step_unit_spec.rb +0 -109
  124. data/testing/rspec/spec/unit/stepped_unit_spec.rb +0 -23
  125. data/testing/rspec/spec/unit/table_unit_spec.rb +0 -77
  126. data/testing/rspec/spec/unit/tag_unit_spec.rb +0 -68
  127. data/testing/rspec/spec/unit/taggable_unit_spec.rb +0 -69
  128. data/testing/test_languages.json +0 -45
  129. data/todo.txt +0 -24
@@ -1,3 +0,0 @@
1
- When(/^all of the \w+'s tags are requested$/) do |code_text|
2
- @result = eval(code_text)
3
- end
@@ -1,173 +0,0 @@
1
- Then(/^all of them can be output as text appropriate to the model type$/) do |code_text|
2
- original_text = code_text
3
-
4
- @available_model_classes.each do |clazz|
5
- code_text = original_text.gsub('<model_class>', clazz.to_s)
6
-
7
- expect(clazz.instance_method(:to_s).owner).to equal(clazz), "#{clazz} does not override #to_s"
8
-
9
- # Make sure that the example code is valid
10
- expect { eval(code_text) }.to_not raise_error
11
- end
12
- end
13
-
14
- Then(/^the following text is provided:$/) do |expected_text|
15
- expected_text = expected_text.sub('<path_to>', @root_test_directory)
16
-
17
- expect(@output).to eq(expected_text)
18
- end
19
-
20
- Then(/^all of them can be contained inside of another model$/) do |code_text|
21
- original_text = code_text
22
-
23
- @available_model_classes.each do |clazz|
24
- code_text = original_text.gsub('<model_class>', clazz.to_s)
25
-
26
- expect(clazz.new).to respond_to(:parent_model)
27
-
28
- # Make sure that the example code is valid
29
- expect { eval(code_text) }.to_not raise_error
30
- end
31
- end
32
-
33
- And(/^all of them can contain other models$/) do |code_text|
34
- original_text = code_text
35
-
36
- @available_model_classes.each do |clazz|
37
- code_text = original_text.gsub('<model_class>', clazz.to_s)
38
-
39
- expect(clazz.new).to respond_to(:children)
40
-
41
- # Make sure that the example code is valid
42
- expect { eval(code_text) }.to_not raise_error
43
- end
44
- end
45
-
46
- Then(/^all of them can be created without further context$/) do |code_text|
47
- original_text = code_text
48
-
49
- @available_model_classes.each do |clazz|
50
- code_text = original_text.gsub('<model_class>', clazz.to_s)
51
-
52
- expect { clazz.new }.to_not raise_error
53
-
54
- # Make sure that the example code is valid
55
- expect { eval(code_text) }.to_not raise_error
56
- end
57
- end
58
-
59
- Then(/^the model returns "([^"]*)"$/) do |value|
60
- value.gsub!('path_to', @root_test_directory) if value.is_a?(String)
61
- value = value.to_i if value =~ /^\d+$/
62
-
63
- expect(@result).to eq(value)
64
- end
65
-
66
- Then(/^the model returns$/) do |value|
67
- value = value.gsub('path_to', @root_test_directory) if value.is_a?(String)
68
-
69
- expect(@result).to eq(value)
70
- end
71
-
72
- Then(/^the model returns models for the following feature files:$/) do |file_names|
73
- file_names = file_names.raw.flatten
74
-
75
- expect(@result.collect { |file_model| file_model.name }).to match_array(file_names)
76
- end
77
-
78
- Then(/^the model returns models for the following directories:$/) do |directory_names|
79
- directory_names = directory_names.raw.flatten
80
-
81
- expect(@result.collect { |directory_model| directory_model.name }).to match_array(directory_names)
82
- end
83
-
84
- And(/^the output can be used to make an equivalent model$/) do |code_text|
85
- clazz = @model.class
86
-
87
- base_output = @model.to_s
88
- remodeled_output = clazz.new(base_output).to_s
89
-
90
- expect(remodeled_output).to eq(base_output)
91
-
92
- # Make sure that the example code is valid
93
- expect { eval(code_text) }.to_not raise_error
94
- end
95
-
96
- Then(/^all of them provide access to the parsing data that was used to create them$/) do |code_text|
97
- original_text = code_text
98
- unparsed_models = [CukeModeler::Model, CukeModeler::Directory]
99
-
100
- @available_model_classes.each do |clazz|
101
- next if unparsed_models.include?(clazz)
102
-
103
- expect(clazz.new).to respond_to(:parsing_data)
104
-
105
- # Make sure that the example code is valid
106
- code_text = original_text.gsub('<model_class>', clazz.to_s)
107
- code_text.gsub!('<source_text>', '')
108
-
109
- expect { eval(code_text) }.to_not raise_error
110
- end
111
- end
112
-
113
- Then(/^the model returns models for the following steps:$/) do |step_names|
114
- step_names = step_names.raw.flatten
115
-
116
- expect(@result.collect { |step_model| step_model.text }).to eq(step_names)
117
- end
118
-
119
- Then(/^the model returns models for the following rows:$/) do |rows|
120
- rows = rows.raw
121
-
122
- expect(@result.collect { |row_model| row_model.cells.collect { |cell| cell.value } }).to eq(rows)
123
- end
124
-
125
- Then(/^the model returns a model for the following feature:$/) do |feature_name|
126
- feature_name = feature_name.raw.flatten.first
127
-
128
- expect(@result.name).to eq(feature_name)
129
- end
130
-
131
- Then(/^the model returns a model for the following table:$/) do |table_rows|
132
- table_rows = table_rows.raw
133
-
134
- expect(@result.rows.collect { |row| row.cells.collect { |cell| cell.value } }).to eq(table_rows)
135
- end
136
-
137
- Then(/^the model returns a model for the following doc string:$/) do |string_text|
138
- expect(@result.content).to eq(string_text)
139
- end
140
-
141
- Then(/^the model returns a model for the background "([^"]*)"$/) do |background_name|
142
- expect(@result.name).to eq(background_name)
143
- end
144
-
145
- Then(/^the model returns models for the following (?:scenario|outline|tag|example)s:$/) do |model_names|
146
- model_names = model_names.raw.flatten
147
-
148
- expect(@result.collect { |model| model.name }).to eq(model_names)
149
- end
150
-
151
- Then(/^the model returns models for the following cells:$/) do |model_values|
152
- model_values = model_values.raw.flatten
153
-
154
- expect(@result.collect { |model| model.value }).to eq(model_values)
155
- end
156
-
157
- Then(/^all of them are equivalent$/) do
158
- expect(@results).to_not include(false)
159
- end
160
-
161
- But(/^none of the models are equivalent with a model for the following scenario:$/) do |gherkin_text|
162
- model = CukeModeler::Scenario.new(gherkin_text)
163
-
164
- @models.each do |other_model|
165
- expect(model == other_model).to_not be true
166
- end
167
- end
168
-
169
- Then(/^the model returns models for the following comments:$/) do |model_values|
170
- model_values = model_values.raw.flatten
171
-
172
- expect(@result.collect { |model| model.text }).to eq(model_values)
173
- end
@@ -1,30 +0,0 @@
1
- unless RUBY_VERSION.to_s < '1.9.0'
2
- require 'simplecov'
3
- SimpleCov.command_name('cucumber_tests')
4
- end
5
-
6
- require 'test/unit/assertions'
7
- include Test::Unit::Assertions
8
-
9
- this_dir = File.dirname(__FILE__)
10
-
11
- require "#{this_dir}/../../../lib/cuke_modeler"
12
-
13
- require "#{this_dir}/../../file_helper"
14
-
15
-
16
- Before do
17
- begin
18
- @root_test_directory = CukeModeler::FileHelper.create_directory
19
- rescue => e
20
- $stdout.puts 'Problem caught in Before hook!'
21
- $stdout.puts "Type: #{e.class}"
22
- $stdout.puts "Message: #{e.message}"
23
- end
24
- end
25
-
26
- at_exit {
27
- CukeModeler::FileHelper.created_directories.each do |dir_path|
28
- FileUtils.remove_entry(dir_path, true)
29
- end
30
- }
@@ -1,48 +0,0 @@
1
- module CukeModeler
2
- module DialectHelper
3
-
4
- def self.set_dialect(dialect)
5
- @dialect = dialect
6
- end
7
-
8
- def self.feature_keyword
9
- get_word(@dialect['feature'])
10
- end
11
-
12
- def self.background_keyword
13
- get_word(@dialect['background'])
14
- end
15
-
16
- def self.scenario_keyword
17
- get_word(@dialect['scenario'])
18
- end
19
-
20
- def self.outline_keyword
21
- get_word(@dialect['scenarioOutline'] || @dialect['scenario_outline'])
22
- end
23
-
24
- def self.example_keyword
25
- get_word(@dialect['examples'])
26
- end
27
-
28
- def self.step_keyword
29
- get_word(@dialect['given']).strip
30
- end
31
-
32
- def self.given_keyword
33
- get_word(@dialect['given']).strip
34
- end
35
-
36
- def self.then_keyword
37
- get_word(@dialect['then']).strip
38
- end
39
-
40
- def self.get_word(word_set)
41
- word_set.is_a?(Array) ? word_set.first : word_set.split('|').first
42
- end
43
-
44
-
45
- private_class_method :get_word
46
-
47
- end
48
- end
@@ -1,47 +0,0 @@
1
- require 'tmpdir'
2
-
3
-
4
- module CukeModeler
5
- module FileHelper
6
-
7
- class << self
8
-
9
- def create_feature_file(options = {})
10
- options[:text] ||= 'Feature:'
11
- options[:name] ||= 'test_file'
12
-
13
- create_file(:text => options[:text], :name => options[:name], :extension => '.feature', :directory => options[:directory])
14
- end
15
-
16
- def create_file(options = {})
17
- options[:text] ||= ''
18
- options[:name] ||= 'test_file'
19
- options[:extension] ||= '.txt'
20
- options[:directory] ||= create_directory
21
-
22
- file_path = "#{options[:directory]}/#{options[:name]}#{options[:extension]}"
23
- File.open(file_path, 'w') { |file| file.write(options[:text]) }
24
-
25
- file_path
26
- end
27
-
28
- def created_directories
29
- @created_directories ||= []
30
- end
31
-
32
- def create_directory(options = {})
33
- options[:name] ||= 'test_directory'
34
- options[:directory] ||= Dir.mktmpdir
35
-
36
- path = "#{options[:directory]}/#{options[:name]}"
37
-
38
- Dir::mkdir(path)
39
- created_directories << options[:directory]
40
-
41
- path
42
- end
43
-
44
- end
45
-
46
- end
47
- end
@@ -1,32 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec :path => "../../"
4
- gem "gherkin", "~> 2.0"
5
-
6
- # cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
7
-
8
- if RUBY_VERSION =~ /^1\./
9
-
10
- if RbConfig::CONFIG['host_os'].downcase =~ /mswin|msys|mingw32/
11
- gem 'ffi', '< 1.9.15' # The 'ffi' gem, for Windows, requires Ruby 2.x on/after this version
12
- end
13
-
14
- gem 'unf_ext', '< 0.0.7.3' # Requires Ruby 2.x on/after this version
15
- gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
16
- gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
17
- gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
18
-
19
- if RUBY_VERSION =~ /^1\.8/
20
- gem 'cucumber', '~> 1.0' # Ruby 1.8.x support dropped after this version
21
- gem 'rake', '< 11.0' # Ruby 1.8.x support dropped after this version
22
- else
23
- gem 'rake', '< 12.3.0' # Ruby 1.9.x support dropped after this version
24
- end
25
-
26
- elsif RUBY_VERSION =~ /^2\./
27
-
28
- if RUBY_VERSION =~ /^2\.[23456789]/
29
- gem 'test-unit'
30
- end
31
-
32
- end
@@ -1,26 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec :path => "../../"
4
- gem "gherkin", "~> 3.0"
5
-
6
- # cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
7
-
8
- if RUBY_VERSION =~ /^1\./
9
-
10
- if RbConfig::CONFIG['host_os'].downcase =~ /mswin|msys|mingw32/
11
- gem 'ffi', '< 1.9.15' # The 'ffi' gem, for Windows, requires Ruby 2.x on/after this version
12
- end
13
-
14
- gem 'unf_ext', '< 0.0.7.3' # Requires Ruby 2.x on/after this version
15
- gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
16
- gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
17
- gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
18
- gem 'rake', '< 12.3.0' # Ruby 1.9.x support dropped after this version
19
-
20
- elsif RUBY_VERSION =~ /^2\./
21
-
22
- if RUBY_VERSION =~ /^2\.[23456789]/
23
- gem 'test-unit'
24
- end
25
-
26
- end
@@ -1,27 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec :path => "../../"
4
- gem "gherkin", "~> 4.0"
5
-
6
- # cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
7
-
8
- if RUBY_VERSION =~ /^1\./
9
-
10
- if RbConfig::CONFIG['host_os'].downcase =~ /mswin|msys|mingw32/
11
- gem 'ffi', '< 1.9.15' # The 'ffi' gem, for Windows, requires Ruby 2.x on/after this version
12
- end
13
-
14
- gem 'unf_ext', '< 0.0.7.3' # Requires Ruby 2.x on/after this version
15
- gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
16
- gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
17
- gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
18
- gem 'rake', '< 12.3.0' # Ruby 1.9.x support dropped after this version
19
- gem 'cucumber', '< 3.0.0' # Ruby 1.9.x support dropped after this version
20
-
21
- elsif RUBY_VERSION =~ /^2\./
22
-
23
- if RUBY_VERSION =~ /^2\.[23456789]/
24
- gem 'test-unit'
25
- end
26
-
27
- end
@@ -1,27 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec :path => "../../"
4
- gem "gherkin", "~> 5.0"
5
-
6
- # cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
7
-
8
- if RUBY_VERSION =~ /^1\./
9
-
10
- if RbConfig::CONFIG['host_os'].downcase =~ /mswin|msys|mingw32/
11
- gem 'ffi', '< 1.9.15' # The 'ffi' gem, for Windows, requires Ruby 2.x on/after this version
12
- end
13
-
14
- gem 'unf_ext', '< 0.0.7.3' # Requires Ruby 2.x on/after this version
15
- gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
16
- gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
17
- gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
18
- gem 'rake', '< 12.3.0' # Ruby 1.9.x support dropped after this version
19
- gem 'cucumber-core', '< 3.0.0' # Ruby 1.9.x support dropped after this version
20
-
21
- elsif RUBY_VERSION =~ /^2\./
22
-
23
- if RUBY_VERSION =~ /^2\.[23456789]/
24
- gem 'test-unit'
25
- end
26
-
27
- end
@@ -1,10 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec :path => "../../"
4
-
5
- gem "gherkin", "~> 6.0"
6
- gem 'cucumber', '~>4.0.rc' # TODO: Upgrade to Cucumber 4.0 when it is finally released
7
-
8
- if RUBY_VERSION =~ /^2\.[23456789]/
9
- gem 'test-unit'
10
- end
@@ -1,442 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../spec_helper"
2
-
3
-
4
- describe 'Background, Integration' do
5
-
6
- let(:clazz) { CukeModeler::Background }
7
-
8
-
9
- describe 'common behavior' do
10
-
11
- it_should_behave_like 'a model, integration'
12
-
13
- end
14
-
15
- describe 'unique behavior' do
16
-
17
- it 'can be instantiated with the minimum viable Gherkin' do
18
- source = "#{BACKGROUND_KEYWORD}:"
19
-
20
- expect { clazz.new(source) }.to_not raise_error
21
- end
22
-
23
- it 'can parse text that uses a non-default dialect' do
24
- original_dialect = CukeModeler::Parsing.dialect
25
- CukeModeler::Parsing.dialect = 'en-au'
26
-
27
- begin
28
- source_text = 'First off: Background name'
29
-
30
- expect { @model = clazz.new(source_text) }.to_not raise_error
31
-
32
- # Sanity check in case modeling failed in a non-explosive manner
33
- expect(@model.name).to eq('Background name')
34
- ensure
35
- # Making sure that our changes don't escape a test and ruin the rest of the suite
36
- CukeModeler::Parsing.dialect = original_dialect
37
- end
38
- end
39
-
40
- it 'stores the original data generated by the parsing adapter', :gherkin6 => true do
41
- background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
42
- data = background.parsing_data
43
-
44
- expect(data.keys).to match_array([:background, :rule, :scenario])
45
- expect(data[:background][:name]).to eq('test background')
46
- end
47
-
48
- it 'stores the original data generated by the parsing adapter', :gherkin4_5 => true do
49
- background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
50
- data = background.parsing_data
51
-
52
- expect(data.keys).to match_array([:type, :location, :keyword, :name, :steps, :description])
53
- expect(data[:type]).to eq(:Background)
54
- end
55
-
56
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
57
- background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
58
- data = background.parsing_data
59
-
60
- expect(data.keys).to match_array([:type, :location, :keyword, :name, :steps, :description])
61
- expect(data[:type]).to eq(:Background)
62
- end
63
-
64
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
65
- background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
66
- data = background.parsing_data
67
-
68
- expect(data.keys).to match_array(['keyword', 'name', 'line', 'description', 'steps', 'type'])
69
- expect(data['keyword']).to eq('Background')
70
- end
71
-
72
- it 'provides a descriptive filename when being parsed from stand alone text' do
73
- source = "bad background text \n #{BACKGROUND_KEYWORD}:\n #{STEP_KEYWORD} a step\n @foo "
74
-
75
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_background\.feature'/)
76
- end
77
-
78
- it 'properly sets its child models' do
79
- source = "#{BACKGROUND_KEYWORD}: Test background
80
- #{STEP_KEYWORD} a step"
81
-
82
- background = clazz.new(source)
83
- step = background.steps.first
84
-
85
- expect(step.parent_model).to equal(background)
86
- end
87
-
88
- it 'trims whitespace from its source description' do
89
- source = ["#{BACKGROUND_KEYWORD}:",
90
- ' ',
91
- ' description line 1',
92
- '',
93
- ' description line 2',
94
- ' description line 3 ',
95
- '',
96
- '',
97
- '',
98
- " #{STEP_KEYWORD} a step"]
99
- source = source.join("\n")
100
-
101
- background = clazz.new(source)
102
- description = background.description.split("\n", -1)
103
-
104
- expect(description).to eq([' description line 1',
105
- '',
106
- 'description line 2',
107
- ' description line 3'])
108
- end
109
-
110
-
111
- describe 'getting ancestors' do
112
-
113
- before(:each) do
114
- CukeModeler::FileHelper.create_feature_file(:text => source_gherkin, :name => 'background_test_file', :directory => test_directory)
115
- end
116
-
117
-
118
- let(:test_directory) { CukeModeler::FileHelper.create_directory }
119
- let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
120
-
121
- #{BACKGROUND_KEYWORD}: Test background
122
- #{STEP_KEYWORD} a step"
123
- }
124
-
125
- let(:directory_model) { CukeModeler::Directory.new(test_directory) }
126
- let(:background_model) { directory_model.feature_files.first.feature.background }
127
-
128
-
129
- it 'can get its directory' do
130
- ancestor = background_model.get_ancestor(:directory)
131
-
132
- expect(ancestor).to equal(directory_model)
133
- end
134
-
135
- it 'can get its feature file' do
136
- ancestor = background_model.get_ancestor(:feature_file)
137
-
138
- expect(ancestor).to equal(directory_model.feature_files.first)
139
- end
140
-
141
- it 'can get its feature' do
142
- ancestor = background_model.get_ancestor(:feature)
143
-
144
- expect(ancestor).to equal(directory_model.feature_files.first.feature)
145
- end
146
-
147
- it 'returns nil if it does not have the requested type of ancestor' do
148
- ancestor = background_model.get_ancestor(:example)
149
-
150
- expect(ancestor).to be_nil
151
- end
152
-
153
- end
154
-
155
-
156
- describe 'model population' do
157
-
158
- context 'from source text' do
159
-
160
- let(:source_text) { "#{BACKGROUND_KEYWORD}:" }
161
- let(:background) { clazz.new(source_text) }
162
-
163
-
164
- it "models the background's keyword" do
165
- expect(background.keyword).to eq("#{BACKGROUND_KEYWORD}")
166
- end
167
-
168
- it "models the background's source line" do
169
- source_text = "#{FEATURE_KEYWORD}:
170
-
171
- #{BACKGROUND_KEYWORD}: foo
172
- #{STEP_KEYWORD} step"
173
- background = CukeModeler::Feature.new(source_text).background
174
-
175
- expect(background.source_line).to eq(3)
176
- end
177
-
178
- context 'a filled background' do
179
-
180
- let(:source_text) { "#{BACKGROUND_KEYWORD}: Background name
181
-
182
- Background description.
183
-
184
- Some more.
185
- Even more.
186
-
187
- #{STEP_KEYWORD} a step
188
- #{STEP_KEYWORD} another step" }
189
- let(:background) { clazz.new(source_text) }
190
-
191
-
192
- it "models the background's name" do
193
- expect(background.name).to eq('Background name')
194
- end
195
-
196
- it "models the background's description" do
197
- description = background.description.split("\n", -1)
198
-
199
- expect(description).to eq([' Background description.',
200
- '',
201
- 'Some more.',
202
- ' Even more.'])
203
- end
204
-
205
- it "models the background's steps" do
206
- step_names = background.steps.collect { |step| step.text }
207
-
208
- expect(step_names).to eq(['a step', 'another step'])
209
- end
210
-
211
- end
212
-
213
- context 'an empty background' do
214
-
215
- let(:source_text) { "#{BACKGROUND_KEYWORD}:" }
216
- let(:background) { clazz.new(source_text) }
217
-
218
-
219
- it "models the background's name" do
220
- expect(background.name).to eq('')
221
- end
222
-
223
- it "models the background's description" do
224
- expect(background.description).to eq('')
225
- end
226
-
227
- it "models the background's steps" do
228
- expect(background.steps).to eq([])
229
- end
230
-
231
- end
232
-
233
- end
234
-
235
- end
236
-
237
-
238
- describe 'comparison' do
239
-
240
- it 'is equal to a background with the same steps' do
241
- source = "#{BACKGROUND_KEYWORD}:
242
- #{STEP_KEYWORD} step 1
243
- #{STEP_KEYWORD} step 2"
244
- background_1 = clazz.new(source)
245
-
246
- source = "#{BACKGROUND_KEYWORD}:
247
- #{STEP_KEYWORD} step 1
248
- #{STEP_KEYWORD} step 2"
249
- background_2 = clazz.new(source)
250
-
251
- source = "#{BACKGROUND_KEYWORD}:
252
- #{STEP_KEYWORD} step 2
253
- #{STEP_KEYWORD} step 1"
254
- background_3 = clazz.new(source)
255
-
256
-
257
- expect(background_1).to eq(background_2)
258
- expect(background_1).to_not eq(background_3)
259
- end
260
-
261
- it 'is equal to a scenario with the same steps' do
262
- source = "#{BACKGROUND_KEYWORD}:
263
- #{STEP_KEYWORD} step 1
264
- #{STEP_KEYWORD} step 2"
265
- background = clazz.new(source)
266
-
267
- source = "#{SCENARIO_KEYWORD}:
268
- #{STEP_KEYWORD} step 1
269
- #{STEP_KEYWORD} step 2"
270
- scenario_1 = CukeModeler::Scenario.new(source)
271
-
272
- source = "#{SCENARIO_KEYWORD}:
273
- #{STEP_KEYWORD} step 2
274
- #{STEP_KEYWORD} step 1"
275
- scenario_2 = CukeModeler::Scenario.new(source)
276
-
277
-
278
- expect(background).to eq(scenario_1)
279
- expect(background).to_not eq(scenario_2)
280
- end
281
-
282
- it 'is equal to an outline with the same steps' do
283
- source = "#{BACKGROUND_KEYWORD}:
284
- #{STEP_KEYWORD} step 1
285
- #{STEP_KEYWORD} step 2"
286
- background = clazz.new(source)
287
-
288
- source = "#{OUTLINE_KEYWORD}:
289
- #{STEP_KEYWORD} step 1
290
- #{STEP_KEYWORD} step 2
291
- #{EXAMPLE_KEYWORD}:
292
- | param |
293
- | value |"
294
- outline_1 = CukeModeler::Outline.new(source)
295
-
296
- source = "#{OUTLINE_KEYWORD}:
297
- #{STEP_KEYWORD} step 2
298
- #{STEP_KEYWORD} step 1
299
- #{EXAMPLE_KEYWORD}:
300
- | param |
301
- | value |"
302
- outline_2 = CukeModeler::Outline.new(source)
303
-
304
-
305
- expect(background).to eq(outline_1)
306
- expect(background).to_not eq(outline_2)
307
- end
308
-
309
- end
310
-
311
-
312
- describe 'background output' do
313
-
314
- it 'can be remade from its own output' do
315
- source = "#{BACKGROUND_KEYWORD}: A background with everything it could have
316
-
317
- Including a description
318
- and then some.
319
-
320
- #{STEP_KEYWORD} a step
321
- | value |
322
- #{STEP_KEYWORD} another step
323
- \"\"\"
324
- some string
325
- \"\"\""
326
- background = clazz.new(source)
327
-
328
- background_output = background.to_s
329
- remade_background_output = clazz.new(background_output).to_s
330
-
331
- expect(remade_background_output).to eq(background_output)
332
- end
333
-
334
-
335
- context 'from source text' do
336
-
337
- it 'can output an empty background' do
338
- source = ["#{BACKGROUND_KEYWORD}:"]
339
- source = source.join("\n")
340
- background = clazz.new(source)
341
-
342
- background_output = background.to_s.split("\n", -1)
343
-
344
- expect(background_output).to eq(["#{BACKGROUND_KEYWORD}:"])
345
- end
346
-
347
- it 'can output a background that has a name' do
348
- source = ["#{BACKGROUND_KEYWORD}: test background"]
349
- source = source.join("\n")
350
- background = clazz.new(source)
351
-
352
- background_output = background.to_s.split("\n", -1)
353
-
354
- expect(background_output).to eq(["#{BACKGROUND_KEYWORD}: test background"])
355
- end
356
-
357
- it 'can output a background that has a description' do
358
- source = ["#{BACKGROUND_KEYWORD}:",
359
- 'Some description.',
360
- 'Some more description.']
361
- source = source.join("\n")
362
- background = clazz.new(source)
363
-
364
- background_output = background.to_s.split("\n", -1)
365
-
366
- expect(background_output).to eq(["#{BACKGROUND_KEYWORD}:",
367
- '',
368
- 'Some description.',
369
- 'Some more description.'])
370
- end
371
-
372
- it 'can output a background that has steps' do
373
- source = ["#{BACKGROUND_KEYWORD}:",
374
- "#{STEP_KEYWORD} a step",
375
- '|value|',
376
- "#{STEP_KEYWORD} another step",
377
- '"""',
378
- 'some string',
379
- '"""']
380
- source = source.join("\n")
381
- background = clazz.new(source)
382
-
383
- background_output = background.to_s.split("\n", -1)
384
-
385
- expect(background_output).to eq(["#{BACKGROUND_KEYWORD}:",
386
- " #{STEP_KEYWORD} a step",
387
- ' | value |',
388
- " #{STEP_KEYWORD} another step",
389
- ' """',
390
- ' some string',
391
- ' """'])
392
- end
393
-
394
- it 'can output a background that has everything' do
395
- source = ["#{BACKGROUND_KEYWORD}: A background with everything it could have",
396
- 'Including a description',
397
- 'and then some.',
398
- "#{STEP_KEYWORD} a step",
399
- '|value|',
400
- "#{STEP_KEYWORD} another step",
401
- '"""',
402
- 'some string',
403
- '"""']
404
- source = source.join("\n")
405
- background = clazz.new(source)
406
-
407
- background_output = background.to_s.split("\n", -1)
408
-
409
- expect(background_output).to eq(["#{BACKGROUND_KEYWORD}: A background with everything it could have",
410
- '',
411
- 'Including a description',
412
- 'and then some.',
413
- '',
414
- " #{STEP_KEYWORD} a step",
415
- ' | value |',
416
- " #{STEP_KEYWORD} another step",
417
- ' """',
418
- ' some string',
419
- ' """'])
420
- end
421
-
422
- end
423
-
424
-
425
- context 'from abstract instantiation' do
426
-
427
- let(:background) { clazz.new }
428
-
429
-
430
- it 'can output a background that has only steps' do
431
- background.steps = [CukeModeler::Step.new]
432
-
433
- expect { background.to_s }.to_not raise_error
434
- end
435
-
436
- end
437
-
438
- end
439
-
440
- end
441
-
442
- end