dkastner-rocco 0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.md +63 -0
- data/COPYING +18 -0
- data/README +23 -0
- data/Rakefile +115 -0
- data/bin/rocco +100 -0
- data/lib/rocco.rb +526 -0
- data/lib/rocco/layout.mustache +46 -0
- data/lib/rocco/layout.rb +54 -0
- data/lib/rocco/tasks.rb +123 -0
- data/rocco.gemspec +54 -0
- data/test/fixtures/issue10.iso-8859-1.rb +1 -0
- data/test/fixtures/issue10.utf-8.rb +1 -0
- data/test/helper.rb +20 -0
- data/test/suite.rb +5 -0
- data/test/test_basics.rb +63 -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_language_detection.rb +27 -0
- data/test/test_reported_issues.rb +86 -0
- data/test/test_skippable_lines.rb +64 -0
- data/test/test_source_list.rb +29 -0
- metadata +111 -0
@@ -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,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,86 @@
|
|
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
|
+
"<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
|
+
# @TODO: Is this really the correct behavior? Converting text
|
32
|
+
# to UTF-8 on the way out is probably preferable.
|
33
|
+
r = Rocco.new( File.dirname(__FILE__) + "/fixtures/issue10.iso-8859-1.rb" )
|
34
|
+
assert_equal(
|
35
|
+
"<p>hello w\366rld</p>\n",
|
36
|
+
r.sections[0][0],
|
37
|
+
"ISO-8859-1 input should probably also behave correctly."
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_issue12_css_octothorpe_classname_change
|
42
|
+
# Docco changed some CSS classes. Rocco needs to update its default template.
|
43
|
+
# http://github.com/rtomayko/rocco/issues#issue/12
|
44
|
+
r = Rocco.new( 'issue12.sh' ) {
|
45
|
+
"# Comment 1\n# Comment 1\nprint 'omg!'"
|
46
|
+
}
|
47
|
+
html = r.to_html
|
48
|
+
assert(
|
49
|
+
!html.include?( "<div class=\"octowrap\">" ),
|
50
|
+
"`octowrap` wrapper is present in rendered HTML. This ought be replaced with `pilwrap`."
|
51
|
+
)
|
52
|
+
assert(
|
53
|
+
!html.include?( "<a class=\"octothorpe\" href=\"#section-1\">" ),
|
54
|
+
"`octothorpe` link is present in rendered HTML. This ought be replaced with `pilcrow`."
|
55
|
+
)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_issue13_incorrect_code_divider_parsing
|
59
|
+
# In `bash` mode (among others), the comment class is `c`, not `c1`.
|
60
|
+
# http://github.com/rtomayko/rocco/issues#issue/13
|
61
|
+
r = Rocco.new( 'issue13.sh', [], { :language => 'bash' } ) {
|
62
|
+
"# Comment 1\necho 'code';\n# Comment 2\necho 'code';\n# Comment 3\necho 'code';\n"
|
63
|
+
}
|
64
|
+
r.sections.each do | section |
|
65
|
+
if not section[1].nil?
|
66
|
+
assert(
|
67
|
+
!section[1].include?("<span class=\"c\"># DIVIDER</span>"),
|
68
|
+
"`# DIVIDER` present in code text, which means the highligher screwed up somewhere."
|
69
|
+
)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_issue15_extra_space_after_comment_character_remains
|
75
|
+
# After the comment character, a single space should be removed.
|
76
|
+
# http://github.com/rtomayko/rocco/issues#issue/15
|
77
|
+
r = Rocco.new( 'issue15.sh') {
|
78
|
+
"# Comment 1\n# ---------\necho 'code';"
|
79
|
+
}
|
80
|
+
assert(
|
81
|
+
!r.sections[0][0].include?( "<hr />" ),
|
82
|
+
"`<hr />` present in rendered documentation text. It should be a header, not text followed by a horizontal rule."
|
83
|
+
)
|
84
|
+
assert_equal("<h2>Comment 1</h2>\n", r.sections[0][0])
|
85
|
+
end
|
86
|
+
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' ) { "" }
|
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
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class RoccoSourceListTests < Test::Unit::TestCase
|
4
|
+
def test_flat_sourcelist
|
5
|
+
r = Rocco.new( 'issue26.sh', [ 'issue26a.sh', 'issue26b.sh', 'issue26c.sh' ] ) {
|
6
|
+
"# Comment 1\n# Comment 1\nprint 'omg!'"
|
7
|
+
}
|
8
|
+
html = r.to_html
|
9
|
+
assert(
|
10
|
+
html.include?( '<a class="source" href="issue26a.html">issue26a.sh</a>' ) &&
|
11
|
+
html.include?( '<a class="source" href="issue26b.html">issue26b.sh</a>' ) &&
|
12
|
+
html.include?( '<a class="source" href="issue26c.html">issue26c.sh</a>' ),
|
13
|
+
"URLs correctly generated for files in a flat directory structure"
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_heiarachical_sourcelist
|
18
|
+
r = Rocco.new( 'a/issue26.sh', [ 'a/issue26a.sh', 'b/issue26b.sh', 'c/issue26c.sh' ] ) {
|
19
|
+
"# Comment 1\n# Comment 1\nprint 'omg!'"
|
20
|
+
}
|
21
|
+
html = r.to_html
|
22
|
+
assert(
|
23
|
+
html.include?( '<a class="source" href="issue26a.html">issue26a.sh</a>' ) &&
|
24
|
+
html.include?( '<a class="source" href="../b/issue26b.html">issue26b.sh</a>' ) &&
|
25
|
+
html.include?( '<a class="source" href="../c/issue26c.html">issue26c.sh</a>' ),
|
26
|
+
"URLs correctly generated for files in a flat directory structure"
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dkastner-rocco
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: "0.8"
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ryan Tomayko
|
9
|
+
- Mike West
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
|
14
|
+
date: 2011-05-24 00:00:00 Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: rdiscount
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mustache
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "0"
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: rake
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.9.0
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
49
|
+
description: Docco in Ruby
|
50
|
+
email:
|
51
|
+
- r@tomayko.com
|
52
|
+
- <mike@mikewest.org>
|
53
|
+
executables:
|
54
|
+
- rocco
|
55
|
+
extensions: []
|
56
|
+
|
57
|
+
extra_rdoc_files: []
|
58
|
+
|
59
|
+
files:
|
60
|
+
- CHANGES.md
|
61
|
+
- COPYING
|
62
|
+
- README
|
63
|
+
- Rakefile
|
64
|
+
- bin/rocco
|
65
|
+
- lib/rocco.rb
|
66
|
+
- lib/rocco/layout.mustache
|
67
|
+
- lib/rocco/layout.rb
|
68
|
+
- lib/rocco/tasks.rb
|
69
|
+
- rocco.gemspec
|
70
|
+
- test/fixtures/issue10.iso-8859-1.rb
|
71
|
+
- test/fixtures/issue10.utf-8.rb
|
72
|
+
- test/helper.rb
|
73
|
+
- test/suite.rb
|
74
|
+
- test/test_basics.rb
|
75
|
+
- test/test_block_comments.rb
|
76
|
+
- test/test_comment_normalization.rb
|
77
|
+
- test/test_commentchar_detection.rb
|
78
|
+
- test/test_descriptive_section_names.rb
|
79
|
+
- test/test_language_detection.rb
|
80
|
+
- test/test_reported_issues.rb
|
81
|
+
- test/test_skippable_lines.rb
|
82
|
+
- test/test_source_list.rb
|
83
|
+
homepage: http://rtomayko.github.com/rocco/
|
84
|
+
licenses: []
|
85
|
+
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: "0"
|
97
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: "0"
|
103
|
+
requirements: []
|
104
|
+
|
105
|
+
rubyforge_project:
|
106
|
+
rubygems_version: 1.8.3
|
107
|
+
signing_key:
|
108
|
+
specification_version: 2
|
109
|
+
summary: Docco in Ruby
|
110
|
+
test_files: []
|
111
|
+
|