rdoc 4.2.1 → 6.3.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rdoc might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/CONTRIBUTING.rdoc +8 -7
- data/Gemfile +12 -0
- data/History.rdoc +48 -4
- data/LEGAL.rdoc +2 -2
- data/README.rdoc +5 -5
- data/Rakefile +73 -155
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/{bin → exe}/rdoc +0 -0
- data/{bin → exe}/ri +0 -0
- data/lib/rdoc/alias.rb +1 -0
- data/lib/rdoc/anon_class.rb +1 -0
- data/lib/rdoc/any_method.rb +59 -14
- data/lib/rdoc/attr.rb +1 -0
- data/lib/rdoc/class_module.rb +5 -2
- data/lib/rdoc/code_object.rb +3 -11
- data/lib/rdoc/code_objects.rb +1 -0
- data/lib/rdoc/comment.rb +32 -11
- data/lib/rdoc/constant.rb +3 -2
- data/lib/rdoc/context/section.rb +7 -13
- data/lib/rdoc/context.rb +78 -23
- data/lib/rdoc/cross_reference.rb +33 -14
- data/lib/rdoc/encoding.rb +92 -55
- data/lib/rdoc/erb_partial.rb +2 -1
- data/lib/rdoc/erbio.rb +8 -3
- data/lib/rdoc/extend.rb +1 -0
- data/lib/rdoc/generator/darkfish.rb +62 -32
- data/lib/rdoc/generator/json_index.rb +8 -5
- data/lib/rdoc/generator/markup.rb +3 -12
- data/lib/rdoc/generator/pot/message_extractor.rb +68 -0
- data/lib/rdoc/generator/pot/po.rb +84 -0
- data/lib/rdoc/generator/pot/po_entry.rb +141 -0
- data/lib/rdoc/generator/pot.rb +4 -3
- data/lib/rdoc/generator/ri.rb +1 -0
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_head.rhtml +11 -8
- data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
- data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +4 -4
- data/lib/rdoc/generator/template/darkfish/class.rhtml +45 -47
- data/lib/rdoc/generator/template/darkfish/css/fonts.css +6 -6
- data/lib/rdoc/generator/template/darkfish/css/rdoc.css +55 -6
- data/lib/rdoc/generator/template/darkfish/index.rhtml +3 -4
- data/lib/rdoc/generator/template/darkfish/js/darkfish.js +23 -100
- data/lib/rdoc/generator/template/darkfish/js/search.js +32 -31
- data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +15 -16
- data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +16 -16
- data/lib/rdoc/generator/template/json_index/js/navigation.js +4 -41
- data/lib/rdoc/generator/template/json_index/js/searcher.js +7 -6
- data/lib/rdoc/generator.rb +1 -1
- data/lib/rdoc/ghost_method.rb +1 -0
- data/lib/rdoc/i18n/locale.rb +2 -1
- data/lib/rdoc/i18n/text.rb +5 -4
- data/lib/rdoc/i18n.rb +3 -2
- data/lib/rdoc/include.rb +1 -0
- data/lib/rdoc/known_classes.rb +1 -0
- data/lib/rdoc/markdown/entities.rb +1 -0
- data/lib/rdoc/markdown/{literals_1_9.kpeg → literals.kpeg} +1 -0
- data/lib/rdoc/markdown/{literals_1_9.rb → literals.rb} +1 -4
- data/lib/rdoc/markdown.kpeg +94 -51
- data/lib/rdoc/markdown.rb +1171 -619
- data/lib/rdoc/markup/attr_changer.rb +1 -0
- data/lib/rdoc/markup/attr_span.rb +9 -2
- data/lib/rdoc/markup/attribute_manager.rb +115 -49
- data/lib/rdoc/markup/attributes.rb +7 -6
- data/lib/rdoc/markup/blank_line.rb +1 -0
- data/lib/rdoc/markup/block_quote.rb +1 -0
- data/lib/rdoc/markup/document.rb +1 -0
- data/lib/rdoc/markup/formatter.rb +25 -23
- data/lib/rdoc/markup/hard_break.rb +1 -0
- data/lib/rdoc/markup/heading.rb +4 -3
- data/lib/rdoc/markup/include.rb +1 -0
- data/lib/rdoc/markup/indented_paragraph.rb +1 -0
- data/lib/rdoc/markup/list.rb +1 -0
- data/lib/rdoc/markup/list_item.rb +1 -0
- data/lib/rdoc/markup/paragraph.rb +1 -0
- data/lib/rdoc/markup/parser.rb +78 -61
- data/lib/rdoc/markup/pre_process.rb +12 -9
- data/lib/rdoc/markup/raw.rb +1 -0
- data/lib/rdoc/markup/regexp_handling.rb +41 -0
- data/lib/rdoc/markup/rule.rb +1 -0
- data/lib/rdoc/markup/to_ansi.rb +1 -0
- data/lib/rdoc/markup/to_bs.rb +4 -5
- data/lib/rdoc/markup/to_html.rb +71 -25
- data/lib/rdoc/markup/to_html_crossref.rb +41 -25
- data/lib/rdoc/markup/to_html_snippet.rb +10 -9
- data/lib/rdoc/markup/to_joined_paragraph.rb +7 -31
- data/lib/rdoc/markup/to_label.rb +10 -9
- data/lib/rdoc/markup/to_markdown.rb +9 -8
- data/lib/rdoc/markup/to_rdoc.rb +35 -6
- data/lib/rdoc/markup/to_table_of_contents.rb +2 -0
- data/lib/rdoc/markup/to_test.rb +1 -0
- data/lib/rdoc/markup/to_tt_only.rb +3 -2
- data/lib/rdoc/markup/verbatim.rb +1 -0
- data/lib/rdoc/markup.rb +14 -16
- data/lib/rdoc/meta_method.rb +1 -0
- data/lib/rdoc/method_attr.rb +2 -1
- data/lib/rdoc/mixin.rb +1 -0
- data/lib/rdoc/normal_class.rb +3 -2
- data/lib/rdoc/normal_module.rb +1 -0
- data/lib/rdoc/options.rb +92 -58
- data/lib/rdoc/parser/c.rb +219 -223
- data/lib/rdoc/parser/changelog.rb +155 -18
- data/lib/rdoc/parser/markdown.rb +1 -0
- data/lib/rdoc/parser/rd.rb +1 -0
- data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
- data/lib/rdoc/parser/ruby.rb +635 -468
- data/lib/rdoc/parser/ruby_tools.rb +33 -33
- data/lib/rdoc/parser/simple.rb +3 -3
- data/lib/rdoc/parser/text.rb +1 -0
- data/lib/rdoc/parser.rb +17 -50
- data/lib/rdoc/rd/block_parser.rb +66 -65
- data/lib/rdoc/rd/block_parser.ry +3 -3
- data/lib/rdoc/rd/inline.rb +5 -4
- data/lib/rdoc/rd/inline_parser.rb +52 -51
- data/lib/rdoc/rd/inline_parser.ry +1 -1
- data/lib/rdoc/rd.rb +1 -0
- data/lib/rdoc/rdoc.rb +68 -63
- data/lib/rdoc/require.rb +1 -0
- data/lib/rdoc/ri/driver.rb +133 -58
- data/lib/rdoc/ri/formatter.rb +1 -0
- data/lib/rdoc/ri/paths.rb +4 -20
- data/lib/rdoc/ri/store.rb +1 -0
- data/lib/rdoc/ri/task.rb +71 -0
- data/lib/rdoc/ri.rb +1 -0
- data/lib/rdoc/rubygems_hook.rb +5 -12
- data/lib/rdoc/servlet.rb +24 -14
- data/lib/rdoc/single_class.rb +1 -0
- data/lib/rdoc/stats/normal.rb +20 -21
- data/lib/rdoc/stats/quiet.rb +1 -0
- data/lib/rdoc/stats/verbose.rb +1 -0
- data/lib/rdoc/stats.rb +1 -0
- data/lib/rdoc/store.rb +41 -41
- data/lib/rdoc/task.rb +2 -3
- data/lib/rdoc/text.rb +19 -38
- data/lib/rdoc/token_stream.rb +56 -32
- data/lib/rdoc/tom_doc.rb +17 -11
- data/lib/rdoc/top_level.rb +9 -2
- data/lib/rdoc/version.rb +8 -0
- data/lib/rdoc.rb +24 -10
- data/man/ri.1 +247 -0
- data/rdoc.gemspec +248 -0
- metadata +43 -236
- data/.autotest +0 -24
- data/.document +0 -5
- data/Manifest.txt +0 -306
- data/lib/gauntlet_rdoc.rb +0 -84
- data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
- data/lib/rdoc/markdown/literals_1_8.kpeg +0 -18
- data/lib/rdoc/markdown/literals_1_8.rb +0 -416
- data/lib/rdoc/markup/formatter_test_case.rb +0 -767
- data/lib/rdoc/markup/inline.rb +0 -1
- data/lib/rdoc/markup/special.rb +0 -40
- data/lib/rdoc/markup/text_formatter_test_case.rb +0 -114
- data/lib/rdoc/ruby_lex.rb +0 -1377
- data/lib/rdoc/ruby_token.rb +0 -460
- data/lib/rdoc/test_case.rb +0 -217
- data/test/MarkdownTest_1.0.3/Amps and angle encoding.text +0 -21
- data/test/MarkdownTest_1.0.3/Auto links.text +0 -13
- data/test/MarkdownTest_1.0.3/Backslash escapes.text +0 -120
- data/test/MarkdownTest_1.0.3/Blockquotes with code blocks.text +0 -11
- data/test/MarkdownTest_1.0.3/Code Blocks.text +0 -14
- data/test/MarkdownTest_1.0.3/Code Spans.text +0 -6
- data/test/MarkdownTest_1.0.3/Hard-wrapped paragraphs with list-like lines.text +0 -8
- data/test/MarkdownTest_1.0.3/Horizontal rules.text +0 -67
- data/test/MarkdownTest_1.0.3/Inline HTML (Advanced).text +0 -15
- data/test/MarkdownTest_1.0.3/Inline HTML (Simple).text +0 -69
- data/test/MarkdownTest_1.0.3/Inline HTML comments.text +0 -13
- data/test/MarkdownTest_1.0.3/Links, inline style.text +0 -12
- data/test/MarkdownTest_1.0.3/Links, reference style.text +0 -71
- data/test/MarkdownTest_1.0.3/Links, shortcut references.text +0 -20
- data/test/MarkdownTest_1.0.3/Literal quotes in titles.text +0 -7
- data/test/MarkdownTest_1.0.3/Markdown Documentation - Basics.text +0 -306
- data/test/MarkdownTest_1.0.3/Markdown Documentation - Syntax.text +0 -888
- data/test/MarkdownTest_1.0.3/Nested blockquotes.text +0 -5
- data/test/MarkdownTest_1.0.3/Ordered and unordered lists.text +0 -131
- data/test/MarkdownTest_1.0.3/Strong and em together.text +0 -7
- data/test/MarkdownTest_1.0.3/Tabs.text +0 -21
- data/test/MarkdownTest_1.0.3/Tidyness.text +0 -5
- data/test/README +0 -1
- data/test/binary.dat +0 -0
- data/test/hidden.zip.txt +0 -1
- data/test/test.ja.largedoc +0 -3
- data/test/test.ja.rdoc +0 -10
- data/test/test.ja.txt +0 -8
- data/test/test.txt +0 -1
- data/test/test_rdoc_alias.rb +0 -13
- data/test/test_rdoc_any_method.rb +0 -460
- data/test/test_rdoc_attr.rb +0 -190
- data/test/test_rdoc_class_module.rb +0 -1492
- data/test/test_rdoc_code_object.rb +0 -450
- data/test/test_rdoc_comment.rb +0 -504
- data/test/test_rdoc_constant.rb +0 -181
- data/test/test_rdoc_context.rb +0 -901
- data/test/test_rdoc_context_section.rb +0 -130
- data/test/test_rdoc_cross_reference.rb +0 -192
- data/test/test_rdoc_encoding.rb +0 -227
- data/test/test_rdoc_extend.rb +0 -94
- data/test/test_rdoc_generator_darkfish.rb +0 -229
- data/test/test_rdoc_generator_json_index.rb +0 -324
- data/test/test_rdoc_generator_markup.rb +0 -59
- data/test/test_rdoc_generator_pot.rb +0 -91
- data/test/test_rdoc_generator_pot_po.rb +0 -51
- data/test/test_rdoc_generator_pot_po_entry.rb +0 -139
- data/test/test_rdoc_generator_ri.rb +0 -78
- data/test/test_rdoc_i18n_locale.rb +0 -73
- data/test/test_rdoc_i18n_text.rb +0 -123
- data/test/test_rdoc_include.rb +0 -108
- data/test/test_rdoc_markdown.rb +0 -980
- data/test/test_rdoc_markdown_test.rb +0 -1884
- data/test/test_rdoc_markup.rb +0 -95
- data/test/test_rdoc_markup_attribute_manager.rb +0 -364
- data/test/test_rdoc_markup_attributes.rb +0 -39
- data/test/test_rdoc_markup_document.rb +0 -207
- data/test/test_rdoc_markup_formatter.rb +0 -175
- data/test/test_rdoc_markup_hard_break.rb +0 -31
- data/test/test_rdoc_markup_heading.rb +0 -29
- data/test/test_rdoc_markup_include.rb +0 -19
- data/test/test_rdoc_markup_indented_paragraph.rb +0 -53
- data/test/test_rdoc_markup_paragraph.rb +0 -32
- data/test/test_rdoc_markup_parser.rb +0 -1680
- data/test/test_rdoc_markup_pre_process.rb +0 -473
- data/test/test_rdoc_markup_raw.rb +0 -22
- data/test/test_rdoc_markup_to_ansi.rb +0 -369
- data/test/test_rdoc_markup_to_bs.rb +0 -366
- data/test/test_rdoc_markup_to_html.rb +0 -662
- data/test/test_rdoc_markup_to_html_crossref.rb +0 -225
- data/test/test_rdoc_markup_to_html_snippet.rb +0 -711
- data/test/test_rdoc_markup_to_joined_paragraph.rb +0 -32
- data/test/test_rdoc_markup_to_label.rb +0 -112
- data/test/test_rdoc_markup_to_markdown.rb +0 -389
- data/test/test_rdoc_markup_to_rdoc.rb +0 -377
- data/test/test_rdoc_markup_to_table_of_contents.rb +0 -126
- data/test/test_rdoc_markup_to_tt_only.rb +0 -246
- data/test/test_rdoc_markup_verbatim.rb +0 -29
- data/test/test_rdoc_method_attr.rb +0 -193
- data/test/test_rdoc_normal_class.rb +0 -47
- data/test/test_rdoc_normal_module.rb +0 -42
- data/test/test_rdoc_options.rb +0 -766
- data/test/test_rdoc_parser.rb +0 -327
- data/test/test_rdoc_parser_c.rb +0 -1896
- data/test/test_rdoc_parser_changelog.rb +0 -315
- data/test/test_rdoc_parser_markdown.rb +0 -61
- data/test/test_rdoc_parser_rd.rb +0 -55
- data/test/test_rdoc_parser_ruby.rb +0 -3322
- data/test/test_rdoc_parser_simple.rb +0 -115
- data/test/test_rdoc_rd.rb +0 -30
- data/test/test_rdoc_rd_block_parser.rb +0 -535
- data/test/test_rdoc_rd_inline.rb +0 -63
- data/test/test_rdoc_rd_inline_parser.rb +0 -177
- data/test/test_rdoc_rdoc.rb +0 -455
- data/test/test_rdoc_require.rb +0 -25
- data/test/test_rdoc_ri_driver.rb +0 -1436
- data/test/test_rdoc_ri_paths.rb +0 -155
- data/test/test_rdoc_ruby_lex.rb +0 -421
- data/test/test_rdoc_ruby_token.rb +0 -19
- data/test/test_rdoc_rubygems_hook.rb +0 -251
- data/test/test_rdoc_servlet.rb +0 -534
- data/test/test_rdoc_single_class.rb +0 -20
- data/test/test_rdoc_stats.rb +0 -722
- data/test/test_rdoc_store.rb +0 -993
- data/test/test_rdoc_task.rb +0 -173
- data/test/test_rdoc_text.rb +0 -557
- data/test/test_rdoc_token_stream.rb +0 -42
- data/test/test_rdoc_tom_doc.rb +0 -520
- data/test/test_rdoc_top_level.rb +0 -287
- data/test/xref_data.rb +0 -76
- data/test/xref_test_case.rb +0 -67
data/test/test_rdoc_parser_c.rb
DELETED
@@ -1,1896 +0,0 @@
|
|
1
|
-
require 'rdoc/test_case'
|
2
|
-
|
3
|
-
=begin
|
4
|
-
TODO: test call-seq parsing
|
5
|
-
|
6
|
-
/*
|
7
|
-
* call-seq:
|
8
|
-
* ARGF.readlines(sep=$/) -> array
|
9
|
-
* ARGF.readlines(limit) -> array
|
10
|
-
* ARGF.readlines(sep, limit) -> array
|
11
|
-
*
|
12
|
-
* ARGF.to_a(sep=$/) -> array
|
13
|
-
* ARGF.to_a(limit) -> array
|
14
|
-
* ARGF.to_a(sep, limit) -> array
|
15
|
-
*
|
16
|
-
* Reads +ARGF+'s current file in its entirety, returning an +Array+ of its
|
17
|
-
* lines, one line per element. Lines are assumed to be separated by _sep_.
|
18
|
-
*
|
19
|
-
* lines = ARGF.readlines
|
20
|
-
* lines[0] #=> "This is line one\n"
|
21
|
-
*/
|
22
|
-
|
23
|
-
assert call-seq did not stop at first empty line
|
24
|
-
|
25
|
-
/*
|
26
|
-
* call-seq:
|
27
|
-
*
|
28
|
-
* flt ** other -> float
|
29
|
-
*
|
30
|
-
* Raises <code>float</code> the <code>other</code> power.
|
31
|
-
*
|
32
|
-
* 2.0**3 #=> 8.0
|
33
|
-
*/
|
34
|
-
|
35
|
-
assert call-seq correct (bug: was empty)
|
36
|
-
|
37
|
-
/* call-seq: flt ** other -> float */
|
38
|
-
|
39
|
-
assert call-seq correct
|
40
|
-
|
41
|
-
=end
|
42
|
-
|
43
|
-
class TestRDocParserC < RDoc::TestCase
|
44
|
-
|
45
|
-
def setup
|
46
|
-
super
|
47
|
-
|
48
|
-
@tempfile = Tempfile.new self.class.name
|
49
|
-
filename = @tempfile.path
|
50
|
-
|
51
|
-
@top_level = @store.add_file filename
|
52
|
-
@fn = filename
|
53
|
-
@options = RDoc::Options.new
|
54
|
-
@options.verbosity = 2
|
55
|
-
@stats = RDoc::Stats.new @store, 0
|
56
|
-
end
|
57
|
-
|
58
|
-
def teardown
|
59
|
-
super
|
60
|
-
|
61
|
-
@tempfile.close!
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_class_can_parse
|
65
|
-
c_parser = RDoc::Parser::C
|
66
|
-
|
67
|
-
temp_dir do
|
68
|
-
FileUtils.touch 'file.C'
|
69
|
-
assert_equal c_parser, c_parser.can_parse('file.C')
|
70
|
-
|
71
|
-
FileUtils.touch 'file.CC'
|
72
|
-
assert_equal c_parser, c_parser.can_parse('file.CC')
|
73
|
-
|
74
|
-
FileUtils.touch 'file.H'
|
75
|
-
assert_equal c_parser, c_parser.can_parse('file.H')
|
76
|
-
|
77
|
-
FileUtils.touch 'file.HH'
|
78
|
-
assert_equal c_parser, c_parser.can_parse('file.HH')
|
79
|
-
|
80
|
-
FileUtils.touch 'file.c'
|
81
|
-
assert_equal c_parser, c_parser.can_parse('file.c')
|
82
|
-
|
83
|
-
FileUtils.touch 'file.cc'
|
84
|
-
assert_equal c_parser, c_parser.can_parse('file.cc')
|
85
|
-
|
86
|
-
FileUtils.touch 'file.cpp'
|
87
|
-
assert_equal c_parser, c_parser.can_parse('file.cpp')
|
88
|
-
|
89
|
-
FileUtils.touch 'file.cxx'
|
90
|
-
assert_equal c_parser, c_parser.can_parse('file.cxx')
|
91
|
-
|
92
|
-
FileUtils.touch 'file.h'
|
93
|
-
assert_equal c_parser, c_parser.can_parse('file.h')
|
94
|
-
|
95
|
-
FileUtils.touch 'file.hh'
|
96
|
-
assert_equal c_parser, c_parser.can_parse('file.hh')
|
97
|
-
|
98
|
-
FileUtils.touch 'file.y'
|
99
|
-
assert_equal c_parser, c_parser.can_parse('file.y')
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_initialize
|
104
|
-
some_ext = @top_level.add_class RDoc::NormalClass, 'SomeExt'
|
105
|
-
@top_level.add_class RDoc::SingleClass, 'SomeExtSingle'
|
106
|
-
|
107
|
-
@store.cache[:c_class_variables] = {
|
108
|
-
@fn => { 'cSomeExt' => 'SomeExt' }
|
109
|
-
}
|
110
|
-
|
111
|
-
@store.cache[:c_singleton_class_variables] = {
|
112
|
-
@fn => { 'cSomeExtSingle' => 'SomeExtSingle' }
|
113
|
-
}
|
114
|
-
|
115
|
-
parser = RDoc::Parser::C.new @top_level, @fn, '', @options, @stats
|
116
|
-
|
117
|
-
expected = { 'cSomeExt' => some_ext }
|
118
|
-
assert_equal expected, parser.classes
|
119
|
-
|
120
|
-
expected = { 'cSomeExtSingle' => 'SomeExtSingle' }
|
121
|
-
assert_equal expected, parser.singleton_classes
|
122
|
-
|
123
|
-
expected = {
|
124
|
-
'cSomeExt' => 'SomeExt',
|
125
|
-
'cSomeExtSingle' => 'SomeExtSingle',
|
126
|
-
}
|
127
|
-
known_classes = parser.known_classes.delete_if do |key, _|
|
128
|
-
RDoc::KNOWN_CLASSES.keys.include? key
|
129
|
-
end
|
130
|
-
|
131
|
-
assert_equal expected, known_classes
|
132
|
-
end
|
133
|
-
|
134
|
-
def test_do_attr_rb_attr
|
135
|
-
content = <<-EOF
|
136
|
-
void Init_Blah(void) {
|
137
|
-
cBlah = rb_define_class("Blah", rb_cObject);
|
138
|
-
|
139
|
-
/*
|
140
|
-
* This is an accessor
|
141
|
-
*/
|
142
|
-
rb_attr(cBlah, rb_intern("accessor"), 1, 1, Qfalse);
|
143
|
-
|
144
|
-
/*
|
145
|
-
* This is a reader
|
146
|
-
*/
|
147
|
-
rb_attr(cBlah, rb_intern("reader"), 1, 0, Qfalse);
|
148
|
-
|
149
|
-
/*
|
150
|
-
* This is a writer
|
151
|
-
*/
|
152
|
-
rb_attr(cBlah, rb_intern("writer"), 0, 1, Qfalse);
|
153
|
-
}
|
154
|
-
EOF
|
155
|
-
|
156
|
-
klass = util_get_class content, 'cBlah'
|
157
|
-
|
158
|
-
attrs = klass.attributes
|
159
|
-
assert_equal 3, attrs.length, attrs.inspect
|
160
|
-
|
161
|
-
accessor = attrs.shift
|
162
|
-
assert_equal 'accessor', accessor.name
|
163
|
-
assert_equal 'RW', accessor.rw
|
164
|
-
assert_equal 'This is an accessor', accessor.comment.text
|
165
|
-
assert_equal @top_level, accessor.file
|
166
|
-
|
167
|
-
reader = attrs.shift
|
168
|
-
assert_equal 'reader', reader.name
|
169
|
-
assert_equal 'R', reader.rw
|
170
|
-
assert_equal 'This is a reader', reader.comment.text
|
171
|
-
|
172
|
-
writer = attrs.shift
|
173
|
-
assert_equal 'writer', writer.name
|
174
|
-
assert_equal 'W', writer.rw
|
175
|
-
assert_equal 'This is a writer', writer.comment.text
|
176
|
-
end
|
177
|
-
|
178
|
-
def test_do_attr_rb_define_attr
|
179
|
-
content = <<-EOF
|
180
|
-
void Init_Blah(void) {
|
181
|
-
cBlah = rb_define_class("Blah", rb_cObject);
|
182
|
-
|
183
|
-
/*
|
184
|
-
* This is an accessor
|
185
|
-
*/
|
186
|
-
rb_define_attr(cBlah, "accessor", 1, 1);
|
187
|
-
}
|
188
|
-
EOF
|
189
|
-
|
190
|
-
klass = util_get_class content, 'cBlah'
|
191
|
-
|
192
|
-
attrs = klass.attributes
|
193
|
-
assert_equal 1, attrs.length, attrs.inspect
|
194
|
-
|
195
|
-
accessor = attrs.shift
|
196
|
-
assert_equal 'accessor', accessor.name
|
197
|
-
assert_equal 'RW', accessor.rw
|
198
|
-
assert_equal 'This is an accessor', accessor.comment.text
|
199
|
-
assert_equal @top_level, accessor.file
|
200
|
-
end
|
201
|
-
|
202
|
-
def test_do_aliases
|
203
|
-
content = <<-EOF
|
204
|
-
/*
|
205
|
-
* This should show up as an alias with documentation
|
206
|
-
*/
|
207
|
-
VALUE blah(VALUE klass, VALUE year) {
|
208
|
-
}
|
209
|
-
|
210
|
-
void Init_Blah(void) {
|
211
|
-
cDate = rb_define_class("Date", rb_cObject);
|
212
|
-
|
213
|
-
rb_define_method(cDate, "blah", blah, 1);
|
214
|
-
|
215
|
-
rb_define_alias(cDate, "bleh", "blah");
|
216
|
-
}
|
217
|
-
EOF
|
218
|
-
|
219
|
-
klass = util_get_class content, 'cDate'
|
220
|
-
|
221
|
-
methods = klass.method_list
|
222
|
-
assert_equal 2, methods.length
|
223
|
-
assert_equal 'bleh', methods.last.name
|
224
|
-
assert_equal 'blah', methods.last.is_alias_for.name
|
225
|
-
|
226
|
-
assert_equal @top_level, methods.last.is_alias_for.file
|
227
|
-
assert_equal @top_level, methods.last.file
|
228
|
-
end
|
229
|
-
|
230
|
-
def test_do_aliases_singleton
|
231
|
-
content = <<-EOF
|
232
|
-
/*
|
233
|
-
* This should show up as a method with documentation
|
234
|
-
*/
|
235
|
-
VALUE blah(VALUE klass, VALUE year) {
|
236
|
-
}
|
237
|
-
|
238
|
-
void Init_Blah(void) {
|
239
|
-
cDate = rb_define_class("Date", rb_cObject);
|
240
|
-
sDate = rb_singleton_class(cDate);
|
241
|
-
|
242
|
-
rb_define_method(sDate, "blah", blah, 1);
|
243
|
-
|
244
|
-
/*
|
245
|
-
* This should show up as an alias
|
246
|
-
*/
|
247
|
-
rb_define_alias(sDate, "bleh", "blah");
|
248
|
-
}
|
249
|
-
EOF
|
250
|
-
|
251
|
-
klass = util_get_class content, 'cDate'
|
252
|
-
|
253
|
-
methods = klass.method_list
|
254
|
-
|
255
|
-
assert_equal 2, methods.length
|
256
|
-
assert_equal 'bleh', methods.last.name
|
257
|
-
assert methods.last.singleton
|
258
|
-
assert_equal 'blah', methods.last.is_alias_for.name
|
259
|
-
assert_equal 'This should show up as an alias', methods.last.comment.text
|
260
|
-
end
|
261
|
-
|
262
|
-
def test_do_classes_boot_class
|
263
|
-
content = <<-EOF
|
264
|
-
/* Document-class: Foo
|
265
|
-
* this is the Foo boot class
|
266
|
-
*/
|
267
|
-
VALUE cFoo = boot_defclass("Foo", rb_cObject);
|
268
|
-
EOF
|
269
|
-
|
270
|
-
klass = util_get_class content, 'cFoo'
|
271
|
-
assert_equal "this is the Foo boot class", klass.comment.text
|
272
|
-
assert_equal 'Object', klass.superclass
|
273
|
-
end
|
274
|
-
|
275
|
-
def test_do_classes_boot_class_nil
|
276
|
-
content = <<-EOF
|
277
|
-
/* Document-class: Foo
|
278
|
-
* this is the Foo boot class
|
279
|
-
*/
|
280
|
-
VALUE cFoo = boot_defclass("Foo", 0);
|
281
|
-
EOF
|
282
|
-
|
283
|
-
klass = util_get_class content, 'cFoo'
|
284
|
-
assert_equal "this is the Foo boot class", klass.comment.text
|
285
|
-
assert_equal nil, klass.superclass
|
286
|
-
end
|
287
|
-
|
288
|
-
def test_do_aliases_missing_class
|
289
|
-
content = <<-EOF
|
290
|
-
void Init_Blah(void) {
|
291
|
-
rb_define_alias(cDate, "b", "a");
|
292
|
-
}
|
293
|
-
EOF
|
294
|
-
|
295
|
-
_, err = verbose_capture_io do
|
296
|
-
refute util_get_class(content, 'cDate')
|
297
|
-
end
|
298
|
-
|
299
|
-
assert_equal "Enclosing class or module \"cDate\" for alias b a is not known\n",
|
300
|
-
err
|
301
|
-
end
|
302
|
-
|
303
|
-
def test_do_classes_class
|
304
|
-
content = <<-EOF
|
305
|
-
/* Document-class: Foo
|
306
|
-
* this is the Foo class
|
307
|
-
*/
|
308
|
-
VALUE cFoo = rb_define_class("Foo", rb_cObject);
|
309
|
-
EOF
|
310
|
-
|
311
|
-
klass = util_get_class content, 'cFoo'
|
312
|
-
assert_equal "this is the Foo class", klass.comment.text
|
313
|
-
end
|
314
|
-
|
315
|
-
def test_do_classes_struct
|
316
|
-
content = <<-EOF
|
317
|
-
/* Document-class: Foo
|
318
|
-
* this is the Foo class
|
319
|
-
*/
|
320
|
-
VALUE cFoo = rb_struct_define_without_accessor(
|
321
|
-
"Foo", rb_cObject, foo_alloc,
|
322
|
-
"some", "various", "fields", NULL);
|
323
|
-
EOF
|
324
|
-
|
325
|
-
klass = util_get_class content, 'cFoo'
|
326
|
-
assert_equal "this is the Foo class", klass.comment.text
|
327
|
-
end
|
328
|
-
|
329
|
-
def test_do_classes_class_under
|
330
|
-
content = <<-EOF
|
331
|
-
/* Document-class: Kernel::Foo
|
332
|
-
* this is the Foo class under Kernel
|
333
|
-
*/
|
334
|
-
VALUE cFoo = rb_define_class_under(rb_mKernel, "Foo", rb_cObject);
|
335
|
-
EOF
|
336
|
-
|
337
|
-
klass = util_get_class content, 'cFoo'
|
338
|
-
assert_equal 'Kernel::Foo', klass.full_name
|
339
|
-
assert_equal "this is the Foo class under Kernel", klass.comment.text
|
340
|
-
end
|
341
|
-
|
342
|
-
def test_do_classes_class_under_rb_path2class
|
343
|
-
content = <<-EOF
|
344
|
-
/* Document-class: Kernel::Foo
|
345
|
-
* this is Kernel::Foo < A::B
|
346
|
-
*/
|
347
|
-
VALUE cFoo = rb_define_class_under(rb_mKernel, "Foo", rb_path2class("A::B"));
|
348
|
-
EOF
|
349
|
-
|
350
|
-
klass = util_get_class content, 'cFoo'
|
351
|
-
|
352
|
-
assert_equal 'Kernel::Foo', klass.full_name
|
353
|
-
assert_equal 'A::B', klass.superclass
|
354
|
-
assert_equal 'this is Kernel::Foo < A::B', klass.comment.text
|
355
|
-
end
|
356
|
-
|
357
|
-
def test_do_classes_singleton
|
358
|
-
content = <<-EOF
|
359
|
-
VALUE cFoo = rb_define_class("Foo", rb_cObject);
|
360
|
-
VALUE cFooS = rb_singleton_class(cFoo);
|
361
|
-
EOF
|
362
|
-
|
363
|
-
util_get_class content, 'cFooS'
|
364
|
-
|
365
|
-
assert_equal 'Foo', @parser.singleton_classes['cFooS']
|
366
|
-
end
|
367
|
-
|
368
|
-
def test_do_classes_module
|
369
|
-
content = <<-EOF
|
370
|
-
/* Document-module: Foo
|
371
|
-
* this is the Foo module
|
372
|
-
*/
|
373
|
-
VALUE mFoo = rb_define_module("Foo");
|
374
|
-
EOF
|
375
|
-
|
376
|
-
klass = util_get_class content, 'mFoo'
|
377
|
-
assert_equal "this is the Foo module", klass.comment.text
|
378
|
-
end
|
379
|
-
|
380
|
-
def test_do_classes_module_under
|
381
|
-
content = <<-EOF
|
382
|
-
/* Document-module: Kernel::Foo
|
383
|
-
* this is the Foo module under Kernel
|
384
|
-
*/
|
385
|
-
VALUE mFoo = rb_define_module_under(rb_mKernel, "Foo");
|
386
|
-
EOF
|
387
|
-
|
388
|
-
klass = util_get_class content, 'mFoo'
|
389
|
-
assert_equal "this is the Foo module under Kernel", klass.comment.text
|
390
|
-
end
|
391
|
-
|
392
|
-
def test_do_constants
|
393
|
-
content = <<-EOF
|
394
|
-
#include <ruby.h>
|
395
|
-
|
396
|
-
void Init_foo(){
|
397
|
-
VALUE cFoo = rb_define_class("Foo", rb_cObject);
|
398
|
-
|
399
|
-
/* 300: The highest possible score in bowling */
|
400
|
-
rb_define_const(cFoo, "PERFECT", INT2FIX(300));
|
401
|
-
|
402
|
-
/* Huzzah!: What you cheer when you roll a perfect game */
|
403
|
-
rb_define_const(cFoo, "CHEER", rb_str_new2("Huzzah!"));
|
404
|
-
|
405
|
-
/* TEST\:TEST: Checking to see if escaped colon works */
|
406
|
-
rb_define_const(cFoo, "TEST", rb_str_new2("TEST:TEST"));
|
407
|
-
|
408
|
-
/* \\: The file separator on MS Windows */
|
409
|
-
rb_define_const(cFoo, "MSEPARATOR", rb_str_new2("\\"));
|
410
|
-
|
411
|
-
/* /: The file separator on Unix */
|
412
|
-
rb_define_const(cFoo, "SEPARATOR", rb_str_new2("/"));
|
413
|
-
|
414
|
-
/* C:\\Program Files\\Stuff: A directory on MS Windows */
|
415
|
-
rb_define_const(cFoo, "STUFF", rb_str_new2("C:\\Program Files\\Stuff"));
|
416
|
-
|
417
|
-
/* Default definition */
|
418
|
-
rb_define_const(cFoo, "NOSEMI", INT2FIX(99));
|
419
|
-
|
420
|
-
rb_define_const(cFoo, "NOCOMMENT", rb_str_new2("No comment"));
|
421
|
-
|
422
|
-
/*
|
423
|
-
* Multiline comment goes here because this comment spans multiple lines.
|
424
|
-
* Multiline comment goes here because this comment spans multiple lines.
|
425
|
-
*/
|
426
|
-
rb_define_const(cFoo, "MULTILINE", INT2FIX(1));
|
427
|
-
|
428
|
-
/*
|
429
|
-
* 1: Multiline comment goes here because this comment spans multiple lines.
|
430
|
-
* Multiline comment goes here because this comment spans multiple lines.
|
431
|
-
*/
|
432
|
-
rb_define_const(cFoo, "MULTILINE_VALUE", INT2FIX(1));
|
433
|
-
|
434
|
-
/* Multiline comment goes here because this comment spans multiple lines.
|
435
|
-
* Multiline comment goes here because this comment spans multiple lines.
|
436
|
-
*/
|
437
|
-
rb_define_const(cFoo, "MULTILINE_NOT_EMPTY", INT2FIX(1));
|
438
|
-
|
439
|
-
/*
|
440
|
-
* Multiline comment goes here because this comment spans multiple lines.
|
441
|
-
* 1: However, the value extraction should only happen for the first line
|
442
|
-
*/
|
443
|
-
rb_define_const(cFoo, "MULTILINE_COLON_ON_SECOND_LINE", INT2FIX(1));
|
444
|
-
|
445
|
-
}
|
446
|
-
EOF
|
447
|
-
|
448
|
-
@parser = util_parser content
|
449
|
-
|
450
|
-
@parser.do_classes
|
451
|
-
@parser.do_constants
|
452
|
-
|
453
|
-
klass = @parser.classes['cFoo']
|
454
|
-
assert klass
|
455
|
-
|
456
|
-
constants = klass.constants
|
457
|
-
assert !klass.constants.empty?
|
458
|
-
|
459
|
-
assert_equal @top_level, constants.first.file
|
460
|
-
|
461
|
-
constants = constants.map { |c| [c.name, c.value, c.comment.text] }
|
462
|
-
|
463
|
-
assert_equal ['PERFECT', '300', 'The highest possible score in bowling '],
|
464
|
-
constants.shift
|
465
|
-
assert_equal ['CHEER', 'Huzzah!',
|
466
|
-
'What you cheer when you roll a perfect game '],
|
467
|
-
constants.shift
|
468
|
-
assert_equal ['TEST', 'TEST:TEST',
|
469
|
-
'Checking to see if escaped colon works '],
|
470
|
-
constants.shift
|
471
|
-
assert_equal ['MSEPARATOR', '\\',
|
472
|
-
'The file separator on MS Windows '],
|
473
|
-
constants.shift
|
474
|
-
assert_equal ['SEPARATOR', '/',
|
475
|
-
'The file separator on Unix '],
|
476
|
-
constants.shift
|
477
|
-
assert_equal ['STUFF', 'C:\\Program Files\\Stuff',
|
478
|
-
'A directory on MS Windows '],
|
479
|
-
constants.shift
|
480
|
-
assert_equal ['NOSEMI', 'INT2FIX(99)',
|
481
|
-
'Default definition '],
|
482
|
-
constants.shift
|
483
|
-
assert_equal ['NOCOMMENT', 'rb_str_new2("No comment")', ''],
|
484
|
-
constants.shift
|
485
|
-
|
486
|
-
comment = <<-EOF.chomp
|
487
|
-
Multiline comment goes here because this comment spans multiple lines.
|
488
|
-
Multiline comment goes here because this comment spans multiple lines.
|
489
|
-
EOF
|
490
|
-
assert_equal ['MULTILINE', 'INT2FIX(1)', comment], constants.shift
|
491
|
-
assert_equal ['MULTILINE_VALUE', '1', comment], constants.shift
|
492
|
-
assert_equal ['MULTILINE_NOT_EMPTY', 'INT2FIX(1)', comment], constants.shift
|
493
|
-
|
494
|
-
comment = <<-EOF.chomp
|
495
|
-
Multiline comment goes here because this comment spans multiple lines.
|
496
|
-
1: However, the value extraction should only happen for the first line
|
497
|
-
EOF
|
498
|
-
assert_equal ['MULTILINE_COLON_ON_SECOND_LINE', 'INT2FIX(1)', comment],
|
499
|
-
constants.shift
|
500
|
-
|
501
|
-
assert constants.empty?, constants.inspect
|
502
|
-
end
|
503
|
-
|
504
|
-
def test_do_constants_curses
|
505
|
-
content = <<-EOF
|
506
|
-
void Init_curses(){
|
507
|
-
mCurses = rb_define_module("Curses");
|
508
|
-
|
509
|
-
/*
|
510
|
-
* Document-const: Curses::COLOR_BLACK
|
511
|
-
*
|
512
|
-
* Value of the color black
|
513
|
-
*/
|
514
|
-
rb_curses_define_const(COLOR_BLACK);
|
515
|
-
}
|
516
|
-
EOF
|
517
|
-
|
518
|
-
@parser = util_parser content
|
519
|
-
|
520
|
-
@parser.do_modules
|
521
|
-
@parser.do_classes
|
522
|
-
@parser.do_constants
|
523
|
-
|
524
|
-
klass = @parser.classes['mCurses']
|
525
|
-
|
526
|
-
constants = klass.constants
|
527
|
-
refute_empty klass.constants
|
528
|
-
|
529
|
-
assert_equal 'COLOR_BLACK', constants.first.name
|
530
|
-
assert_equal 'UINT2NUM(COLOR_BLACK)', constants.first.value
|
531
|
-
assert_equal 'Value of the color black', constants.first.comment.text
|
532
|
-
end
|
533
|
-
|
534
|
-
def test_do_constants_file
|
535
|
-
content = <<-EOF
|
536
|
-
void Init_File(void) {
|
537
|
-
/* Document-const: LOCK_SH
|
538
|
-
*
|
539
|
-
* Shared lock
|
540
|
-
*/
|
541
|
-
rb_file_const("LOCK_SH", INT2FIX(LOCK_SH));
|
542
|
-
}
|
543
|
-
EOF
|
544
|
-
|
545
|
-
@parser = util_parser content
|
546
|
-
|
547
|
-
@parser.do_modules
|
548
|
-
@parser.do_classes
|
549
|
-
@parser.do_constants
|
550
|
-
|
551
|
-
klass = @parser.classes['rb_mFConst']
|
552
|
-
|
553
|
-
constants = klass.constants
|
554
|
-
refute_empty klass.constants
|
555
|
-
|
556
|
-
constant = constants.first
|
557
|
-
|
558
|
-
assert_equal 'LOCK_SH', constant.name
|
559
|
-
assert_equal 'INT2FIX(LOCK_SH)', constant.value
|
560
|
-
assert_equal 'Shared lock', constant.comment.text
|
561
|
-
end
|
562
|
-
|
563
|
-
def test_do_includes
|
564
|
-
content = <<-EOF
|
565
|
-
Init_foo() {
|
566
|
-
VALUE cFoo = rb_define_class("Foo", rb_cObject);
|
567
|
-
VALUE mInc = rb_define_module("Inc");
|
568
|
-
|
569
|
-
rb_include_module(cFoo, mInc);
|
570
|
-
}
|
571
|
-
EOF
|
572
|
-
|
573
|
-
klass = util_get_class content, 'cFoo'
|
574
|
-
|
575
|
-
incl = klass.includes.first
|
576
|
-
assert_equal 'Inc', incl.name
|
577
|
-
assert_equal '', incl.comment.text
|
578
|
-
assert_equal @top_level, incl.file
|
579
|
-
end
|
580
|
-
|
581
|
-
# HACK parsing warning instead of setting up in file
|
582
|
-
def test_do_methods_in_c
|
583
|
-
content = <<-EOF
|
584
|
-
VALUE blah(VALUE klass, VALUE year) {
|
585
|
-
}
|
586
|
-
|
587
|
-
void Init_Blah(void) {
|
588
|
-
cDate = rb_define_class("Date", rb_cObject);
|
589
|
-
|
590
|
-
rb_define_method(cDate, "blah", blah, 1); /* in blah.c */
|
591
|
-
}
|
592
|
-
EOF
|
593
|
-
|
594
|
-
klass = nil
|
595
|
-
|
596
|
-
_, err = verbose_capture_io do
|
597
|
-
klass = util_get_class content, 'cDate'
|
598
|
-
end
|
599
|
-
|
600
|
-
assert_match ' blah.c ', err
|
601
|
-
end
|
602
|
-
|
603
|
-
# HACK parsing warning instead of setting up in file
|
604
|
-
def test_do_methods_in_cpp
|
605
|
-
content = <<-EOF
|
606
|
-
VALUE blah(VALUE klass, VALUE year) {
|
607
|
-
}
|
608
|
-
|
609
|
-
void Init_Blah(void) {
|
610
|
-
cDate = rb_define_class("Date", rb_cObject);
|
611
|
-
|
612
|
-
rb_define_method(cDate, "blah", blah, 1); /* in blah.cpp */
|
613
|
-
}
|
614
|
-
EOF
|
615
|
-
|
616
|
-
klass = nil
|
617
|
-
|
618
|
-
_, err = verbose_capture_io do
|
619
|
-
klass = util_get_class content, 'cDate'
|
620
|
-
end
|
621
|
-
|
622
|
-
assert_match ' blah.cpp ', err
|
623
|
-
end
|
624
|
-
|
625
|
-
# HACK parsing warning instead of setting up in file
|
626
|
-
def test_do_methods_in_y
|
627
|
-
content = <<-EOF
|
628
|
-
VALUE blah(VALUE klass, VALUE year) {
|
629
|
-
}
|
630
|
-
|
631
|
-
void Init_Blah(void) {
|
632
|
-
cDate = rb_define_class("Date", rb_cObject);
|
633
|
-
|
634
|
-
rb_define_method(cDate, "blah", blah, 1); /* in blah.y */
|
635
|
-
}
|
636
|
-
EOF
|
637
|
-
|
638
|
-
klass = nil
|
639
|
-
|
640
|
-
_, err = verbose_capture_io do
|
641
|
-
klass = util_get_class content, 'cDate'
|
642
|
-
end
|
643
|
-
|
644
|
-
assert_match ' blah.y ', err
|
645
|
-
end
|
646
|
-
|
647
|
-
def test_do_methods_singleton_class
|
648
|
-
content = <<-EOF
|
649
|
-
VALUE blah(VALUE klass, VALUE year) {
|
650
|
-
}
|
651
|
-
|
652
|
-
void Init_Blah(void) {
|
653
|
-
cDate = rb_define_class("Date", rb_cObject);
|
654
|
-
sDate = rb_singleton_class(cDate);
|
655
|
-
|
656
|
-
rb_define_method(sDate, "blah", blah, 1);
|
657
|
-
}
|
658
|
-
EOF
|
659
|
-
|
660
|
-
klass = util_get_class content, 'cDate'
|
661
|
-
|
662
|
-
methods = klass.method_list
|
663
|
-
assert_equal 1, methods.length
|
664
|
-
assert_equal 'blah', methods.first.name
|
665
|
-
assert methods.first.singleton
|
666
|
-
end
|
667
|
-
|
668
|
-
def test_do_missing
|
669
|
-
parser = util_parser
|
670
|
-
|
671
|
-
klass_a = @top_level.add_class RDoc::ClassModule, 'A'
|
672
|
-
parser.classes['a'] = klass_a
|
673
|
-
|
674
|
-
parser.enclosure_dependencies['c'] << 'b'
|
675
|
-
parser.enclosure_dependencies['b'] << 'a'
|
676
|
-
parser.enclosure_dependencies['d'] << 'a'
|
677
|
-
|
678
|
-
parser.missing_dependencies['d'] = ['d', :class, 'D', 'Object', 'a']
|
679
|
-
parser.missing_dependencies['c'] = ['c', :class, 'C', 'Object', 'b']
|
680
|
-
parser.missing_dependencies['b'] = ['b', :class, 'B', 'Object', 'a']
|
681
|
-
|
682
|
-
parser.do_missing
|
683
|
-
|
684
|
-
assert_equal %w[A A::B A::B::C A::D],
|
685
|
-
@store.all_classes_and_modules.map { |m| m.full_name }.sort
|
686
|
-
end
|
687
|
-
|
688
|
-
def test_do_missing_cycle
|
689
|
-
parser = util_parser
|
690
|
-
|
691
|
-
klass_a = @top_level.add_class RDoc::ClassModule, 'A'
|
692
|
-
parser.classes['a'] = klass_a
|
693
|
-
|
694
|
-
parser.enclosure_dependencies['c'] << 'b'
|
695
|
-
parser.enclosure_dependencies['b'] << 'a'
|
696
|
-
|
697
|
-
parser.missing_dependencies['c'] = ['c', :class, 'C', 'Object', 'b']
|
698
|
-
parser.missing_dependencies['b'] = ['b', :class, 'B', 'Object', 'a']
|
699
|
-
|
700
|
-
parser.enclosure_dependencies['y'] << 'z'
|
701
|
-
parser.enclosure_dependencies['z'] << 'y'
|
702
|
-
|
703
|
-
parser.missing_dependencies['y'] = ['y', :class, 'Y', 'Object', 'z']
|
704
|
-
parser.missing_dependencies['z'] = ['z', :class, 'Z', 'Object', 'y']
|
705
|
-
|
706
|
-
_, err = verbose_capture_io do
|
707
|
-
parser.do_missing
|
708
|
-
end
|
709
|
-
|
710
|
-
expected = 'Unable to create class Y (y), class Z (z) ' +
|
711
|
-
'due to a cyclic class or module creation'
|
712
|
-
|
713
|
-
assert_equal expected, err.chomp
|
714
|
-
|
715
|
-
assert_equal %w[A A::B A::B::C],
|
716
|
-
@store.all_classes_and_modules.map { |m| m.full_name }.sort
|
717
|
-
end
|
718
|
-
|
719
|
-
def test_find_alias_comment
|
720
|
-
parser = util_parser
|
721
|
-
|
722
|
-
comment = parser.find_alias_comment 'C', '[]', 'index'
|
723
|
-
|
724
|
-
assert_equal '', comment.text
|
725
|
-
|
726
|
-
parser = util_parser <<-C
|
727
|
-
/*
|
728
|
-
* comment
|
729
|
-
*/
|
730
|
-
|
731
|
-
rb_define_alias(C, "[]", "index");
|
732
|
-
C
|
733
|
-
|
734
|
-
comment = parser.find_alias_comment 'C', '[]', 'index'
|
735
|
-
|
736
|
-
assert_equal "/*\n * comment\n */\n\n", comment.text
|
737
|
-
end
|
738
|
-
|
739
|
-
def test_find_attr_comment_document_attr
|
740
|
-
parser= util_parser <<-C
|
741
|
-
/*
|
742
|
-
* Document-attr: y
|
743
|
-
* comment
|
744
|
-
*/
|
745
|
-
C
|
746
|
-
|
747
|
-
comment = parser.find_attr_comment nil, 'y'
|
748
|
-
|
749
|
-
assert_equal "/*\n * \n * comment\n */", comment.text
|
750
|
-
end
|
751
|
-
|
752
|
-
def test_find_attr_comment_document_attr_oneline
|
753
|
-
parser= util_parser <<-C
|
754
|
-
/* Document-attr: y
|
755
|
-
* comment
|
756
|
-
*/
|
757
|
-
C
|
758
|
-
|
759
|
-
comment = parser.find_attr_comment nil, 'y'
|
760
|
-
|
761
|
-
assert_equal "/* \n * comment\n */", comment.text
|
762
|
-
end
|
763
|
-
|
764
|
-
def test_find_attr_comment_document_attr_overlap
|
765
|
-
parser= util_parser <<-C
|
766
|
-
/* Document-attr: x
|
767
|
-
* comment
|
768
|
-
*/
|
769
|
-
|
770
|
-
/* Document-attr: y
|
771
|
-
* comment
|
772
|
-
*/
|
773
|
-
C
|
774
|
-
|
775
|
-
comment = parser.find_attr_comment nil, 'y'
|
776
|
-
|
777
|
-
assert_equal "/* \n * comment\n */", comment.text
|
778
|
-
end
|
779
|
-
|
780
|
-
def test_find_class_comment
|
781
|
-
@options.rdoc_include << File.dirname(__FILE__)
|
782
|
-
|
783
|
-
content = <<-EOF
|
784
|
-
/*
|
785
|
-
* Comment 1
|
786
|
-
*/
|
787
|
-
foo = rb_define_class("MyClassName1", rb_cObject);
|
788
|
-
|
789
|
-
/*
|
790
|
-
* Comment 2
|
791
|
-
*/
|
792
|
-
bar = rb_define_class("MyClassName2", rb_cObject);
|
793
|
-
EOF
|
794
|
-
|
795
|
-
util_get_class content
|
796
|
-
|
797
|
-
assert_equal "Comment 1", @parser.classes['foo'].comment.text
|
798
|
-
assert_equal "Comment 2", @parser.classes['bar'].comment.text
|
799
|
-
end
|
800
|
-
|
801
|
-
def test_find_class_comment_init
|
802
|
-
content = <<-EOF
|
803
|
-
/*
|
804
|
-
* a comment for class Foo
|
805
|
-
*/
|
806
|
-
void
|
807
|
-
Init_Foo(void) {
|
808
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
809
|
-
}
|
810
|
-
EOF
|
811
|
-
|
812
|
-
klass = util_get_class content, 'foo'
|
813
|
-
|
814
|
-
assert_equal "a comment for class Foo", klass.comment.text
|
815
|
-
end
|
816
|
-
|
817
|
-
def test_find_class_comment_define_class
|
818
|
-
content = <<-EOF
|
819
|
-
/*
|
820
|
-
* a comment for class Foo
|
821
|
-
*/
|
822
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
823
|
-
EOF
|
824
|
-
|
825
|
-
klass = util_get_class content, 'foo'
|
826
|
-
|
827
|
-
assert_equal "a comment for class Foo", klass.comment.text
|
828
|
-
end
|
829
|
-
|
830
|
-
def test_find_class_comment_define_class_Init_Foo
|
831
|
-
content = <<-EOF
|
832
|
-
/*
|
833
|
-
* a comment for class Foo on Init
|
834
|
-
*/
|
835
|
-
void
|
836
|
-
Init_Foo(void) {
|
837
|
-
/*
|
838
|
-
* a comment for class Foo on rb_define_class
|
839
|
-
*/
|
840
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
841
|
-
}
|
842
|
-
EOF
|
843
|
-
|
844
|
-
klass = util_get_class content, 'foo'
|
845
|
-
|
846
|
-
assert_equal "a comment for class Foo on Init", klass.comment.text
|
847
|
-
end
|
848
|
-
|
849
|
-
def test_find_class_comment_define_class_Init_Foo_no_void
|
850
|
-
content = <<-EOF
|
851
|
-
/*
|
852
|
-
* a comment for class Foo on Init
|
853
|
-
*/
|
854
|
-
void
|
855
|
-
Init_Foo() {
|
856
|
-
/*
|
857
|
-
* a comment for class Foo on rb_define_class
|
858
|
-
*/
|
859
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
860
|
-
}
|
861
|
-
EOF
|
862
|
-
|
863
|
-
klass = util_get_class content, 'foo'
|
864
|
-
|
865
|
-
assert_equal "a comment for class Foo on Init", klass.comment.text
|
866
|
-
end
|
867
|
-
|
868
|
-
def test_find_class_comment_define_class_bogus_comment
|
869
|
-
content = <<-EOF
|
870
|
-
/*
|
871
|
-
* a comment for other_function
|
872
|
-
*/
|
873
|
-
void
|
874
|
-
other_function() {
|
875
|
-
}
|
876
|
-
|
877
|
-
void
|
878
|
-
Init_Foo(void) {
|
879
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
880
|
-
}
|
881
|
-
EOF
|
882
|
-
|
883
|
-
klass = util_get_class content, 'foo'
|
884
|
-
|
885
|
-
assert_equal '', klass.comment.text
|
886
|
-
end
|
887
|
-
|
888
|
-
def test_find_class_comment_define_class_under
|
889
|
-
content = <<-EOF
|
890
|
-
/*
|
891
|
-
* a comment for class Foo
|
892
|
-
*/
|
893
|
-
VALUE foo = rb_define_class_under(rb_cObject, "Foo", rb_cObject);
|
894
|
-
EOF
|
895
|
-
|
896
|
-
klass = util_get_class content, 'foo'
|
897
|
-
|
898
|
-
assert_equal "a comment for class Foo", klass.comment.text
|
899
|
-
end
|
900
|
-
|
901
|
-
def test_find_class_comment_define_class_under_Init
|
902
|
-
content = <<-EOF
|
903
|
-
/*
|
904
|
-
* a comment for class Foo on Init
|
905
|
-
*/
|
906
|
-
void
|
907
|
-
Init_Foo(void) {
|
908
|
-
/*
|
909
|
-
* a comment for class Foo on rb_define_class
|
910
|
-
*/
|
911
|
-
VALUE foo = rb_define_class_under(rb_cObject, "Foo", rb_cObject);
|
912
|
-
}
|
913
|
-
EOF
|
914
|
-
|
915
|
-
klass = util_get_class content, 'foo'
|
916
|
-
|
917
|
-
# the inner comment is used since Object::Foo is not necessarily the same
|
918
|
-
# thing as "Foo" for Init_
|
919
|
-
assert_equal "a comment for class Foo on rb_define_class",
|
920
|
-
klass.comment.text
|
921
|
-
end
|
922
|
-
|
923
|
-
def test_find_const_comment_rb_define
|
924
|
-
content = <<-EOF
|
925
|
-
/*
|
926
|
-
* A comment
|
927
|
-
*/
|
928
|
-
rb_define_const(cFoo, "CONST", value);
|
929
|
-
EOF
|
930
|
-
|
931
|
-
parser = util_parser content
|
932
|
-
|
933
|
-
comment = parser.find_const_comment 'const', 'CONST'
|
934
|
-
|
935
|
-
assert_equal "/*\n * A comment\n */\n", comment.text
|
936
|
-
end
|
937
|
-
|
938
|
-
def test_find_const_comment_document_const
|
939
|
-
content = <<-EOF
|
940
|
-
/*
|
941
|
-
* Document-const: CONST
|
942
|
-
*
|
943
|
-
* A comment
|
944
|
-
*/
|
945
|
-
EOF
|
946
|
-
|
947
|
-
parser = util_parser content
|
948
|
-
|
949
|
-
comment = parser.find_const_comment nil, 'CONST'
|
950
|
-
|
951
|
-
assert_equal "/*\n *\n * A comment\n */", comment.text
|
952
|
-
end
|
953
|
-
|
954
|
-
def test_find_const_comment_document_const_full_name
|
955
|
-
content = <<-EOF
|
956
|
-
/*
|
957
|
-
* Document-const: Foo::CONST
|
958
|
-
*
|
959
|
-
* A comment
|
960
|
-
*/
|
961
|
-
EOF
|
962
|
-
|
963
|
-
parser = util_parser content
|
964
|
-
|
965
|
-
comment = parser.find_const_comment nil, 'CONST', 'Foo'
|
966
|
-
|
967
|
-
assert_equal "/*\n *\n * A comment\n */", comment.text
|
968
|
-
end
|
969
|
-
|
970
|
-
def test_find_body
|
971
|
-
content = <<-EOF
|
972
|
-
/*
|
973
|
-
* a comment for other_function
|
974
|
-
*/
|
975
|
-
VALUE
|
976
|
-
other_function() {
|
977
|
-
}
|
978
|
-
|
979
|
-
void
|
980
|
-
Init_Foo(void) {
|
981
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
982
|
-
|
983
|
-
rb_define_method(foo, "my_method", other_function, 0);
|
984
|
-
}
|
985
|
-
EOF
|
986
|
-
|
987
|
-
klass = util_get_class content, 'foo'
|
988
|
-
other_function = klass.method_list.first
|
989
|
-
|
990
|
-
assert_equal 'my_method', other_function.name
|
991
|
-
assert_equal "a comment for other_function",
|
992
|
-
other_function.comment.text
|
993
|
-
assert_equal '()', other_function.params
|
994
|
-
|
995
|
-
code = other_function.token_stream.first.text
|
996
|
-
|
997
|
-
assert_equal "VALUE\nother_function() {\n}", code
|
998
|
-
end
|
999
|
-
|
1000
|
-
def test_find_body_2
|
1001
|
-
content = <<-CONTENT
|
1002
|
-
/* Copyright (C) 2010 Sven Herzberg
|
1003
|
-
*
|
1004
|
-
* This file is free software; the author(s) gives unlimited
|
1005
|
-
* permission to copy and/or distribute it, with or without
|
1006
|
-
* modifications, as long as this notice is preserved.
|
1007
|
-
*/
|
1008
|
-
|
1009
|
-
#include <ruby.h>
|
1010
|
-
|
1011
|
-
static VALUE
|
1012
|
-
wrap_initialize (VALUE self)
|
1013
|
-
{
|
1014
|
-
return self;
|
1015
|
-
}
|
1016
|
-
|
1017
|
-
/* */
|
1018
|
-
static VALUE
|
1019
|
-
wrap_shift (VALUE self,
|
1020
|
-
VALUE arg)
|
1021
|
-
{
|
1022
|
-
return self;
|
1023
|
-
}
|
1024
|
-
|
1025
|
-
void
|
1026
|
-
init_gi_repository (void)
|
1027
|
-
{
|
1028
|
-
VALUE mTest = rb_define_module ("Test");
|
1029
|
-
VALUE cTest = rb_define_class_under (mTest, "Test", rb_cObject);
|
1030
|
-
|
1031
|
-
rb_define_method (cTest, "initialize", wrap_initialize, 0);
|
1032
|
-
rb_define_method (cTest, "shift", wrap_shift, 0);
|
1033
|
-
}
|
1034
|
-
CONTENT
|
1035
|
-
|
1036
|
-
klass = util_get_class content, 'cTest'
|
1037
|
-
assert_equal 2, klass.method_list.length
|
1038
|
-
end
|
1039
|
-
|
1040
|
-
def test_find_body_cast
|
1041
|
-
content = <<-EOF
|
1042
|
-
/*
|
1043
|
-
* a comment for other_function
|
1044
|
-
*/
|
1045
|
-
VALUE
|
1046
|
-
other_function() {
|
1047
|
-
}
|
1048
|
-
|
1049
|
-
void
|
1050
|
-
Init_Foo(void) {
|
1051
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
1052
|
-
|
1053
|
-
rb_define_method(foo, "my_method", (METHOD)other_function, 0);
|
1054
|
-
}
|
1055
|
-
EOF
|
1056
|
-
|
1057
|
-
klass = util_get_class content, 'foo'
|
1058
|
-
other_function = klass.method_list.first
|
1059
|
-
|
1060
|
-
assert_equal 'my_method', other_function.name
|
1061
|
-
assert_equal "a comment for other_function",
|
1062
|
-
other_function.comment.text
|
1063
|
-
assert_equal '()', other_function.params
|
1064
|
-
|
1065
|
-
code = other_function.token_stream.first.text
|
1066
|
-
|
1067
|
-
assert_equal "VALUE\nother_function() {\n}", code
|
1068
|
-
end
|
1069
|
-
|
1070
|
-
def test_find_body_define
|
1071
|
-
content = <<-EOF
|
1072
|
-
#define something something_else
|
1073
|
-
|
1074
|
-
#define other_function rb_other_function
|
1075
|
-
|
1076
|
-
/*
|
1077
|
-
* a comment for rb_other_function
|
1078
|
-
*/
|
1079
|
-
VALUE
|
1080
|
-
rb_other_function() {
|
1081
|
-
}
|
1082
|
-
|
1083
|
-
void
|
1084
|
-
Init_Foo(void) {
|
1085
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
1086
|
-
|
1087
|
-
rb_define_method(foo, "my_method", other_function, 0);
|
1088
|
-
}
|
1089
|
-
EOF
|
1090
|
-
|
1091
|
-
klass = util_get_class content, 'foo'
|
1092
|
-
other_function = klass.method_list.first
|
1093
|
-
|
1094
|
-
assert_equal 'my_method', other_function.name
|
1095
|
-
assert_equal 'a comment for rb_other_function', other_function.comment.text
|
1096
|
-
assert_equal '()', other_function.params
|
1097
|
-
assert_equal 118, other_function.offset
|
1098
|
-
assert_equal 8, other_function.line
|
1099
|
-
|
1100
|
-
code = other_function.token_stream.first.text
|
1101
|
-
|
1102
|
-
assert_equal "VALUE\nrb_other_function() {\n}", code
|
1103
|
-
end
|
1104
|
-
|
1105
|
-
def test_find_body_define_comment
|
1106
|
-
content = <<-EOF
|
1107
|
-
/*
|
1108
|
-
* a comment for other_function
|
1109
|
-
*/
|
1110
|
-
#define other_function rb_other_function
|
1111
|
-
|
1112
|
-
/* */
|
1113
|
-
VALUE
|
1114
|
-
rb_other_function() {
|
1115
|
-
}
|
1116
|
-
|
1117
|
-
void
|
1118
|
-
Init_Foo(void) {
|
1119
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
1120
|
-
|
1121
|
-
rb_define_method(foo, "my_method", other_function, 0);
|
1122
|
-
}
|
1123
|
-
EOF
|
1124
|
-
|
1125
|
-
klass = util_get_class content, 'foo'
|
1126
|
-
other_function = klass.method_list.first
|
1127
|
-
|
1128
|
-
assert_equal 'my_method', other_function.name
|
1129
|
-
assert_equal 'a comment for other_function', other_function.comment.text
|
1130
|
-
assert_equal '()', other_function.params
|
1131
|
-
assert_equal 39, other_function.offset
|
1132
|
-
assert_equal 4, other_function.line
|
1133
|
-
|
1134
|
-
code = other_function.token_stream.first.text
|
1135
|
-
|
1136
|
-
assert_equal "#define other_function rb_other_function", code
|
1137
|
-
end
|
1138
|
-
|
1139
|
-
def test_find_body_document_method
|
1140
|
-
content = <<-EOF
|
1141
|
-
/*
|
1142
|
-
* Document-method: bar
|
1143
|
-
* Document-method: baz
|
1144
|
-
*
|
1145
|
-
* a comment for bar
|
1146
|
-
*/
|
1147
|
-
VALUE
|
1148
|
-
bar() {
|
1149
|
-
}
|
1150
|
-
|
1151
|
-
void
|
1152
|
-
Init_Foo(void) {
|
1153
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
1154
|
-
|
1155
|
-
rb_define_method(foo, "bar", bar, 0);
|
1156
|
-
rb_define_method(foo, "baz", bar, 0);
|
1157
|
-
}
|
1158
|
-
EOF
|
1159
|
-
|
1160
|
-
klass = util_get_class content, 'foo'
|
1161
|
-
assert_equal 2, klass.method_list.length
|
1162
|
-
|
1163
|
-
methods = klass.method_list.sort
|
1164
|
-
|
1165
|
-
bar = methods.first
|
1166
|
-
assert_equal 'Foo#bar', bar.full_name
|
1167
|
-
assert_equal "a comment for bar", bar.comment.text
|
1168
|
-
|
1169
|
-
baz = methods.last
|
1170
|
-
assert_equal 'Foo#baz', baz.full_name
|
1171
|
-
assert_equal "a comment for bar", baz.comment.text
|
1172
|
-
end
|
1173
|
-
|
1174
|
-
def test_find_body_document_method_equals
|
1175
|
-
content = <<-EOF
|
1176
|
-
/*
|
1177
|
-
* Document-method: Zlib::GzipFile#mtime=
|
1178
|
-
*
|
1179
|
-
* A comment
|
1180
|
-
*/
|
1181
|
-
static VALUE
|
1182
|
-
rb_gzfile_set_mtime(VALUE obj, VALUE mtime)
|
1183
|
-
{
|
1184
|
-
|
1185
|
-
void
|
1186
|
-
Init_zlib() {
|
1187
|
-
mZlib = rb_define_module("Zlib");
|
1188
|
-
cGzipFile = rb_define_class_under(mZlib, "GzipFile", rb_cObject);
|
1189
|
-
cGzipWriter = rb_define_class_under(mZlib, "GzipWriter", cGzipFile);
|
1190
|
-
rb_define_method(cGzipWriter, "mtime=", rb_gzfile_set_mtime, 1);
|
1191
|
-
}
|
1192
|
-
EOF
|
1193
|
-
|
1194
|
-
klass = util_get_class content, 'cGzipWriter'
|
1195
|
-
assert_equal 1, klass.method_list.length
|
1196
|
-
|
1197
|
-
methods = klass.method_list.sort
|
1198
|
-
|
1199
|
-
bar = methods.first
|
1200
|
-
assert_equal 'Zlib::GzipWriter#mtime=', bar.full_name
|
1201
|
-
assert_equal 'A comment', bar.comment.text
|
1202
|
-
end
|
1203
|
-
|
1204
|
-
def test_find_body_document_method_same
|
1205
|
-
content = <<-EOF
|
1206
|
-
VALUE
|
1207
|
-
s_bar() {
|
1208
|
-
}
|
1209
|
-
|
1210
|
-
VALUE
|
1211
|
-
bar() {
|
1212
|
-
}
|
1213
|
-
|
1214
|
-
/*
|
1215
|
-
* Document-method: Foo::bar
|
1216
|
-
*
|
1217
|
-
* a comment for Foo::bar
|
1218
|
-
*/
|
1219
|
-
|
1220
|
-
/*
|
1221
|
-
* Document-method: Foo#bar
|
1222
|
-
*
|
1223
|
-
* a comment for Foo#bar
|
1224
|
-
*/
|
1225
|
-
|
1226
|
-
void
|
1227
|
-
Init_Foo(void) {
|
1228
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
1229
|
-
|
1230
|
-
rb_define_singleton_method(foo, "bar", s_bar, 0);
|
1231
|
-
rb_define_method(foo, "bar", bar, 0);
|
1232
|
-
}
|
1233
|
-
EOF
|
1234
|
-
|
1235
|
-
klass = util_get_class content, 'foo'
|
1236
|
-
assert_equal 2, klass.method_list.length
|
1237
|
-
|
1238
|
-
methods = klass.method_list.sort
|
1239
|
-
|
1240
|
-
s_bar = methods.first
|
1241
|
-
assert_equal 'Foo::bar', s_bar.full_name
|
1242
|
-
assert_equal "a comment for Foo::bar", s_bar.comment.text
|
1243
|
-
|
1244
|
-
bar = methods.last
|
1245
|
-
assert_equal 'Foo#bar', bar.full_name
|
1246
|
-
assert_equal "a comment for Foo#bar", bar.comment.text
|
1247
|
-
end
|
1248
|
-
|
1249
|
-
def test_find_body_macro
|
1250
|
-
content = <<-EOF
|
1251
|
-
/*
|
1252
|
-
* a comment for other_function
|
1253
|
-
*/
|
1254
|
-
DLL_LOCAL VALUE
|
1255
|
-
other_function() {
|
1256
|
-
}
|
1257
|
-
|
1258
|
-
void
|
1259
|
-
Init_Foo(void) {
|
1260
|
-
VALUE foo = rb_define_class("Foo", rb_cObject);
|
1261
|
-
|
1262
|
-
rb_define_method(foo, "my_method", other_function, 0);
|
1263
|
-
}
|
1264
|
-
EOF
|
1265
|
-
|
1266
|
-
klass = util_get_class content, 'foo'
|
1267
|
-
other_function = klass.method_list.first
|
1268
|
-
|
1269
|
-
assert_equal 'my_method', other_function.name
|
1270
|
-
assert_equal "a comment for other_function",
|
1271
|
-
other_function.comment.text
|
1272
|
-
assert_equal '()', other_function.params
|
1273
|
-
|
1274
|
-
code = other_function.token_stream.first.text
|
1275
|
-
|
1276
|
-
assert_equal "DLL_LOCAL VALUE\nother_function() {\n}", code
|
1277
|
-
end
|
1278
|
-
|
1279
|
-
def test_find_modifiers_call_seq
|
1280
|
-
comment = RDoc::Comment.new <<-COMMENT
|
1281
|
-
call-seq:
|
1282
|
-
commercial() -> Date <br />
|
1283
|
-
|
1284
|
-
If no arguments are given:
|
1285
|
-
|
1286
|
-
COMMENT
|
1287
|
-
|
1288
|
-
parser = util_parser
|
1289
|
-
method_obj = RDoc::AnyMethod.new nil, 'blah'
|
1290
|
-
|
1291
|
-
parser.find_modifiers comment, method_obj
|
1292
|
-
|
1293
|
-
expected = <<-CALL_SEQ.chomp
|
1294
|
-
commercial() -> Date <br />
|
1295
|
-
|
1296
|
-
CALL_SEQ
|
1297
|
-
|
1298
|
-
assert_equal expected, method_obj.call_seq
|
1299
|
-
end
|
1300
|
-
|
1301
|
-
def test_find_modifiers_nodoc
|
1302
|
-
comment = RDoc::Comment.new <<-COMMENT
|
1303
|
-
/* :nodoc:
|
1304
|
-
*
|
1305
|
-
* Blah
|
1306
|
-
*/
|
1307
|
-
|
1308
|
-
COMMENT
|
1309
|
-
|
1310
|
-
parser = util_parser
|
1311
|
-
method_obj = RDoc::AnyMethod.new nil, 'blah'
|
1312
|
-
|
1313
|
-
parser.find_modifiers comment, method_obj
|
1314
|
-
|
1315
|
-
assert_equal nil, method_obj.document_self
|
1316
|
-
end
|
1317
|
-
|
1318
|
-
def test_find_modifiers_yields
|
1319
|
-
comment = RDoc::Comment.new <<-COMMENT
|
1320
|
-
/* :yields: a, b
|
1321
|
-
*
|
1322
|
-
* Blah
|
1323
|
-
*/
|
1324
|
-
|
1325
|
-
COMMENT
|
1326
|
-
|
1327
|
-
parser = util_parser
|
1328
|
-
method_obj = RDoc::AnyMethod.new nil, 'blah'
|
1329
|
-
|
1330
|
-
parser.find_modifiers comment, method_obj
|
1331
|
-
|
1332
|
-
assert_equal 'a, b', method_obj.block_params
|
1333
|
-
|
1334
|
-
assert_equal "\n\nBlah", comment.text
|
1335
|
-
end
|
1336
|
-
|
1337
|
-
def test_handle_method_args_minus_1
|
1338
|
-
parser = util_parser "Document-method: Object#m\n blah */"
|
1339
|
-
|
1340
|
-
parser.content = <<-BODY
|
1341
|
-
VALUE
|
1342
|
-
rb_other(VALUE obj) {
|
1343
|
-
rb_funcall(obj, rb_intern("other"), 0);
|
1344
|
-
return rb_str_new2("blah, blah, blah");
|
1345
|
-
}
|
1346
|
-
|
1347
|
-
VALUE
|
1348
|
-
rb_m(int argc, VALUE *argv, VALUE obj) {
|
1349
|
-
VALUE o1, o2;
|
1350
|
-
rb_scan_args(argc, argv, "1", &o1, &o2);
|
1351
|
-
}
|
1352
|
-
BODY
|
1353
|
-
|
1354
|
-
parser.handle_method 'method', 'rb_cObject', 'm', 'rb_m', -1
|
1355
|
-
|
1356
|
-
m = @top_level.find_module_named('Object').method_list.first
|
1357
|
-
|
1358
|
-
assert_equal 'm', m.name
|
1359
|
-
assert_equal @top_level, m.file
|
1360
|
-
assert_equal 115, m.offset
|
1361
|
-
assert_equal 7, m.line
|
1362
|
-
|
1363
|
-
assert_equal '(p1)', m.params
|
1364
|
-
end
|
1365
|
-
|
1366
|
-
def test_handle_method_args_0
|
1367
|
-
parser = util_parser "Document-method: BasicObject#==\n blah */"
|
1368
|
-
|
1369
|
-
parser.handle_method 'method', 'rb_cBasicObject', '==', 'rb_obj_equal', 0
|
1370
|
-
|
1371
|
-
bo = @top_level.find_module_named 'BasicObject'
|
1372
|
-
|
1373
|
-
assert_equal 1, bo.method_list.length
|
1374
|
-
|
1375
|
-
equals2 = bo.method_list.first
|
1376
|
-
|
1377
|
-
assert_equal '()', equals2.params
|
1378
|
-
end
|
1379
|
-
|
1380
|
-
def test_handle_method_args_1
|
1381
|
-
parser = util_parser "Document-method: BasicObject#==\n blah */"
|
1382
|
-
|
1383
|
-
parser.handle_method 'method', 'rb_cBasicObject', '==', 'rb_obj_equal', 1
|
1384
|
-
|
1385
|
-
bo = @top_level.find_module_named 'BasicObject'
|
1386
|
-
|
1387
|
-
assert_equal 1, bo.method_list.length
|
1388
|
-
|
1389
|
-
equals2 = bo.method_list.first
|
1390
|
-
|
1391
|
-
assert_equal '(p1)', equals2.params
|
1392
|
-
end
|
1393
|
-
|
1394
|
-
def test_handle_method_args_2
|
1395
|
-
parser = util_parser "Document-method: BasicObject#==\n blah */"
|
1396
|
-
|
1397
|
-
parser.handle_method 'method', 'rb_cBasicObject', '==', 'rb_obj_equal', 2
|
1398
|
-
|
1399
|
-
bo = @top_level.find_module_named 'BasicObject'
|
1400
|
-
|
1401
|
-
assert_equal 1, bo.method_list.length
|
1402
|
-
|
1403
|
-
equals2 = bo.method_list.first
|
1404
|
-
|
1405
|
-
assert_equal '(p1, p2)', equals2.params
|
1406
|
-
end
|
1407
|
-
|
1408
|
-
# test_handle_args_minus_1 handled by test_handle_method
|
1409
|
-
|
1410
|
-
def test_handle_method_args_minus_2
|
1411
|
-
parser = util_parser "Document-method: BasicObject#==\n blah */"
|
1412
|
-
|
1413
|
-
parser.handle_method 'method', 'rb_cBasicObject', '==', 'rb_obj_equal', -2
|
1414
|
-
|
1415
|
-
bo = @top_level.find_module_named 'BasicObject'
|
1416
|
-
|
1417
|
-
assert_equal 1, bo.method_list.length
|
1418
|
-
|
1419
|
-
equals2 = bo.method_list.first
|
1420
|
-
|
1421
|
-
assert_equal '(*args)', equals2.params
|
1422
|
-
end
|
1423
|
-
|
1424
|
-
def test_handle_method_initialize
|
1425
|
-
parser = util_parser "Document-method: BasicObject::new\n blah */"
|
1426
|
-
|
1427
|
-
parser.handle_method('private_method', 'rb_cBasicObject',
|
1428
|
-
'initialize', 'rb_obj_dummy', -1)
|
1429
|
-
|
1430
|
-
bo = @top_level.find_module_named 'BasicObject'
|
1431
|
-
|
1432
|
-
assert_equal 1, bo.method_list.length
|
1433
|
-
|
1434
|
-
new = bo.method_list.first
|
1435
|
-
|
1436
|
-
assert_equal 'new', new.name
|
1437
|
-
assert_equal :public, new.visibility
|
1438
|
-
end
|
1439
|
-
|
1440
|
-
def test_handle_singleton
|
1441
|
-
parser = util_parser <<-SINGLE
|
1442
|
-
void Init_Blah(void) {
|
1443
|
-
cDate = rb_define_class("Date", rb_cObject);
|
1444
|
-
sDate = rb_singleton_class(cDate);
|
1445
|
-
}
|
1446
|
-
SINGLE
|
1447
|
-
|
1448
|
-
parser.scan
|
1449
|
-
|
1450
|
-
assert_equal 'Date', parser.known_classes['sDate']
|
1451
|
-
assert_equal 'Date', parser.singleton_classes['sDate']
|
1452
|
-
end
|
1453
|
-
|
1454
|
-
def test_look_for_directives_in
|
1455
|
-
parser = util_parser
|
1456
|
-
|
1457
|
-
comment = RDoc::Comment.new "# :other: not_handled\n"
|
1458
|
-
|
1459
|
-
parser.look_for_directives_in @top_level, comment
|
1460
|
-
|
1461
|
-
assert_equal "# :other: not_handled\n", comment.text
|
1462
|
-
assert_equal 'not_handled', @top_level.metadata['other']
|
1463
|
-
end
|
1464
|
-
|
1465
|
-
def test_load_variable_map
|
1466
|
-
some_ext = @top_level.add_class RDoc::NormalClass, 'SomeExt'
|
1467
|
-
@top_level.add_class RDoc::NormalClass, 'OtherExt'
|
1468
|
-
|
1469
|
-
@store.cache[:c_class_variables][@fn] = { 'cSomeExt' => 'SomeExt' }
|
1470
|
-
@store.cache[:c_class_variables]['other.c'] = { 'cOtherExt' => 'OtherExt' }
|
1471
|
-
|
1472
|
-
parser = util_parser
|
1473
|
-
|
1474
|
-
map = parser.load_variable_map :c_class_variables
|
1475
|
-
|
1476
|
-
expected = { 'cSomeExt' => some_ext }
|
1477
|
-
|
1478
|
-
assert_equal expected, map
|
1479
|
-
|
1480
|
-
assert_equal 'SomeExt', parser.known_classes['cSomeExt']
|
1481
|
-
assert_nil parser.known_classes['cOtherExt']
|
1482
|
-
end
|
1483
|
-
|
1484
|
-
def test_load_variable_map_empty
|
1485
|
-
parser = util_parser
|
1486
|
-
|
1487
|
-
map = parser.load_variable_map :c_class_variables
|
1488
|
-
|
1489
|
-
assert_empty map
|
1490
|
-
end
|
1491
|
-
|
1492
|
-
def test_load_variable_map_legacy
|
1493
|
-
@store.cache[:c_class_variables] = nil
|
1494
|
-
|
1495
|
-
parser = util_parser
|
1496
|
-
|
1497
|
-
map = parser.load_variable_map :c_class_variables
|
1498
|
-
|
1499
|
-
assert_empty map
|
1500
|
-
end
|
1501
|
-
|
1502
|
-
def test_load_variable_map_singleton
|
1503
|
-
@top_level.add_class RDoc::NormalClass, 'SomeExt'
|
1504
|
-
@top_level.add_class RDoc::NormalClass, 'OtherExt'
|
1505
|
-
|
1506
|
-
@store.cache[:c_singleton_class_variables][@fn] =
|
1507
|
-
{ 'cSomeExt' => 'SomeExt' }
|
1508
|
-
@store.cache[:c_singleton_class_variables]['other.c'] =
|
1509
|
-
{ 'cOtherExt' => 'OtherExt' }
|
1510
|
-
|
1511
|
-
parser = util_parser
|
1512
|
-
|
1513
|
-
map = parser.load_variable_map :c_singleton_class_variables
|
1514
|
-
|
1515
|
-
expected = { 'cSomeExt' => 'SomeExt' }
|
1516
|
-
|
1517
|
-
assert_equal expected, map
|
1518
|
-
|
1519
|
-
assert_equal 'SomeExt', parser.known_classes['cSomeExt']
|
1520
|
-
assert_nil parser.known_classes['cOtherExt']
|
1521
|
-
end
|
1522
|
-
|
1523
|
-
def test_load_variable_map_trim
|
1524
|
-
a = @top_level.add_class RDoc::NormalClass, 'A'
|
1525
|
-
|
1526
|
-
@store.cache[:c_class_variables][@fn] = {
|
1527
|
-
'cA' => 'A',
|
1528
|
-
'cB' => 'B',
|
1529
|
-
}
|
1530
|
-
|
1531
|
-
parser = util_parser
|
1532
|
-
|
1533
|
-
map = parser.load_variable_map :c_class_variables
|
1534
|
-
|
1535
|
-
expected = { 'cA' => a }
|
1536
|
-
|
1537
|
-
assert_equal expected, map
|
1538
|
-
end
|
1539
|
-
|
1540
|
-
def test_define_method
|
1541
|
-
content = <<-EOF
|
1542
|
-
/*Method Comment! */
|
1543
|
-
static VALUE
|
1544
|
-
rb_io_s_read(argc, argv, io)
|
1545
|
-
int argc;
|
1546
|
-
VALUE *argv;
|
1547
|
-
VALUE io;
|
1548
|
-
{
|
1549
|
-
}
|
1550
|
-
|
1551
|
-
void
|
1552
|
-
Init_IO(void) {
|
1553
|
-
/*
|
1554
|
-
* a comment for class Foo on rb_define_class
|
1555
|
-
*/
|
1556
|
-
VALUE rb_cIO = rb_define_class("IO", rb_cObject);
|
1557
|
-
rb_define_singleton_method(rb_cIO, "read", rb_io_s_read, -1);
|
1558
|
-
}
|
1559
|
-
EOF
|
1560
|
-
|
1561
|
-
klass = util_get_class content, 'rb_cIO'
|
1562
|
-
read_method = klass.method_list.first
|
1563
|
-
assert_equal "read", read_method.name
|
1564
|
-
assert_equal "Method Comment! ", read_method.comment.text
|
1565
|
-
assert_equal "rb_io_s_read", read_method.c_function
|
1566
|
-
assert read_method.singleton
|
1567
|
-
end
|
1568
|
-
|
1569
|
-
def test_define_method_with_prototype
|
1570
|
-
content = <<-EOF
|
1571
|
-
static VALUE rb_io_s_read(int, VALUE*, VALUE);
|
1572
|
-
|
1573
|
-
/* Method Comment! */
|
1574
|
-
static VALUE
|
1575
|
-
rb_io_s_read(argc, argv, io)
|
1576
|
-
int argc;
|
1577
|
-
VALUE *argv;
|
1578
|
-
VALUE io;
|
1579
|
-
{
|
1580
|
-
}
|
1581
|
-
|
1582
|
-
void
|
1583
|
-
Init_IO(void) {
|
1584
|
-
/*
|
1585
|
-
* a comment for class Foo on rb_define_class
|
1586
|
-
*/
|
1587
|
-
VALUE rb_cIO = rb_define_class("IO", rb_cObject);
|
1588
|
-
rb_define_singleton_method(rb_cIO, "read", rb_io_s_read, -1);
|
1589
|
-
}
|
1590
|
-
EOF
|
1591
|
-
|
1592
|
-
klass = util_get_class content, 'rb_cIO'
|
1593
|
-
read_method = klass.method_list.first
|
1594
|
-
assert_equal "read", read_method.name
|
1595
|
-
assert_equal "Method Comment! ", read_method.comment.text
|
1596
|
-
assert_equal "rb_io_s_read", read_method.c_function
|
1597
|
-
assert read_method.singleton
|
1598
|
-
end
|
1599
|
-
|
1600
|
-
def test_define_method_private
|
1601
|
-
content = <<-EOF
|
1602
|
-
/*Method Comment! */
|
1603
|
-
static VALUE
|
1604
|
-
rb_io_s_read(argc, argv, io)
|
1605
|
-
int argc;
|
1606
|
-
VALUE *argv;
|
1607
|
-
VALUE io;
|
1608
|
-
{
|
1609
|
-
}
|
1610
|
-
|
1611
|
-
void
|
1612
|
-
Init_IO(void) {
|
1613
|
-
/*
|
1614
|
-
* a comment for class Foo on rb_define_class
|
1615
|
-
*/
|
1616
|
-
VALUE rb_cIO = rb_define_class("IO", rb_cObject);
|
1617
|
-
rb_define_private_method(rb_cIO, "read", rb_io_s_read, -1);
|
1618
|
-
}
|
1619
|
-
EOF
|
1620
|
-
|
1621
|
-
klass = util_get_class content, 'rb_cIO'
|
1622
|
-
read_method = klass.method_list.first
|
1623
|
-
assert_equal 'IO#read', read_method.full_name
|
1624
|
-
assert_equal :private, read_method.visibility
|
1625
|
-
assert_equal "Method Comment! ", read_method.comment.text
|
1626
|
-
end
|
1627
|
-
|
1628
|
-
def test_define_method_private_singleton
|
1629
|
-
content = <<-EOF
|
1630
|
-
/*Method Comment! */
|
1631
|
-
static VALUE
|
1632
|
-
rb_io_s_read(argc, argv, io)
|
1633
|
-
int argc;
|
1634
|
-
VALUE *argv;
|
1635
|
-
VALUE io;
|
1636
|
-
{
|
1637
|
-
}
|
1638
|
-
|
1639
|
-
void
|
1640
|
-
Init_IO(void) {
|
1641
|
-
/*
|
1642
|
-
* a comment for class Foo on rb_define_class
|
1643
|
-
*/
|
1644
|
-
VALUE rb_cIO = rb_define_class("IO", rb_cObject);
|
1645
|
-
VALUE rb_cIO_s = rb_singleton_class(rb_cIO);
|
1646
|
-
rb_define_private_method(rb_cIO_s, "read", rb_io_s_read, -1);
|
1647
|
-
}
|
1648
|
-
EOF
|
1649
|
-
|
1650
|
-
klass = util_get_class content, 'rb_cIO'
|
1651
|
-
read_method = klass.method_list.first
|
1652
|
-
assert_equal "read", read_method.name
|
1653
|
-
assert_equal "Method Comment! ", read_method.comment.text
|
1654
|
-
assert_equal :private, read_method.visibility
|
1655
|
-
assert read_method.singleton
|
1656
|
-
end
|
1657
|
-
|
1658
|
-
def test_define_method_singleton
|
1659
|
-
content = <<-EOF
|
1660
|
-
/*Method Comment! */
|
1661
|
-
static VALUE
|
1662
|
-
rb_io_s_read(argc, argv, io)
|
1663
|
-
int argc;
|
1664
|
-
VALUE *argv;
|
1665
|
-
VALUE io;
|
1666
|
-
{
|
1667
|
-
}
|
1668
|
-
|
1669
|
-
void
|
1670
|
-
Init_IO(void) {
|
1671
|
-
/*
|
1672
|
-
* a comment for class Foo on rb_define_class
|
1673
|
-
*/
|
1674
|
-
VALUE rb_cIO = rb_define_class("IO", rb_cObject);
|
1675
|
-
VALUE rb_cIO_s = rb_singleton_class(rb_cIO);
|
1676
|
-
rb_define_method(rb_cIO_s, "read", rb_io_s_read, -1);
|
1677
|
-
}
|
1678
|
-
EOF
|
1679
|
-
|
1680
|
-
klass = util_get_class content, 'rb_cIO'
|
1681
|
-
read_method = klass.method_list.first
|
1682
|
-
assert_equal "read", read_method.name
|
1683
|
-
assert_equal "Method Comment! ", read_method.comment.text
|
1684
|
-
assert read_method.singleton
|
1685
|
-
end
|
1686
|
-
|
1687
|
-
def test_rb_scan_args
|
1688
|
-
parser = util_parser
|
1689
|
-
|
1690
|
-
assert_equal '(p1)',
|
1691
|
-
parser.rb_scan_args('rb_scan_args(a, b, "1",)')
|
1692
|
-
assert_equal '(p1, p2)',
|
1693
|
-
parser.rb_scan_args('rb_scan_args(a, b, "2",)')
|
1694
|
-
|
1695
|
-
assert_equal '(p1 = v1)',
|
1696
|
-
parser.rb_scan_args('rb_scan_args(a, b, "01",)')
|
1697
|
-
assert_equal '(p1 = v1, p2 = v2)',
|
1698
|
-
parser.rb_scan_args('rb_scan_args(a, b, "02",)')
|
1699
|
-
|
1700
|
-
assert_equal '(p1, p2 = v2)',
|
1701
|
-
parser.rb_scan_args('rb_scan_args(a, b, "11",)')
|
1702
|
-
|
1703
|
-
assert_equal '(p1, *args)',
|
1704
|
-
parser.rb_scan_args('rb_scan_args(a, b, "1*",)')
|
1705
|
-
assert_equal '(p1, p2 = {})',
|
1706
|
-
parser.rb_scan_args('rb_scan_args(a, b, "1:",)')
|
1707
|
-
assert_equal '(p1, &block)',
|
1708
|
-
parser.rb_scan_args('rb_scan_args(a, b, "1&",)')
|
1709
|
-
|
1710
|
-
assert_equal '(p1, p2)',
|
1711
|
-
parser.rb_scan_args('rb_scan_args(a, b, "101",)')
|
1712
|
-
|
1713
|
-
assert_equal '(p1, p2 = v2, p3)',
|
1714
|
-
parser.rb_scan_args('rb_scan_args(a, b, "111",)')
|
1715
|
-
|
1716
|
-
assert_equal '(p1, *args, p3)',
|
1717
|
-
parser.rb_scan_args('rb_scan_args(a, b, "1*1",)')
|
1718
|
-
|
1719
|
-
assert_equal '(p1, p2 = v2, *args)',
|
1720
|
-
parser.rb_scan_args('rb_scan_args(a, b, "11*",)')
|
1721
|
-
assert_equal '(p1, p2 = v2, p3 = {})',
|
1722
|
-
parser.rb_scan_args('rb_scan_args(a, b, "11:",)')
|
1723
|
-
assert_equal '(p1, p2 = v2, &block)',
|
1724
|
-
parser.rb_scan_args('rb_scan_args(a, b, "11&",)')
|
1725
|
-
|
1726
|
-
assert_equal '(p1, p2 = v2, *args, p4, p5 = {}, &block)',
|
1727
|
-
parser.rb_scan_args('rb_scan_args(a, b, "11*1:&",)')
|
1728
|
-
|
1729
|
-
# The following aren't valid according to spec but are according to the
|
1730
|
-
# implementation.
|
1731
|
-
assert_equal '(*args)',
|
1732
|
-
parser.rb_scan_args('rb_scan_args(a, b, "*",)')
|
1733
|
-
assert_equal '(p1 = {})',
|
1734
|
-
parser.rb_scan_args('rb_scan_args(a, b, ":",)')
|
1735
|
-
assert_equal '(&block)',
|
1736
|
-
parser.rb_scan_args('rb_scan_args(a, b, "&",)')
|
1737
|
-
|
1738
|
-
assert_equal '(*args, p2 = {})',
|
1739
|
-
parser.rb_scan_args('rb_scan_args(a, b, "*:",)')
|
1740
|
-
assert_equal '(p1 = {}, &block)',
|
1741
|
-
parser.rb_scan_args('rb_scan_args(a, b, ":&",)')
|
1742
|
-
assert_equal '(*args, p2 = {}, &block)',
|
1743
|
-
parser.rb_scan_args('rb_scan_args(a, b, "*:&",)')
|
1744
|
-
end
|
1745
|
-
|
1746
|
-
def test_scan
|
1747
|
-
parser = util_parser <<-C
|
1748
|
-
void Init(void) {
|
1749
|
-
mM = rb_define_module("M");
|
1750
|
-
cC = rb_define_class("C", rb_cObject);
|
1751
|
-
sC = rb_singleton_class(cC);
|
1752
|
-
}
|
1753
|
-
C
|
1754
|
-
|
1755
|
-
parser.scan
|
1756
|
-
|
1757
|
-
expected = {
|
1758
|
-
@fn => {
|
1759
|
-
'mM' => 'M',
|
1760
|
-
'cC' => 'C', }}
|
1761
|
-
assert_equal expected, @store.c_class_variables
|
1762
|
-
|
1763
|
-
expected = {
|
1764
|
-
@fn => {
|
1765
|
-
'sC' => 'C' } }
|
1766
|
-
assert_equal expected, @store.c_singleton_class_variables
|
1767
|
-
end
|
1768
|
-
|
1769
|
-
def test_scan_method_copy
|
1770
|
-
parser = util_parser <<-C
|
1771
|
-
/*
|
1772
|
-
* call-seq:
|
1773
|
-
* pathname.to_s -> string
|
1774
|
-
* pathname.to_path -> string
|
1775
|
-
*
|
1776
|
-
* Return the path as a String.
|
1777
|
-
*
|
1778
|
-
* to_path is implemented so Pathname objects are usable with File.open, etc.
|
1779
|
-
*/
|
1780
|
-
static VALUE
|
1781
|
-
path_to_s(VALUE self) { }
|
1782
|
-
|
1783
|
-
/*
|
1784
|
-
* call-seq:
|
1785
|
-
* str[index] -> new_str or nil
|
1786
|
-
* str[start, length] -> new_str or nil
|
1787
|
-
* str.slice(index) -> new_str or nil
|
1788
|
-
* str.slice(start, length) -> new_str or nil
|
1789
|
-
*/
|
1790
|
-
static VALUE
|
1791
|
-
path_aref_m(int argc, VALUE *argv, VALUE str) { }
|
1792
|
-
|
1793
|
-
/*
|
1794
|
-
* call-seq:
|
1795
|
-
* string <=> other_string -> -1, 0, +1 or nil
|
1796
|
-
*/
|
1797
|
-
static VALUE
|
1798
|
-
path_cmp_m(VALUE str1, VALUE str2) { }
|
1799
|
-
|
1800
|
-
/*
|
1801
|
-
* call-seq:
|
1802
|
-
* str == obj -> true or false
|
1803
|
-
* str === obj -> true or false
|
1804
|
-
*/
|
1805
|
-
VALUE
|
1806
|
-
rb_str_equal(VALUE str1, VALUE str2) { }
|
1807
|
-
|
1808
|
-
Init_pathname()
|
1809
|
-
{
|
1810
|
-
rb_cPathname = rb_define_class("Pathname", rb_cObject);
|
1811
|
-
|
1812
|
-
rb_define_method(rb_cPathname, "to_s", path_to_s, 0);
|
1813
|
-
rb_define_method(rb_cPathname, "to_path", path_to_s, 0);
|
1814
|
-
rb_define_method(rb_cPathname, "[]", path_aref_m, -1);
|
1815
|
-
rb_define_method(rb_cPathname, "slice", path_aref_m, -1);
|
1816
|
-
rb_define_method(rb_cPathname, "<=>", path_cmp_m, 1);
|
1817
|
-
rb_define_method(rb_cPathname, "==", rb_str_equal), 2);
|
1818
|
-
rb_define_method(rb_cPathname, "===", rb_str_equal), 2);
|
1819
|
-
}
|
1820
|
-
C
|
1821
|
-
|
1822
|
-
parser.scan
|
1823
|
-
|
1824
|
-
pathname = @store.classes_hash['Pathname']
|
1825
|
-
|
1826
|
-
to_path = pathname.method_list.find { |m| m.name == 'to_path' }
|
1827
|
-
assert_equal "pathname.to_path -> string", to_path.call_seq
|
1828
|
-
|
1829
|
-
to_s = pathname.method_list.find { |m| m.name == 'to_s' }
|
1830
|
-
assert_equal "pathname.to_s -> string", to_s.call_seq
|
1831
|
-
|
1832
|
-
index_expected = <<-EXPECTED.chomp
|
1833
|
-
str[index] -> new_str or nil
|
1834
|
-
str[start, length] -> new_str or nil
|
1835
|
-
EXPECTED
|
1836
|
-
|
1837
|
-
index = pathname.method_list.find { |m| m.name == '[]' }
|
1838
|
-
assert_equal index_expected, index.call_seq, '[]'
|
1839
|
-
|
1840
|
-
slice_expected = <<-EXPECTED.chomp
|
1841
|
-
str.slice(index) -> new_str or nil
|
1842
|
-
str.slice(start, length) -> new_str or nil
|
1843
|
-
EXPECTED
|
1844
|
-
|
1845
|
-
slice = pathname.method_list.find { |m| m.name == 'slice' }
|
1846
|
-
assert_equal slice_expected, slice.call_seq
|
1847
|
-
|
1848
|
-
spaceship = pathname.method_list.find { |m| m.name == '<=>' }
|
1849
|
-
assert_equal "string <=> other_string -> -1, 0, +1 or nil",
|
1850
|
-
spaceship.call_seq
|
1851
|
-
|
1852
|
-
equals2 = pathname.method_list.find { |m| m.name == '==' }
|
1853
|
-
assert_match 'str == obj', equals2.call_seq
|
1854
|
-
|
1855
|
-
equals3 = pathname.method_list.find { |m| m.name == '===' }
|
1856
|
-
assert_match 'str === obj', equals3.call_seq
|
1857
|
-
end
|
1858
|
-
|
1859
|
-
def test_scan_order_dependent
|
1860
|
-
parser = util_parser <<-C
|
1861
|
-
void a(void) {
|
1862
|
-
mA = rb_define_module("A");
|
1863
|
-
}
|
1864
|
-
|
1865
|
-
void b(void) {
|
1866
|
-
cB = rb_define_class_under(mA, "B", rb_cObject);
|
1867
|
-
}
|
1868
|
-
|
1869
|
-
void c(void) {
|
1870
|
-
mC = rb_define_module_under(cB, "C");
|
1871
|
-
}
|
1872
|
-
|
1873
|
-
void d(void) {
|
1874
|
-
mD = rb_define_class_under(mC, "D");
|
1875
|
-
}
|
1876
|
-
C
|
1877
|
-
|
1878
|
-
parser.scan
|
1879
|
-
|
1880
|
-
assert_equal %w[A A::B A::B::C],
|
1881
|
-
@store.all_classes_and_modules.map { |m| m.full_name }.sort
|
1882
|
-
end
|
1883
|
-
|
1884
|
-
def util_get_class content, name = nil
|
1885
|
-
@parser = util_parser content
|
1886
|
-
@parser.scan
|
1887
|
-
|
1888
|
-
@parser.classes[name] if name
|
1889
|
-
end
|
1890
|
-
|
1891
|
-
def util_parser content = ''
|
1892
|
-
RDoc::Parser::C.new @top_level, @fn, content, @options, @stats
|
1893
|
-
end
|
1894
|
-
|
1895
|
-
end
|
1896
|
-
|