cuke_modeler 1.2.0 → 1.2.1
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.
- checksums.yaml +4 -4
- data/.travis.yml +12 -1
- data/Gemfile +13 -12
- data/History.md +6 -1
- data/LICENSE.txt +1 -1
- data/README.md +4 -2
- data/appveyor.yml +47 -0
- data/cuke_modeler.gemspec +1 -1
- data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +1 -1
- data/lib/cuke_modeler/containing.rb +0 -6
- data/lib/cuke_modeler/parsing.rb +4 -4
- data/lib/cuke_modeler/version.rb +1 -1
- data/testing/gemfiles/gherkin2.gemfile +13 -10
- data/testing/gemfiles/gherkin3.gemfile +7 -7
- data/testing/gemfiles/gherkin4.gemfile +7 -7
- data/testing/rspec/spec/integration/feature_file_integration_spec.rb +1 -1
- data/testing/rspec/spec/integration/feature_integration_spec.rb +39 -0
- data/testing/rspec/spec/integration/gherkin_2_adapter_spec.rb +15 -2
- data/testing/rspec/spec/integration/gherkin_3_adapter_spec.rb +21 -2
- data/testing/rspec/spec/integration/gherkin_4_adapter_spec.rb +21 -2
- data/testing/rspec/spec/integration/parsing_integration_spec.rb +15 -24
- data/testing/rspec/spec/spec_helper.rb +4 -4
- metadata +6 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4779a73d0414df470da374597d5a5db928e9f1fd
|
|
4
|
+
data.tar.gz: fd1e0ab88380b774e1301789d50a89cce58716e8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '029706fe40a199ddb8b12c90de6c61b61576afab23c29603b43524f22b88c6d4373b52aa059f34f2a495c11f8f787956785684a5145ed5ac0f3dc2ff0bc994a8'
|
|
7
|
+
data.tar.gz: 3e41b0e4310907be62af428dcdc4e511ee783aa82e4aae93f5ec4977cc7724400ba83911b0b2ca5af65a2716e1391750c86e17d2cdda1f2b305a42247112a91a
|
data/.travis.yml
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
os:
|
|
2
|
+
- linux
|
|
3
|
+
- osx
|
|
4
|
+
|
|
1
5
|
language: ruby
|
|
2
6
|
rvm:
|
|
3
7
|
- 1.8.7
|
|
@@ -5,19 +9,26 @@ rvm:
|
|
|
5
9
|
- 2.0.0
|
|
6
10
|
- 2.1.6
|
|
7
11
|
- 2.2.2
|
|
12
|
+
- 2.3.3
|
|
13
|
+
- 2.4.0
|
|
14
|
+
- jruby-9.1.7.0
|
|
8
15
|
|
|
9
16
|
gemfile:
|
|
10
17
|
- testing/gemfiles/gherkin2.gemfile
|
|
11
18
|
- testing/gemfiles/gherkin3.gemfile
|
|
12
19
|
- testing/gemfiles/gherkin4.gemfile
|
|
13
20
|
|
|
14
|
-
|
|
15
21
|
matrix:
|
|
16
22
|
exclude:
|
|
23
|
+
# gherkin 3.x does not work with Ruby 1.8.x
|
|
17
24
|
- rvm: 1.8.7
|
|
18
25
|
gemfile: testing/gemfiles/gherkin3.gemfile
|
|
26
|
+
# gherkin 4.x does not work with Ruby 1.8.x
|
|
19
27
|
- rvm: 1.8.7
|
|
20
28
|
gemfile: testing/gemfiles/gherkin4.gemfile
|
|
29
|
+
# Travis does not provide 1.8.7 on OSX
|
|
30
|
+
- rvm: 1.8.7
|
|
31
|
+
os: osx
|
|
21
32
|
|
|
22
33
|
# todo - Remove this once TravisCI fixes their bundler issue (https://github.com/alphagov/govuk_template/pull/186)
|
|
23
34
|
before_install:
|
data/Gemfile
CHANGED
|
@@ -4,24 +4,25 @@ source 'https://rubygems.org'
|
|
|
4
4
|
gemspec
|
|
5
5
|
|
|
6
6
|
# cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
|
|
7
|
-
if RUBY_VERSION =~ /^1\.8/
|
|
8
|
-
gem 'cucumber', '<1.3.0'
|
|
9
|
-
gem 'gherkin', '<2.12.0'
|
|
10
|
-
gem 'rake', '< 11.0' # Rake dropped 1.8.x support after this version
|
|
11
|
-
elsif RUBY_VERSION =~ /^1\./
|
|
12
|
-
gem 'cucumber', '<2.0.0'
|
|
13
|
-
end
|
|
14
7
|
|
|
15
8
|
if RUBY_VERSION =~ /^1\./
|
|
9
|
+
|
|
16
10
|
gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
|
|
17
11
|
gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
|
|
18
12
|
gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
|
|
19
|
-
end
|
|
20
13
|
|
|
21
|
-
if RUBY_VERSION =~ /^
|
|
14
|
+
if RUBY_VERSION =~ /^1\.8/
|
|
15
|
+
gem 'cucumber', '~> 1.0' # Ruby 1.8.x support dropped after this version
|
|
16
|
+
gem 'gherkin', '< 2.12.1' # Ruby 1.8.x support dropped after this version
|
|
17
|
+
gem 'rake', '< 11.0' # Ruby 1.8.x support dropped after this version
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
elsif RUBY_VERSION =~ /^2\./
|
|
21
|
+
|
|
22
|
+
if RUBY_VERSION =~ /^2\.[23456789]/
|
|
23
|
+
gem 'test-unit'
|
|
24
|
+
end
|
|
25
|
+
|
|
22
26
|
gem 'gherkin', '~> 4.0'
|
|
23
|
-
end
|
|
24
27
|
|
|
25
|
-
if RUBY_VERSION =~ /^2\.[23456789]/
|
|
26
|
-
gem 'test-unit'
|
|
27
28
|
end
|
data/History.md
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
### Version 1.2.1 / 2017-04-25
|
|
2
|
+
|
|
3
|
+
* Now officially compatible with Rake 12.x.
|
|
4
|
+
|
|
5
|
+
|
|
1
6
|
### Version 1.2.0 / 2016-11-23
|
|
2
7
|
|
|
3
8
|
* The comments in a feature file are now a modeled element.
|
|
@@ -139,7 +144,7 @@
|
|
|
139
144
|
being populated if the instance was given a diretory to model.
|
|
140
145
|
|
|
141
146
|
* Bug fix - Fixed a bug that occurred if a Directory object was asked for its
|
|
142
|
-
|
|
147
|
+
\#name when it was created as 'abstract' instead of modeling an existing
|
|
143
148
|
directory.
|
|
144
149
|
|
|
145
150
|
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
[](https://rubygems.org/gems/cuke_modeler)
|
|
2
|
-
[](https://travis-ci.org/enkessler/cuke_modeler)
|
|
3
2
|
[](https://gemnasium.com/enkessler/cuke_modeler)
|
|
4
|
-
|
|
3
|
+
[](https://travis-ci.org/enkessler/cuke_modeler)
|
|
4
|
+
[](https://ci.appveyor.com/project/enkessler/cuke-modeler/branch/dev)
|
|
5
|
+
[](https://coveralls.io/github/enkessler/cuke_modeler?branch=dev)
|
|
6
|
+
[](https://opensource.org/licenses/mit-license.php)
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
# CukeModeler
|
data/appveyor.yml
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
version: '1.0.{build}'
|
|
2
|
+
|
|
3
|
+
environment:
|
|
4
|
+
matrix:
|
|
5
|
+
- RUBY_VERSION: 187-x64
|
|
6
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin2.gemfile
|
|
7
|
+
- RUBY_VERSION: 193-x64
|
|
8
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin2.gemfile
|
|
9
|
+
- RUBY_VERSION: 200-x64
|
|
10
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin2.gemfile
|
|
11
|
+
- RUBY_VERSION: 21-x64
|
|
12
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin2.gemfile
|
|
13
|
+
- RUBY_VERSION: 22-x64
|
|
14
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin2.gemfile
|
|
15
|
+
|
|
16
|
+
- RUBY_VERSION: 193-x64
|
|
17
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin3.gemfile
|
|
18
|
+
- RUBY_VERSION: 200-x64
|
|
19
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin3.gemfile
|
|
20
|
+
- RUBY_VERSION: 21-x64
|
|
21
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin3.gemfile
|
|
22
|
+
- RUBY_VERSION: 22-x64
|
|
23
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin3.gemfile
|
|
24
|
+
|
|
25
|
+
- RUBY_VERSION: 193-x64
|
|
26
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin4.gemfile
|
|
27
|
+
- RUBY_VERSION: 200-x64
|
|
28
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin4.gemfile
|
|
29
|
+
- RUBY_VERSION: 21-x64
|
|
30
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin4.gemfile
|
|
31
|
+
- RUBY_VERSION: 22-x64
|
|
32
|
+
BUNDLE_GEMFILE: testing/gemfiles/gherkin4.gemfile
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
install:
|
|
36
|
+
- set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
|
|
37
|
+
- bundle install
|
|
38
|
+
|
|
39
|
+
build: off
|
|
40
|
+
|
|
41
|
+
before_test:
|
|
42
|
+
- ruby -v
|
|
43
|
+
- gem -v
|
|
44
|
+
- bundle -v
|
|
45
|
+
|
|
46
|
+
test_script:
|
|
47
|
+
- bundle exec rake
|
data/cuke_modeler.gemspec
CHANGED
|
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
|
23
23
|
spec.add_runtime_dependency('multi_json', '~> 1.0')
|
|
24
24
|
|
|
25
25
|
spec.add_development_dependency "bundler", "~> 1.5"
|
|
26
|
-
spec.add_development_dependency "rake", '<
|
|
26
|
+
spec.add_development_dependency "rake", '< 13.0.0'
|
|
27
27
|
spec.add_development_dependency 'cucumber', '< 3.0.0'
|
|
28
28
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
29
29
|
spec.add_development_dependency 'simplecov', '< 1.0.0'
|
|
@@ -75,12 +75,6 @@ module CukeModeler
|
|
|
75
75
|
populate_source_line(table_object, parsed_table_data)
|
|
76
76
|
end
|
|
77
77
|
|
|
78
|
-
def populate_tablerow(row_object, parsed_row_data)
|
|
79
|
-
populate_source_line(row_object, parsed_row_data)
|
|
80
|
-
populate_row_cells(row_object, parsed_row_data)
|
|
81
|
-
populate_parsing_data(row_object, parsed_row_data)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
78
|
def populate_cell(cell_object, parsed_cell_data)
|
|
85
79
|
populate_cell_value(cell_object, parsed_cell_data)
|
|
86
80
|
populate_source_line(cell_object, parsed_cell_data)
|
data/lib/cuke_modeler/parsing.rb
CHANGED
|
@@ -18,8 +18,8 @@ module CukeModeler
|
|
|
18
18
|
# The *gherkin* gem loads differently and has different grammar rules across major versions. Parsing
|
|
19
19
|
# will be done with an 'adapter' appropriate to the version of the *gherkin* gem that has been activated.
|
|
20
20
|
|
|
21
|
-
case
|
|
22
|
-
when
|
|
21
|
+
case Gem.loaded_specs['gherkin'].version.version
|
|
22
|
+
when /^4\./
|
|
23
23
|
require 'gherkin/parser'
|
|
24
24
|
require 'cuke_modeler/adapters/gherkin_4_adapter'
|
|
25
25
|
|
|
@@ -33,7 +33,7 @@ module CukeModeler
|
|
|
33
33
|
CukeModeler::Gherkin4Adapter
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
when
|
|
36
|
+
when /^3\./
|
|
37
37
|
require 'gherkin/parser'
|
|
38
38
|
require 'cuke_modeler/adapters/gherkin_3_adapter'
|
|
39
39
|
|
|
@@ -85,7 +85,7 @@ module CukeModeler
|
|
|
85
85
|
# The dialects currently known by the gherkin gem
|
|
86
86
|
def dialects
|
|
87
87
|
unless @dialects
|
|
88
|
-
@dialects = Gem.loaded_specs['gherkin'].version.version[/^2
|
|
88
|
+
@dialects = Gem.loaded_specs['gherkin'].version.version[/^2\./] ? Gherkin::I18n::LANGUAGES : Gherkin::DIALECTS
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
@dialects
|
data/lib/cuke_modeler/version.rb
CHANGED
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
3
|
gemspec :path => "../../"
|
|
4
|
-
gem "gherkin", "
|
|
4
|
+
gem "gherkin", "~> 2.0"
|
|
5
5
|
|
|
6
6
|
# cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
|
|
7
|
-
if RUBY_VERSION =~ /^1\.8/
|
|
8
|
-
gem 'cucumber', '<1.3.0'
|
|
9
|
-
gem 'rake', '< 11.0' # Rake dropped 1.8.x support after this version
|
|
10
|
-
elsif RUBY_VERSION =~ /^1\./
|
|
11
|
-
gem 'cucumber', '>=1.0.0', '<2.0.0'
|
|
12
|
-
end
|
|
13
7
|
|
|
14
8
|
if RUBY_VERSION =~ /^1\./
|
|
9
|
+
|
|
15
10
|
gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
|
|
16
11
|
gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
|
|
17
12
|
gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
|
|
18
|
-
end
|
|
19
13
|
|
|
20
|
-
if RUBY_VERSION =~ /^
|
|
21
|
-
|
|
14
|
+
if RUBY_VERSION =~ /^1\.8/
|
|
15
|
+
gem 'cucumber', '~> 1.0' # Ruby 1.8.x support dropped after this version
|
|
16
|
+
gem 'rake', '< 11.0' # Ruby 1.8.x support dropped after this version
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
elsif RUBY_VERSION =~ /^2\./
|
|
20
|
+
|
|
21
|
+
if RUBY_VERSION =~ /^2\.[23456789]/
|
|
22
|
+
gem 'test-unit'
|
|
23
|
+
end
|
|
24
|
+
|
|
22
25
|
end
|
|
@@ -4,17 +4,17 @@ gemspec :path => "../../"
|
|
|
4
4
|
gem "gherkin", "~> 3.0"
|
|
5
5
|
|
|
6
6
|
# cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
|
|
7
|
-
if RUBY_VERSION =~ /^1\.8/
|
|
8
|
-
gem 'cucumber', '<1.3.0'
|
|
9
|
-
gem 'rake', '< 11.0' # Rake dropped 1.8.x support after this version
|
|
10
|
-
end
|
|
11
7
|
|
|
12
8
|
if RUBY_VERSION =~ /^1\./
|
|
9
|
+
|
|
13
10
|
gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
|
|
14
11
|
gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
|
|
15
12
|
gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
|
|
16
|
-
end
|
|
17
13
|
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
elsif RUBY_VERSION =~ /^2\./
|
|
15
|
+
|
|
16
|
+
if RUBY_VERSION =~ /^2\.[23456789]/
|
|
17
|
+
gem 'test-unit'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
20
|
end
|
|
@@ -4,17 +4,17 @@ gemspec :path => "../../"
|
|
|
4
4
|
gem "gherkin", "~> 4.0"
|
|
5
5
|
|
|
6
6
|
# cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
|
|
7
|
-
if RUBY_VERSION =~ /^1\.8/
|
|
8
|
-
gem 'cucumber', '<1.3.0'
|
|
9
|
-
gem 'rake', '< 11.0' # Rake dropped 1.8.x support after this version
|
|
10
|
-
end
|
|
11
7
|
|
|
12
8
|
if RUBY_VERSION =~ /^1\./
|
|
9
|
+
|
|
13
10
|
gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
|
|
14
11
|
gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
|
|
15
12
|
gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
|
|
16
|
-
end
|
|
17
13
|
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
elsif RUBY_VERSION =~ /^2\./
|
|
15
|
+
|
|
16
|
+
if RUBY_VERSION =~ /^2\.[23456789]/
|
|
17
|
+
gem 'test-unit'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
20
|
end
|
|
@@ -169,7 +169,7 @@ describe 'FeatureFile, Integration' do
|
|
|
169
169
|
'# row comment']
|
|
170
170
|
|
|
171
171
|
# gherkin 2.x 'loses' comments that are not followed by some element
|
|
172
|
-
expected_comments << '# final comment' unless Gem.loaded_specs['gherkin'].version.version[/^2
|
|
172
|
+
expected_comments << '# final comment' unless Gem.loaded_specs['gherkin'].version.version[/^2\./]
|
|
173
173
|
|
|
174
174
|
|
|
175
175
|
expect(comments).to match_array(expected_comments)
|
|
@@ -599,4 +599,43 @@ describe 'Feature, Integration' do
|
|
|
599
599
|
|
|
600
600
|
end
|
|
601
601
|
|
|
602
|
+
|
|
603
|
+
describe 'stuff that is in no way part of the public API and entirely subject to change' do
|
|
604
|
+
|
|
605
|
+
it 'provides a useful explosion message if it encounters an entirely new type of feature child' do
|
|
606
|
+
begin
|
|
607
|
+
$old_method = CukeModeler::Parsing.method(:parse_text)
|
|
608
|
+
|
|
609
|
+
|
|
610
|
+
# Monkey patch the parsing method to mimic what would essentially be Gherkin creating new types of language objects
|
|
611
|
+
module CukeModeler
|
|
612
|
+
module Parsing
|
|
613
|
+
class << self
|
|
614
|
+
def parse_text(source_text, filename)
|
|
615
|
+
result = $old_method.call(source_text, filename)
|
|
616
|
+
|
|
617
|
+
result.first['feature']['elements'].first['type'] = :some_unknown_type
|
|
618
|
+
|
|
619
|
+
result
|
|
620
|
+
end
|
|
621
|
+
end
|
|
622
|
+
end
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
expect { clazz.new("#{@feature_keyword}:\n#{@scenario_keyword}:\n#{@step_keyword} foo") }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
|
|
627
|
+
ensure
|
|
628
|
+
# Making sure that our changes don't escape a test and ruin the rest of the suite
|
|
629
|
+
module CukeModeler
|
|
630
|
+
module Parsing
|
|
631
|
+
class << self
|
|
632
|
+
define_method(:parse_text, $old_method)
|
|
633
|
+
end
|
|
634
|
+
end
|
|
635
|
+
end
|
|
636
|
+
end
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
end
|
|
640
|
+
|
|
602
641
|
end
|
|
@@ -3,6 +3,8 @@ require "#{File.dirname(__FILE__)}/../spec_helper"
|
|
|
3
3
|
|
|
4
4
|
describe 'Gherkin2Adapter, Integration', :gherkin2 => true do
|
|
5
5
|
|
|
6
|
+
let(:clazz) { CukeModeler::Gherkin2Adapter }
|
|
7
|
+
let(:adapter) { clazz.new }
|
|
6
8
|
let(:source_text) { "# feature comment
|
|
7
9
|
@tag1 @tag2 @tag3
|
|
8
10
|
#{@feature_keyword}: A feature with everything it could have
|
|
@@ -66,9 +68,9 @@ describe 'Gherkin2Adapter, Integration', :gherkin2 => true do
|
|
|
66
68
|
| value |
|
|
67
69
|
# final comment" }
|
|
68
70
|
let(:feature_file) { path = "#{@default_file_directory}/#{@default_feature_file_name}"
|
|
69
|
-
|
|
71
|
+
File.open(path, "w") { |file| file.puts source_text }
|
|
70
72
|
|
|
71
|
-
|
|
73
|
+
CukeModeler::FeatureFile.new(path) }
|
|
72
74
|
let(:feature) { feature_file.feature }
|
|
73
75
|
|
|
74
76
|
|
|
@@ -152,4 +154,15 @@ describe 'Gherkin2Adapter, Integration', :gherkin2 => true do
|
|
|
152
154
|
expect(model.parsing_data['cells']).to be_nil
|
|
153
155
|
end
|
|
154
156
|
|
|
157
|
+
|
|
158
|
+
describe 'stuff that is in no way part of the public API and entirely subject to change' do
|
|
159
|
+
|
|
160
|
+
it 'provides a useful explosion message if it encounters an entirely new type of test' do
|
|
161
|
+
partial_feature_ast = {"elements" => [{"type" => "some_unknown_type"}]}
|
|
162
|
+
|
|
163
|
+
expect { adapter.adapt_feature!(partial_feature_ast, []) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
end
|
|
167
|
+
|
|
155
168
|
end
|
|
@@ -3,6 +3,8 @@ require "#{File.dirname(__FILE__)}/../spec_helper"
|
|
|
3
3
|
|
|
4
4
|
describe 'Gherkin3Adapter, Integration', :gherkin3 => true do
|
|
5
5
|
|
|
6
|
+
let(:clazz) { CukeModeler::Gherkin3Adapter }
|
|
7
|
+
let(:adapter) { clazz.new }
|
|
6
8
|
let(:source_text) { "# feature comment
|
|
7
9
|
@tag1 @tag2 @tag3
|
|
8
10
|
#{@feature_keyword}: A feature with everything it could have
|
|
@@ -66,9 +68,9 @@ describe 'Gherkin3Adapter, Integration', :gherkin3 => true do
|
|
|
66
68
|
| value |
|
|
67
69
|
# final comment" }
|
|
68
70
|
let(:feature_file) { path = "#{@default_file_directory}/#{@default_feature_file_name}"
|
|
69
|
-
|
|
71
|
+
File.open(path, "w") { |file| file.puts source_text }
|
|
70
72
|
|
|
71
|
-
|
|
73
|
+
CukeModeler::FeatureFile.new(path) }
|
|
72
74
|
let(:feature) { feature_file.feature }
|
|
73
75
|
|
|
74
76
|
|
|
@@ -146,4 +148,21 @@ describe 'Gherkin3Adapter, Integration', :gherkin3 => true do
|
|
|
146
148
|
expect(model.parsing_data[:cells]).to be_nil
|
|
147
149
|
end
|
|
148
150
|
|
|
151
|
+
|
|
152
|
+
describe 'stuff that is in no way part of the public API and entirely subject to change' do
|
|
153
|
+
|
|
154
|
+
it 'provides a useful explosion message if it encounters an entirely new type of test' do
|
|
155
|
+
partial_feature_ast = {:type => :Feature, :location => {:line => 1, :column => 1}, :scenarioDefinitions => [{:type => :some_unknown_type}]}
|
|
156
|
+
|
|
157
|
+
expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it 'provides a useful explosion message if it encounters an entirely new type of step block' do
|
|
161
|
+
partial_feature_ast = {:type => :Feature, :location => {:line => 1, :column => 1}, :scenarioDefinitions => [{:type => :Scenario, :tags => [], :location => {:line => 1, :column => 1}, :steps => [{:type => :Step, :location => {:line => 1, :column => 1}, :argument => {:type => :some_unknown_type, :location => {:line => 1, :column => 1}, :content => ""}}]}]}
|
|
162
|
+
|
|
163
|
+
expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
end
|
|
167
|
+
|
|
149
168
|
end
|
|
@@ -3,6 +3,8 @@ require "#{File.dirname(__FILE__)}/../spec_helper"
|
|
|
3
3
|
|
|
4
4
|
describe 'Gherkin4Adapter, Integration', :gherkin4 => true do
|
|
5
5
|
|
|
6
|
+
let(:clazz) { CukeModeler::Gherkin4Adapter }
|
|
7
|
+
let(:adapter) { clazz.new }
|
|
6
8
|
let(:source_text) { "# feature comment
|
|
7
9
|
@tag1 @tag2 @tag3
|
|
8
10
|
#{@feature_keyword}: A feature with everything it could have
|
|
@@ -66,9 +68,9 @@ describe 'Gherkin4Adapter, Integration', :gherkin4 => true do
|
|
|
66
68
|
| value |
|
|
67
69
|
# final comment" }
|
|
68
70
|
let(:feature_file) { path = "#{@default_file_directory}/#{@default_feature_file_name}"
|
|
69
|
-
|
|
71
|
+
File.open(path, "w") { |file| file.puts source_text }
|
|
70
72
|
|
|
71
|
-
|
|
73
|
+
CukeModeler::FeatureFile.new(path) }
|
|
72
74
|
let(:feature) { feature_file.feature }
|
|
73
75
|
|
|
74
76
|
|
|
@@ -145,4 +147,21 @@ describe 'Gherkin4Adapter, Integration', :gherkin4 => true do
|
|
|
145
147
|
expect(model.parsing_data[:cells]).to be_nil
|
|
146
148
|
end
|
|
147
149
|
|
|
150
|
+
|
|
151
|
+
describe 'stuff that is in no way part of the public API and entirely subject to change' do
|
|
152
|
+
|
|
153
|
+
it 'provides a useful explosion message if it encounters an entirely new type of test' do
|
|
154
|
+
partial_feature_ast = {:type => :Feature, :location => {:line => 1, :column => 1}, :children => [{:type => :some_unknown_type}]}
|
|
155
|
+
|
|
156
|
+
expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it 'provides a useful explosion message if it encounters an entirely new type of step block' do
|
|
160
|
+
partial_feature_ast = {:type => :Feature, :location => {:line => 1, :column => 1}, :children => [{:type => :Scenario, :tags => [], :location => {:line => 1, :column => 1}, :steps => [{:type => :Step, :location => {:line => 1, :column => 1}, :argument => {:type => :some_unknown_type, :location => {:line => 1, :column => 1}, :content => ""}}]}]}
|
|
161
|
+
|
|
162
|
+
expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
end
|
|
166
|
+
|
|
148
167
|
end
|
|
@@ -43,7 +43,7 @@ describe 'Parsing, Integration' do
|
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
it 'includes the type of object provided when raising an non-string exception' do
|
|
46
|
-
expect { nodule.parse_text(
|
|
46
|
+
expect { nodule.parse_text(:not_a_string) }.to raise_error(ArgumentError, /Symbol/)
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
# todo - Stop doing this. Just return a feature file rooted AST.
|
|
@@ -62,44 +62,35 @@ describe 'Parsing, Integration' do
|
|
|
62
62
|
|
|
63
63
|
it 'includes the underlying error message in the error that it raises' do
|
|
64
64
|
begin
|
|
65
|
+
$old_method = CukeModeler::Parsing.method(:parsing_method)
|
|
66
|
+
|
|
65
67
|
# Custom error type in order to ensure that we are throwing the correct thing
|
|
66
68
|
module CukeModeler
|
|
67
69
|
class TestError < StandardError
|
|
68
70
|
end
|
|
69
71
|
end
|
|
70
72
|
|
|
71
|
-
# Monkey patch
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
class Parser
|
|
77
|
-
def parse(*args)
|
|
73
|
+
# Monkey patch the parsing method to throw the error that we need for testing
|
|
74
|
+
module CukeModeler
|
|
75
|
+
module Parsing
|
|
76
|
+
class << self
|
|
77
|
+
def parsing_method(*args)
|
|
78
78
|
raise(CukeModeler::TestError, 'something went wrong')
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
|
-
else
|
|
83
|
-
old_method = Gherkin::Parser::Parser.instance_method(:parse)
|
|
84
|
-
|
|
85
|
-
module Gherkin
|
|
86
|
-
module Parser
|
|
87
|
-
class Parser
|
|
88
|
-
def parse(*args)
|
|
89
|
-
raise(CukeModeler::TestError, 'something went wrong')
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
82
|
end
|
|
95
83
|
|
|
84
|
+
|
|
96
85
|
expect { nodule.parse_text('bad file') }.to raise_error(/CukeModeler::TestError.*something went wrong/)
|
|
97
86
|
ensure
|
|
98
87
|
# Making sure that our changes don't escape a test and ruin the rest of the suite
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
88
|
+
module CukeModeler
|
|
89
|
+
module Parsing
|
|
90
|
+
class << self
|
|
91
|
+
define_method(:parsing_method, $old_method)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
103
94
|
end
|
|
104
95
|
end
|
|
105
96
|
|
|
@@ -28,7 +28,7 @@ require "#{this_dir}/../../dialect_helper"
|
|
|
28
28
|
|
|
29
29
|
# Use a fake dialect for testing in order to avoid hard coded language assumptions in the
|
|
30
30
|
# implementation. Only possible with newer versions of Gherkin.
|
|
31
|
-
if Gem.loaded_specs['gherkin'].version.version[/^2
|
|
31
|
+
if Gem.loaded_specs['gherkin'].version.version[/^2\./]
|
|
32
32
|
CukeModeler::DialectHelper.set_dialect(Gherkin::I18n::LANGUAGES['en'])
|
|
33
33
|
CukeModeler::Parsing.dialect = 'en'
|
|
34
34
|
else
|
|
@@ -58,12 +58,12 @@ end
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
RSpec.configure do |config|
|
|
61
|
-
case
|
|
62
|
-
when
|
|
61
|
+
case Gem.loaded_specs['gherkin'].version.version
|
|
62
|
+
when /^4\./
|
|
63
63
|
config.filter_run_excluding :gherkin2 => true,
|
|
64
64
|
:gherkin3 => true,
|
|
65
65
|
:gherkin4 => false
|
|
66
|
-
when
|
|
66
|
+
when /^3\./
|
|
67
67
|
config.filter_run_excluding :gherkin2 => true,
|
|
68
68
|
:gherkin3 => false,
|
|
69
69
|
:gherkin4 => true
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cuke_modeler
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eric Kessler
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2017-04-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: gherkin
|
|
@@ -78,14 +78,14 @@ dependencies:
|
|
|
78
78
|
requirements:
|
|
79
79
|
- - "<"
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
|
-
version:
|
|
81
|
+
version: 13.0.0
|
|
82
82
|
type: :development
|
|
83
83
|
prerelease: false
|
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
|
85
85
|
requirements:
|
|
86
86
|
- - "<"
|
|
87
87
|
- !ruby/object:Gem::Version
|
|
88
|
-
version:
|
|
88
|
+
version: 13.0.0
|
|
89
89
|
- !ruby/object:Gem::Dependency
|
|
90
90
|
name: cucumber
|
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -176,6 +176,7 @@ files:
|
|
|
176
176
|
- LICENSE.txt
|
|
177
177
|
- README.md
|
|
178
178
|
- Rakefile
|
|
179
|
+
- appveyor.yml
|
|
179
180
|
- cuke_modeler.gemspec
|
|
180
181
|
- lib/cuke_modeler.rb
|
|
181
182
|
- lib/cuke_modeler/adapters/gherkin_2_adapter.rb
|
|
@@ -335,7 +336,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
335
336
|
version: '0'
|
|
336
337
|
requirements: []
|
|
337
338
|
rubyforge_project:
|
|
338
|
-
rubygems_version: 2.
|
|
339
|
+
rubygems_version: 2.5.2
|
|
339
340
|
signing_key:
|
|
340
341
|
specification_version: 4
|
|
341
342
|
summary: A gem providing functionality to model Gherkin based test suites.
|