cuke_modeler 1.5.1 → 3.2.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 (135) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -1
  3. data/LICENSE.txt +1 -1
  4. data/README.md +13 -15
  5. data/cuke_modeler.gemspec +12 -9
  6. data/lib/cuke_modeler.rb +1 -0
  7. data/lib/cuke_modeler/adapters/gherkin_10_adapter.rb +12 -0
  8. data/lib/cuke_modeler/adapters/gherkin_11_adapter.rb +12 -0
  9. data/lib/cuke_modeler/adapters/gherkin_12_adapter.rb +12 -0
  10. data/lib/cuke_modeler/adapters/gherkin_13_adapter.rb +12 -0
  11. data/lib/cuke_modeler/adapters/gherkin_14_adapter.rb +12 -0
  12. data/lib/cuke_modeler/adapters/{gherkin_6_adapter.rb → gherkin_9_adapter.rb} +105 -69
  13. data/lib/cuke_modeler/containing.rb +16 -5
  14. data/lib/cuke_modeler/described.rb +1 -0
  15. data/lib/cuke_modeler/models/background.rb +1 -1
  16. data/lib/cuke_modeler/models/cell.rb +1 -1
  17. data/lib/cuke_modeler/models/comment.rb +1 -1
  18. data/lib/cuke_modeler/models/directory.rb +2 -2
  19. data/lib/cuke_modeler/models/doc_string.rb +1 -1
  20. data/lib/cuke_modeler/models/example.rb +1 -1
  21. data/lib/cuke_modeler/models/feature.rb +16 -5
  22. data/lib/cuke_modeler/models/feature_file.rb +2 -2
  23. data/lib/cuke_modeler/models/outline.rb +1 -1
  24. data/lib/cuke_modeler/models/row.rb +1 -1
  25. data/lib/cuke_modeler/models/rule.rb +99 -0
  26. data/lib/cuke_modeler/models/scenario.rb +1 -1
  27. data/lib/cuke_modeler/models/step.rb +32 -3
  28. data/lib/cuke_modeler/models/table.rb +1 -1
  29. data/lib/cuke_modeler/models/tag.rb +1 -1
  30. data/lib/cuke_modeler/named.rb +1 -0
  31. data/lib/cuke_modeler/nested.rb +1 -0
  32. data/lib/cuke_modeler/parsed.rb +1 -0
  33. data/lib/cuke_modeler/parsing.rb +89 -102
  34. data/lib/cuke_modeler/sourceable.rb +1 -0
  35. data/lib/cuke_modeler/stepped.rb +1 -0
  36. data/lib/cuke_modeler/taggable.rb +1 -0
  37. data/lib/cuke_modeler/version.rb +1 -1
  38. data/testing/cucumber/features/analysis/step_comparison.feature +25 -0
  39. data/testing/cucumber/features/analysis/test_comparison.feature +1 -1
  40. data/testing/cucumber/features/modeling/feature_modeling.feature +28 -7
  41. data/testing/cucumber/features/modeling/feature_output.feature +45 -23
  42. data/testing/cucumber/features/modeling/rule_modeling.feature +108 -0
  43. data/testing/cucumber/features/modeling/rule_output.feature +111 -0
  44. metadata +39 -140
  45. data/.gitignore +0 -18
  46. data/.simplecov +0 -7
  47. data/.travis.yml +0 -60
  48. data/Gemfile +0 -37
  49. data/Rakefile +0 -73
  50. data/appveyor.yml +0 -61
  51. data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +0 -273
  52. data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +0 -296
  53. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +0 -308
  54. data/testing/cucumber/step_definitions/action_steps.rb +0 -13
  55. data/testing/cucumber/step_definitions/background_steps.rb +0 -1
  56. data/testing/cucumber/step_definitions/directory_steps.rb +0 -6
  57. data/testing/cucumber/step_definitions/doc_string_steps.rb +0 -1
  58. data/testing/cucumber/step_definitions/feature_file_steps.rb +0 -16
  59. data/testing/cucumber/step_definitions/feature_steps.rb +0 -7
  60. data/testing/cucumber/step_definitions/modeling_steps.rb +0 -44
  61. data/testing/cucumber/step_definitions/setup_steps.rb +0 -32
  62. data/testing/cucumber/step_definitions/step_steps.rb +0 -3
  63. data/testing/cucumber/step_definitions/table_steps.rb +0 -1
  64. data/testing/cucumber/step_definitions/tag_steps.rb +0 -3
  65. data/testing/cucumber/step_definitions/verification_steps.rb +0 -173
  66. data/testing/cucumber/support/env.rb +0 -30
  67. data/testing/dialect_helper.rb +0 -48
  68. data/testing/file_helper.rb +0 -47
  69. data/testing/gemfiles/gherkin2.gemfile +0 -33
  70. data/testing/gemfiles/gherkin3.gemfile +0 -26
  71. data/testing/gemfiles/gherkin4.gemfile +0 -27
  72. data/testing/gemfiles/gherkin5.gemfile +0 -27
  73. data/testing/gemfiles/gherkin6.gemfile +0 -10
  74. data/testing/rspec/spec/integration/adapters/gherkin_2_adapter_spec.rb +0 -166
  75. data/testing/rspec/spec/integration/adapters/gherkin_3_adapter_spec.rb +0 -166
  76. data/testing/rspec/spec/integration/adapters/gherkin_4_adapter_spec.rb +0 -165
  77. data/testing/rspec/spec/integration/adapters/gherkin_6_adapter_spec.rb +0 -166
  78. data/testing/rspec/spec/integration/models/background_integration_spec.rb +0 -442
  79. data/testing/rspec/spec/integration/models/cell_integration_spec.rb +0 -335
  80. data/testing/rspec/spec/integration/models/comment_integration_spec.rb +0 -177
  81. data/testing/rspec/spec/integration/models/directory_integration_spec.rb +0 -218
  82. data/testing/rspec/spec/integration/models/doc_string_integration_spec.rb +0 -402
  83. data/testing/rspec/spec/integration/models/example_integration_spec.rb +0 -741
  84. data/testing/rspec/spec/integration/models/feature_file_integration_spec.rb +0 -272
  85. data/testing/rspec/spec/integration/models/feature_integration_spec.rb +0 -650
  86. data/testing/rspec/spec/integration/models/model_integration_spec.rb +0 -15
  87. data/testing/rspec/spec/integration/models/outline_integration_spec.rb +0 -624
  88. data/testing/rspec/spec/integration/models/row_integration_spec.rb +0 -291
  89. data/testing/rspec/spec/integration/models/scenario_integration_spec.rb +0 -479
  90. data/testing/rspec/spec/integration/models/step_integration_spec.rb +0 -475
  91. data/testing/rspec/spec/integration/models/table_integration_spec.rb +0 -337
  92. data/testing/rspec/spec/integration/models/tag_integration_spec.rb +0 -259
  93. data/testing/rspec/spec/integration/nested_integration_spec.rb +0 -91
  94. data/testing/rspec/spec/integration/parsing_integration_spec.rb +0 -122
  95. data/testing/rspec/spec/integration/shared/models_integration_specs.rb +0 -18
  96. data/testing/rspec/spec/spec_helper.rb +0 -125
  97. data/testing/rspec/spec/unit/cuke_modeler_unit_spec.rb +0 -25
  98. data/testing/rspec/spec/unit/described_unit_spec.rb +0 -23
  99. data/testing/rspec/spec/unit/models/background_unit_spec.rb +0 -83
  100. data/testing/rspec/spec/unit/models/cell_unit_spec.rb +0 -68
  101. data/testing/rspec/spec/unit/models/comment_unit_spec.rb +0 -68
  102. data/testing/rspec/spec/unit/models/directory_unit_spec.rb +0 -127
  103. data/testing/rspec/spec/unit/models/doc_string_unit_spec.rb +0 -100
  104. data/testing/rspec/spec/unit/models/example_unit_spec.rb +0 -133
  105. data/testing/rspec/spec/unit/models/feature_file_unit_spec.rb +0 -125
  106. data/testing/rspec/spec/unit/models/feature_unit_spec.rb +0 -157
  107. data/testing/rspec/spec/unit/models/model_unit_spec.rb +0 -15
  108. data/testing/rspec/spec/unit/models/outline_unit_spec.rb +0 -117
  109. data/testing/rspec/spec/unit/models/row_unit_spec.rb +0 -68
  110. data/testing/rspec/spec/unit/models/scenario_unit_spec.rb +0 -86
  111. data/testing/rspec/spec/unit/models/step_unit_spec.rb +0 -109
  112. data/testing/rspec/spec/unit/models/table_unit_spec.rb +0 -77
  113. data/testing/rspec/spec/unit/models/tag_unit_spec.rb +0 -68
  114. data/testing/rspec/spec/unit/named_unit_spec.rb +0 -23
  115. data/testing/rspec/spec/unit/nested_unit_spec.rb +0 -43
  116. data/testing/rspec/spec/unit/parsed_unit_spec.rb +0 -27
  117. data/testing/rspec/spec/unit/parsing_unit_spec.rb +0 -54
  118. data/testing/rspec/spec/unit/shared/bare_bones_models_unit_specs.rb +0 -14
  119. data/testing/rspec/spec/unit/shared/containing_models_unit_specs.rb +0 -127
  120. data/testing/rspec/spec/unit/shared/described_models_unit_specs.rb +0 -38
  121. data/testing/rspec/spec/unit/shared/keyworded_models_unit_specs.rb +0 -58
  122. data/testing/rspec/spec/unit/shared/models_unit_specs.rb +0 -15
  123. data/testing/rspec/spec/unit/shared/named_models_unit_specs.rb +0 -39
  124. data/testing/rspec/spec/unit/shared/nested_models_unit_specs.rb +0 -51
  125. data/testing/rspec/spec/unit/shared/parsed_models_unit_specs.rb +0 -39
  126. data/testing/rspec/spec/unit/shared/prepopulated_models_unit_specs.rb +0 -18
  127. data/testing/rspec/spec/unit/shared/sourced_models_unit_specs.rb +0 -39
  128. data/testing/rspec/spec/unit/shared/stepped_models_unit_specs.rb +0 -46
  129. data/testing/rspec/spec/unit/shared/stringifiable_models_unit_specs.rb +0 -18
  130. data/testing/rspec/spec/unit/shared/tagged_models_unit_specs.rb +0 -72
  131. data/testing/rspec/spec/unit/sourceable_unit_spec.rb +0 -27
  132. data/testing/rspec/spec/unit/stepped_unit_spec.rb +0 -23
  133. data/testing/rspec/spec/unit/taggable_unit_spec.rb +0 -69
  134. data/testing/test_languages.json +0 -45
  135. data/todo.txt +0 -24
@@ -1,14 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
- shared_examples_for 'a bare bones model' do
4
-
5
- # clazz must be defined by the calling file
6
-
7
- let(:model) { clazz.new }
8
-
9
-
10
- it 'can be initialized empty' do
11
- expect { clazz.new }.to_not raise_error
12
- end
13
-
14
- end
@@ -1,127 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
- shared_examples_for 'a containing model' do
4
-
5
- # clazz must be defined by the calling file
6
-
7
- let(:model) { clazz.new }
8
-
9
-
10
- it 'has children' do
11
- expect(model).to respond_to(:children)
12
- end
13
-
14
- it 'returns a collection of children' do
15
- expect(model.children).to be_an(Array)
16
- end
17
-
18
- it 'does not return objects for children that it does not have' do
19
- # Ensuring an empty, childless model
20
- model = clazz.new
21
-
22
- expect(model.children).to_not include(nil)
23
- end
24
-
25
- it 'can execute code on all models in its model tree' do
26
- expect(model).to respond_to(:each_model)
27
- end
28
-
29
- it 'can execute code on all of its descendants' do
30
- expect(model).to respond_to(:each_descendant)
31
- end
32
-
33
-
34
- context 'without children' do
35
-
36
- let(:parent_model) do
37
- m = clazz.new
38
-
39
- # Not all models have a name, so making sure that this one does
40
- def m.name
41
- 'top level model'
42
- end
43
-
44
- # Redefining what children are returned for the model rather than fiddling with all of the different kinds of child models that various model classes have
45
- def m.children
46
- []
47
- end
48
-
49
- m
50
- end
51
-
52
-
53
- it 'executes the provided code on each descendant of the model' do
54
- names = []
55
-
56
- parent_model.each_descendant do |descendant_model|
57
- names << descendant_model.name
58
- end
59
-
60
- expect(names).to be_empty
61
- end
62
-
63
- it 'executes the provided code on each model in its tree' do
64
- names = []
65
-
66
- parent_model.each_model do |model_node|
67
- names << model_node.name
68
- end
69
-
70
- expect(names).to match_array(['top level model'])
71
- end
72
-
73
- end
74
-
75
-
76
- context 'with children' do
77
-
78
- let(:parent_model) do
79
- m = clazz.new
80
-
81
- # Not all models have a name, so making sure that this one does
82
- def m.name
83
- 'top level model'
84
- end
85
-
86
- # Redefining what children are returned for the model rather than fiddling with all of the different kinds of child models that various model classes have
87
- def m.children
88
- containing_model_stub = Struct.new(:name, :children)
89
- non_containing_model_stub = Struct.new(:name)
90
- nested_child_object = containing_model_stub.new('grandchild object', [])
91
- nested_child_object.extend(CukeModeler::Containing)
92
-
93
- non_containing_child_object = non_containing_model_stub.new('child object 1')
94
-
95
- child_object_with_children = containing_model_stub.new('child object 2', [nested_child_object])
96
- child_object_with_children.extend(CukeModeler::Containing)
97
-
98
- [non_containing_child_object, child_object_with_children]
99
- end
100
-
101
- m
102
- end
103
-
104
-
105
- it 'executes the provided code on each descendant of the model' do
106
- names = []
107
-
108
- parent_model.each_descendant do |descendant_model|
109
- names << descendant_model.name
110
- end
111
-
112
- expect(names).to match_array(['child object 1', 'child object 2', 'grandchild object'])
113
- end
114
-
115
- it 'executes the provided code on each model in its tree' do
116
- names = []
117
-
118
- parent_model.each_model do |model_node|
119
- names << model_node.name
120
- end
121
-
122
- expect(names).to match_array(['top level model', 'child object 1', 'child object 2', 'grandchild object'])
123
- end
124
-
125
- end
126
-
127
- end
@@ -1,38 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
- shared_examples_for 'a described model' do
4
-
5
- # clazz must be defined by the calling file
6
-
7
- let(:model) { clazz.new }
8
-
9
-
10
- it 'has a description' do
11
- expect(model).to respond_to(:description)
12
- end
13
-
14
- it 'can change its description' do
15
- expect(model).to respond_to(:description=)
16
-
17
- model.description = :some_description
18
- expect(model.description).to eq(:some_description)
19
- model.description = :some_other_description
20
- expect(model.description).to eq(:some_other_description)
21
- end
22
-
23
-
24
- describe 'abstract instantiation' do
25
-
26
- context 'a new described object' do
27
-
28
- let(:model) { clazz.new }
29
-
30
- it 'starts with no description' do
31
- expect(model.description).to be_nil
32
- end
33
-
34
- end
35
-
36
- end
37
-
38
- end
@@ -1,58 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
-
4
- shared_examples_for 'a keyworded model' do
5
-
6
- # clazz must be defined by the calling file
7
-
8
- let(:model) { clazz.new }
9
-
10
-
11
- it 'has a keyword' do
12
- expect(model).to respond_to(:keyword)
13
- end
14
-
15
- it 'can change its keyword' do
16
- expect(model).to respond_to(:keyword=)
17
-
18
- model.keyword = :some_keyword
19
- expect(model.keyword).to eq(:some_keyword)
20
- model.keyword = :some_other_keyword
21
- expect(model.keyword).to eq(:some_other_keyword)
22
- end
23
-
24
-
25
- describe 'abstract instantiation' do
26
-
27
- context 'a new object' do
28
-
29
- let(:model) { clazz.new }
30
-
31
-
32
- it 'starts with no keyword' do
33
- expect(model.keyword).to be_nil
34
- end
35
-
36
- end
37
-
38
- end
39
-
40
-
41
- describe 'model output' do
42
-
43
- context 'from abstract instantiation' do
44
-
45
- let(:model) { clazz.new }
46
-
47
-
48
- it 'can output a model that has only a keyword' do
49
- model.keyword = 'foo'
50
-
51
- expect { model.to_s }.to_not raise_error
52
- end
53
-
54
- end
55
-
56
- end
57
-
58
- end
@@ -1,15 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
- shared_examples_for 'a model' do
4
-
5
- describe 'common behavior' do
6
-
7
- it_should_behave_like 'a bare bones model'
8
- it_should_behave_like 'a prepopulated model'
9
- it_should_behave_like 'a nested model'
10
- it_should_behave_like 'a containing model'
11
- it_should_behave_like 'a stringifiable model'
12
-
13
- end
14
-
15
- end
@@ -1,39 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
- shared_examples_for 'a named model' do
4
-
5
- # clazz must be defined by the calling file
6
-
7
- let(:model) { clazz.new }
8
-
9
-
10
- it 'has a name' do
11
- expect(model).to respond_to(:name)
12
- end
13
-
14
- it 'can change its name' do
15
- expect(model).to respond_to(:name=)
16
-
17
- model.name = :some_name
18
- expect(model.name).to eq(:some_name)
19
- model.name = :some_other_name
20
- expect(model.name).to eq(:some_other_name)
21
- end
22
-
23
-
24
- describe 'abstract instantiation' do
25
-
26
- context 'a new named object' do
27
-
28
- let(:model) { clazz.new }
29
-
30
-
31
- it 'starts with no name' do
32
- expect(model.name).to be_nil
33
- end
34
-
35
- end
36
-
37
- end
38
-
39
- end
@@ -1,51 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
- shared_examples_for 'a nested model' do
4
-
5
- # clazz must be defined by the calling file
6
-
7
- let(:nested_model) { clazz.new }
8
-
9
-
10
- it 'has a parent model' do
11
- expect(nested_model).to respond_to(:parent_model)
12
- end
13
-
14
- it 'can change its parent model' do
15
- expect(nested_model).to respond_to(:parent_model=)
16
-
17
- nested_model.parent_model = :some_parent_model
18
- expect(nested_model.parent_model).to eq(:some_parent_model)
19
- nested_model.parent_model = :some_other_parent_model
20
- expect(nested_model.parent_model).to eq(:some_other_parent_model)
21
- end
22
-
23
-
24
- describe 'abstract instantiation' do
25
-
26
- context 'a new nested object' do
27
-
28
- let(:nested_model) { clazz.new }
29
-
30
-
31
- it 'starts with no parent model' do
32
- expect(nested_model.parent_model).to be_nil
33
- end
34
-
35
- end
36
-
37
- end
38
-
39
- it 'has access to its ancestors' do
40
- expect(nested_model).to respond_to(:get_ancestor)
41
- end
42
-
43
- it 'gets an ancestor based on type' do
44
- expect(clazz.instance_method(:get_ancestor).arity).to eq(1)
45
- end
46
-
47
- it 'raises and exception if an unknown ancestor type is requested' do
48
- expect { nested_model.get_ancestor(:bad_ancestor_type) }.to raise_exception(ArgumentError)
49
- end
50
-
51
- end
@@ -1,39 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
- shared_examples_for 'a parsed model' do
4
-
5
- # clazz must be defined by the calling file
6
-
7
- let(:model) { clazz.new }
8
-
9
-
10
- it 'can access its original parsing data' do
11
- expect(model).to respond_to(:parsing_data)
12
- end
13
-
14
- it 'can change its parsing data' do
15
- expect(model).to respond_to(:parsing_data=)
16
-
17
- model.parsing_data = :some_parsing_data
18
- expect(model.parsing_data).to eq(:some_parsing_data)
19
- model.parsing_data = :some_other_parsing_data
20
- expect(model.parsing_data).to eq(:some_other_parsing_data)
21
- end
22
-
23
-
24
- describe 'abstract instantiation' do
25
-
26
- context 'a new parsed object' do
27
-
28
- let(:model) { clazz.new }
29
-
30
-
31
- it 'starts with no parsing data' do
32
- expect(model.parsing_data).to be_nil
33
- end
34
-
35
- end
36
-
37
- end
38
-
39
- end
@@ -1,18 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
- shared_examples_for 'a prepopulated model' do
4
-
5
- # clazz must be defined by the calling file
6
-
7
- let(:model) { clazz.new }
8
-
9
-
10
- it 'can take text from which to populate itself' do
11
- expect(clazz.instance_method(:initialize).arity).to_not eq(0)
12
- end
13
-
14
- it 'will complain if given non-text input' do
15
- expect { clazz.new(:not_a_string) }.to raise_error(ArgumentError, 'Can only create models from Strings but was given a Symbol.')
16
- end
17
-
18
- end
@@ -1,39 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
- shared_examples_for 'a sourced model' do
4
-
5
- # clazz must be defined by the calling file
6
-
7
- let(:model) { clazz.new }
8
-
9
-
10
- it 'has a source line' do
11
- expect(model).to respond_to(:source_line)
12
- end
13
-
14
- it 'can change its source line' do
15
- expect(model).to respond_to(:source_line=)
16
-
17
- model.source_line = :some_source_line
18
- expect(model.source_line).to eq(:some_source_line)
19
- model.source_line = :some_other_source_line
20
- expect(model.source_line).to eq(:some_other_source_line)
21
- end
22
-
23
-
24
- describe 'abstract instantiation' do
25
-
26
- context 'a new sourced object' do
27
-
28
- let(:model) { clazz.new }
29
-
30
-
31
- it 'starts with no source line' do
32
- expect(model.source_line).to be_nil
33
- end
34
-
35
- end
36
-
37
- end
38
-
39
- end