fl-rocco 1.0.0
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/CHANGES.md +73 -0
- data/COPYING +18 -0
- data/README +23 -0
- data/Rakefile +115 -0
- data/bin/rocco +74 -0
- data/lib/rocco.rb +493 -0
- data/lib/rocco/comment_styles.rb +56 -0
- data/lib/rocco/layout.mustache +46 -0
- data/lib/rocco/layout.rb +64 -0
- data/lib/rocco/tasks.rb +123 -0
- data/lib/rocco/version.rb +3 -0
- data/rocco.gemspec +65 -0
- data/test/fixtures/issue10.iso-8859-1.rb +1 -0
- data/test/fixtures/issue10.utf-8.rb +1 -0
- data/test/helper.rb +25 -0
- data/test/suite.rb +5 -0
- data/test/test_basics.rb +63 -0
- data/test/test_block_comment_styles.rb +64 -0
- data/test/test_block_comments.rb +101 -0
- data/test/test_comment_normalization.rb +25 -0
- data/test/test_commentchar_detection.rb +28 -0
- data/test/test_descriptive_section_names.rb +30 -0
- data/test/test_docblock_annotations.rb +23 -0
- data/test/test_heredoc.rb +13 -0
- data/test/test_language_detection.rb +27 -0
- data/test/test_reported_issues.rb +84 -0
- data/test/test_skippable_lines.rb +64 -0
- data/test/test_source_list.rb +29 -0
- data/test/test_stylesheet.rb +23 -0
- metadata +110 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class RoccoBlockCommentTest < Test::Unit::TestCase
|
4
|
+
def test_one_liner
|
5
|
+
r = Rocco.new( 'test', '', { :language => "c" } ) { "" } # Generate throwaway instance so I can test `parse`
|
6
|
+
assert_equal(
|
7
|
+
[
|
8
|
+
[ [ "Comment 1" ], [ "def codeblock", "end" ] ]
|
9
|
+
],
|
10
|
+
r.parse( "/** Comment 1 */\ndef codeblock\nend\n" )
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_block_start_with_comment
|
15
|
+
r = Rocco.new( 'test', '', { :language => "c" } ) { "" } # Generate throwaway instance so I can test `parse`
|
16
|
+
assert_equal(
|
17
|
+
[
|
18
|
+
[ [ "Comment 1a", "Comment 1b" ], [ "def codeblock", "end" ] ]
|
19
|
+
],
|
20
|
+
r.parse( "/** Comment 1a\n * Comment 1b\n */\ndef codeblock\nend\n" )
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_block_end_with_comment
|
25
|
+
r = Rocco.new( 'test', '', { :language => "c" } ) { "" } # Generate throwaway instance so I can test `parse`
|
26
|
+
assert_equal(
|
27
|
+
[
|
28
|
+
[ [ "Comment 1a", "Comment 1b" ], [ "def codeblock", "end" ] ]
|
29
|
+
],
|
30
|
+
r.parse( "/**\n * Comment 1a\n Comment 1b */\ndef codeblock\nend\n" )
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_block_end_with_comment_and_middle
|
35
|
+
r = Rocco.new( 'test', '', { :language => "c" } ) { "" } # Generate throwaway instance so I can test `parse`
|
36
|
+
assert_equal(
|
37
|
+
[
|
38
|
+
[ [ "Comment 1a", "Comment 1b" ], [ "def codeblock", "end" ] ]
|
39
|
+
],
|
40
|
+
r.parse( "/**\n * Comment 1a\n * Comment 1b */\ndef codeblock\nend\n" )
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_block_start_with_comment_and_end_with_comment
|
45
|
+
r = Rocco.new( 'test', '', { :language => "c" } ) { "" } # Generate throwaway instance so I can test `parse`
|
46
|
+
assert_equal(
|
47
|
+
[
|
48
|
+
[ [ "Comment 1a", "Comment 1b" ], [ "def codeblock", "end" ] ]
|
49
|
+
],
|
50
|
+
r.parse( "/** Comment 1a\n Comment 1b */\ndef codeblock\nend\n" )
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_block_start_with_comment_and_end_with_comment_and_middle
|
55
|
+
r = Rocco.new( 'test', '', { :language => "c" } ) { "" } # Generate throwaway instance so I can test `parse`
|
56
|
+
assert_equal(
|
57
|
+
[
|
58
|
+
[ [ "Comment 1a", "Comment 1b" ], [ "def codeblock", "end" ] ]
|
59
|
+
],
|
60
|
+
r.parse( "/** Comment 1a\n * Comment 1b */\ndef codeblock\nend\n" )
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class RoccoBlockCommentTest < Test::Unit::TestCase
|
4
|
+
def test_basics
|
5
|
+
r = Rocco.new( 'test', '', { :language => "c" } ) { "" } # Generate throwaway instance so I can test `parse`
|
6
|
+
assert_equal(
|
7
|
+
[
|
8
|
+
[ [ "Comment 1" ], [ "def codeblock", "end" ] ]
|
9
|
+
],
|
10
|
+
r.parse( "/**\n * Comment 1\n */\ndef codeblock\nend\n" )
|
11
|
+
)
|
12
|
+
assert_equal(
|
13
|
+
[
|
14
|
+
[ [ "Comment 1a", "Comment 1b" ], [ "def codeblock", "end" ] ]
|
15
|
+
],
|
16
|
+
r.parse( "/**\n * Comment 1a\n * Comment 1b\n */\ndef codeblock\nend\n" )
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_multiple_blocks
|
21
|
+
r = Rocco.new( 'test', '', { :language => "c" } ) { "" } # Generate throwaway instance so I can test `parse`
|
22
|
+
assert_equal(
|
23
|
+
[
|
24
|
+
[ [ "Comment 1" ], [ "def codeblock", "end" ] ],
|
25
|
+
[ [ "Comment 2" ], [] ]
|
26
|
+
],
|
27
|
+
r.parse( "/**\n * Comment 1\n */\ndef codeblock\nend\n/**\n * Comment 2\n */\n" )
|
28
|
+
)
|
29
|
+
assert_equal(
|
30
|
+
[
|
31
|
+
[ [ "Comment 1" ], [ "def codeblock", "end" ] ],
|
32
|
+
[ [ "Comment 2" ], [ "if false", "end" ] ]
|
33
|
+
],
|
34
|
+
r.parse( "/**\n * Comment 1\n */\ndef codeblock\nend\n/**\n * Comment 2\n */\nif false\nend" )
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_block_without_middle_character
|
39
|
+
r = Rocco.new( 'test', '', { :language => "python" } ) { "" } # Generate throwaway instance so I can test `parse`
|
40
|
+
assert_equal(
|
41
|
+
[
|
42
|
+
[ [ "Comment 1" ], [ "def codeblock", "end" ] ],
|
43
|
+
[ [ "Comment 2" ], [] ]
|
44
|
+
],
|
45
|
+
r.parse( "\"\"\"\n Comment 1\n\"\"\"\ndef codeblock\nend\n\"\"\"\n Comment 2\n\"\"\"\n" )
|
46
|
+
)
|
47
|
+
assert_equal(
|
48
|
+
[
|
49
|
+
[ [ "Comment 1" ], [ "def codeblock", "end" ] ],
|
50
|
+
[ [ "Comment 2" ], [ "if false", "end" ] ]
|
51
|
+
],
|
52
|
+
r.parse( "\"\"\"\n Comment 1\n\"\"\"\ndef codeblock\nend\n\"\"\"\n Comment 2\n\"\"\"\nif false\nend" )
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_language_without_single_line_comments_parse
|
57
|
+
r = Rocco.new( 'test', '', { :language => "css" } ) { "" } # Generate throwaway instance so I can test `parse`
|
58
|
+
assert_equal(
|
59
|
+
[
|
60
|
+
[ [ "Comment 1" ], [ "def codeblock", "end" ] ],
|
61
|
+
[ [ "Comment 2" ], [ "if false", "end" ] ]
|
62
|
+
],
|
63
|
+
r.parse( "/**\n * Comment 1\n */\ndef codeblock\nend\n/**\n * Comment 2\n */\nif false\nend" )
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_language_without_single_line_comments_split
|
68
|
+
r = Rocco.new( 'test', '', { :language => "css" } ) { "" } # Generate throwaway instance so I can test `parse`
|
69
|
+
assert_equal(
|
70
|
+
[
|
71
|
+
[ "Comment 1", "Comment 2" ],
|
72
|
+
[ "def codeblock\nend", "if false\nend" ]
|
73
|
+
],
|
74
|
+
r.split( [
|
75
|
+
[ [ "Comment 1" ], [ "def codeblock", "end" ] ],
|
76
|
+
[ [ "Comment 2" ], [ "if false", "end" ] ]
|
77
|
+
] )
|
78
|
+
)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_language_without_single_line_comments_highlight
|
82
|
+
r = Rocco.new( 'test', '', { :language => "css" } ) { "" } # Generate throwaway instance so I can test `parse`
|
83
|
+
|
84
|
+
highlighted = r.highlight( r.split( r.parse( "/**\n * This is a comment!\n */\n.rule { goes: here; }\n/**\n * Comment 2\n */\n.rule2 { goes: here; }" ) ) )
|
85
|
+
assert_equal(
|
86
|
+
"<p>This is a comment!</p>",
|
87
|
+
highlighted[0][0]
|
88
|
+
)
|
89
|
+
assert_equal(
|
90
|
+
fb_assert_val("<p>Comment 2</p>\n"),
|
91
|
+
highlighted[1][0]
|
92
|
+
)
|
93
|
+
assert(
|
94
|
+
!highlighted[0][1].include?("DIVIDER") &&
|
95
|
+
!highlighted[1][1].include?("DIVIDER"),
|
96
|
+
"`DIVIDER` stripped successfully."
|
97
|
+
)
|
98
|
+
assert( true )
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class RoccoCommentNormalization < Test::Unit::TestCase
|
4
|
+
def test_normal_comments
|
5
|
+
r = Rocco.new( 'test', '', { :language => "python" } ) { "" } # Generate throwaway instance so I can test `parse`
|
6
|
+
assert_equal(
|
7
|
+
[
|
8
|
+
[ [ "Comment 1a", "Comment 1b" ], [ "def codeblock", "end" ] ],
|
9
|
+
[ [ "Comment 2a", " Comment 2b" ], [] ]
|
10
|
+
],
|
11
|
+
r.parse( "\"\"\"\n Comment 1a\n Comment 1b\n\"\"\"\ndef codeblock\nend\n\"\"\"\n Comment 2a\n Comment 2b\n\"\"\"\n" )
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_single_line_comments
|
16
|
+
r = Rocco.new( 'test', '', { :language => "python" } ) { "" } # Generate throwaway instance so I can test `parse`
|
17
|
+
assert_equal(
|
18
|
+
[
|
19
|
+
[ [ "Comment 1a", "Comment 1b" ], [ "def codeblock", "end" ] ],
|
20
|
+
[ [ "Comment 2a", " Comment 2b" ], [] ]
|
21
|
+
],
|
22
|
+
r.parse( "# Comment 1a\n# Comment 1b\ndef codeblock\nend\n# Comment 2a\n# Comment 2b\n" )
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class RoccoAutomaticCommentChars < Test::Unit::TestCase
|
4
|
+
def test_basic_detection
|
5
|
+
r = Rocco.new( 'filename.js' ) { "" }
|
6
|
+
assert_equal "//", r.options[:comment_chars][:single]
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_fallback_language
|
10
|
+
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever', '', { :language => "js" } ) { "" }
|
11
|
+
assert_equal "//", r.options[:comment_chars][:single]
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_fallback_default
|
15
|
+
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever' ) { "" }
|
16
|
+
assert_equal "#", r.options[:comment_chars][:single], "`:comment_chars` should be `#` when falling back to defaults."
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_fallback_user
|
20
|
+
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever', '', { :comment_chars => "user" } ) { "" }
|
21
|
+
assert_equal "user", r.options[:comment_chars][:single], "`:comment_chars` should be the user's default when falling back to user-provided settings."
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_fallback_user_with_unknown_language
|
25
|
+
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever', '', { :language => "not-a-language", :comment_chars => "user" } ) { "" }
|
26
|
+
assert_equal "user", r.options[:comment_chars][:single], "`:comment_chars` should be the user's default when falling back to user-provided settings."
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class RoccoDescriptiveSectionNamesTests < Test::Unit::TestCase
|
4
|
+
def test_section_name
|
5
|
+
r = roccoize( "filename.rb", "# # Comment 1\ndef codeblock\nend\n" )
|
6
|
+
html = r.to_html
|
7
|
+
assert(
|
8
|
+
html.include?( "<tr id='section-Comment_1'>" ),
|
9
|
+
"The first section should be named"
|
10
|
+
)
|
11
|
+
assert(
|
12
|
+
html.include?( '<a class="pilcrow" href="#section-Comment_1">' ),
|
13
|
+
"The rendered HTML should link to a named section"
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_section_numbering
|
18
|
+
r = roccoize( "filename.rb", "# # Header 1\ndef codeblock\nend\n# Comment 1\ndef codeblock1\nend\n# # Header 2\ndef codeblock2\nend" )
|
19
|
+
html = r.to_html
|
20
|
+
assert(
|
21
|
+
html.include?( '<a class="pilcrow" href="#section-Header_1">' ) &&
|
22
|
+
html.include?( '<a class="pilcrow" href="#section-Header_2">' ),
|
23
|
+
"First and second headers should be named sections"
|
24
|
+
)
|
25
|
+
assert(
|
26
|
+
html.include?( '<a class="pilcrow" href="#section-2">' ),
|
27
|
+
"Sections should continue numbering as though headers were counted."
|
28
|
+
)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class RoccoDocblockAnnotationsTest < Test::Unit::TestCase
|
4
|
+
def test_basics
|
5
|
+
r = Rocco.new( 'test', '', { :language => "c", :docblocks => true } ) { "" } # Generate throwaway instance so I can test `parse`
|
6
|
+
assert_equal(
|
7
|
+
[
|
8
|
+
"Comment\n\n> **param** mixed foo \n> **return** void "
|
9
|
+
],
|
10
|
+
r.docblock( ["Comment\n\n@param mixed foo\n@return void"] )
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_highlighted_in_blocks
|
15
|
+
r = Rocco.new( 'test', '', { :language => "c", :docblocks => true } ) { "" } # Generate throwaway instance so I can test `parse`
|
16
|
+
highlighted = r.highlight( r.split( r.parse( "/**\n * Comment\n *\n * @param type name\n */\ndef codeblock\nend\n" ) ) )
|
17
|
+
|
18
|
+
assert_equal(
|
19
|
+
Rocco::MD_BLUECLOTH ? "<p>Comment</p>\n\n<blockquote><p><strong>param</strong> type name</p></blockquote>" : "<p>Comment</p>\n<blockquote>\n<p><strong>param</strong> type name </p>\n</blockquote>",
|
20
|
+
highlighted[0][0]
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class RoccoHeredocTest < Test::Unit::TestCase
|
4
|
+
def test_basics
|
5
|
+
r = Rocco.new( 'test', '', { :language => "rb" } ) { "" } # Generate throwaway instance so I can test `parse`
|
6
|
+
assert_equal(
|
7
|
+
[
|
8
|
+
[ [ "Comment 1" ], [ "heredoc <<-EOH", "#comment", "code", "EOH" ] ]
|
9
|
+
],
|
10
|
+
r.parse( "# Comment 1\nheredoc <<-EOH\n#comment\ncode\nEOH" )
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class RoccoLanguageDetection < Test::Unit::TestCase
|
4
|
+
def test_basic_detection
|
5
|
+
r = Rocco.new( 'filename.py' ) { "" }
|
6
|
+
if r.pygmentize?
|
7
|
+
assert_equal "python", r.detect_language(), "`detect_language()` should return the correct language"
|
8
|
+
assert_equal "python", r.options[:language], "`@options[:language]` should be set to the correct language"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_fallback_default
|
13
|
+
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever' ) { "" }
|
14
|
+
if r.pygmentize?
|
15
|
+
assert_equal "text", r.detect_language(), "`detect_language()` should return `text` when nothing else is detected"
|
16
|
+
assert_equal "ruby", r.options[:language], "`@options[:language]` should be set to `ruby` when nothing else is detected"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_fallback_user
|
21
|
+
r = Rocco.new( 'filename.an_extension_with_no_meaning_whatsoever', '', { :language => "c" } ) { "" }
|
22
|
+
if r.pygmentize?
|
23
|
+
assert_equal "text", r.detect_language(), "`detect_language()` should return `text` nothing else is detected"
|
24
|
+
assert_equal "c", r.options[:language], "`@options[:language]` should be set to the user's setting when nothing else is detected"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.expand_path('../helper', __FILE__)
|
3
|
+
|
4
|
+
class RoccoIssueTests < Test::Unit::TestCase
|
5
|
+
def test_issue07_incorrect_parsing_in_c_mode
|
6
|
+
# Precursor to issue #13 below, Rocco incorrectly parsed C/C++
|
7
|
+
# http://github.com/rtomayko/rocco/issues#issue/7
|
8
|
+
r = Rocco.new( 'issue7.c', [], { :language => 'c' } ) {
|
9
|
+
"// *stdio.h* declares *puts*\n#include <stdio.h>\n\n//### code hello world\n\n// every C program contains function *main*.\nint main (int argc, char *argv[]) {\n puts('hello world');\n return 0;\n}\n\n// that's it!"
|
10
|
+
}
|
11
|
+
r.sections.each do | section |
|
12
|
+
if not section[1].nil?
|
13
|
+
assert(
|
14
|
+
!section[1].include?("<span class=\"c\"># DIVIDER</span>"),
|
15
|
+
"`# DIVIDER` present in code text, which means the highligher screwed up somewhere."
|
16
|
+
)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_issue10_utf8_processing
|
22
|
+
# Rocco has issues with strange UTF-8 characters: need to explicitly set the encoding for Pygments
|
23
|
+
# http://github.com/rtomayko/rocco/issues#issue/10
|
24
|
+
r = Rocco.new( File.dirname(__FILE__) + "/fixtures/issue10.utf-8.rb" )
|
25
|
+
assert_equal(
|
26
|
+
fb_assert_val("<p>hello ąćęłńóśźż</p>\n"),
|
27
|
+
r.sections[0][0],
|
28
|
+
"UTF-8 input files ought behave correctly."
|
29
|
+
)
|
30
|
+
# and, just for grins, ensure that iso-8859-1 works too.
|
31
|
+
r = Rocco.new( File.dirname(__FILE__) + "/fixtures/issue10.iso-8859-1.rb", [], :encoding => 'ISO-8859-1' )
|
32
|
+
assert_equal(
|
33
|
+
fb_assert_val("<p>hello wörld</p>\n"),
|
34
|
+
r.sections[0][0],
|
35
|
+
"ISO-8859-1 input should probably also behave correctly."
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_issue12_css_octothorpe_classname_change
|
40
|
+
# Docco changed some CSS classes. Rocco needs to update its default template.
|
41
|
+
# http://github.com/rtomayko/rocco/issues#issue/12
|
42
|
+
r = Rocco.new( 'issue12.sh' ) {
|
43
|
+
"# Comment 1\n# Comment 1\nprint 'omg!'"
|
44
|
+
}
|
45
|
+
html = r.to_html
|
46
|
+
assert(
|
47
|
+
!html.include?( "<div class=\"octowrap\">" ),
|
48
|
+
"`octowrap` wrapper is present in rendered HTML. This ought be replaced with `pilwrap`."
|
49
|
+
)
|
50
|
+
assert(
|
51
|
+
!html.include?( "<a class=\"octothorpe\" href=\"#section-1\">" ),
|
52
|
+
"`octothorpe` link is present in rendered HTML. This ought be replaced with `pilcrow`."
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_issue13_incorrect_code_divider_parsing
|
57
|
+
# In `bash` mode (among others), the comment class is `c`, not `c1`.
|
58
|
+
# http://github.com/rtomayko/rocco/issues#issue/13
|
59
|
+
r = Rocco.new( 'issue13.sh', [], { :language => 'bash' } ) {
|
60
|
+
"# Comment 1\necho 'code';\n# Comment 2\necho 'code';\n# Comment 3\necho 'code';\n"
|
61
|
+
}
|
62
|
+
r.sections.each do | section |
|
63
|
+
if not section[1].nil?
|
64
|
+
assert(
|
65
|
+
!section[1].include?("<span class=\"c\"># DIVIDER</span>"),
|
66
|
+
"`# DIVIDER` present in code text, which means the highligher screwed up somewhere."
|
67
|
+
)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_issue15_extra_space_after_comment_character_remains
|
73
|
+
# After the comment character, a single space should be removed.
|
74
|
+
# http://github.com/rtomayko/rocco/issues#issue/15
|
75
|
+
r = Rocco.new( 'issue15.sh') {
|
76
|
+
"# Comment 1\n# ---------\necho 'code';"
|
77
|
+
}
|
78
|
+
assert(
|
79
|
+
!r.sections[0][0].include?( "<hr />" ),
|
80
|
+
"`<hr />` present in rendered documentation text. It should be a header, not text followed by a horizontal rule."
|
81
|
+
)
|
82
|
+
assert_equal(fb_assert_val("<h2>Comment 1</h2>\n"), r.sections[0][0])
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class RoccoSkippableLines < Test::Unit::TestCase
|
4
|
+
def test_shebang_first_line
|
5
|
+
r = Rocco.new( 'filename.sh' ) { "" }
|
6
|
+
assert_equal(
|
7
|
+
[
|
8
|
+
[ [ "Comment 1" ], [ "def codeblock" ] ],
|
9
|
+
[ [ "Comment 2" ], [ "end" ] ]
|
10
|
+
],
|
11
|
+
r.parse( "#!/usr/bin/env bash\n# Comment 1\ndef codeblock\n# Comment 2\nend\n" ),
|
12
|
+
"Shebang should be stripped when it appears as the first line."
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_shebang_in_content
|
17
|
+
r = Rocco.new( 'filename.sh' ) { "" }
|
18
|
+
assert_equal(
|
19
|
+
[
|
20
|
+
# @TODO: `#!/` shouldn't be recognized as a comment.
|
21
|
+
[ [ "Comment 1", "!/usr/bin/env bash" ], [ "def codeblock" ] ],
|
22
|
+
[ [ "Comment 2" ], [ "end" ] ]
|
23
|
+
],
|
24
|
+
r.parse( "# Comment 1\n#!/usr/bin/env bash\ndef codeblock\n# Comment 2\nend\n" ),
|
25
|
+
"Shebang shouldn't be stripped anywhere other than as the first line."
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_encoding_in_ruby
|
30
|
+
r = Rocco.new( 'filename.rb' ) { "" }
|
31
|
+
assert_equal(
|
32
|
+
[
|
33
|
+
[ [ "Comment 1" ], [ "def codeblock" ] ],
|
34
|
+
[ [ "Comment 2" ], [ "end" ] ]
|
35
|
+
],
|
36
|
+
r.parse( "#!/usr/bin/env bash\n# encoding: utf-8\n# Comment 1\ndef codeblock\n# Comment 2\nend\n" ),
|
37
|
+
"Strings matching the PEP 263 encoding definition regex should be stripped when they appear at the top of a python document."
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_encoding_in_python
|
42
|
+
r = Rocco.new( 'filename.py', [], {:language => "python"} ) { "" }
|
43
|
+
assert_equal(
|
44
|
+
[
|
45
|
+
[ [ "Comment 1" ], [ "def codeblock" ] ],
|
46
|
+
[ [ "Comment 2" ], [ "end" ] ]
|
47
|
+
],
|
48
|
+
r.parse( "#!/usr/bin/env bash\n# encoding: utf-8\n# Comment 1\ndef codeblock\n# Comment 2\nend\n" ),
|
49
|
+
"Strings matching the PEP 263 encoding definition regex should be stripped when they appear at the top of a python document."
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_encoding_in_notpython
|
54
|
+
r = Rocco.new( 'filename.sh' ) { "" }
|
55
|
+
assert_equal(
|
56
|
+
[
|
57
|
+
[ [ "encoding: utf-8", "Comment 1" ], [ "def codeblock" ] ],
|
58
|
+
[ [ "Comment 2" ], [ "end" ] ]
|
59
|
+
],
|
60
|
+
r.parse( "#!/usr/bin/env bash\n# encoding: utf-8\n# Comment 1\ndef codeblock\n# Comment 2\nend\n" ),
|
61
|
+
"Strings matching the PEP 263 encoding definition regex should be stripped when they appear at the top of a python document."
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|