wikitext 1.0 → 1.0.1

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.
@@ -0,0 +1,17 @@
1
+ # Copyright 2007-2008 Wincent Colaiuta
2
+ # This program is free software: you can redistribute it and/or modify
3
+ # it under the terms of the GNU General Public License as published by
4
+ # the Free Software Foundation, either version 3 of the License, or
5
+ # (at your option) any later version.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
+ # GNU General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU General Public License
13
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
14
+
15
+ module Wikitext
16
+ VERSION = '1.0.1'
17
+ end # module Wikitext
@@ -119,4 +119,466 @@ describe Wikitext::Parser, 'autolinking' do
119
119
  @parser.parse('user@example.com').should == "<p>user@example.com</p>\n"
120
120
  end
121
121
  end
122
+
123
+ # "special" URI characters are characters that are valid _within_ a URI
124
+ # but if they appear as delimiters (at the end of a URI) we want them to be excluded from the URI
125
+ describe 'handling "special" URI characters' do
126
+ describe 'after HTTP URIs' do
127
+ it 'should terminate if followed by a period' do
128
+ input = 'Try http://example.com/.'
129
+ expected = %Q{<p>Try <a href="http://example.com/" class="external">http://example.com/</a>.</p>\n}
130
+ @parser.parse(input).should == expected
131
+ end
132
+
133
+ it 'should not terminate on periods that occur within the URI' do
134
+ input = 'Try http://www.example.com/.'
135
+ expected = %Q{<p>Try <a href="http://www.example.com/" class="external">http://www.example.com/</a>.</p>\n}
136
+ @parser.parse(input).should == expected
137
+ end
138
+
139
+ it 'should terminate if followed by a colon' do
140
+ input = 'Try http://example.com/:'
141
+ expected = %Q{<p>Try <a href="http://example.com/" class="external">http://example.com/</a>:</p>\n}
142
+ @parser.parse(input).should == expected
143
+ end
144
+
145
+ it 'should not terminate on colons that occur within the URI' do
146
+ input = 'Try http://example.com:3000/.'
147
+ expected = %Q{<p>Try <a href="http://example.com:3000/" class="external">http://example.com:3000/</a>.</p>\n}
148
+ @parser.parse(input).should == expected
149
+ end
150
+
151
+ it 'should terminate if followed by a comma' do
152
+ input = 'Try http://example.com/,'
153
+ expected = %Q{<p>Try <a href="http://example.com/" class="external">http://example.com/</a>,</p>\n}
154
+ @parser.parse(input).should == expected
155
+ end
156
+
157
+ it 'should not terminate on commas that occur within the URI' do
158
+ input = 'Try http://example.com/2008,10,12,index.html.'
159
+ expected = %Q{<p>Try <a href="http://example.com/2008,10,12,index.html" class="external">http://example.com/2008,10,12,index.html</a>.</p>\n}
160
+ @parser.parse(input).should == expected
161
+ end
162
+
163
+ it 'should terminate if followed by an exclamation mark' do
164
+ input = 'Try http://example.com/!'
165
+ expected = %Q{<p>Try <a href="http://example.com/" class="external">http://example.com/</a>!</p>\n}
166
+ @parser.parse(input).should == expected
167
+ end
168
+
169
+ it 'should not terminate on exclamation marks that occur within the URI' do
170
+ input = 'Try http://example.com/fun!.html.'
171
+ expected = %Q{<p>Try <a href="http://example.com/fun!.html" class="external">http://example.com/fun!.html</a>.</p>\n}
172
+ @parser.parse(input).should == expected
173
+ end
174
+
175
+ it 'should terminate if followed by a question mark' do
176
+ input = 'Try http://example.com/?'
177
+ expected = %Q{<p>Try <a href="http://example.com/" class="external">http://example.com/</a>?</p>\n}
178
+ @parser.parse(input).should == expected
179
+ end
180
+
181
+ it 'should not terminate on question marks that occur within the URI' do
182
+ input = 'Try http://example.com/fun.html?q=foo.'
183
+ expected = %Q{<p>Try <a href="http://example.com/fun.html?q=foo" class="external">http://example.com/fun.html?q=foo</a>.</p>\n}
184
+ @parser.parse(input).should == expected
185
+ end
186
+
187
+ it 'should terminate if followed by a semi-colon' do
188
+ input = 'Try http://example.com/;'
189
+ expected = %Q{<p>Try <a href="http://example.com/" class="external">http://example.com/</a>;</p>\n}
190
+ @parser.parse(input).should == expected
191
+ end
192
+
193
+ it 'should not terminate on semi-colons that occur within the URI' do
194
+ input = 'Try http://example.com/fun;edit.'
195
+ expected = %Q{<p>Try <a href="http://example.com/fun;edit" class="external">http://example.com/fun;edit</a>.</p>\n}
196
+ @parser.parse(input).should == expected
197
+ end
198
+
199
+ it 'should terminate if followed by a right parenthesis' do
200
+ input = '(Try http://example.com/)'
201
+ expected = %Q{<p>(Try <a href="http://example.com/" class="external">http://example.com/</a>)</p>\n}
202
+ @parser.parse(input).should == expected
203
+ end
204
+
205
+ it 'should not terminate on right-parentheses that occur within the URI' do
206
+ input = 'Try http://example.com/(fun).html.'
207
+ expected = %Q{<p>Try <a href="http://example.com/(fun).html" class="external">http://example.com/(fun).html</a>.</p>\n}
208
+ @parser.parse(input).should == expected
209
+ end
210
+ end
211
+
212
+ describe 'after HTTPS URIs' do
213
+ it 'should terminate if followed by a period' do
214
+ input = 'Try https://example.com/.'
215
+ expected = %Q{<p>Try <a href="https://example.com/" class="external">https://example.com/</a>.</p>\n}
216
+ @parser.parse(input).should == expected
217
+ end
218
+
219
+ it 'should not terminate on periods that occur within the URI' do
220
+ input = 'Try https://www.example.com/.'
221
+ expected = %Q{<p>Try <a href="https://www.example.com/" class="external">https://www.example.com/</a>.</p>\n}
222
+ @parser.parse(input).should == expected
223
+ end
224
+
225
+ it 'should terminate if followed by a colon' do
226
+ input = 'Try https://example.com/:'
227
+ expected = %Q{<p>Try <a href="https://example.com/" class="external">https://example.com/</a>:</p>\n}
228
+ @parser.parse(input).should == expected
229
+ end
230
+
231
+ it 'should not terminate on colons that occur within the URI' do
232
+ input = 'Try https://example.com:3000/.'
233
+ expected = %Q{<p>Try <a href="https://example.com:3000/" class="external">https://example.com:3000/</a>.</p>\n}
234
+ @parser.parse(input).should == expected
235
+ end
236
+
237
+ it 'should terminate if followed by a comma' do
238
+ input = 'Try https://example.com/,'
239
+ expected = %Q{<p>Try <a href="https://example.com/" class="external">https://example.com/</a>,</p>\n}
240
+ @parser.parse(input).should == expected
241
+ end
242
+
243
+ it 'should not terminate on commas that occur within the URI' do
244
+ input = 'Try https://example.com/2008,10,12,index.html.'
245
+ expected = %Q{<p>Try <a href="https://example.com/2008,10,12,index.html" class="external">https://example.com/2008,10,12,index.html</a>.</p>\n}
246
+ @parser.parse(input).should == expected
247
+ end
248
+
249
+ it 'should terminate if followed by an exclamation mark' do
250
+ input = 'Try https://example.com/!'
251
+ expected = %Q{<p>Try <a href="https://example.com/" class="external">https://example.com/</a>!</p>\n}
252
+ @parser.parse(input).should == expected
253
+ end
254
+
255
+ it 'should not terminate on exclamation marks that occur within the URI' do
256
+ input = 'Try https://example.com/fun!.html.'
257
+ expected = %Q{<p>Try <a href="https://example.com/fun!.html" class="external">https://example.com/fun!.html</a>.</p>\n}
258
+ @parser.parse(input).should == expected
259
+ end
260
+
261
+ it 'should terminate if followed by a question mark' do
262
+ input = 'Try https://example.com/?'
263
+ expected = %Q{<p>Try <a href="https://example.com/" class="external">https://example.com/</a>?</p>\n}
264
+ @parser.parse(input).should == expected
265
+ end
266
+
267
+ it 'should not terminate on question marks that occur within the URI' do
268
+ input = 'Try https://example.com/fun.html?q=foo.'
269
+ expected = %Q{<p>Try <a href="https://example.com/fun.html?q=foo" class="external">https://example.com/fun.html?q=foo</a>.</p>\n}
270
+ @parser.parse(input).should == expected
271
+ end
272
+
273
+ it 'should terminate if followed by a semi-colon' do
274
+ input = 'Try https://example.com/;'
275
+ expected = %Q{<p>Try <a href="https://example.com/" class="external">https://example.com/</a>;</p>\n}
276
+ @parser.parse(input).should == expected
277
+ end
278
+
279
+ it 'should not terminate on semi-colons that occur within the URI' do
280
+ input = 'Try https://example.com/fun;edit.'
281
+ expected = %Q{<p>Try <a href="https://example.com/fun;edit" class="external">https://example.com/fun;edit</a>.</p>\n}
282
+ @parser.parse(input).should == expected
283
+ end
284
+
285
+ it 'should terminate if followed by a right parenthesis' do
286
+ input = '(Try https://example.com/)'
287
+ expected = %Q{<p>(Try <a href="https://example.com/" class="external">https://example.com/</a>)</p>\n}
288
+ @parser.parse(input).should == expected
289
+ end
290
+
291
+ it 'should not terminate on right-parentheses that occur within the URI' do
292
+ input = 'Try https://example.com/(fun).html.'
293
+ expected = %Q{<p>Try <a href="https://example.com/(fun).html" class="external">https://example.com/(fun).html</a>.</p>\n}
294
+ @parser.parse(input).should == expected
295
+ end
296
+ end
297
+
298
+ # note: these are just like the HTTP specs seeing as both URI types are treated the same syntactically
299
+ # (even though these aren't "real" FTP URIs)
300
+ describe 'after FTP URIs' do
301
+ it 'should terminate if followed by a period' do
302
+ input = 'Try ftp://example.com/.'
303
+ expected = %Q{<p>Try <a href="ftp://example.com/" class="external">ftp://example.com/</a>.</p>\n}
304
+ @parser.parse(input).should == expected
305
+ end
306
+
307
+ it 'should not terminate on periods that occur within the URI' do
308
+ input = 'Try ftp://www.example.com/.'
309
+ expected = %Q{<p>Try <a href="ftp://www.example.com/" class="external">ftp://www.example.com/</a>.</p>\n}
310
+ @parser.parse(input).should == expected
311
+ end
312
+
313
+ it 'should terminate if followed by a colon' do
314
+ input = 'Try ftp://example.com/:'
315
+ expected = %Q{<p>Try <a href="ftp://example.com/" class="external">ftp://example.com/</a>:</p>\n}
316
+ @parser.parse(input).should == expected
317
+ end
318
+
319
+ it 'should not terminate on colons that occur within the URI' do
320
+ input = 'Try ftp://example.com:3000/.'
321
+ expected = %Q{<p>Try <a href="ftp://example.com:3000/" class="external">ftp://example.com:3000/</a>.</p>\n}
322
+ @parser.parse(input).should == expected
323
+ end
324
+
325
+ it 'should terminate if followed by a comma' do
326
+ input = 'Try ftp://example.com/,'
327
+ expected = %Q{<p>Try <a href="ftp://example.com/" class="external">ftp://example.com/</a>,</p>\n}
328
+ @parser.parse(input).should == expected
329
+ end
330
+
331
+ it 'should not terminate on commas that occur within the URI' do
332
+ input = 'Try ftp://example.com/2008,10,12,index.html.'
333
+ expected = %Q{<p>Try <a href="ftp://example.com/2008,10,12,index.html" class="external">ftp://example.com/2008,10,12,index.html</a>.</p>\n}
334
+ @parser.parse(input).should == expected
335
+ end
336
+
337
+ it 'should terminate if followed by an exclamation mark' do
338
+ input = 'Try ftp://example.com/!'
339
+ expected = %Q{<p>Try <a href="ftp://example.com/" class="external">ftp://example.com/</a>!</p>\n}
340
+ @parser.parse(input).should == expected
341
+ end
342
+
343
+ it 'should not terminate on exclamation marks that occur within the URI' do
344
+ input = 'Try ftp://example.com/fun!.html.'
345
+ expected = %Q{<p>Try <a href="ftp://example.com/fun!.html" class="external">ftp://example.com/fun!.html</a>.</p>\n}
346
+ @parser.parse(input).should == expected
347
+ end
348
+
349
+ it 'should terminate if followed by a question mark' do
350
+ input = 'Try ftp://example.com/?'
351
+ expected = %Q{<p>Try <a href="ftp://example.com/" class="external">ftp://example.com/</a>?</p>\n}
352
+ @parser.parse(input).should == expected
353
+ end
354
+
355
+ it 'should not terminate on question marks that occur within the URI' do
356
+ input = 'Try ftp://example.com/fun.html?q=foo.'
357
+ expected = %Q{<p>Try <a href="ftp://example.com/fun.html?q=foo" class="external">ftp://example.com/fun.html?q=foo</a>.</p>\n}
358
+ @parser.parse(input).should == expected
359
+ end
360
+
361
+ it 'should terminate if followed by a semi-colon' do
362
+ input = 'Try ftp://example.com/;'
363
+ expected = %Q{<p>Try <a href="ftp://example.com/" class="external">ftp://example.com/</a>;</p>\n}
364
+ @parser.parse(input).should == expected
365
+ end
366
+
367
+ it 'should not terminate on semi-colons that occur within the URI' do
368
+ input = 'Try ftp://example.com/fun;edit.'
369
+ expected = %Q{<p>Try <a href="ftp://example.com/fun;edit" class="external">ftp://example.com/fun;edit</a>.</p>\n}
370
+ @parser.parse(input).should == expected
371
+ end
372
+
373
+ it 'should terminate if followed by a right parenthesis' do
374
+ input = '(Try ftp://example.com/)'
375
+ expected = %Q{<p>(Try <a href="ftp://example.com/" class="external">ftp://example.com/</a>)</p>\n}
376
+ @parser.parse(input).should == expected
377
+ end
378
+
379
+ it 'should not terminate on right-parentheses that occur within the URI' do
380
+ input = 'Try ftp://example.com/(fun).html.'
381
+ expected = %Q{<p>Try <a href="ftp://example.com/(fun).html" class="external">ftp://example.com/(fun).html</a>.</p>\n}
382
+ @parser.parse(input).should == expected
383
+ end
384
+ end
385
+
386
+ # note: these are just like the HTTP specs seeing as both URI types are treated the same syntactically
387
+ # (even though these aren't "real" SVN URIs)
388
+ describe 'after SVN URIs' do
389
+ it 'should terminate if followed by a period' do
390
+ input = 'Try svn://example.com/.'
391
+ expected = %Q{<p>Try <a href="svn://example.com/" class="external">svn://example.com/</a>.</p>\n}
392
+ @parser.parse(input).should == expected
393
+ end
394
+
395
+ it 'should not terminate on periods that occur within the URI' do
396
+ input = 'Try svn://www.example.com/.'
397
+ expected = %Q{<p>Try <a href="svn://www.example.com/" class="external">svn://www.example.com/</a>.</p>\n}
398
+ @parser.parse(input).should == expected
399
+ end
400
+
401
+ it 'should terminate if followed by a colon' do
402
+ input = 'Try svn://example.com/:'
403
+ expected = %Q{<p>Try <a href="svn://example.com/" class="external">svn://example.com/</a>:</p>\n}
404
+ @parser.parse(input).should == expected
405
+ end
406
+
407
+ it 'should not terminate on colons that occur within the URI' do
408
+ input = 'Try svn://example.com:3000/.'
409
+ expected = %Q{<p>Try <a href="svn://example.com:3000/" class="external">svn://example.com:3000/</a>.</p>\n}
410
+ @parser.parse(input).should == expected
411
+ end
412
+
413
+ it 'should terminate if followed by a comma' do
414
+ input = 'Try svn://example.com/,'
415
+ expected = %Q{<p>Try <a href="svn://example.com/" class="external">svn://example.com/</a>,</p>\n}
416
+ @parser.parse(input).should == expected
417
+ end
418
+
419
+ it 'should not terminate on commas that occur within the URI' do
420
+ input = 'Try svn://example.com/2008,10,12,index.html.'
421
+ expected = %Q{<p>Try <a href="svn://example.com/2008,10,12,index.html" class="external">svn://example.com/2008,10,12,index.html</a>.</p>\n}
422
+ @parser.parse(input).should == expected
423
+ end
424
+
425
+ it 'should terminate if followed by an exclamation mark' do
426
+ input = 'Try svn://example.com/!'
427
+ expected = %Q{<p>Try <a href="svn://example.com/" class="external">svn://example.com/</a>!</p>\n}
428
+ @parser.parse(input).should == expected
429
+ end
430
+
431
+ it 'should not terminate on exclamation marks that occur within the URI' do
432
+ input = 'Try svn://example.com/fun!.html.'
433
+ expected = %Q{<p>Try <a href="svn://example.com/fun!.html" class="external">svn://example.com/fun!.html</a>.</p>\n}
434
+ @parser.parse(input).should == expected
435
+ end
436
+
437
+ it 'should terminate if followed by a question mark' do
438
+ input = 'Try svn://example.com/?'
439
+ expected = %Q{<p>Try <a href="svn://example.com/" class="external">svn://example.com/</a>?</p>\n}
440
+ @parser.parse(input).should == expected
441
+ end
442
+
443
+ it 'should not terminate on question marks that occur within the URI' do
444
+ input = 'Try svn://example.com/fun.html?q=foo'
445
+ expected = %Q{<p>Try <a href="svn://example.com/fun.html?q=foo" class="external">svn://example.com/fun.html?q=foo</a></p>\n}
446
+ @parser.parse(input).should == expected
447
+ end
448
+
449
+ it 'should terminate if followed by a semi-colon' do
450
+ input = 'Try svn://example.com/;'
451
+ expected = %Q{<p>Try <a href="svn://example.com/" class="external">svn://example.com/</a>;</p>\n}
452
+ @parser.parse(input).should == expected
453
+ end
454
+
455
+ it 'should not terminate on semi-colons that occur within the URI' do
456
+ input = 'Try svn://example.com/fun;edit.'
457
+ expected = %Q{<p>Try <a href="svn://example.com/fun;edit" class="external">svn://example.com/fun;edit</a>.</p>\n}
458
+ @parser.parse(input).should == expected
459
+ end
460
+
461
+ it 'should terminate if followed by a right parenthesis' do
462
+ input = '(Try svn://example.com/)'
463
+ expected = %Q{<p>(Try <a href="svn://example.com/" class="external">svn://example.com/</a>)</p>\n}
464
+ @parser.parse(input).should == expected
465
+ end
466
+
467
+ it 'should not terminate on right-parentheses that occur within the URI' do
468
+ input = 'Try svn://example.com/(fun).html.'
469
+ expected = %Q{<p>Try <a href="svn://example.com/(fun).html" class="external">svn://example.com/(fun).html</a>.</p>\n}
470
+ @parser.parse(input).should == expected
471
+ end
472
+ end
473
+
474
+ # fewer specs here because the range of "mailto:" URIs recognized by the scanner is more limited
475
+ # (compared with, say, HTTP or HTTPS)
476
+ describe 'after "mailto:" URIs' do
477
+ it 'should terminate if followed by a period' do
478
+ input = 'Try mailto:user@example.com.'
479
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="external">mailto:user@example.com</a>.</p>\n}
480
+ @parser.parse(input).should == expected
481
+ end
482
+
483
+ it 'should not terminate on periods that occur within the URI' do
484
+ input = 'Try mailto:user.name@example.com.'
485
+ expected = %Q{<p>Try <a href="mailto:user.name@example.com" class="external">mailto:user.name@example.com</a>.</p>\n}
486
+ @parser.parse(input).should == expected
487
+ end
488
+
489
+ it 'should terminate if followed by a colon' do
490
+ input = 'Try mailto:user@example.com:'
491
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="external">mailto:user@example.com</a>:</p>\n}
492
+ @parser.parse(input).should == expected
493
+ end
494
+
495
+ it 'should terminate if followed by a comma' do
496
+ input = 'Try mailto:user@example.com,'
497
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="external">mailto:user@example.com</a>,</p>\n}
498
+ @parser.parse(input).should == expected
499
+ end
500
+
501
+ it 'should terminate if followed by an exclamation mark' do
502
+ input = 'Try mailto:user@example.com!'
503
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="external">mailto:user@example.com</a>!</p>\n}
504
+ @parser.parse(input).should == expected
505
+ end
506
+
507
+ it 'should terminate if followed by a question mark' do
508
+ input = 'Try mailto:user@example.com?'
509
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="external">mailto:user@example.com</a>?</p>\n}
510
+ @parser.parse(input).should == expected
511
+ end
512
+
513
+ it 'should not terminate on question marks that occur within the URI' do
514
+ pending
515
+ # this kind of autolink never worked (will require changes to the Ragel scanner)
516
+ input = 'Try mailto:user@example.com?subject=foo?'
517
+ expected = %Q{<p>Try <a href="mailto:user@example.com?subject=foo" class="external">mailto:user@example.com?subject=foo</a>.</p>\n}
518
+ @parser.parse(input).should == expected
519
+ end
520
+
521
+ it 'should terminate if followed by a semi-colon' do
522
+ input = 'Try mailto:user@example.com;'
523
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="external">mailto:user@example.com</a>;</p>\n}
524
+ @parser.parse(input).should == expected
525
+ end
526
+
527
+ it 'should terminate if followed by a right parenthesis' do
528
+ input = '(Try mailto:user@example.com)'
529
+ expected = %Q{<p>(Try <a href="mailto:user@example.com" class="external">mailto:user@example.com</a>)</p>\n}
530
+ @parser.parse(input).should == expected
531
+ end
532
+ end
533
+
534
+ describe 'after email addresses' do
535
+ it 'should terminate if followed by a period' do
536
+ input = 'Try user@example.com.'
537
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="mailto">user@example.com</a>.</p>\n}
538
+ @parser.parse(input).should == expected
539
+ end
540
+
541
+ it 'should not terminate on periods that occur within the email address' do
542
+ input = 'Try user.name@example.com.'
543
+ expected = %Q{<p>Try <a href="mailto:user.name@example.com" class="mailto">user.name@example.com</a>.</p>\n}
544
+ @parser.parse(input).should == expected
545
+ end
546
+
547
+ it 'should terminate if followed by a colon' do
548
+ input = 'Try user@example.com:'
549
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="mailto">user@example.com</a>:</p>\n}
550
+ @parser.parse(input).should == expected
551
+ end
552
+
553
+ it 'should terminate if followed by a comma' do
554
+ input = 'Try user@example.com,'
555
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="mailto">user@example.com</a>,</p>\n}
556
+ @parser.parse(input).should == expected
557
+ end
558
+
559
+ it 'should terminate if followed by an exclamation mark' do
560
+ input = 'Try user@example.com!'
561
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="mailto">user@example.com</a>!</p>\n}
562
+ @parser.parse(input).should == expected
563
+ end
564
+
565
+ it 'should terminate if followed by a question mark' do
566
+ input = 'Try user@example.com?'
567
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="mailto">user@example.com</a>?</p>\n}
568
+ @parser.parse(input).should == expected
569
+ end
570
+
571
+ it 'should terminate if followed by a semi-colon' do
572
+ input = 'Try user@example.com;'
573
+ expected = %Q{<p>Try <a href="mailto:user@example.com" class="mailto">user@example.com</a>;</p>\n}
574
+ @parser.parse(input).should == expected
575
+ end
576
+
577
+ it 'should terminate if followed by a right parenthesis' do
578
+ input = '(Try user@example.com)'
579
+ expected = %Q{<p>(Try <a href="mailto:user@example.com" class="mailto">user@example.com</a>)</p>\n}
580
+ @parser.parse(input).should == expected
581
+ end
582
+ end
583
+ end
122
584
  end