regru-premailer 1.7.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,277 @@
1
+ # encoding: UTF-8
2
+ require File.expand_path(File.dirname(__FILE__)) + '/helper'
3
+
4
+ class TestPremailer < Premailer::TestCase
5
+ def test_special_characters_nokogiri
6
+ html = '<p>cédille c&eacute; & garçon gar&#231;on à &agrave; &nbsp; &amp; &copy;</p>'
7
+ premailer = Premailer.new(html, :with_html_string => true, :adapter => :nokogiri)
8
+ premailer.to_inline_css
9
+ assert_equal 'c&eacute;dille c&eacute; &amp; gar&ccedil;on gar&ccedil;on &agrave; &agrave; &nbsp; &amp; &copy;', premailer.processed_doc.at('p').inner_html
10
+ end
11
+
12
+ def test_special_characters_nokogiri_remote
13
+ remote_setup('chars.html', :adapter => :nokogiri)
14
+ @premailer.to_inline_css
15
+ assert_equal 'c&eacute;dille c&eacute; &amp; gar&ccedil;on gar&ccedil;on &agrave; &agrave; &nbsp; &amp; &copy;', @premailer.processed_doc.at('p').inner_html
16
+ end
17
+
18
+ #def test_cyrillic_nokogiri_remote
19
+ # if RUBY_VERSION =~ /1.9/
20
+ # remote_setup('iso-8859-5.html', :adapter => :nokogiri) #, :encoding => 'iso-8859-5')
21
+ # @premailer.to_inline_css
22
+ # assert_equal Encoding.find('ISO-8859-5'), @premailer.processed_doc.at('p').inner_html.encoding
23
+ # end
24
+ #end
25
+
26
+ # TODO: this passes when run from rake but not when run from:
27
+ # ruby -Itest test/test_premailer.rb -n test_special_characters_hpricot
28
+ def test_special_characters_hpricot
29
+ html = '<p>cédille c&eacute; & garçon gar&#231;on à &agrave; &nbsp; &amp;</p>'
30
+ premailer = Premailer.new(html, :with_html_string => true, :adapter => :hpricot)
31
+ premailer.to_inline_css
32
+ assert_equal 'c&eacute;dille c&eacute; &amp; gar&ccedil;on gar&ccedil;on &agrave; &agrave; &nbsp; &amp;', premailer.processed_doc.at('p').inner_html
33
+ end
34
+
35
+ def test_detecting_html
36
+ [:nokogiri, :hpricot].each do |adapter|
37
+ remote_setup('base.html', :adapter => adapter)
38
+ assert !@premailer.is_xhtml?
39
+ end
40
+ end
41
+
42
+ def test_detecting_xhtml
43
+ [:nokogiri, :hpricot].each do |adapter|
44
+ remote_setup('xhtml.html', :adapter => adapter)
45
+ assert @premailer.is_xhtml?
46
+ end
47
+ end
48
+
49
+ def test_self_closing_xhtml_tags
50
+ [:nokogiri, :hpricot].each do |adapter|
51
+ remote_setup('xhtml.html', :adapter => adapter)
52
+ assert_match /<br[\s]*\/>/, @premailer.to_s
53
+ assert_match /<br[\s]*\/>/, @premailer.to_inline_css
54
+ end
55
+ end
56
+
57
+ def test_non_self_closing_html_tags
58
+ [:nokogiri, :hpricot].each do |adapter|
59
+ remote_setup('html4.html', :adapter => adapter)
60
+ assert_match /<br>/, @premailer.to_s
61
+ assert_match /<br>/, @premailer.to_inline_css
62
+ end
63
+ end
64
+
65
+ def test_mailtos_with_query_strings
66
+ html = <<END_HTML
67
+ <html>
68
+ <a href="mailto:info@example.com?subject=Programmübersicht&amp;body=Lorem ipsum dolor sit amet.">Test</a>
69
+ </html>
70
+ END_HTML
71
+
72
+ qs = 'testing=123'
73
+
74
+ [:nokogiri, :hpricot].each do |adapter|
75
+ premailer = Premailer.new(html, :with_html_string => true, :link_query_string => qs, :adapter => adapter)
76
+ premailer.to_inline_css
77
+ assert_no_match /testing=123/, premailer.processed_doc.search('a').first.attributes['href'].to_s
78
+ end
79
+ end
80
+
81
+ def test_escaping_strings
82
+ local_setup
83
+
84
+ str = %q{url("/images/test.png");}
85
+ assert_equal("url(\'/images/test.png\');", Premailer.escape_string(str))
86
+ end
87
+
88
+ def test_importing_local_css
89
+ # , :hpricot
90
+ [:nokogiri].each do |adapter|
91
+ local_setup('base.html', :adapter => adapter)
92
+
93
+ # noimport.css (print stylesheet) sets body { background } to red
94
+ assert_no_match /red/, @doc.at('body').attributes['style'].to_s
95
+
96
+ # import.css sets .hide to { display: none }
97
+ assert_match /display: none/, @doc.at('#hide01').attributes['style'].to_s
98
+ end
99
+ end
100
+
101
+ def test_importing_remote_css
102
+ [:nokogiri, :hpricot].each do |adapter|
103
+ remote_setup('base.html', :adapter => adapter)
104
+
105
+ # noimport.css (print stylesheet) sets body { background } to red
106
+ assert_no_match /red/, @doc.at('body')['style']
107
+
108
+ # import.css sets .hide to { display: none }
109
+ assert_match /display: none/, @doc.at('#hide01')['style']
110
+ end
111
+ end
112
+
113
+ def test_importing_css_as_string
114
+ files_base = File.expand_path(File.dirname(__FILE__)) + '/files/'
115
+
116
+ css_string = IO.read(File.join(files_base, 'import.css'))
117
+
118
+ [:nokogiri, :hpricot].each do |adapter|
119
+ premailer = Premailer.new(File.join(files_base, 'no_css.html'), {:css_string => css_string, :adapter => adapter})
120
+ premailer.to_inline_css
121
+ @doc = premailer.processed_doc
122
+
123
+ # import.css sets .hide to { display: none }
124
+ assert_match /display: none/, @doc.at('#hide01')['style']
125
+ end
126
+ end
127
+
128
+ def test_local_remote_check
129
+ assert Premailer.local_data?( StringIO.new('a') )
130
+ assert Premailer.local_data?( '/path/' )
131
+ assert !Premailer.local_data?( 'http://example.com/path/' )
132
+
133
+ # the old way is deprecated but should still work
134
+ premailer = Premailer.new( StringIO.new('a') )
135
+ assert premailer.local_uri?( '/path/' )
136
+ end
137
+
138
+ def test_initialize_can_accept_io_object
139
+ [:nokogiri, :hpricot].each do |adapter|
140
+ io = StringIO.new('hi mom')
141
+ premailer = Premailer.new(io, :adapter => adapter)
142
+ assert_match /hi mom/, premailer.to_inline_css
143
+ end
144
+ end
145
+
146
+ def test_initialize_can_accept_html_string
147
+ [:nokogiri, :hpricot].each do |adapter|
148
+ premailer = Premailer.new('<p>test</p>', :with_html_string => true, :adapter => adapter)
149
+ assert_match /test/, premailer.to_inline_css
150
+ end
151
+ end
152
+
153
+ def test_remove_ids
154
+ html = <<END_HTML
155
+ <html> <head> <style type="text/css"> #remove { color:blue; } </style> </head>
156
+ <body>
157
+ <p id="remove"><a href="#keep">Test</a></p>
158
+ <p id="keep">Test</p>
159
+ </body> </html>
160
+ END_HTML
161
+
162
+ [:nokogiri, :hpricot].each do |adapter|
163
+ pm = Premailer.new(html, :with_html_string => true, :remove_ids => true, :adapter => adapter)
164
+ pm.to_inline_css
165
+ doc = pm.processed_doc
166
+ assert_nil doc.at('#remove')
167
+ assert_nil doc.at('#keep')
168
+ hashed_id = doc.at('a')['href'][1..-1]
169
+ assert_not_nil doc.at("\##{hashed_id}")
170
+ end
171
+ end
172
+
173
+ def test_carriage_returns_as_entities
174
+ html = <<-html
175
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
176
+ <html>
177
+ <body>\n\r<p>test</p>\n\r<p>test</p>
178
+ </body></html>
179
+ html
180
+
181
+ [:nokogiri, :hpricot].each do |adapter|
182
+ pm = Premailer.new(html, :with_html_string => true, :adapter => adapter)
183
+ assert_match /\r/, pm.to_inline_css
184
+ end
185
+ end
186
+
187
+
188
+ def test_advanced_selectors
189
+ remote_setup('base.html', :adapter => :nokogiri)
190
+ assert_match /italic/, @doc.at('h2 + h3')['style']
191
+ assert_match /italic/, @doc.at('p[attr~=quote]')['style']
192
+ assert_match /italic/, @doc.at('ul li:first-of-type')['style']
193
+
194
+ remote_setup('base.html', :adapter => :hpricot)
195
+ assert_match /italic/, @doc.at('p[@attr~="quote"]')['style']
196
+ assert_match /italic/, @doc.at('ul li:first-of-type')['style']
197
+ end
198
+
199
+ def test_premailer_related_attributes
200
+ html = <<END_HTML
201
+ <html> <head> <style>table { -premailer-width: 500; } td { -premailer-height: 20}; </style>
202
+ <body>
203
+ <table> <tr> <td> Test </td> </tr> </table>
204
+ </body> </html>
205
+ END_HTML
206
+
207
+ [:nokogiri, :hpricot].each do |adapter|
208
+ pm = Premailer.new(html, :with_html_string => true, :adapter => adapter)
209
+ pm.to_inline_css
210
+ doc = pm.processed_doc
211
+ assert_equal '500', doc.at('table')['width']
212
+ assert_equal '20', doc.at('td')['height']
213
+ end
214
+ end
215
+
216
+ def test_include_link_tags_option
217
+ local_setup('base.html', :adapter => :nokogiri, :include_link_tags => true)
218
+ assert_match /1\.231/, @doc.at('body').attributes['style'].to_s
219
+ assert_match /display: none/, @doc.at('.hide').attributes['style'].to_s
220
+
221
+ local_setup('base.html', :adapter => :nokogiri, :include_link_tags => false)
222
+ assert_no_match /1\.231/, @doc.at('body').attributes['style'].to_s
223
+ assert_match /display: none/, @doc.at('.hide').attributes['style'].to_s
224
+ end
225
+
226
+ def test_include_style_tags_option
227
+ local_setup('base.html', :adapter => :nokogiri, :include_style_tags => true)
228
+ assert_match /1\.231/, @doc.at('body').attributes['style'].to_s
229
+ assert_match /display: block/, @doc.at('#iphone').attributes['style'].to_s
230
+
231
+ local_setup('base.html', :adapter => :nokogiri, :include_style_tags => false)
232
+ assert_match /1\.231/, @doc.at('body').attributes['style'].to_s
233
+ assert_no_match /display: block/, @doc.at('#iphone').attributes['style'].to_s
234
+ end
235
+
236
+ def test_input_encoding
237
+ html_special_characters = "Ää, Öö, Üü".encode("UTF-8")
238
+ expected_html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>" + html_special_characters + "</p></body></html>\n"
239
+ pm = Premailer.new(html_special_characters, :with_html_string => true, :adapter => :nokogiri, :input_encoding => "UTF-8")
240
+ assert_equal expected_html, pm.to_inline_css
241
+ end
242
+
243
+ def test_meta_encoding_downcase
244
+ meta_encoding = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
245
+ expected_html = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'
246
+ pm = Premailer.new(meta_encoding, :with_html_string => true, :adapter => :nokogiri, :input_encoding => "utf-8")
247
+ assert_match expected_html, pm.to_inline_css
248
+ end
249
+
250
+ def test_meta_encoding_upcase
251
+ meta_encoding = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'
252
+ expected_html = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
253
+ pm = Premailer.new(meta_encoding, :with_html_string => true, :adapter => :nokogiri, :input_encoding => "UTF-8")
254
+ assert_match expected_html, pm.to_inline_css
255
+ end
256
+
257
+ def test_htmlentities
258
+ html_entities = "&#8217;"
259
+ expected_html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>'</p></body></html>\n"
260
+ pm = Premailer.new(html_entities, :with_html_string => true, :adapter => :nokogiri, :replace_html_entities => true)
261
+ assert_equal expected_html, pm.to_inline_css
262
+ end
263
+
264
+ # If a line other than the first line in the html string begins with a URI
265
+ # Premailer should not identify the html string as a URI. Otherwise the following
266
+ # exception would be raised: ActionView::Template::Error: bad URI(is not URI?)
267
+ def test_line_starting_with_uri_in_html_with_linked_css
268
+ files_base = File.expand_path(File.dirname(__FILE__)) + '/files/'
269
+ html_string = IO.read(File.join(files_base, 'html_with_uri.html'))
270
+
271
+ assert_nothing_raised do
272
+ premailer = Premailer.new(html_string, :with_html_string => true)
273
+ premailer.to_inline_css
274
+ end
275
+ end
276
+
277
+ end
@@ -0,0 +1,95 @@
1
+ # encoding: UTF-8
2
+ require File.expand_path(File.dirname(__FILE__)) + '/helper'
3
+
4
+ class TestWarnings < Premailer::TestCase
5
+ def test_element_warnings
6
+ html = <<END_HTML
7
+ <!DOCTYPE html>
8
+ <html>
9
+ <head><link rel="alternate" href="http://example.com/"></head>
10
+ <body>
11
+ <form method="post"> Test </form>
12
+ </body>
13
+ </html>
14
+ END_HTML
15
+
16
+ [:nokogiri, :hpricot].each do |adapter|
17
+ warnings = get_warnings(html, adapter)
18
+ assert_equal 2, warnings.length
19
+ assert warnings.any? { |w| w[:message] == 'form HTML element'}
20
+ assert warnings.any? { |w| w[:message] == 'link HTML element'}
21
+ end
22
+ end
23
+
24
+ def test_css_warnings
25
+ html = <<END_HTML
26
+ <!DOCTYPE html>
27
+ <html><body>
28
+ <div style="margin: 5px; height: 100px;">Test</div>
29
+ </body></html>
30
+ END_HTML
31
+
32
+ [:nokogiri, :hpricot].each do |adapter|
33
+ warnings = get_warnings(html, adapter)
34
+ assert_equal 2, warnings.length
35
+ assert warnings.any? { |w| w[:message] == 'height CSS property'}
36
+ assert warnings.any? { |w| w[:message] == 'margin CSS property'}
37
+ end
38
+ end
39
+
40
+ def test_css_aliased_warnings
41
+ html = <<END_HTML
42
+ <!DOCTYPE html>
43
+ <html><body>
44
+ <div style="margin-top: 5px;">Test</div>
45
+ </body></html>
46
+ END_HTML
47
+
48
+ [:nokogiri, :hpricot].each do |adapter|
49
+ warnings = get_warnings(html, adapter)
50
+ assert_equal 1, warnings.length
51
+ assert warnings.any? { |w| w[:message] == 'margin-top CSS property'}
52
+ end
53
+ end
54
+
55
+ def test_attribute_warnings
56
+ html = <<END_HTML
57
+ <!DOCTYPE html>
58
+ <html><body>
59
+ <img src="#" ismap>
60
+ </body></html>
61
+ END_HTML
62
+
63
+ [:nokogiri, :hpricot].each do |adapter|
64
+ warnings = get_warnings(html, adapter)
65
+ assert_equal 1, warnings.length
66
+ assert warnings.any? { |w| w[:message] == 'ismap HTML attribute'}
67
+ end
68
+ end
69
+
70
+ def test_warn_level
71
+ html = <<END_HTML
72
+ <!DOCTYPE html>
73
+ <html><body>
74
+ <div style="color: red; font-family: sans-serif;">Test</div>
75
+ </body></html>
76
+ END_HTML
77
+
78
+ [:nokogiri, :hpricot].each do |adapter|
79
+ warnings = get_warnings(html, adapter, Premailer::Warnings::SAFE)
80
+ assert_equal 2, warnings.length
81
+ end
82
+
83
+ [:nokogiri, :hpricot].each do |adapter|
84
+ warnings = get_warnings(html, adapter, Premailer::Warnings::POOR)
85
+ assert_equal 1, warnings.length
86
+ end
87
+ end
88
+
89
+ protected
90
+ def get_warnings(html, adapter = :nokogiri, warn_level = Premailer::Warnings::SAFE)
91
+ pm = Premailer.new(html, {:adpater => adapter, :with_html_string => true, :warn_level => warn_level})
92
+ pm.to_inline_css
93
+ pm.check_client_support
94
+ end
95
+ end
metadata ADDED
@@ -0,0 +1,231 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: regru-premailer
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.7.4
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Alex Dunae
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: css_parser
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.1.9
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.1.9
30
+ - !ruby/object:Gem::Dependency
31
+ name: htmlentities
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 4.0.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 4.0.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: hpricot
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.8.3
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.8.3
62
+ - !ruby/object:Gem::Dependency
63
+ name: nokogiri
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 1.4.4
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.4.4
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '0.8'
86
+ - - ! '!='
87
+ - !ruby/object:Gem::Version
88
+ version: 0.9.0
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '0.8'
97
+ - - ! '!='
98
+ - !ruby/object:Gem::Version
99
+ version: 0.9.0
100
+ - !ruby/object:Gem::Dependency
101
+ name: yard
102
+ requirement: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ version: 0.7.3
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ~>
114
+ - !ruby/object:Gem::Version
115
+ version: 0.7.3
116
+ - !ruby/object:Gem::Dependency
117
+ name: redcarpet
118
+ requirement: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ version: 1.17.2
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 1.17.2
132
+ description: Improve the rendering of HTML emails by making CSS inline, converting
133
+ links and warning about unsupported code.
134
+ email: code@dunae.ca
135
+ executables:
136
+ - premailer
137
+ extensions: []
138
+ extra_rdoc_files: []
139
+ files:
140
+ - .gitignore
141
+ - .travis.yml
142
+ - .yardopts
143
+ - Gemfile
144
+ - LICENSE.md
145
+ - README.md
146
+ - bin/premailer
147
+ - init.rb
148
+ - lib/premailer.rb
149
+ - lib/premailer/adapter.rb
150
+ - lib/premailer/adapter/hpricot.rb
151
+ - lib/premailer/adapter/nokogiri.rb
152
+ - lib/premailer/executor.rb
153
+ - lib/premailer/html_to_plain_text.rb
154
+ - lib/premailer/premailer.rb
155
+ - local-premailer
156
+ - misc/client_support.yaml
157
+ - premailer.gemspec
158
+ - rakefile.rb
159
+ - test/files/base.html
160
+ - test/files/chars.html
161
+ - test/files/contact_bg.png
162
+ - test/files/dialect.png
163
+ - test/files/dots_end.png
164
+ - test/files/dots_h.gif
165
+ - test/files/html4.html
166
+ - test/files/html_with_uri.html
167
+ - test/files/import.css
168
+ - test/files/inc/2009-placeholder.png
169
+ - test/files/iso-8859-2.html
170
+ - test/files/iso-8859-5.html
171
+ - test/files/no_css.html
172
+ - test/files/noimport.css
173
+ - test/files/styles.css
174
+ - test/files/xhtml.html
175
+ - test/future_tests.rb
176
+ - test/helper.rb
177
+ - test/test_adapter.rb
178
+ - test/test_html_to_plain_text.rb
179
+ - test/test_links.rb
180
+ - test/test_misc.rb
181
+ - test/test_premailer.rb
182
+ - test/test_warnings.rb
183
+ homepage: http://premailer.dialect.ca/
184
+ licenses: []
185
+ post_install_message:
186
+ rdoc_options: []
187
+ require_paths:
188
+ - lib
189
+ required_ruby_version: !ruby/object:Gem::Requirement
190
+ none: false
191
+ requirements:
192
+ - - ! '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
+ none: false
197
+ requirements:
198
+ - - ! '>='
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ requirements: []
202
+ rubyforge_project:
203
+ rubygems_version: 1.8.24
204
+ signing_key:
205
+ specification_version: 3
206
+ summary: Preflight for HTML e-mail.
207
+ test_files:
208
+ - test/files/base.html
209
+ - test/files/chars.html
210
+ - test/files/contact_bg.png
211
+ - test/files/dialect.png
212
+ - test/files/dots_end.png
213
+ - test/files/dots_h.gif
214
+ - test/files/html4.html
215
+ - test/files/html_with_uri.html
216
+ - test/files/import.css
217
+ - test/files/inc/2009-placeholder.png
218
+ - test/files/iso-8859-2.html
219
+ - test/files/iso-8859-5.html
220
+ - test/files/no_css.html
221
+ - test/files/noimport.css
222
+ - test/files/styles.css
223
+ - test/files/xhtml.html
224
+ - test/future_tests.rb
225
+ - test/helper.rb
226
+ - test/test_adapter.rb
227
+ - test/test_html_to_plain_text.rb
228
+ - test/test_links.rb
229
+ - test/test_misc.rb
230
+ - test/test_premailer.rb
231
+ - test/test_warnings.rb