@@ -112,6 +112,50 @@ def test_attributes_accessor_validation
112
112
end
113
113
end
114
114
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
+
115
159
class TargetScrubberTest < ScrubberTest
116
160
def setup
117
161
@scrubber = Rails ::Html ::TargetScrubber . new
0 commit comments