Skip to content

Commit b7a2fe2

Browse files
authored
Merge pull request #2 from github/kh-add_disable_rule_test
Add test coverage for custom helpers
2 parents 3e3f59d + 4063825 commit b7a2fe2

File tree

4 files changed

+109
-2
lines changed

4 files changed

+109
-2
lines changed

lib/erblint-github/linters/custom_helpers.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def rule_disabled?(processed_source)
1111
indicator_node, _, code_node, = *node
1212
indicator = indicator_node&.loc&.source
1313
comment = code_node&.loc&.source&.strip
14-
rule_name = self.class.name.match(/:?:?(\w+)\Z/)[1]
14+
rule_name = self.class.name.gsub("ERBLint::Linters::", "")
1515

1616
if indicator == "#" && comment.start_with?("erblint:disable") && comment.match(rule_name)
1717
if @offenses.any?

test/custom_helpers_test.rb

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# frozen_string_literal: true
2+
3+
require "test_helper"
4+
require "erblint-github/linters/custom_helpers"
5+
6+
class CustomHelpersTest < LinterTestCase
7+
include ERBLint::Linters::CustomHelpers
8+
9+
class FakeLinter < ERBLint::Linter
10+
attr_accessor :offenses
11+
12+
MESSAGE = "Please fix your code."
13+
end
14+
15+
def linter_class
16+
CustomHelpersTest::FakeLinter
17+
end
18+
19+
def extended_linter
20+
@linter.extend(ERBLint::Linters::CustomHelpers)
21+
end
22+
23+
def test_rule_disabled_clears_offenses_if_rule_is_disabled
24+
@file = <<~HTML
25+
<%# erblint:disable CustomHelpersTest::FakeLinter %>
26+
HTML
27+
@linter.offenses = ["fake offense"]
28+
assert_equal @linter.offenses.length, 1
29+
30+
extended_linter.rule_disabled?(processed_source)
31+
assert_empty @linter.offenses
32+
end
33+
34+
def test_rule_disabled_adds_offense_if_disable_comment_is_present_but_no_offense
35+
@file = <<~HTML
36+
<%# erblint:disable CustomHelpersTest::FakeLinter %>
37+
HTML
38+
assert_empty @linter.offenses
39+
40+
extended_linter.rule_disabled?(processed_source)
41+
42+
assert_equal @linter.offenses.length, 1
43+
end
44+
45+
def test_generate_offense_with_message_defined_in_linter_class
46+
@file = <<~HTML
47+
<%# erblint:disable CustomHelpersTest::FakeLinter %>
48+
<div id="fake-div-id">Hello.</div>
49+
HTML
50+
assert_empty @linter.offenses
51+
52+
tag = extended_linter.tags(processed_source).first
53+
extended_linter.generate_offense(CustomHelpersTest::FakeLinter, processed_source, tag)
54+
55+
assert_equal @linter.offenses.length, 1
56+
assert_match CustomHelpersTest::FakeLinter::MESSAGE, @linter.offenses.first.message
57+
end
58+
59+
def test_generate_offense_with_message_passed_in_as_parameter
60+
@file = <<~HTML
61+
<div id="fake-div-id">Hello.</div>
62+
HTML
63+
assert_empty @linter.offenses
64+
65+
tag = extended_linter.tags(processed_source).first
66+
extended_linter.generate_offense(CustomHelpersTest::FakeLinter, processed_source, tag, "bad!")
67+
68+
assert_equal @linter.offenses.length, 1
69+
assert_match(/bad!/, @linter.offenses.first.message)
70+
end
71+
72+
def test_possible_attribute_values_returns_attribute_value_matches
73+
@file = <<~HTML
74+
<img alt="mona lisa">
75+
<button type="button"></button>
76+
<a></a>
77+
HTML
78+
79+
image_tag = extended_linter.tags(processed_source).first
80+
image_tag_alt_values = extended_linter.possible_attribute_values(image_tag, "alt")
81+
assert_equal image_tag_alt_values, ["mona lisa"]
82+
83+
button_tag = extended_linter.tags(processed_source)[1]
84+
button_tag_type_values = extended_linter.possible_attribute_values(button_tag, "type")
85+
assert_equal button_tag_type_values, ["button"]
86+
end
87+
88+
def test_possible_attribute_values_returns_empty_array_if_no_attribute_value_matches
89+
@file = <<~HTML
90+
<a></a>
91+
HTML
92+
93+
anchor_tag = extended_linter.tags(processed_source).first
94+
possible_attribute_values = extended_linter.possible_attribute_values(anchor_tag, "href")
95+
assert_equal possible_attribute_values, []
96+
end
97+
end

test/linters/accessibility/no_redundant_image_alt_test.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# frozen_string_literal: true
22

33
require "test_helper"
4-
require "erblint-github/linters/github/accessibility/no_redundant_image_alt"
54

65
class NoRedundantImageAltTest < LinterTestCase
76
def linter_class
@@ -28,4 +27,14 @@ def test_does_not_warn_if_alt_contains_no_redundant_text
2827

2928
assert_empty @linter.offenses
3029
end
30+
31+
def test_does_not_warn_if_linter_is_disabled_in_file
32+
@file = <<~HTML
33+
<%# erblint:disable GitHub::Accessibility::NoRedundantImageAlt %>
34+
<img alt='image of an octopus'></img>
35+
HTML
36+
37+
@linter.run(processed_source)
38+
assert_empty @linter.offenses
39+
end
3140
end

test/test_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
require "minitest/autorun"
88
require "mocha/minitest"
99
require "linter_test_case"
10+
require "erblint-github/linters"

0 commit comments

Comments
 (0)