gherkin_lint 0.6.3 → 1.0.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/.gitignore +4 -0
- data/.rubocop.yml +19 -1
- data/Dockerfile +2 -0
- data/Gemfile +3 -2
- data/README.md +24 -2
- data/Rakefile +3 -3
- data/bin/gherkin_lint +10 -2
- data/config/default.yml +58 -0
- data/features/avoid_outline_for_single_example.feature +2 -1
- data/features/avoid_period.feature +1 -1
- data/features/avoid_scripting.feature +1 -1
- data/features/background_does_more_than_setup.feature +1 -1
- data/features/background_requires_scenario.feature +1 -1
- data/features/bad_scenario_name.feature +1 -1
- data/features/be_declarative.feature +1 -1
- data/features/disable_tags.feature +1 -2
- data/features/file_name_differs_feature_name.feature +2 -2
- data/features/invalid_file_name.feature +1 -1
- data/features/invalid_step_flow.feature +1 -1
- data/features/missing_example_name.feature +1 -2
- data/features/missing_feature_description.feature +1 -1
- data/features/missing_feature_name.feature +1 -1
- data/features/missing_scenario_name.feature +1 -1
- data/features/missing_test_action.feature +1 -2
- data/features/missing_verification.feature +1 -2
- data/features/precedence.feature +72 -0
- data/features/required_tags_starts_with.feature +95 -0
- data/features/same_tag_for_all_scenarios.feature +1 -5
- data/features/support/env.rb +72 -0
- data/features/tag_used_multiple_times.feature +1 -1
- data/features/too_clumsy.feature +1 -1
- data/features/too_long_step.feature +1 -1
- data/features/too_many_different_tags.feature +1 -1
- data/features/too_many_steps.feature +1 -1
- data/features/too_many_tags.feature +1 -1
- data/features/unique_scenario_names.feature +1 -1
- data/features/unknown_variable.feature +1 -1
- data/features/unused_variable.feature +1 -1
- data/features/use_background.feature +1 -2
- data/features/use_outline.feature +1 -2
- data/gherkin_lint.gemspec +3 -3
- data/lib/gherkin_lint.rb +44 -51
- data/lib/gherkin_lint/configuration.rb +32 -0
- data/lib/gherkin_lint/issue.rb +1 -1
- data/lib/gherkin_lint/linter.rb +6 -10
- data/lib/gherkin_lint/linter/avoid_scripting.rb +1 -1
- data/lib/gherkin_lint/linter/background_requires_multiple_scenarios.rb +1 -1
- data/lib/gherkin_lint/linter/bad_scenario_name.rb +1 -1
- data/lib/gherkin_lint/linter/be_declarative.rb +10 -8
- data/lib/gherkin_lint/linter/required_tags_starts_with.rb +16 -0
- data/lib/gherkin_lint/linter/tag_collector.rb +9 -0
- data/lib/gherkin_lint/linter/tag_constraint.rb +32 -0
- data/lib/gherkin_lint/linter/too_many_different_tags.rb +3 -0
- data/lib/gherkin_lint/linter/too_many_tags.rb +3 -0
- data/spec/configuration_spec.rb +58 -0
- data/spec/gherkin_lint_spec.rb +68 -0
- data/spec/required_tags_starts_with_spec.rb +74 -0
- data/spec/shared_contexts/file_exists.rb +12 -0
- data/spec/shared_contexts/gherkin_linter.rb +14 -0
- metadata +18 -3
@@ -11,6 +11,7 @@ Feature: Missing Feature Name
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(MissingFeatureName)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -37,5 +38,4 @@ Feature: Missing Feature Name
|
|
37
38
|
When I run `ruby lint.rb`
|
38
39
|
Then it should pass with exactly:
|
39
40
|
"""
|
40
|
-
|
41
41
|
"""
|
@@ -11,6 +11,7 @@ Feature: Missing Scenario Name
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(MissingScenarioName)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -53,5 +54,4 @@ Feature: Missing Scenario Name
|
|
53
54
|
When I run `ruby lint.rb`
|
54
55
|
Then it should pass with exactly:
|
55
56
|
"""
|
56
|
-
|
57
57
|
"""
|
@@ -11,6 +11,7 @@ Feature: Missing Test Action
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(MissingTestAction)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -44,7 +45,6 @@ Feature: Missing Test Action
|
|
44
45
|
When I run `ruby lint.rb`
|
45
46
|
Then it should pass with exactly:
|
46
47
|
"""
|
47
|
-
|
48
48
|
"""
|
49
49
|
|
50
50
|
Scenario: Empty Scenario
|
@@ -56,5 +56,4 @@ Feature: Missing Test Action
|
|
56
56
|
When I run `ruby lint.rb`
|
57
57
|
Then it should pass with exactly:
|
58
58
|
"""
|
59
|
-
|
60
59
|
"""
|
@@ -11,6 +11,7 @@ Feature: Missing Verification
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(MissingVerification)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -44,7 +45,6 @@ Feature: Missing Verification
|
|
44
45
|
When I run `ruby lint.rb`
|
45
46
|
Then it should pass with exactly:
|
46
47
|
"""
|
47
|
-
|
48
48
|
"""
|
49
49
|
|
50
50
|
Scenario: Empty Scenario
|
@@ -56,5 +56,4 @@ Feature: Missing Verification
|
|
56
56
|
When I run `ruby lint.rb`
|
57
57
|
Then it should pass with exactly:
|
58
58
|
"""
|
59
|
-
|
60
59
|
"""
|
@@ -0,0 +1,72 @@
|
|
1
|
+
Feature: Precedence
|
2
|
+
As a User
|
3
|
+
I want to be able to turn linters of and on with configuration and CLI
|
4
|
+
so that it's easier to enable and disable linters
|
5
|
+
|
6
|
+
Scenario: Disable With local override
|
7
|
+
Given a file named "lint.rb" with:
|
8
|
+
"""
|
9
|
+
$LOAD_PATH << '../../lib'
|
10
|
+
require 'gherkin_lint'
|
11
|
+
|
12
|
+
linter = GherkinLint::GherkinLint.new
|
13
|
+
linter.set_linter
|
14
|
+
linter.analyze 'lint.feature'
|
15
|
+
exit linter.report
|
16
|
+
|
17
|
+
"""
|
18
|
+
And a file named ".gherkin_lint.yml" with:
|
19
|
+
"""
|
20
|
+
---
|
21
|
+
AvoidPeriod:
|
22
|
+
Enabled: false
|
23
|
+
"""
|
24
|
+
And a file named "lint.feature" with:
|
25
|
+
"""
|
26
|
+
Feature: Lint
|
27
|
+
A User can test a feature
|
28
|
+
Scenario: A
|
29
|
+
Given this is a setup
|
30
|
+
When I run the test
|
31
|
+
Then I see the verification.
|
32
|
+
"""
|
33
|
+
When I run `ruby lint.rb`
|
34
|
+
Then it should pass with exactly:
|
35
|
+
"""
|
36
|
+
"""
|
37
|
+
|
38
|
+
Scenario: Disable on local, Enable on CLI
|
39
|
+
Given a file named "lint.rb" with:
|
40
|
+
"""
|
41
|
+
$LOAD_PATH << '../../lib'
|
42
|
+
require 'gherkin_lint'
|
43
|
+
|
44
|
+
linter = GherkinLint::GherkinLint.new
|
45
|
+
linter.enable %w(AvoidPeriod)
|
46
|
+
linter.set_linter
|
47
|
+
linter.analyze 'lint.feature'
|
48
|
+
exit linter.report
|
49
|
+
|
50
|
+
"""
|
51
|
+
And a file named ".gherkin_lint.yml" with:
|
52
|
+
"""
|
53
|
+
---
|
54
|
+
AvoidPeriod:
|
55
|
+
Enabled: false
|
56
|
+
"""
|
57
|
+
And a file named "lint.feature" with:
|
58
|
+
"""
|
59
|
+
Feature: Lint
|
60
|
+
A User can test a feature
|
61
|
+
Scenario: A
|
62
|
+
Given this is a setup
|
63
|
+
When I run the test
|
64
|
+
Then I see the verification.
|
65
|
+
"""
|
66
|
+
When I run `ruby lint.rb`
|
67
|
+
Then it should fail with exactly:
|
68
|
+
"""
|
69
|
+
AvoidPeriod
|
70
|
+
lint.feature (6): Lint.A step: I see the verification.
|
71
|
+
|
72
|
+
"""
|
@@ -0,0 +1,95 @@
|
|
1
|
+
Feature: Required Tags Starts With
|
2
|
+
As a tester I dont want to miss certain tags on my scenarios
|
3
|
+
|
4
|
+
Background: Prepare Testee
|
5
|
+
Given a file named ".gherkin_lint.yml" with:
|
6
|
+
"""
|
7
|
+
---
|
8
|
+
RequiredTagsStartsWith:
|
9
|
+
Enabled: true
|
10
|
+
Matcher: ['PB','MCC']
|
11
|
+
"""
|
12
|
+
And a file named "lint.rb" with:
|
13
|
+
"""
|
14
|
+
$LOAD_PATH << '../../lib'
|
15
|
+
require 'gherkin_lint'
|
16
|
+
|
17
|
+
linter = GherkinLint::GherkinLint.new
|
18
|
+
linter.disable_all
|
19
|
+
linter.enable %w(RequiredTagsStartsWith)
|
20
|
+
linter.set_linter
|
21
|
+
linter.analyze 'lint.feature'
|
22
|
+
exit linter.report
|
23
|
+
|
24
|
+
"""
|
25
|
+
Scenario: Scenario without required tags
|
26
|
+
Given a file named "lint.feature" with:
|
27
|
+
"""
|
28
|
+
Feature: Test
|
29
|
+
Scenario: A
|
30
|
+
When action
|
31
|
+
Then verification
|
32
|
+
"""
|
33
|
+
When I run `ruby lint.rb`
|
34
|
+
Then it should fail with exactly:
|
35
|
+
"""
|
36
|
+
RequiredTagsStartsWith - Required Tag not found
|
37
|
+
lint.feature (2): Test.A
|
38
|
+
|
39
|
+
"""
|
40
|
+
|
41
|
+
Scenario: Scenario with PB Feature Tag
|
42
|
+
Given a file named "lint.feature" with:
|
43
|
+
"""
|
44
|
+
@PB-1234
|
45
|
+
Feature: Test
|
46
|
+
Scenario: A
|
47
|
+
When action
|
48
|
+
Then verification
|
49
|
+
"""
|
50
|
+
When I run `ruby lint.rb`
|
51
|
+
Then it should pass with exactly:
|
52
|
+
"""
|
53
|
+
"""
|
54
|
+
|
55
|
+
Scenario: Scenario with MCC feature tag
|
56
|
+
Given a file named "lint.feature" with:
|
57
|
+
"""
|
58
|
+
@MCC-1234
|
59
|
+
Feature: Test
|
60
|
+
Scenario: A
|
61
|
+
When action
|
62
|
+
Then verification
|
63
|
+
"""
|
64
|
+
When I run `ruby lint.rb`
|
65
|
+
Then it should pass with exactly:
|
66
|
+
"""
|
67
|
+
"""
|
68
|
+
|
69
|
+
Scenario: Scenario with PR Scenario tag
|
70
|
+
Given a file named "lint.feature" with:
|
71
|
+
"""
|
72
|
+
Feature: Test
|
73
|
+
@PB-1234
|
74
|
+
Scenario: A
|
75
|
+
When action
|
76
|
+
Then verification
|
77
|
+
"""
|
78
|
+
When I run `ruby lint.rb`
|
79
|
+
Then it should pass with exactly:
|
80
|
+
"""
|
81
|
+
"""
|
82
|
+
|
83
|
+
Scenario: Scenario with MCC tags
|
84
|
+
Given a file named "lint.feature" with:
|
85
|
+
"""
|
86
|
+
Feature: Test
|
87
|
+
@MCC-1234
|
88
|
+
Scenario: A
|
89
|
+
When action
|
90
|
+
Then verification
|
91
|
+
"""
|
92
|
+
When I run `ruby lint.rb`
|
93
|
+
Then it should pass with exactly:
|
94
|
+
"""
|
95
|
+
"""
|
@@ -11,6 +11,7 @@ Feature: Same Tag For All Scenarios
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(SameTagForAllScenarios)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -70,7 +71,6 @@ Feature: Same Tag For All Scenarios
|
|
70
71
|
When I run `ruby lint.rb`
|
71
72
|
Then it should pass with exactly:
|
72
73
|
"""
|
73
|
-
|
74
74
|
"""
|
75
75
|
|
76
76
|
Scenario: Valid Example with different Tags
|
@@ -85,7 +85,6 @@ Feature: Same Tag For All Scenarios
|
|
85
85
|
When I run `ruby lint.rb`
|
86
86
|
Then it should pass with exactly:
|
87
87
|
"""
|
88
|
-
|
89
88
|
"""
|
90
89
|
|
91
90
|
Scenario: Valid Example with single Tag
|
@@ -100,7 +99,6 @@ Feature: Same Tag For All Scenarios
|
|
100
99
|
When I run `ruby lint.rb`
|
101
100
|
Then it should pass with exactly:
|
102
101
|
"""
|
103
|
-
|
104
102
|
"""
|
105
103
|
|
106
104
|
Scenario: Tags for features with single scenario
|
@@ -113,7 +111,6 @@ Feature: Same Tag For All Scenarios
|
|
113
111
|
When I run `ruby lint.rb`
|
114
112
|
Then it should pass with exactly:
|
115
113
|
"""
|
116
|
-
|
117
114
|
"""
|
118
115
|
|
119
116
|
Scenario: Outline even without Examples
|
@@ -129,5 +126,4 @@ Feature: Same Tag For All Scenarios
|
|
129
126
|
When I run `ruby lint.rb`
|
130
127
|
Then it should pass with exactly:
|
131
128
|
"""
|
132
|
-
|
133
129
|
"""
|
data/features/support/env.rb
CHANGED
@@ -3,3 +3,75 @@ require 'aruba/cucumber'
|
|
3
3
|
Before do
|
4
4
|
@aruba_timeout_seconds = 10 # too slow on sloppy machines
|
5
5
|
end
|
6
|
+
|
7
|
+
After do
|
8
|
+
FileUtils.rm_rf('tmp')
|
9
|
+
end
|
10
|
+
|
11
|
+
def disable_linters
|
12
|
+
<<-content
|
13
|
+
AvoidOutlineForSingleExample:
|
14
|
+
Enabled: false
|
15
|
+
AvoidPeriod:
|
16
|
+
Enabled: false
|
17
|
+
AvoidScripting:
|
18
|
+
Enabled: false
|
19
|
+
BackgroundDoesMoreThanSetup:
|
20
|
+
Enabled: false
|
21
|
+
BackgroundRequiresMultipleScenarios:
|
22
|
+
Enabled: false
|
23
|
+
BadScenarioName:
|
24
|
+
Enabled: false
|
25
|
+
BeDeclarative:
|
26
|
+
Enabled: false
|
27
|
+
FileNameDiffersFeatureName:
|
28
|
+
Enabled: false
|
29
|
+
MissingExampleName:
|
30
|
+
Enabled: false
|
31
|
+
MissingFeatureDescription:
|
32
|
+
Enabled: false
|
33
|
+
MissingFeatureName:
|
34
|
+
Enabled: false
|
35
|
+
MissingScenarioName:
|
36
|
+
Enabled: false
|
37
|
+
MissingTestAction:
|
38
|
+
Enabled: false
|
39
|
+
MissingVerification:
|
40
|
+
Enabled: false
|
41
|
+
InvalidFileName:
|
42
|
+
Enabled: false
|
43
|
+
InvalidStepFlow:
|
44
|
+
Enabled: false
|
45
|
+
RequiredTagsStartsWith:
|
46
|
+
Enabled: false
|
47
|
+
SameTagForAllScenarios:
|
48
|
+
Enabled: false
|
49
|
+
TagUsedMultipleTimes:
|
50
|
+
Enabled: false
|
51
|
+
TooClumsy:
|
52
|
+
Enabled: false
|
53
|
+
TooManyDifferentTags:
|
54
|
+
Enabled: false
|
55
|
+
TooManySteps:
|
56
|
+
Enabled: false
|
57
|
+
TooManyTags:
|
58
|
+
Enabled: false
|
59
|
+
TooLongStep:
|
60
|
+
Enabled: false
|
61
|
+
UniqueScenarioNames:
|
62
|
+
Enabled: false
|
63
|
+
UnknownVariable:
|
64
|
+
Enabled: false
|
65
|
+
UnusedVariable:
|
66
|
+
Enabled: false
|
67
|
+
UseBackground:
|
68
|
+
Enabled: false
|
69
|
+
UseOutline:
|
70
|
+
Enabled: false
|
71
|
+
content
|
72
|
+
end
|
73
|
+
|
74
|
+
Before do
|
75
|
+
Dir.pwd
|
76
|
+
File.open('tmp/aruba/.gherkin_lint.yml', 'w') { |f| f.write disable_linters }
|
77
|
+
end
|
@@ -11,6 +11,7 @@ Feature: Tag Used Multiple Times
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(TagUsedMultipleTimes)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -47,5 +48,4 @@ Feature: Tag Used Multiple Times
|
|
47
48
|
When I run `ruby lint.rb`
|
48
49
|
Then it should pass with exactly:
|
49
50
|
"""
|
50
|
-
|
51
51
|
"""
|
data/features/too_clumsy.feature
CHANGED
@@ -11,6 +11,7 @@ Feature: Too Clumsy
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(TooClumsy)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -53,5 +54,4 @@ Feature: Too Clumsy
|
|
53
54
|
When I run `ruby lint.rb`
|
54
55
|
Then it should pass with exactly:
|
55
56
|
"""
|
56
|
-
|
57
57
|
"""
|
@@ -11,6 +11,7 @@ Feature: Too Long Step
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(TooLongStep)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -43,5 +44,4 @@ Feature: Too Long Step
|
|
43
44
|
When I run `ruby lint.rb`
|
44
45
|
Then it should pass with exactly:
|
45
46
|
"""
|
46
|
-
|
47
47
|
"""
|
@@ -11,6 +11,7 @@ Feature: Too Many Different Tags
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(TooManyDifferentTags)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -59,5 +60,4 @@ Feature: Too Many Different Tags
|
|
59
60
|
When I run `ruby lint.rb`
|
60
61
|
Then it should pass with exactly:
|
61
62
|
"""
|
62
|
-
|
63
63
|
"""
|
@@ -11,6 +11,7 @@ Feature: Too Many Steps
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(TooManySteps)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -53,5 +54,4 @@ Feature: Too Many Steps
|
|
53
54
|
When I run `ruby lint.rb`
|
54
55
|
Then it should pass with exactly:
|
55
56
|
"""
|
56
|
-
|
57
57
|
"""
|
@@ -11,6 +11,7 @@ Feature: Too Many Tags
|
|
11
11
|
|
12
12
|
linter = GherkinLint::GherkinLint.new
|
13
13
|
linter.enable %w(TooManyTags)
|
14
|
+
linter.set_linter
|
14
15
|
linter.analyze 'lint.feature'
|
15
16
|
exit linter.report
|
16
17
|
|
@@ -43,5 +44,4 @@ Feature: Too Many Tags
|
|
43
44
|
When I run `ruby lint.rb`
|
44
45
|
Then it should pass with exactly:
|
45
46
|
"""
|
46
|
-
|
47
47
|
"""
|