breakout_parser 0.0.2-x86-mingw32 → 0.0.3-x86-mingw32
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.
- data/lib/breakout_parser/win32-ruby1.8/breakout_parser.so +0 -0
- data/spec/parser_spec.rb +174 -101
- metadata +2 -2
Binary file
|
data/spec/parser_spec.rb
CHANGED
@@ -2,7 +2,11 @@ require 'breakout_parser'
|
|
2
2
|
|
3
3
|
describe 'BreakoutParser' do
|
4
4
|
def self.hex_string s
|
5
|
-
|
5
|
+
## sexier, but not runs on ruby 1.8.6 patchlevel 383 i386-mingw32:
|
6
|
+
#s.each_byte.to_a.map{ |c| "%02x" % c }.join
|
7
|
+
r = ''
|
8
|
+
s.each_byte{ |c| r << "%02x" % c }
|
9
|
+
r
|
6
10
|
end
|
7
11
|
def hex_string s; self.class.hex_string(s); end
|
8
12
|
|
@@ -43,16 +47,16 @@ describe 'BreakoutParser' do
|
|
43
47
|
parse("\r\n\t \t \n \r \n \t \t\n\r aaa").should == "aaa"
|
44
48
|
end
|
45
49
|
|
46
|
-
it "converts
|
50
|
+
it "converts each newline to <br />" do
|
47
51
|
parse("aaa\n\nbbb").should == "aaa<br /><br />bbb"
|
48
52
|
parse("aaa\n \nbbb").should == "aaa<br /><br />bbb"
|
49
|
-
parse("aaa\n\n\nbbb").should == "aaa<br /><br />bbb"
|
50
|
-
parse("aaa\n \n \nbbb").should == "aaa<br /><br />bbb"
|
51
|
-
parse("aaa\r\n \r\n \r\nbbb").should == "aaa<br /><br />bbb"
|
52
|
-
parse("aaa\n \n\n \nbbb").should == "aaa<br /><br />bbb"
|
53
|
-
parse("aaa\n \n\n\n \nbbb").should == "aaa<br
|
54
|
-
parse("aaa\n\n\n\n\n\n\nbbb").should == "aaa<br
|
55
|
-
parse("aaa\r\n\r\n\r\nbbb").should == "aaa<br
|
53
|
+
parse("aaa\n\n\nbbb").should == "aaa<br /><br /><br />bbb"
|
54
|
+
parse("aaa\n \n \nbbb").should == "aaa<br /><br /><br />bbb"
|
55
|
+
parse("aaa\r\n \r\n \r\nbbb").should == "aaa<br /><br /><br />bbb"
|
56
|
+
parse("aaa\n \n\n \nbbb").should == "aaa<br /><br /><br /><br />bbb"
|
57
|
+
parse("aaa\n \n\n\n \nbbb").should == "aaa" + "<br />"*5 + "bbb"
|
58
|
+
parse("aaa\n\n\n\n\n\n\nbbb").should == "aaa" + "<br />"*7 + "bbb"
|
59
|
+
parse("aaa\r\n\r\n\r\nbbb").should == "aaa" + "<br />"*3 + "bbb"
|
56
60
|
end
|
57
61
|
|
58
62
|
###############################################################################
|
@@ -354,68 +358,123 @@ describe 'BreakoutParser' do
|
|
354
358
|
|
355
359
|
###############################################################################
|
356
360
|
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
361
|
+
[
|
362
|
+
%w'<pre><code> </code></pre>',
|
363
|
+
%w'<pre> </pre>'
|
364
|
+
].each do |ot,ct|
|
365
|
+
# ot - opening tag
|
366
|
+
# ct - closing tag
|
367
|
+
|
368
|
+
describe "#{ot}..#{ct}" do
|
369
|
+
it "works" do
|
370
|
+
s = <<-EOF
|
371
|
+
for ( n = 0; n < max_size && \
|
372
|
+
(c = getc( yyin )) != EOF && c != '\\n'; ++n ) \
|
373
|
+
buf[n] = (char) c; \
|
374
|
+
|
375
|
+
EOF
|
376
|
+
|
377
|
+
parse("#{ot}#{s.strip}#{ct}").should ==
|
378
|
+
"#{ot}#{h(s.strip)}#{ct}"
|
379
|
+
|
380
|
+
s = <<-EOF
|
381
|
+
while ( 1 < 2 ) do
|
382
|
+
puts "<b>12345\\t54321</b>"
|
383
|
+
// *bold* comment
|
384
|
+
// _italic_ comment
|
385
|
+
end
|
386
|
+
---
|
387
|
+
* aaa
|
388
|
+
* bbb
|
389
|
+
* ccc
|
390
|
+
|
391
|
+
EOF
|
392
|
+
parse("#{ot}#{s.strip}#{ct}").should ==
|
393
|
+
"#{ot}#{h(s.strip)}#{ct}"
|
394
|
+
end
|
395
|
+
it "not parses *bold*" do
|
396
|
+
s = "#{ot} *bold*#{ct}"
|
397
|
+
parse(s).should == s
|
398
|
+
end
|
399
|
+
it "not parses _italic_" do
|
400
|
+
s = "#{ot} _italic_#{ct}"
|
401
|
+
parse(s).should == s
|
402
|
+
end
|
403
|
+
it "not parses UL lists" do
|
404
|
+
s = "#{ot}\n * l1\n * l2\n * l3#{ct}"
|
405
|
+
parse(s).should == s.sub(">\n",">")
|
406
|
+
end
|
407
|
+
it "not parses OL lists" do
|
408
|
+
s = "#{ot}\n # l1\n # l2\n # l3#{ct}"
|
409
|
+
parse(s).should == s.sub(">\n",">")
|
410
|
+
end
|
411
|
+
it "not parses H1..H5" do
|
412
|
+
1.upto(5) do |i|
|
413
|
+
s = "#{ot}\nh#{i}. zzzzzzz\n#{ct}"
|
414
|
+
parse(s).should == "#{ot}h#{i}. zzzzzzz#{ct}"
|
415
|
+
end
|
416
|
+
end
|
417
|
+
it "not parses raw text links" do
|
418
|
+
s = "#{ot}xxx http://www.ru yyy#{ct}"
|
419
|
+
parse(s).should == s
|
420
|
+
s = "#{ot}http://www.ru#{ct}"
|
421
|
+
parse(s).should == s
|
422
|
+
end
|
423
|
+
it "keeps newlines" do
|
424
|
+
s = "#{ot}aaa\nbbb#{ct}"
|
425
|
+
parse(s).should == s
|
426
|
+
s = "#{ot}aaa\n\nbbb\nccc#{ct}"
|
427
|
+
parse(s).should == s
|
428
|
+
end
|
429
|
+
|
430
|
+
it "w/o closing tags" do
|
431
|
+
s = "#{ot}aaa"
|
432
|
+
parse(s).should match(%r"#{ot}aaa\n?#{ct}")
|
433
|
+
end
|
434
|
+
|
435
|
+
it "in middle of text" do
|
436
|
+
s = "xxx #{ot}yyyy#{ct} jjj"
|
437
|
+
parse(s).should == s
|
438
|
+
end
|
439
|
+
|
440
|
+
it "with 2 instances" do
|
441
|
+
s = "xxx #{ot}yyyy#{ct} <jjj> #{ot}asdkjaslkd#{ct} END"
|
442
|
+
parse(s).should == s.sub('<jjj>','<jjj>')
|
443
|
+
end
|
444
|
+
|
445
|
+
it "works with unicode" do
|
446
|
+
s = "привет #{ot} жжж #{ct} пока!"
|
447
|
+
parse(s).should match(%r|привет ?#{ot} жжж#{ct} ?пока!|)
|
448
|
+
|
449
|
+
s = 'абвгдеёжзийклмнопрстуфхцчшщьыъэюя'
|
450
|
+
parse(s).should == s
|
451
|
+
|
452
|
+
s = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ'
|
453
|
+
parse(s).should == s
|
454
|
+
|
455
|
+
s = '☸☹☺☻☼☽☾☿'
|
456
|
+
parse(s).should == s
|
457
|
+
end
|
458
|
+
|
459
|
+
it "should escape lone closing tags" do
|
460
|
+
s = "#{ct}"
|
461
|
+
parse(s).should == h(s)
|
462
|
+
end
|
463
|
+
|
464
|
+
it "should skip newlines and spaces at end" do
|
465
|
+
s = "#{ot} aaa bbb ccc \n\n\n \t\n\n\n\r\n\r\n \t #{ct}"
|
466
|
+
parse(s).should == "#{ot} aaa bbb ccc#{ct}"
|
467
|
+
end
|
468
|
+
|
469
|
+
it "escapes html chars" do
|
470
|
+
HTML_ESCAPE.each do |k,v|
|
471
|
+
parse("#{ot}#{k}#{ct}").should == "#{ot}#{v}#{ct}"
|
472
|
+
end
|
404
473
|
end
|
405
474
|
end
|
406
|
-
|
407
|
-
s = "<pre><code>xxx http://www.ru yyy</code></pre>"
|
408
|
-
parse(s).should == s
|
409
|
-
s = "<pre><code>http://www.ru</code></pre>"
|
410
|
-
parse(s).should == s
|
411
|
-
end
|
412
|
-
it "keeps newlines" do
|
413
|
-
s = "<pre><code>aaa\nbbb</code></pre>"
|
414
|
-
parse(s).should == s
|
415
|
-
s = "<pre><code>aaa\n\nbbb\nccc</code></pre>"
|
416
|
-
parse(s).should == s
|
417
|
-
end
|
475
|
+
end
|
418
476
|
|
477
|
+
describe "<pre><code>..</code></pre>" do
|
419
478
|
it "with no spaces between <pre> and <code>" do
|
420
479
|
s = "<pre><code>aaa</code></pre>"
|
421
480
|
parse(s).should == s
|
@@ -429,50 +488,64 @@ describe 'BreakoutParser' do
|
|
429
488
|
s = "<pre> <code> aaa bbb </code> </pre>"
|
430
489
|
parse(s).should == "<pre><code> aaa bbb</code></pre>"
|
431
490
|
end
|
491
|
+
end
|
432
492
|
|
433
|
-
|
434
|
-
s = "<pre><code>aaa"
|
435
|
-
parse(s).should match(%r"<pre><code>aaa\n?</code></pre>")
|
436
|
-
end
|
493
|
+
###############################################################################
|
437
494
|
|
438
|
-
|
439
|
-
|
495
|
+
describe "<code>..</code>" do
|
496
|
+
it "keeps <code> tags" do
|
497
|
+
s = "<code>aaa</code>"
|
440
498
|
parse(s).should == s
|
441
499
|
end
|
442
|
-
|
443
|
-
|
444
|
-
s
|
445
|
-
parse(s).should == s.sub('<jjj>','<jjj>')
|
500
|
+
it "strips heading & tailing whitespace" do
|
501
|
+
s = "<code> \r\n \t \t\r aaa \r\n\t \t\r </code>"
|
502
|
+
parse(s).should == s.tr(" \r\n\t","")
|
446
503
|
end
|
447
|
-
|
448
|
-
|
449
|
-
s = "привет <pre><code> жжж </code></pre> пока!"
|
450
|
-
parse(s).should match(%r|привет ?<pre><code> жжж</code></pre> ?пока!|)
|
451
|
-
|
452
|
-
s = 'абвгдеёжзийклмнопрстуфхцчшщьыъэюя'
|
504
|
+
it "not parses *bold*" do
|
505
|
+
s = "<code>aaa *bbb* ccc</code>"
|
453
506
|
parse(s).should == s
|
454
|
-
|
455
|
-
|
507
|
+
end
|
508
|
+
it "not parses _italic_" do
|
509
|
+
s = "<code>aaa _bbb_ ccc</code>"
|
456
510
|
parse(s).should == s
|
457
|
-
|
458
|
-
|
511
|
+
end
|
512
|
+
it "not parses headers" do
|
513
|
+
s = "<code>aaa\nh1. bbb\nccc</code>"
|
459
514
|
parse(s).should == s
|
460
515
|
end
|
461
|
-
|
462
|
-
|
463
|
-
s
|
464
|
-
parse(s).should == h(s)
|
516
|
+
it "not parses <pre>" do
|
517
|
+
s = "<code>aaa <pre>bbb</pre> ccc</code>"
|
518
|
+
parse(s).should == "<code>aaa <pre>bbb</pre> ccc</code>"
|
465
519
|
end
|
466
|
-
|
467
|
-
|
468
|
-
s
|
469
|
-
parse(s).should == "<pre><code> aaa bbb ccc</code></pre>"
|
520
|
+
it "closes unclosed <code>" do
|
521
|
+
s = "aaa <code>bbb"
|
522
|
+
parse(s).should == "#{s}</code>"
|
470
523
|
end
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
524
|
+
it "escapes '&'" do
|
525
|
+
s = "<code>aaa & bbb</code>"
|
526
|
+
parse(s).should == s.sub('&','&')
|
527
|
+
end
|
528
|
+
it "not parses links" do
|
529
|
+
s = "<code>aaa #1 #2 #3 http://www.ru [[wiki:jjj]] [[url:http://www.ru]] bbb</code>"
|
530
|
+
parse(s).should == s
|
531
|
+
end
|
532
|
+
it "works two times" do
|
533
|
+
s = "<code>aaa & bbb</code> xxx <code>jjj&hhh</code>"
|
534
|
+
parse(s).should == s.gsub('&','&')
|
535
|
+
s = "<code> aaa </code>xxx<code> jjj </code>"
|
536
|
+
parse(s).should == s.gsub(' ','')
|
537
|
+
end
|
538
|
+
it "keeps code bold" do
|
539
|
+
s = "*aaa <code>bbb</code> ccc*"
|
540
|
+
parse(s).should == "<strong>aaa <code>bbb</code> ccc</strong>"
|
541
|
+
s = "*<code>aaa</code>*"
|
542
|
+
parse(s).should == "<strong><code>aaa</code></strong>"
|
543
|
+
end
|
544
|
+
it "keeps code italic" do
|
545
|
+
s = "_aaa <code>bbb</code> ccc_"
|
546
|
+
parse(s).should == "<em>aaa <code>bbb</code> ccc</em>"
|
547
|
+
s = "_<code>aaa</code>_"
|
548
|
+
parse(s).should == "<em><code>aaa</code></em>"
|
476
549
|
end
|
477
550
|
end
|
478
551
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: breakout_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: x86-mingw32
|
6
6
|
authors:
|
7
7
|
- Andrey "Zed" Zaikin
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-20 00:00:00 +05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|