cuke_linter 1.2.1 → 1.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -1
- data/LICENSE.txt +1 -1
- data/README.md +1 -1
- data/lib/cuke_linter/default_linters.rb +1 -1
- data/lib/cuke_linter/linters/background_does_more_than_setup_linter.rb +0 -1
- data/lib/cuke_linter/linters/element_with_common_tags_linter.rb +0 -1
- data/lib/cuke_linter/linters/element_with_duplicate_tags_linter.rb +0 -1
- data/lib/cuke_linter/linters/element_with_too_many_tags_linter.rb +0 -1
- data/lib/cuke_linter/linters/example_without_name_linter.rb +0 -1
- data/lib/cuke_linter/linters/feature_file_with_invalid_name_linter.rb +0 -1
- data/lib/cuke_linter/linters/feature_file_with_mismatched_name_linter.rb +0 -1
- data/lib/cuke_linter/linters/feature_with_too_many_different_tags_linter.rb +0 -1
- data/lib/cuke_linter/linters/feature_without_description_linter.rb +0 -1
- data/lib/cuke_linter/linters/feature_without_name_linter.rb +0 -1
- data/lib/cuke_linter/linters/feature_without_scenarios_linter.rb +6 -3
- data/lib/cuke_linter/linters/linter.rb +0 -1
- data/lib/cuke_linter/linters/outline_with_single_example_row_linter.rb +0 -1
- data/lib/cuke_linter/linters/single_test_background_linter.rb +0 -1
- data/lib/cuke_linter/linters/step_with_end_period_linter.rb +0 -1
- data/lib/cuke_linter/linters/step_with_too_many_characters_linter.rb +0 -1
- data/lib/cuke_linter/linters/test_name_with_too_many_characters_linter.rb +38 -0
- data/lib/cuke_linter/linters/test_should_use_background_linter.rb +2 -2
- data/lib/cuke_linter/linters/test_with_action_step_as_final_step_linter.rb +0 -1
- data/lib/cuke_linter/linters/test_with_bad_name_linter.rb +0 -1
- data/lib/cuke_linter/linters/test_with_no_action_step_linter.rb +0 -1
- data/lib/cuke_linter/linters/test_with_no_name_linter.rb +0 -1
- data/lib/cuke_linter/linters/test_with_no_verification_step_linter.rb +0 -1
- data/lib/cuke_linter/linters/test_with_setup_step_after_action_step_linter.rb +0 -1
- data/lib/cuke_linter/linters/test_with_setup_step_after_verification_step_linter.rb +0 -1
- data/lib/cuke_linter/linters/test_with_setup_step_as_final_step_linter.rb +0 -1
- data/lib/cuke_linter/linters/test_with_too_many_steps_linter.rb +0 -1
- data/lib/cuke_linter/version.rb +1 -1
- data/lib/cuke_linter.rb +1 -3
- data/testing/cucumber/features/linters/feature_without_scenarios.feature +23 -1
- data/testing/cucumber/features/linters/rule_without_name.feature +18 -0
- data/testing/cucumber/features/linters/test_name_too_long.feature +41 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c131f0cd2c39b7ca961f791d36057e5bb502a58642b81a87f0e5ced67fca7e30
|
4
|
+
data.tar.gz: 131411ade0634a8a03813996cab553303f78d28208d015302089400af07bb6e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d6ed6d47f19beefe74c57865171d6cfc0ccf8770ef648dd7103ff4c4fc183a621dc24fc53cb6d3ab9b6adb1e713b6f871d1c782d2514f1c301dc5590b9d8bb8
|
7
|
+
data.tar.gz: 1b8d2841790e2f48351f01ae3af0c230256ec3b2a020317469b46bd1f7279d055963f6c050f1889e08482f592af9f4fa853b1f82e10eb4fe81254fa8c2faecde
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
8
8
|
|
9
9
|
Nothing yet...
|
10
10
|
|
11
|
+
## [1.3.0] - 2022-05-23
|
12
|
+
|
13
|
+
### Added
|
14
|
+
- New linters
|
15
|
+
- TestNameWithTooManyCharactersLinter
|
16
|
+
|
17
|
+
- Linters that are impacted by `Rule` elements in Gherkin have been updated, now that Rules models are available
|
18
|
+
in CukeModeler
|
19
|
+
- FeatureWithoutScenariosLinter
|
20
|
+
|
11
21
|
## [1.2.1] - 2021-06-13
|
12
22
|
|
13
23
|
### Fixed
|
@@ -176,7 +186,8 @@ Nothing yet...
|
|
176
186
|
- Custom linters, formatters, and command line usability
|
177
187
|
|
178
188
|
|
179
|
-
[Unreleased]: https://github.com/enkessler/cuke_linter/compare/v1.
|
189
|
+
[Unreleased]: https://github.com/enkessler/cuke_linter/compare/v1.3.0...HEAD
|
190
|
+
[1.3.0]: https://github.com/enkessler/cuke_linter/compare/v1.2.1...v1.3.0
|
180
191
|
[1.2.1]: https://github.com/enkessler/cuke_linter/compare/v1.2.0...v1.2.1
|
181
192
|
[1.2.0]: https://github.com/enkessler/cuke_linter/compare/v1.1.0...v1.2.0
|
182
193
|
[1.1.0]: https://github.com/enkessler/cuke_linter/compare/v1.0.1...v1.1.0
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -148,7 +148,7 @@ Rather than using the default linters or providing a custom set of of modified l
|
|
148
148
|
|
149
149
|
### <a id="documentation"></a>Everything Else
|
150
150
|
|
151
|
-
For more detailed examples of usage, see the documentation [here](https://
|
151
|
+
For more detailed examples of usage, see the documentation [here](https://github.com/enkessler/cuke_linter/tree/master/testing/cucumber/features).
|
152
152
|
|
153
153
|
## Development and Contributing
|
154
154
|
|
@@ -1,14 +1,17 @@
|
|
1
1
|
module CukeLinter
|
2
2
|
|
3
3
|
# A linter that detects empty features
|
4
|
-
|
5
4
|
class FeatureWithoutScenariosLinter < Linter
|
6
5
|
|
7
6
|
# The rule used to determine if a model has a problem
|
8
|
-
def rule(model)
|
7
|
+
def rule(model) # rubocop:disable Metrics/CyclomaticComplexity # It's good enough
|
9
8
|
return false unless model.is_a?(CukeModeler::Feature)
|
10
9
|
|
11
|
-
model.tests
|
10
|
+
feature_tests = model.tests && model.tests.any?
|
11
|
+
rule_tests = model.respond_to?(:rules) && # Earlier versions of CukeModeler did not have Rule models
|
12
|
+
model.rules && model.rules.any? { |rule| rule.tests && rule.tests.any? }
|
13
|
+
|
14
|
+
!(feature_tests || rule_tests)
|
12
15
|
end
|
13
16
|
|
14
17
|
# The message used to describe the problem that has been found
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module CukeLinter
|
2
|
+
|
3
|
+
# A linter that detects test names that are too long
|
4
|
+
class TestNameWithTooManyCharactersLinter < Linter
|
5
|
+
|
6
|
+
# The threshold used if not otherwise configured
|
7
|
+
DEFAULT_TEST_NAME_LENGTH_THRESHOLD = 80
|
8
|
+
|
9
|
+
# Changes the linting settings on the linter using the provided configuration
|
10
|
+
def configure(options)
|
11
|
+
@test_name_length_threshold = options['TestNameLengthThreshold'] if options['TestNameLengthThreshold']
|
12
|
+
end
|
13
|
+
|
14
|
+
# The rule used to determine if a model has a problem
|
15
|
+
def rule(model)
|
16
|
+
return false unless model.is_a?(CukeModeler::Scenario) || model.is_a?(CukeModeler::Outline)
|
17
|
+
|
18
|
+
@linted_test_name_length = model.name.nil? ? 0 : model.name.length
|
19
|
+
|
20
|
+
@linted_test_name_length > test_name_length_threshold
|
21
|
+
end
|
22
|
+
|
23
|
+
# The message used to describe the problem that has been found
|
24
|
+
def message
|
25
|
+
"Scenario name is too long. #{@linted_test_name_length} characters found (max #{test_name_length_threshold})"
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
|
32
|
+
# The maximum length allowable of a scenario name
|
33
|
+
def test_name_length_threshold
|
34
|
+
@test_name_length_threshold || DEFAULT_TEST_NAME_LENGTH_THRESHOLD
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
|
+
# TODO: Make a new class that it is from the POV of a Feature model instead
|
2
|
+
|
1
3
|
module CukeLinter
|
2
4
|
|
3
|
-
# TODO: Make a new class that it is from the POV of a Feature model instead
|
4
5
|
# A linter that detects scenarios and outlines within a feature that all share common beginning steps
|
5
|
-
|
6
6
|
class TestShouldUseBackgroundLinter < Linter
|
7
7
|
|
8
8
|
# The rule used to determine if a model has a problem
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module CukeLinter
|
2
2
|
|
3
3
|
# A linter that detects scenarios and outlines that have a setup step that comes after a verification step
|
4
|
-
|
5
4
|
class TestWithSetupStepAfterVerificationStepLinter < Linter
|
6
5
|
|
7
6
|
# Changes the linting settings on the linter using the provided configuration
|
data/lib/cuke_linter/version.rb
CHANGED
data/lib/cuke_linter.rb
CHANGED
@@ -19,6 +19,7 @@ require 'cuke_linter/linters/outline_with_single_example_row_linter'
|
|
19
19
|
require 'cuke_linter/linters/single_test_background_linter'
|
20
20
|
require 'cuke_linter/linters/step_with_end_period_linter'
|
21
21
|
require 'cuke_linter/linters/step_with_too_many_characters_linter'
|
22
|
+
require 'cuke_linter/linters/test_name_with_too_many_characters_linter'
|
22
23
|
require 'cuke_linter/linters/test_should_use_background_linter'
|
23
24
|
require 'cuke_linter/linters/test_with_action_step_as_final_step_linter'
|
24
25
|
require 'cuke_linter/linters/test_with_bad_name_linter'
|
@@ -164,9 +165,6 @@ module CukeLinter
|
|
164
165
|
def dynamic_linters
|
165
166
|
# No need to keep making new ones over and over...
|
166
167
|
@dynamic_linters ||= Hash.new { |hash, key| hash[key] = key.new }
|
167
|
-
# return @dynamic_linters if @dynamic_linters
|
168
|
-
#
|
169
|
-
# @dynamic_linters = {}
|
170
168
|
end
|
171
169
|
|
172
170
|
def format_data(formatters, linting_data)
|
@@ -5,7 +5,7 @@ Feature: Feature without scenarios linter
|
|
5
5
|
So that I do not have incomplete documentation
|
6
6
|
|
7
7
|
|
8
|
-
Scenario: Linting
|
8
|
+
Scenario: Linting (Bad)
|
9
9
|
Given a linter for features without scenarios
|
10
10
|
And the following feature:
|
11
11
|
"""
|
@@ -15,3 +15,25 @@ Feature: Feature without scenarios linter
|
|
15
15
|
Then an error is reported:
|
16
16
|
| linter | problem | location |
|
17
17
|
| FeatureWithoutScenariosLinter | Feature has no scenarios | <path_to_file>:1 |
|
18
|
+
|
19
|
+
Scenario: Linting (Good)
|
20
|
+
Given a linter for features without scenarios
|
21
|
+
And the following feature:
|
22
|
+
"""
|
23
|
+
Feature:
|
24
|
+
Scenario:
|
25
|
+
"""
|
26
|
+
When it is linted
|
27
|
+
Then no error is reported
|
28
|
+
|
29
|
+
@cuke_modeler_min_version_3
|
30
|
+
Scenario: Linting (Good, with Rules)
|
31
|
+
Given a linter for features without scenarios
|
32
|
+
And the following feature:
|
33
|
+
"""
|
34
|
+
Feature:
|
35
|
+
Rule:
|
36
|
+
Scenario:
|
37
|
+
"""
|
38
|
+
When it is linted
|
39
|
+
Then no error is reported
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Feature: Feature without name linter
|
2
|
+
|
3
|
+
As a reader of documentation
|
4
|
+
I want every feature to have a name
|
5
|
+
So that I can get an idea of what the feature is about without having to read every use case
|
6
|
+
|
7
|
+
|
8
|
+
Scenario: Linting
|
9
|
+
Given a linter for features without a name
|
10
|
+
And the following feature:
|
11
|
+
"""
|
12
|
+
Feature:
|
13
|
+
This feature does not have a name
|
14
|
+
"""
|
15
|
+
When it is linted
|
16
|
+
Then an error is reported:
|
17
|
+
| linter | problem | location |
|
18
|
+
| FeatureWithoutNameLinter | Feature does not have a name. | <path_to_file>:1 |
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: Scenario name with too many characters
|
2
|
+
|
3
|
+
As a reader of documentation
|
4
|
+
I want test names not to be unduly long
|
5
|
+
So that I can easily understand its purpose
|
6
|
+
|
7
|
+
|
8
|
+
Scenario: Linter
|
9
|
+
|
10
|
+
Given a linter for test names with too many characters
|
11
|
+
And the following feature:
|
12
|
+
"""
|
13
|
+
Feature:
|
14
|
+
|
15
|
+
Scenario: tea exists and teapots exist and so do cups and saucers and there might be milk in the milk jug together with sugar cubes
|
16
|
+
"""
|
17
|
+
When it is linted
|
18
|
+
Then an error is reported:
|
19
|
+
| linter | problem | location |
|
20
|
+
| TestNameWithTooManyCharactersLinter | Scenario name is too long. 121 characters found (max 80) | <path_to_file>:3 |
|
21
|
+
|
22
|
+
|
23
|
+
Scenario: Configuration of test name count threshold
|
24
|
+
|
25
|
+
Given a linter for test names with too many characters has been registered
|
26
|
+
And the following configuration file:
|
27
|
+
"""
|
28
|
+
TestNameWithTooManyCharactersLinter:
|
29
|
+
TestNameLengthThreshold: 30
|
30
|
+
"""
|
31
|
+
And the following feature:
|
32
|
+
"""
|
33
|
+
Feature:
|
34
|
+
|
35
|
+
Scenario: This scenario name is way too long so it would be better to shorten it somehow, please do so
|
36
|
+
"""
|
37
|
+
When the configuration file is loaded
|
38
|
+
And the feature is linted
|
39
|
+
Then an error is reported:
|
40
|
+
| linter | problem | location |
|
41
|
+
| TestNameWithTooManyCharactersLinter | Scenario name is too long. 92 characters found (max 30) | <path_to_file>:3 |
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cuke_linter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Kessler
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cuke_modeler
|
@@ -269,6 +269,7 @@ files:
|
|
269
269
|
- lib/cuke_linter/linters/single_test_background_linter.rb
|
270
270
|
- lib/cuke_linter/linters/step_with_end_period_linter.rb
|
271
271
|
- lib/cuke_linter/linters/step_with_too_many_characters_linter.rb
|
272
|
+
- lib/cuke_linter/linters/test_name_with_too_many_characters_linter.rb
|
272
273
|
- lib/cuke_linter/linters/test_should_use_background_linter.rb
|
273
274
|
- lib/cuke_linter/linters/test_with_action_step_as_final_step_linter.rb
|
274
275
|
- lib/cuke_linter/linters/test_with_bad_name_linter.rb
|
@@ -299,9 +300,11 @@ files:
|
|
299
300
|
- testing/cucumber/features/linters/feature_without_name.feature
|
300
301
|
- testing/cucumber/features/linters/feature_without_scenarios.feature
|
301
302
|
- testing/cucumber/features/linters/outline_with_single_example_row.feature
|
303
|
+
- testing/cucumber/features/linters/rule_without_name.feature
|
302
304
|
- testing/cucumber/features/linters/single_test_background.feature
|
303
305
|
- testing/cucumber/features/linters/step_too_long.feature
|
304
306
|
- testing/cucumber/features/linters/step_with_end_period.feature
|
307
|
+
- testing/cucumber/features/linters/test_name_too_long.feature
|
305
308
|
- testing/cucumber/features/linters/test_should_use_background.feature
|
306
309
|
- testing/cucumber/features/linters/test_with_action_as_final_step.feature
|
307
310
|
- testing/cucumber/features/linters/test_with_bad_name.feature
|