@@ -112,6 +112,50 @@ def test_attributes_accessor_validation
112112 end
113113end
114114
115+ class PermitScrubberSubclassTest < ScrubberTest
116+ def setup
117+ @scrubber = Class . new ( ::Rails ::Html ::PermitScrubber ) do
118+ attr :nodes_seen
119+
120+ def initialize
121+ super ( )
122+ @nodes_seen = [ ]
123+ end
124+
125+ def keep_node? ( node )
126+ @nodes_seen << node . name
127+ super ( node )
128+ end
129+ end . new
130+ end
131+
132+ def test_elements_are_checked
133+ html = %Q("<div></div><a></a><tr></tr>")
134+ Loofah . scrub_fragment ( html , @scrubber )
135+ assert_includes ( @scrubber . nodes_seen , "div" )
136+ assert_includes ( @scrubber . nodes_seen , "a" )
137+ assert_includes ( @scrubber . nodes_seen , "tr" )
138+ end
139+
140+ def test_comments_are_checked
141+ # this passes in v1.3.0 but fails in v1.4.0
142+ html = %Q("<div></div><!-- ohai --><tr></tr>")
143+ Loofah . scrub_fragment ( html , @scrubber )
144+ assert_includes ( @scrubber . nodes_seen , "div" )
145+ assert_includes ( @scrubber . nodes_seen , "comment" )
146+ assert_includes ( @scrubber . nodes_seen , "tr" )
147+ end
148+
149+ def test_craftily_named_processing_instructions_are_not_checked
150+ # this fails in v1.3.0 but passes in v1.4.0
151+ html = %Q("<div></div><?a content><tr></tr>")
152+ Loofah . scrub_fragment ( html , @scrubber )
153+ assert_includes ( @scrubber . nodes_seen , "div" )
154+ refute_includes ( @scrubber . nodes_seen , "a" )
155+ assert_includes ( @scrubber . nodes_seen , "tr" )
156+ end
157+ end
158+
115159class TargetScrubberTest < ScrubberTest
116160 def setup
117161 @scrubber = Rails ::Html ::TargetScrubber . new
0 commit comments