structured_warnings 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. data/History.txt +5 -0
  2. data/License.txt +1 -1
  3. data/README.rdoc +20 -11
  4. data/Rakefile +46 -29
  5. data/doc/DeprecatedMethodWarning.html +170 -0
  6. data/doc/DeprecatedSignatureWarning.html +171 -0
  7. data/doc/DeprecationWarning.html +171 -0
  8. data/doc/Dynamic.html +172 -0
  9. data/doc/Object.html +186 -0
  10. data/doc/README_rdoc.html +296 -0
  11. data/doc/StandardWarning.html +169 -0
  12. data/doc/StructuredWarnings.html +187 -0
  13. data/doc/StructuredWarnings/ClassMethods.html +254 -0
  14. data/doc/StructuredWarnings/Kernel.html +274 -0
  15. data/doc/StructuredWarnings/Test.html +176 -0
  16. data/doc/StructuredWarnings/Test/Assertions.html +322 -0
  17. data/doc/StructuredWarnings/Test/Warner.html +271 -0
  18. data/doc/StructuredWarnings/Warner.html +226 -0
  19. data/doc/Warning.html +460 -0
  20. data/doc/Warning/ClassMethods.html +334 -0
  21. data/doc/created.rid +10 -0
  22. data/doc/images/brick.png +0 -0
  23. data/doc/images/brick_link.png +0 -0
  24. data/doc/images/bug.png +0 -0
  25. data/doc/images/bullet_black.png +0 -0
  26. data/doc/images/bullet_toggle_minus.png +0 -0
  27. data/doc/images/bullet_toggle_plus.png +0 -0
  28. data/doc/images/date.png +0 -0
  29. data/doc/images/find.png +0 -0
  30. data/doc/images/loadingAnimation.gif +0 -0
  31. data/doc/images/macFFBgHack.png +0 -0
  32. data/doc/images/package.png +0 -0
  33. data/doc/images/page_green.png +0 -0
  34. data/doc/images/page_white_text.png +0 -0
  35. data/doc/images/page_white_width.png +0 -0
  36. data/doc/images/plugin.png +0 -0
  37. data/doc/images/ruby.png +0 -0
  38. data/doc/images/tag_green.png +0 -0
  39. data/doc/images/wrench.png +0 -0
  40. data/doc/images/wrench_orange.png +0 -0
  41. data/doc/images/zoom.png +0 -0
  42. data/doc/index.html +120 -0
  43. data/doc/js/darkfish.js +116 -0
  44. data/doc/js/jquery.js +32 -0
  45. data/doc/js/quicksearch.js +114 -0
  46. data/doc/js/thickbox-compressed.js +10 -0
  47. data/doc/lib/structured_warnings/dynamic_rb.html +65 -0
  48. data/doc/lib/structured_warnings/kernel_rb.html +52 -0
  49. data/doc/lib/structured_warnings/test/assertions_rb.html +52 -0
  50. data/doc/lib/structured_warnings/test/warner_rb.html +52 -0
  51. data/doc/lib/structured_warnings/test_rb.html +56 -0
  52. data/doc/lib/structured_warnings/warner_rb.html +52 -0
  53. data/doc/lib/structured_warnings/warning_rb.html +64 -0
  54. data/doc/lib/structured_warnings_rb.html +62 -0
  55. data/doc/rdoc.css +763 -0
  56. data/lib/structured_warnings.rb +6 -9
  57. data/lib/structured_warnings/dynamic.rb +6 -6
  58. data/lib/structured_warnings/kernel.rb +9 -9
  59. data/lib/structured_warnings/test.rb +2 -3
  60. data/lib/structured_warnings/test/assertions.rb +21 -9
  61. data/lib/structured_warnings/test/warner.rb +2 -2
  62. data/lib/structured_warnings/warner.rb +1 -1
  63. data/lib/structured_warnings/warning.rb +11 -11
  64. data/structured_warnings.gemspec +15 -58
  65. data/test/structured_warnings_test.rb +7 -6
  66. metadata +85 -62
  67. data/.gitignore +0 -2
  68. data/test/test_helper.rb +0 -4
  69. data/version.yml +0 -4
@@ -0,0 +1,176 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
7
+
8
+ <title>Module: StructuredWarnings::Test</title>
9
+
10
+ <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
11
+
12
+ <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
13
+ <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
14
+ <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
15
+ <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
16
+
17
+ </head>
18
+ <body id="top" class="module">
19
+
20
+ <div id="metadata">
21
+ <div id="home-metadata">
22
+ <div id="home-section" class="section">
23
+ <h3 class="section-header">
24
+ <a href="../index.html">Home</a>
25
+ <a href="../index.html#classes">Classes</a>
26
+ <a href="../index.html#methods">Methods</a>
27
+ </h3>
28
+ </div>
29
+ </div>
30
+
31
+ <div id="file-metadata">
32
+ <div id="file-list-section" class="section">
33
+ <h3 class="section-header">In Files</h3>
34
+ <div class="section-body">
35
+ <ul>
36
+
37
+ <li><a href="../lib/structured_warnings/test/assertions_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
38
+ class="thickbox" title="lib/structured_warnings/test/assertions.rb">lib/structured_warnings/test/assertions.rb</a></li>
39
+
40
+ <li><a href="../lib/structured_warnings/test/warner_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
41
+ class="thickbox" title="lib/structured_warnings/test/warner.rb">lib/structured_warnings/test/warner.rb</a></li>
42
+
43
+ </ul>
44
+ </div>
45
+ </div>
46
+
47
+
48
+ </div>
49
+
50
+ <div id="class-metadata">
51
+
52
+
53
+
54
+
55
+
56
+ <!-- Namespace Contents -->
57
+ <div id="namespace-list-section" class="section">
58
+ <h3 class="section-header">Namespace</h3>
59
+ <ul class="link-list">
60
+
61
+ <li><span class="type">MODULE</span> <a href="Test/Assertions.html">StructuredWarnings::Test::Assertions</a></li>
62
+
63
+ <li><span class="type">CLASS</span> <a href="Test/Warner.html">StructuredWarnings::Test::Warner</a></li>
64
+
65
+ </ul>
66
+ </div>
67
+
68
+
69
+
70
+
71
+
72
+ </div>
73
+
74
+ <div id="project-metadata">
75
+
76
+
77
+ <div id="fileindex-section" class="section project-section">
78
+ <h3 class="section-header">Files</h3>
79
+ <ul>
80
+
81
+ <li class="file"><a href="../README_rdoc.html">README.rdoc</a></li>
82
+
83
+ </ul>
84
+ </div>
85
+
86
+
87
+ <div id="classindex-section" class="section project-section">
88
+ <h3 class="section-header">Class/Module Index
89
+ <span class="search-toggle"><img src="../images/find.png"
90
+ height="16" width="16" alt="[+]"
91
+ title="show/hide quicksearch" /></span></h3>
92
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
93
+ <fieldset>
94
+ <legend>Quicksearch</legend>
95
+ <input type="text" name="quicksearch" value=""
96
+ class="quicksearch-field" />
97
+ </fieldset>
98
+ </form>
99
+
100
+ <ul class="link-list">
101
+
102
+ <li><a href="../StructuredWarnings.html">StructuredWarnings</a></li>
103
+
104
+ <li><a href="../StructuredWarnings/ClassMethods.html">StructuredWarnings::ClassMethods</a></li>
105
+
106
+ <li><a href="../StructuredWarnings/Kernel.html">StructuredWarnings::Kernel</a></li>
107
+
108
+ <li><a href="../StructuredWarnings/Test.html">StructuredWarnings::Test</a></li>
109
+
110
+ <li><a href="../StructuredWarnings/Test/Assertions.html">StructuredWarnings::Test::Assertions</a></li>
111
+
112
+ <li><a href="../StructuredWarnings/Test/Warner.html">StructuredWarnings::Test::Warner</a></li>
113
+
114
+ <li><a href="../StructuredWarnings/Warner.html">StructuredWarnings::Warner</a></li>
115
+
116
+ <li><a href="../Warning.html">Warning</a></li>
117
+
118
+ <li><a href="../Warning/ClassMethods.html">Warning::ClassMethods</a></li>
119
+
120
+ <li><a href="../DeprecatedMethodWarning.html">DeprecatedMethodWarning</a></li>
121
+
122
+ <li><a href="../DeprecatedSignatureWarning.html">DeprecatedSignatureWarning</a></li>
123
+
124
+ <li><a href="../DeprecationWarning.html">DeprecationWarning</a></li>
125
+
126
+ <li><a href="../Dynamic.html">Dynamic</a></li>
127
+
128
+ <li><a href="../Object.html">Object</a></li>
129
+
130
+ <li><a href="../StandardWarning.html">StandardWarning</a></li>
131
+
132
+ </ul>
133
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
134
+ </div>
135
+
136
+
137
+ </div>
138
+ </div>
139
+
140
+ <div id="documentation">
141
+ <h1 class="module">StructuredWarnings::Test</h1>
142
+
143
+ <div id="description" class="description">
144
+
145
+ <p>This module ecapsulates all extensions to support <tt>test/unit</tt>.</p>
146
+
147
+ </div><!-- description -->
148
+
149
+
150
+
151
+
152
+ <div id="5Buntitled-5D" class="documentation-section">
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+ <!-- Methods -->
162
+
163
+ </div><!-- 5Buntitled-5D -->
164
+
165
+
166
+ </div><!-- documentation -->
167
+
168
+ <div id="validator-badges">
169
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
170
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
171
+ Rdoc Generator</a> 2</small>.</p>
172
+ </div>
173
+
174
+ </body>
175
+ </html>
176
+
@@ -0,0 +1,322 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
7
+
8
+ <title>Module: StructuredWarnings::Test::Assertions</title>
9
+
10
+ <link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
11
+
12
+ <script src="../../js/jquery.js" type="text/javascript" charset="utf-8"></script>
13
+ <script src="../../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
14
+ <script src="../../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
15
+ <script src="../../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
16
+
17
+ </head>
18
+ <body id="top" class="module">
19
+
20
+ <div id="metadata">
21
+ <div id="home-metadata">
22
+ <div id="home-section" class="section">
23
+ <h3 class="section-header">
24
+ <a href="../../index.html">Home</a>
25
+ <a href="../../index.html#classes">Classes</a>
26
+ <a href="../../index.html#methods">Methods</a>
27
+ </h3>
28
+ </div>
29
+ </div>
30
+
31
+ <div id="file-metadata">
32
+ <div id="file-list-section" class="section">
33
+ <h3 class="section-header">In Files</h3>
34
+ <div class="section-body">
35
+ <ul>
36
+
37
+ <li><a href="../../lib/structured_warnings/test/assertions_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
38
+ class="thickbox" title="lib/structured_warnings/test/assertions.rb">lib/structured_warnings/test/assertions.rb</a></li>
39
+
40
+ </ul>
41
+ </div>
42
+ </div>
43
+
44
+
45
+ </div>
46
+
47
+ <div id="class-metadata">
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+ <!-- Method Quickref -->
56
+ <div id="method-list-section" class="section">
57
+ <h3 class="section-header">Methods</h3>
58
+ <ul class="link-list">
59
+
60
+ <li><a href="#method-i-assert_no_warn">#assert_no_warn</a></li>
61
+
62
+ <li><a href="#method-i-assert_warn">#assert_warn</a></li>
63
+
64
+ </ul>
65
+ </div>
66
+
67
+
68
+
69
+ </div>
70
+
71
+ <div id="project-metadata">
72
+
73
+
74
+ <div id="fileindex-section" class="section project-section">
75
+ <h3 class="section-header">Files</h3>
76
+ <ul>
77
+
78
+ <li class="file"><a href="../../README_rdoc.html">README.rdoc</a></li>
79
+
80
+ </ul>
81
+ </div>
82
+
83
+
84
+ <div id="classindex-section" class="section project-section">
85
+ <h3 class="section-header">Class/Module Index
86
+ <span class="search-toggle"><img src="../../images/find.png"
87
+ height="16" width="16" alt="[+]"
88
+ title="show/hide quicksearch" /></span></h3>
89
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
90
+ <fieldset>
91
+ <legend>Quicksearch</legend>
92
+ <input type="text" name="quicksearch" value=""
93
+ class="quicksearch-field" />
94
+ </fieldset>
95
+ </form>
96
+
97
+ <ul class="link-list">
98
+
99
+ <li><a href="../../StructuredWarnings.html">StructuredWarnings</a></li>
100
+
101
+ <li><a href="../../StructuredWarnings/ClassMethods.html">StructuredWarnings::ClassMethods</a></li>
102
+
103
+ <li><a href="../../StructuredWarnings/Kernel.html">StructuredWarnings::Kernel</a></li>
104
+
105
+ <li><a href="../../StructuredWarnings/Test.html">StructuredWarnings::Test</a></li>
106
+
107
+ <li><a href="../../StructuredWarnings/Test/Assertions.html">StructuredWarnings::Test::Assertions</a></li>
108
+
109
+ <li><a href="../../StructuredWarnings/Test/Warner.html">StructuredWarnings::Test::Warner</a></li>
110
+
111
+ <li><a href="../../StructuredWarnings/Warner.html">StructuredWarnings::Warner</a></li>
112
+
113
+ <li><a href="../../Warning.html">Warning</a></li>
114
+
115
+ <li><a href="../../Warning/ClassMethods.html">Warning::ClassMethods</a></li>
116
+
117
+ <li><a href="../../DeprecatedMethodWarning.html">DeprecatedMethodWarning</a></li>
118
+
119
+ <li><a href="../../DeprecatedSignatureWarning.html">DeprecatedSignatureWarning</a></li>
120
+
121
+ <li><a href="../../DeprecationWarning.html">DeprecationWarning</a></li>
122
+
123
+ <li><a href="../../Dynamic.html">Dynamic</a></li>
124
+
125
+ <li><a href="../../Object.html">Object</a></li>
126
+
127
+ <li><a href="../../StandardWarning.html">StandardWarning</a></li>
128
+
129
+ </ul>
130
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
131
+ </div>
132
+
133
+
134
+ </div>
135
+ </div>
136
+
137
+ <div id="documentation">
138
+ <h1 class="module">StructuredWarnings::Test::Assertions</h1>
139
+
140
+ <div id="description" class="description">
141
+
142
+ </div><!-- description -->
143
+
144
+
145
+
146
+
147
+ <div id="5Buntitled-5D" class="documentation-section">
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+ <!-- Methods -->
157
+
158
+ <div id="public-instance-method-details" class="method-section section">
159
+ <h3 class="section-header">Public Instance Methods</h3>
160
+
161
+
162
+ <div id="assert_no_warn-method" class="method-detail ">
163
+ <a name="method-i-assert_no_warn"></a>
164
+
165
+
166
+
167
+ <div class="method-heading">
168
+ <span class="method-callseq">assert_no_warn(message = nil) {|| ...}</span>
169
+
170
+ <span class="method-click-advice">click to toggle source</span>
171
+
172
+ </div>
173
+
174
+ <div class="method-heading">
175
+ <span class="method-callseq">assert_no_warn(warning_class, message) {|| ...}</span>
176
+
177
+ </div>
178
+
179
+ <div class="method-heading">
180
+ <span class="method-callseq">assert_no_warn(warning_instance) {|| ...}</span>
181
+
182
+ </div>
183
+
184
+
185
+
186
+ <div class="method-description">
187
+
188
+ <p>Asserts that the given warning was not emmitted. It may be restricted to a
189
+ certain subtree of warnings and/or message.</p>
190
+
191
+ <pre>def foo
192
+ warn DeprecatedMethodWarning, &quot;used foo, use bar instead&quot;
193
+ bar
194
+ end
195
+
196
+ assert_no_warn(StandardWarning) { foo } # passes
197
+
198
+ assert_no_warn(DeprecationWarning) { foo } # fails
199
+ assert_no_warn() { foo } # fails</pre>
200
+
201
+ <p>See <a href="Assertions.html#method-i-assert_warn">assert_warn</a> for more
202
+ examples.</p>
203
+
204
+ <p><b>Note</b>: It is currently not possible to add a custom failure message.</p>
205
+
206
+
207
+
208
+ <div class="method-source-code" id="assert_no_warn-source">
209
+ <pre>
210
+ <span class="ruby-comment"># File lib/structured_warnings/test/assertions.rb, line 26</span>
211
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">assert_no_warn</span>(*<span class="ruby-identifier">args</span>)
212
+ <span class="ruby-identifier">warning</span>, <span class="ruby-identifier">message</span> = <span class="ruby-identifier">parse_arguments</span>(<span class="ruby-identifier">args</span>)
213
+
214
+ <span class="ruby-identifier">w</span> = <span class="ruby-constant">StructuredWarnings</span><span class="ruby-operator">::</span><span class="ruby-constant">Test</span><span class="ruby-operator">::</span><span class="ruby-constant">Warner</span>.<span class="ruby-identifier">new</span>
215
+ <span class="ruby-constant">StructuredWarnings</span><span class="ruby-operator">::</span><span class="ruby-identifier">with_warner</span>(<span class="ruby-identifier">w</span>) <span class="ruby-keyword">do</span>
216
+ <span class="ruby-keyword">yield</span>
217
+ <span class="ruby-keyword">end</span>
218
+ <span class="ruby-identifier">assert_block</span>(<span class="ruby-node">&quot;&lt;#{args_inspect(args)}&gt; has been emitted.&quot;</span>) <span class="ruby-keyword">do</span>
219
+ <span class="ruby-operator">!</span><span class="ruby-identifier">w</span>.<span class="ruby-identifier">warned?</span>(<span class="ruby-identifier">warning</span>, <span class="ruby-identifier">message</span>)
220
+ <span class="ruby-keyword">end</span>
221
+ <span class="ruby-keyword">end</span></pre>
222
+ </div><!-- assert_no_warn-source -->
223
+
224
+ </div>
225
+
226
+
227
+
228
+
229
+ </div><!-- assert_no_warn-method -->
230
+
231
+
232
+ <div id="assert_warn-method" class="method-detail ">
233
+ <a name="method-i-assert_warn"></a>
234
+
235
+
236
+
237
+ <div class="method-heading">
238
+ <span class="method-callseq">assert_warn(message = nil) {|| ...}</span>
239
+
240
+ <span class="method-click-advice">click to toggle source</span>
241
+
242
+ </div>
243
+
244
+ <div class="method-heading">
245
+ <span class="method-callseq">assert_warn(warning_class, message) {|| ...}</span>
246
+
247
+ </div>
248
+
249
+ <div class="method-heading">
250
+ <span class="method-callseq">assert_warn(warning_instance) {|| ...}</span>
251
+
252
+ </div>
253
+
254
+
255
+
256
+ <div class="method-description">
257
+
258
+ <p>Asserts that the given warning was emmitted. It may be restricted to a
259
+ certain subtree of warnings and/or message.</p>
260
+
261
+ <pre>def foo
262
+ warn DeprecatedMethodWarning, &quot;used foo, use bar instead&quot;
263
+ bar
264
+ end
265
+
266
+ # passes
267
+ assert_warn(DeprecatedMethodWarning) { foo }
268
+ assert_warn(DeprecationWarning) { foo }
269
+ assert_warn() { foo }
270
+ assert_warn(Warning, &quot;used foo, use bar instead&quot;) { foo }
271
+ assert_warn(Warning, /use bar/) { foo }
272
+ assert_warn(Warning.new(&quot;used foo, use bar instead&quot;)) { foo }
273
+
274
+ # fails
275
+ assert_warn(StandardWarning) { foo }
276
+ assert_warn(Warning, /deprecated/) { foo }
277
+ assert_warn(Warning.new) { foo }</pre>
278
+
279
+ <p><b>Note</b>: It is currently not possible to add a custom failure message.</p>
280
+
281
+
282
+
283
+ <div class="method-source-code" id="assert_warn-source">
284
+ <pre>
285
+ <span class="ruby-comment"># File lib/structured_warnings/test/assertions.rb, line 65</span>
286
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">assert_warn</span>(*<span class="ruby-identifier">args</span>)
287
+ <span class="ruby-identifier">warning</span>, <span class="ruby-identifier">message</span> = <span class="ruby-identifier">parse_arguments</span>(<span class="ruby-identifier">args</span>)
288
+
289
+ <span class="ruby-identifier">w</span> = <span class="ruby-constant">StructuredWarnings</span><span class="ruby-operator">::</span><span class="ruby-constant">Test</span><span class="ruby-operator">::</span><span class="ruby-constant">Warner</span>.<span class="ruby-identifier">new</span>
290
+ <span class="ruby-constant">StructuredWarnings</span><span class="ruby-operator">::</span><span class="ruby-identifier">with_warner</span>(<span class="ruby-identifier">w</span>) <span class="ruby-keyword">do</span>
291
+ <span class="ruby-keyword">yield</span>
292
+ <span class="ruby-keyword">end</span>
293
+ <span class="ruby-identifier">assert_block</span>(<span class="ruby-node">&quot;&lt;#{args_inspect(args)}&gt; has not been emitted.&quot;</span>) <span class="ruby-keyword">do</span>
294
+ <span class="ruby-identifier">w</span>.<span class="ruby-identifier">warned?</span>(<span class="ruby-identifier">warning</span>, <span class="ruby-identifier">message</span>)
295
+ <span class="ruby-keyword">end</span>
296
+ <span class="ruby-keyword">end</span></pre>
297
+ </div><!-- assert_warn-source -->
298
+
299
+ </div>
300
+
301
+
302
+
303
+
304
+ </div><!-- assert_warn-method -->
305
+
306
+
307
+ </div><!-- public-instance-method-details -->
308
+
309
+ </div><!-- 5Buntitled-5D -->
310
+
311
+
312
+ </div><!-- documentation -->
313
+
314
+ <div id="validator-badges">
315
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
316
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
317
+ Rdoc Generator</a> 2</small>.</p>
318
+ </div>
319
+
320
+ </body>
321
+ </html>
322
+