cuke_modeler 1.5.0 → 3.1.0

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