cuke_linter 0.11.1 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -1
- data/CHANGELOG.md +13 -2
- data/LICENSE.txt +1 -1
- data/appveyor.yml +19 -0
- data/cuke_linter.gemspec +1 -1
- data/environments/rspec_env.rb +4 -0
- data/lib/cuke_linter.rb +6 -0
- data/lib/cuke_linter/linters/element_with_common_tags_linter.rb +41 -0
- data/lib/cuke_linter/linters/element_with_duplicate_tags_linter.rb +44 -0
- data/lib/cuke_linter/linters/feature_file_with_mismatched_name_linter.rb +26 -0
- data/lib/cuke_linter/version.rb +1 -1
- data/testing/cucumber/features/command_line.feature +7 -7
- data/testing/cucumber/features/default_linters.feature +3 -0
- data/testing/cucumber/features/linters/element_with_common_tags.feature +28 -0
- data/testing/cucumber/features/linters/element_with_duplicate_tags.feature +71 -0
- data/testing/cucumber/features/linters/feature_file_with_mismatched_name.feature +32 -0
- data/testing/cucumber/step_definitions/setup_steps.rb +25 -0
- data/testing/gemfiles/cuke_modeler1.gemfile +8 -0
- data/testing/gemfiles/cuke_modeler2.gemfile +8 -0
- data/testing/model_factory.rb +14 -2
- data/testing/rspec/spec/integration/cli_integration_spec.rb +8 -7
- data/testing/rspec/spec/integration/cuke_linter_integration_spec.rb +5 -0
- data/testing/rspec/spec/integration/linters/element_with_common_tags_linter_integration_spec.rb +8 -0
- data/testing/rspec/spec/integration/linters/element_with_duplicate_tags_linter_integration_spec.rb +8 -0
- data/testing/rspec/spec/integration/linters/feature_file_with_mismatched_name_integration_spec.rb +8 -0
- data/testing/rspec/spec/unit/linters/element_with_common_tags_linter_unit_spec.rb +248 -0
- data/testing/rspec/spec/unit/linters/element_with_duplicate_tags_linter_unit_spec.rb +203 -0
- data/testing/rspec/spec/unit/linters/element_with_too_many_tags_linter_unit_spec.rb +1 -4
- data/testing/rspec/spec/unit/linters/feature_file_with_invalid_name_linter_unit_spec.rb +1 -1
- data/testing/rspec/spec/unit/linters/feature_file_with_mismatched_name_linter_unit_spec.rb +124 -0
- metadata +24 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f5b4c792db279ecfb0eab3df8591ca772891edfe1f156daae3fd1715d74cda9
|
4
|
+
data.tar.gz: 572b6d392046c43da411458e0f3ac23e32ee4bd82bfacadcf98e0268120235a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff8ed351d8fe31419a1cc922e3430eda5a84e88d8bda09838095c1cd647bf56826a121f0eb335527a03b2ccb35a6e399d3a4f34e09dcef998860228a2fcd9a14
|
7
|
+
data.tar.gz: f0739486ca0c93b175e5bd34c0b7334c360331bd8e2e9472055bd53a2ed4acde21b7db9f5f53b70a3f852c2d093e39f4193aa473a45e869e23ecda086019fa0f
|
data/.travis.yml
CHANGED
@@ -8,12 +8,16 @@ dist: trusty
|
|
8
8
|
|
9
9
|
language: ruby
|
10
10
|
rvm:
|
11
|
-
- 2.3.3
|
12
11
|
- 2.4.0
|
13
12
|
- 2.5.1
|
14
13
|
- 2.6.0
|
15
14
|
- jruby-9.1.7.0
|
16
15
|
|
16
|
+
|
17
|
+
gemfile:
|
18
|
+
- testing/gemfiles/cuke_modeler1.gemfile
|
19
|
+
- testing/gemfiles/cuke_modeler2.gemfile
|
20
|
+
|
17
21
|
before_install: gem install bundler -v 1.16.2
|
18
22
|
|
19
23
|
script: bundle exec rake cuke_linter:ci_build
|
data/CHANGELOG.md
CHANGED
@@ -6,7 +6,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
-
Nothing yet...
|
9
|
+
Nothing yet...
|
10
|
+
|
11
|
+
## [0.12.0] - 2020-02-13
|
12
|
+
|
13
|
+
### Added
|
14
|
+
- New linters
|
15
|
+
- ElementWithCommonTagsLinter
|
16
|
+
- ElementWithDuplicateTagsLinter
|
17
|
+
- FeatureFileWithMismatchedNameLinter
|
18
|
+
|
19
|
+
- Now compatible with CukeModeler 2.x
|
10
20
|
|
11
21
|
|
12
22
|
## [0.11.1] - 2019-11-07
|
@@ -119,7 +129,8 @@ Nothing yet... *(see development branch)*
|
|
119
129
|
- Custom linters, formatters, and command line usability
|
120
130
|
|
121
131
|
|
122
|
-
[Unreleased]: https://github.com/enkessler/cuke_linter/compare/v0.
|
132
|
+
[Unreleased]: https://github.com/enkessler/cuke_linter/compare/v0.12.0...HEAD
|
133
|
+
[0.12.0]: https://github.com/enkessler/cuke_linter/compare/v0.11.1...v0.12.0
|
123
134
|
[0.11.1]: https://github.com/enkessler/cuke_linter/compare/v0.11.0...v0.11.1
|
124
135
|
[0.11.0]: https://github.com/enkessler/cuke_linter/compare/v0.10.0...v0.11.0
|
125
136
|
[0.10.0]: https://github.com/enkessler/cuke_linter/compare/v0.9.0...v0.10.0
|
data/LICENSE.txt
CHANGED
data/appveyor.yml
CHANGED
@@ -3,11 +3,30 @@ version: '1.0.{build}'
|
|
3
3
|
environment:
|
4
4
|
matrix:
|
5
5
|
- RUBY_VERSION: 23
|
6
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler1.gemfile
|
6
7
|
- RUBY_VERSION: 23-x64
|
8
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler1.gemfile
|
7
9
|
- RUBY_VERSION: 24
|
10
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler1.gemfile
|
8
11
|
- RUBY_VERSION: 24-x64
|
12
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler1.gemfile
|
9
13
|
- RUBY_VERSION: 25
|
14
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler1.gemfile
|
10
15
|
- RUBY_VERSION: 25-x64
|
16
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler1.gemfile
|
17
|
+
|
18
|
+
- RUBY_VERSION: 23
|
19
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler2.gemfile
|
20
|
+
- RUBY_VERSION: 23-x64
|
21
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler2.gemfile
|
22
|
+
- RUBY_VERSION: 24
|
23
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler2.gemfile
|
24
|
+
- RUBY_VERSION: 24-x64
|
25
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler2.gemfile
|
26
|
+
- RUBY_VERSION: 25
|
27
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler2.gemfile
|
28
|
+
- RUBY_VERSION: 25-x64
|
29
|
+
BUNDLE_GEMFILE: testing/gemfiles/cuke_modeler2.gemfile
|
11
30
|
|
12
31
|
install:
|
13
32
|
- set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
|
data/cuke_linter.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
|
27
27
|
spec.required_ruby_version = '~> 2.0'
|
28
28
|
|
29
|
-
spec.add_runtime_dependency 'cuke_modeler', '
|
29
|
+
spec.add_runtime_dependency 'cuke_modeler', '>= 1.5', '< 3.0'
|
30
30
|
|
31
31
|
spec.add_development_dependency "bundler", "< 3.0"
|
32
32
|
spec.add_development_dependency "cucumber", "~> 3.0"
|
data/environments/rspec_env.rb
CHANGED
@@ -12,6 +12,10 @@ require_relative '../testing/rspec/spec/unit/linters/linter_unit_specs'
|
|
12
12
|
require_relative '../testing/rspec/spec/integration/formatters/formatter_integration_specs'
|
13
13
|
require_relative '../testing/rspec/spec/integration/linters/linter_integration_specs'
|
14
14
|
|
15
|
+
# Convenient constants, just in case what kinds of elements are taggable ever changes
|
16
|
+
TAGGABLE_ELEMENTS = ['feature', 'scenario', 'outline', 'example']
|
17
|
+
ELEMENTS_WITH_TAGGABLE_CHILDREN = ['feature', 'outline']
|
18
|
+
|
15
19
|
RSpec.configure do |config|
|
16
20
|
# Enable flags like --only-failures and --next-failure
|
17
21
|
config.example_status_persistence_file_path = ".rspec_status"
|
data/lib/cuke_linter.rb
CHANGED
@@ -5,9 +5,12 @@ require "cuke_linter/version"
|
|
5
5
|
require 'cuke_linter/formatters/pretty_formatter'
|
6
6
|
require 'cuke_linter/linters/linter'
|
7
7
|
require 'cuke_linter/linters/background_does_more_than_setup_linter'
|
8
|
+
require 'cuke_linter/linters/element_with_common_tags_linter'
|
9
|
+
require 'cuke_linter/linters/element_with_duplicate_tags_linter'
|
8
10
|
require 'cuke_linter/linters/element_with_too_many_tags_linter'
|
9
11
|
require 'cuke_linter/linters/example_without_name_linter'
|
10
12
|
require 'cuke_linter/linters/feature_file_with_invalid_name_linter'
|
13
|
+
require 'cuke_linter/linters/feature_file_with_mismatched_name_linter'
|
11
14
|
require 'cuke_linter/linters/feature_with_too_many_different_tags_linter'
|
12
15
|
require 'cuke_linter/linters/feature_without_name_linter'
|
13
16
|
require 'cuke_linter/linters/feature_without_description_linter'
|
@@ -33,9 +36,12 @@ require 'cuke_linter/linters/test_with_too_many_steps_linter'
|
|
33
36
|
module CukeLinter
|
34
37
|
|
35
38
|
@original_linters = { 'BackgroundDoesMoreThanSetupLinter' => BackgroundDoesMoreThanSetupLinter.new,
|
39
|
+
'ElementWithCommonTagsLinter' => ElementWithCommonTagsLinter.new,
|
40
|
+
'ElementWithDuplicateTagsLinter' => ElementWithDuplicateTagsLinter.new,
|
36
41
|
'ElementWithTooManyTagsLinter' => ElementWithTooManyTagsLinter.new,
|
37
42
|
'ExampleWithoutNameLinter' => ExampleWithoutNameLinter.new,
|
38
43
|
'FeatureFileWithInvalidNameLinter' => FeatureFileWithInvalidNameLinter.new,
|
44
|
+
'FeatureFileWithMismatchedNameLinter' => FeatureFileWithMismatchedNameLinter.new,
|
39
45
|
'FeatureWithTooManyDifferentTagsLinter' => FeatureWithTooManyDifferentTagsLinter.new,
|
40
46
|
'FeatureWithoutDescriptionLinter' => FeatureWithoutDescriptionLinter.new,
|
41
47
|
'FeatureWithoutNameLinter' => FeatureWithoutNameLinter.new,
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module CukeLinter
|
2
|
+
|
3
|
+
# A linter that detects Gherkin elements that have the same tag on all of their taggable child elements
|
4
|
+
|
5
|
+
class ElementWithCommonTagsLinter < Linter
|
6
|
+
|
7
|
+
# The rule used to determine if a model has a problem
|
8
|
+
def rule(model)
|
9
|
+
return false unless model.is_a?(CukeModeler::Feature) || model.is_a?(CukeModeler::Outline)
|
10
|
+
|
11
|
+
@linted_model_class = model.class
|
12
|
+
|
13
|
+
child_accessor_method = model.is_a?(CukeModeler::Feature) ? :tests : :examples
|
14
|
+
child_models = model.send(child_accessor_method) || []
|
15
|
+
|
16
|
+
tag_sets = child_models.collect { |child_model| child_model.tags || [] }
|
17
|
+
tag_name_sets = tag_sets.collect { |tags| tags.map(&:name) }
|
18
|
+
|
19
|
+
return false if tag_name_sets.count < 2
|
20
|
+
|
21
|
+
@common_tag = tag_name_sets.reduce(:&).first
|
22
|
+
|
23
|
+
!@common_tag.nil?
|
24
|
+
end
|
25
|
+
|
26
|
+
# The message used to describe the problem that has been found
|
27
|
+
def message
|
28
|
+
class_name = @linted_model_class.name.split('::').last
|
29
|
+
|
30
|
+
case class_name
|
31
|
+
when 'Feature'
|
32
|
+
"All tests in #{class_name} have tag '#{@common_tag}'. Move tag to #{class_name} level."
|
33
|
+
when 'Outline'
|
34
|
+
"All Examples in #{class_name} have tag '#{@common_tag}'. Move tag to #{class_name} level."
|
35
|
+
else
|
36
|
+
raise("Linted an unexpected model type '#{class_name}'!")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module CukeLinter
|
2
|
+
|
3
|
+
# A linter that detects taggable Gherkin elements that have duplicate tags
|
4
|
+
|
5
|
+
class ElementWithDuplicateTagsLinter < Linter
|
6
|
+
|
7
|
+
# Changes the linting settings on the linter using the provided configuration
|
8
|
+
def configure(options)
|
9
|
+
@tag_inheritance = options['IncludeInheritedTags']
|
10
|
+
end
|
11
|
+
|
12
|
+
# The rule used to determine if a model has a problem
|
13
|
+
def rule(model)
|
14
|
+
return false unless model.is_a?(CukeModeler::Feature) ||
|
15
|
+
model.is_a?(CukeModeler::Scenario) ||
|
16
|
+
model.is_a?(CukeModeler::Outline) ||
|
17
|
+
model.is_a?(CukeModeler::Example)
|
18
|
+
|
19
|
+
|
20
|
+
@linted_model_class = model.class
|
21
|
+
|
22
|
+
if @tag_inheritance
|
23
|
+
relevant_tags = model.all_tags
|
24
|
+
else
|
25
|
+
relevant_tags = model.tags || []
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
tag_names = relevant_tags.map(&:name)
|
30
|
+
|
31
|
+
@duplicate_tag = tag_names.find { |tag| tag_names.count(tag) > 1 }
|
32
|
+
|
33
|
+
!@duplicate_tag.nil?
|
34
|
+
end
|
35
|
+
|
36
|
+
# The message used to describe the problem that has been found
|
37
|
+
def message
|
38
|
+
class_name = @linted_model_class.name.split('::').last
|
39
|
+
|
40
|
+
"#{class_name} has duplicate tag '#{@duplicate_tag}'."
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module CukeLinter
|
2
|
+
|
3
|
+
# A linter that detects mismatched feature file names
|
4
|
+
|
5
|
+
class FeatureFileWithMismatchedNameLinter < Linter
|
6
|
+
|
7
|
+
# The rule used to determine if a model has a problem
|
8
|
+
def rule(model)
|
9
|
+
return false unless model.is_a?(CukeModeler::FeatureFile)
|
10
|
+
|
11
|
+
file_name = File.basename(model.path, '.feature')
|
12
|
+
feature_name = model.feature.name
|
13
|
+
|
14
|
+
normalized_file_name = file_name.downcase.delete('_ -')
|
15
|
+
normalized_feature_name = feature_name.downcase.delete('_ -')
|
16
|
+
|
17
|
+
normalized_file_name != normalized_feature_name
|
18
|
+
end
|
19
|
+
|
20
|
+
# The message used to describe the problem that has been found
|
21
|
+
def message
|
22
|
+
'Feature file name does not match feature name.'
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
data/lib/cuke_linter/version.rb
CHANGED
@@ -57,14 +57,14 @@ Feature: Using cuke_linter on the command line
|
|
57
57
|
"""
|
58
58
|
|
59
59
|
Scenario: Specifying directories and files to lint
|
60
|
-
Given the following feature file "
|
60
|
+
Given the following feature file "some_feature.feature":
|
61
61
|
"""
|
62
62
|
Feature: Some feature
|
63
63
|
Scenario: A scenario
|
64
64
|
When a step
|
65
65
|
Then a step
|
66
66
|
"""
|
67
|
-
And the following feature file "a_directory/
|
67
|
+
And the following feature file "a_directory/with/some_feature.feature":
|
68
68
|
"""
|
69
69
|
Feature: Some feature
|
70
70
|
Scenario: A scenario
|
@@ -73,14 +73,14 @@ Feature: Using cuke_linter on the command line
|
|
73
73
|
"""
|
74
74
|
When the following command is executed:
|
75
75
|
"""
|
76
|
-
cuke_linter -p <path_to>/
|
76
|
+
cuke_linter -p <path_to>/some_feature.feature -p <path_to>/a_directory
|
77
77
|
"""
|
78
78
|
Then the resulting output is the following:
|
79
79
|
"""
|
80
80
|
FeatureWithoutDescriptionLinter
|
81
81
|
Feature has no description
|
82
|
-
<path_to>/a_directory/
|
83
|
-
<path_to>/
|
82
|
+
<path_to>/a_directory/with/some_feature.feature:1
|
83
|
+
<path_to>/some_feature.feature:1
|
84
84
|
|
85
85
|
2 issues found
|
86
86
|
"""
|
@@ -173,8 +173,8 @@ Feature: Using cuke_linter on the command line
|
|
173
173
|
|
174
174
|
Given the following feature file "has_no_scenarios.feature":
|
175
175
|
"""
|
176
|
-
Feature:
|
177
|
-
|
176
|
+
Feature: Has no scenarios
|
177
|
+
Not a single one
|
178
178
|
"""
|
179
179
|
And the following configuration file "my_config.file":
|
180
180
|
"""
|
@@ -9,9 +9,12 @@ Feature: Default Linters
|
|
9
9
|
Given no other linters have been registered or unregistered
|
10
10
|
Then the following linters are registered by default
|
11
11
|
| BackgroundDoesMoreThanSetupLinter |
|
12
|
+
| ElementWithCommonTagsLinter |
|
13
|
+
| ElementWithDuplicateTagsLinter |
|
12
14
|
| ElementWithTooManyTagsLinter |
|
13
15
|
| ExampleWithoutNameLinter |
|
14
16
|
| FeatureFileWithInvalidNameLinter |
|
17
|
+
| FeatureFileWithMismatchedNameLinter |
|
15
18
|
| FeatureWithTooManyDifferentTagsLinter |
|
16
19
|
| FeatureWithoutDescriptionLinter |
|
17
20
|
| FeatureWithoutNameLinter |
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Feature: Element with common tags linter
|
2
|
+
|
3
|
+
As a writer of documentation
|
4
|
+
I want taggable elements to not needlessly have the same tags
|
5
|
+
So that redundancy is minimized
|
6
|
+
|
7
|
+
|
8
|
+
Scenario: Linting
|
9
|
+
|
10
|
+
Note: Also works on outlines that have common tags on their examples
|
11
|
+
|
12
|
+
Given a linter for elements with common tags
|
13
|
+
And the following feature:
|
14
|
+
"""
|
15
|
+
Feature:
|
16
|
+
|
17
|
+
@same_tag
|
18
|
+
Scenario:
|
19
|
+
* a step
|
20
|
+
|
21
|
+
@same_tag
|
22
|
+
Scenario:
|
23
|
+
* a step
|
24
|
+
"""
|
25
|
+
When it is linted
|
26
|
+
Then an error is reported:
|
27
|
+
| linter | problem | location |
|
28
|
+
| ElementWithCommonTagsLinter | All tests in Feature have tag '@same_tag'. Move tag to Feature level. | <path_to_file>:1 |
|
@@ -0,0 +1,71 @@
|
|
1
|
+
Feature: Element with duplicate tags linter
|
2
|
+
|
3
|
+
As a writer of documentation
|
4
|
+
I want taggable elements to not have duplicate of tags
|
5
|
+
So that redundancy is minimized
|
6
|
+
|
7
|
+
|
8
|
+
Scenario: Linting
|
9
|
+
|
10
|
+
Note: Also works on outlines, features, and examples
|
11
|
+
|
12
|
+
Given a linter for elements with duplicate tags
|
13
|
+
And the following feature:
|
14
|
+
"""
|
15
|
+
Feature:
|
16
|
+
|
17
|
+
@same_tag @a_different_tag @same_tag
|
18
|
+
Scenario:
|
19
|
+
* a step
|
20
|
+
"""
|
21
|
+
When it is linted
|
22
|
+
Then an error is reported:
|
23
|
+
| linter | problem | location |
|
24
|
+
| ElementWithDuplicateTagsLinter | Scenario has duplicate tag '@same_tag'. | <path_to_file>:4 |
|
25
|
+
|
26
|
+
|
27
|
+
Scenario: Configuration of indirect tag inclusion (turned off)
|
28
|
+
|
29
|
+
Note: Tags inherited from other elements are not included by default
|
30
|
+
|
31
|
+
Given a linter for elements with duplicate tags has been registered
|
32
|
+
And the following configuration file:
|
33
|
+
"""
|
34
|
+
ElementWithDuplicateTagsLinter:
|
35
|
+
IncludeInheritedTags: false
|
36
|
+
"""
|
37
|
+
And the following feature:
|
38
|
+
"""
|
39
|
+
@same_tag
|
40
|
+
Feature:
|
41
|
+
|
42
|
+
@same_tag
|
43
|
+
Scenario:
|
44
|
+
* a step
|
45
|
+
"""
|
46
|
+
When the configuration file is loaded
|
47
|
+
And it is linted
|
48
|
+
Then no error is reported
|
49
|
+
|
50
|
+
|
51
|
+
Scenario: Configuration of indirect tag inclusion (turned on)
|
52
|
+
Given a linter for elements with duplicate tags has been registered
|
53
|
+
And the following configuration file:
|
54
|
+
"""
|
55
|
+
ElementWithDuplicateTagsLinter:
|
56
|
+
IncludeInheritedTags: true
|
57
|
+
"""
|
58
|
+
And the following feature:
|
59
|
+
"""
|
60
|
+
@same_tag
|
61
|
+
Feature:
|
62
|
+
|
63
|
+
@same_tag
|
64
|
+
Scenario:
|
65
|
+
* a step
|
66
|
+
"""
|
67
|
+
When the configuration file is loaded
|
68
|
+
And it is linted
|
69
|
+
Then an error is reported:
|
70
|
+
| linter | problem | location |
|
71
|
+
| ElementWithDuplicateTagsLinter | Scenario has duplicate tag '@same_tag'. | <path_to_file>:5 |
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: Feature file with mismatched name linter
|
2
|
+
|
3
|
+
As a reader of documentation
|
4
|
+
I want file names to match their features
|
5
|
+
so that I can tell what a file is about by reading the name
|
6
|
+
|
7
|
+
Scenario: Linting files with mismatched names
|
8
|
+
Given a feature file model based on the file "some_name" with the following text:
|
9
|
+
"""
|
10
|
+
Feature: Some different name
|
11
|
+
"""
|
12
|
+
And a linter for features with mismatched file names
|
13
|
+
When it is linted
|
14
|
+
Then an error is reported:
|
15
|
+
| linter | problem | location |
|
16
|
+
| FeatureFileWithMismatchedNameLinter | Feature file name does not match feature name. | <path_to_file> |
|
17
|
+
|
18
|
+
Scenario Outline: Linting files with matching names
|
19
|
+
Given a feature file model based on the file "<file name>" with the following text:
|
20
|
+
"""
|
21
|
+
Feature: <feature name>
|
22
|
+
"""
|
23
|
+
And a linter for features with mismatched file names
|
24
|
+
When it is linted
|
25
|
+
Then no error is reported
|
26
|
+
|
27
|
+
Examples:
|
28
|
+
| file name | feature name |
|
29
|
+
| name_with_underscores | Name with_underscores |
|
30
|
+
| name with spaces | Name with spaces |
|
31
|
+
| NameWithCaps | Name with Caps |
|
32
|
+
| name-with-hyphens | Name with-hyphens |
|