diff --git a/lib/erblint-github/linters/custom_helpers.rb b/lib/erblint-github/linters/custom_helpers.rb
index 44f3e14..2621a71 100644
--- a/lib/erblint-github/linters/custom_helpers.rb
+++ b/lib/erblint-github/linters/custom_helpers.rb
@@ -11,7 +11,7 @@ def rule_disabled?(processed_source)
indicator_node, _, code_node, = *node
indicator = indicator_node&.loc&.source
comment = code_node&.loc&.source&.strip
- rule_name = self.class.name.match(/:?:?(\w+)\Z/)[1]
+ rule_name = self.class.name.gsub("ERBLint::Linters::", "")
if indicator == "#" && comment.start_with?("erblint:disable") && comment.match(rule_name)
if @offenses.any?
diff --git a/test/custom_helpers_test.rb b/test/custom_helpers_test.rb
new file mode 100644
index 0000000..4dfc1d5
--- /dev/null
+++ b/test/custom_helpers_test.rb
@@ -0,0 +1,97 @@
+# frozen_string_literal: true
+
+require "test_helper"
+require "erblint-github/linters/custom_helpers"
+
+class CustomHelpersTest < LinterTestCase
+ include ERBLint::Linters::CustomHelpers
+
+ class FakeLinter < ERBLint::Linter
+ attr_accessor :offenses
+
+ MESSAGE = "Please fix your code."
+ end
+
+ def linter_class
+ CustomHelpersTest::FakeLinter
+ end
+
+ def extended_linter
+ @linter.extend(ERBLint::Linters::CustomHelpers)
+ end
+
+ def test_rule_disabled_clears_offenses_if_rule_is_disabled
+ @file = <<~HTML
+ <%# erblint:disable CustomHelpersTest::FakeLinter %>
+ HTML
+ @linter.offenses = ["fake offense"]
+ assert_equal @linter.offenses.length, 1
+
+ extended_linter.rule_disabled?(processed_source)
+ assert_empty @linter.offenses
+ end
+
+ def test_rule_disabled_adds_offense_if_disable_comment_is_present_but_no_offense
+ @file = <<~HTML
+ <%# erblint:disable CustomHelpersTest::FakeLinter %>
+ HTML
+ assert_empty @linter.offenses
+
+ extended_linter.rule_disabled?(processed_source)
+
+ assert_equal @linter.offenses.length, 1
+ end
+
+ def test_generate_offense_with_message_defined_in_linter_class
+ @file = <<~HTML
+ <%# erblint:disable CustomHelpersTest::FakeLinter %>
+
Hello.
+ HTML
+ assert_empty @linter.offenses
+
+ tag = extended_linter.tags(processed_source).first
+ extended_linter.generate_offense(CustomHelpersTest::FakeLinter, processed_source, tag)
+
+ assert_equal @linter.offenses.length, 1
+ assert_match CustomHelpersTest::FakeLinter::MESSAGE, @linter.offenses.first.message
+ end
+
+ def test_generate_offense_with_message_passed_in_as_parameter
+ @file = <<~HTML
+ Hello.
+ HTML
+ assert_empty @linter.offenses
+
+ tag = extended_linter.tags(processed_source).first
+ extended_linter.generate_offense(CustomHelpersTest::FakeLinter, processed_source, tag, "bad!")
+
+ assert_equal @linter.offenses.length, 1
+ assert_match(/bad!/, @linter.offenses.first.message)
+ end
+
+ def test_possible_attribute_values_returns_attribute_value_matches
+ @file = <<~HTML
+
+
+
+ HTML
+
+ image_tag = extended_linter.tags(processed_source).first
+ image_tag_alt_values = extended_linter.possible_attribute_values(image_tag, "alt")
+ assert_equal image_tag_alt_values, ["mona lisa"]
+
+ button_tag = extended_linter.tags(processed_source)[1]
+ button_tag_type_values = extended_linter.possible_attribute_values(button_tag, "type")
+ assert_equal button_tag_type_values, ["button"]
+ end
+
+ def test_possible_attribute_values_returns_empty_array_if_no_attribute_value_matches
+ @file = <<~HTML
+
+ HTML
+
+ anchor_tag = extended_linter.tags(processed_source).first
+ possible_attribute_values = extended_linter.possible_attribute_values(anchor_tag, "href")
+ assert_equal possible_attribute_values, []
+ end
+end
diff --git a/test/linters/accessibility/no_redundant_image_alt_test.rb b/test/linters/accessibility/no_redundant_image_alt_test.rb
index f35b3f1..9b52f05 100644
--- a/test/linters/accessibility/no_redundant_image_alt_test.rb
+++ b/test/linters/accessibility/no_redundant_image_alt_test.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require "test_helper"
-require "erblint-github/linters/github/accessibility/no_redundant_image_alt"
class NoRedundantImageAltTest < LinterTestCase
def linter_class
@@ -28,4 +27,14 @@ def test_does_not_warn_if_alt_contains_no_redundant_text
assert_empty @linter.offenses
end
+
+ def test_does_not_warn_if_linter_is_disabled_in_file
+ @file = <<~HTML
+ <%# erblint:disable GitHub::Accessibility::NoRedundantImageAlt %>
+
+ HTML
+
+ @linter.run(processed_source)
+ assert_empty @linter.offenses
+ end
end
diff --git a/test/test_helper.rb b/test/test_helper.rb
index e26c921..8369f01 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -7,3 +7,4 @@
require "minitest/autorun"
require "mocha/minitest"
require "linter_test_case"
+require "erblint-github/linters"