iownbey-rdoc 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +13 -0
- data/Manifest.txt +61 -0
- data/README.txt +34 -0
- data/bin/rdoc +22 -0
- data/bin/ri +6 -0
- data/lib/rdoc.rb +277 -0
- data/lib/rdoc/code_objects.rb +776 -0
- data/lib/rdoc/diagram.rb +338 -0
- data/lib/rdoc/dot.rb +249 -0
- data/lib/rdoc/generator.rb +1050 -0
- data/lib/rdoc/generator/chm.rb +113 -0
- data/lib/rdoc/generator/chm/chm.rb +98 -0
- data/lib/rdoc/generator/html.rb +370 -0
- data/lib/rdoc/generator/html/hefss.rb +414 -0
- data/lib/rdoc/generator/html/html.rb +704 -0
- data/lib/rdoc/generator/html/kilmer.rb +418 -0
- data/lib/rdoc/generator/html/one_page_html.rb +121 -0
- data/lib/rdoc/generator/ri.rb +229 -0
- data/lib/rdoc/generator/texinfo.rb +84 -0
- data/lib/rdoc/generator/texinfo/class.texinfo.erb +44 -0
- data/lib/rdoc/generator/texinfo/file.texinfo.erb +6 -0
- data/lib/rdoc/generator/texinfo/method.texinfo.erb +6 -0
- data/lib/rdoc/generator/texinfo/texinfo.erb +28 -0
- data/lib/rdoc/generator/xml.rb +120 -0
- data/lib/rdoc/generator/xml/rdf.rb +113 -0
- data/lib/rdoc/generator/xml/xml.rb +111 -0
- data/lib/rdoc/markup.rb +473 -0
- data/lib/rdoc/markup/attribute_manager.rb +274 -0
- data/lib/rdoc/markup/formatter.rb +14 -0
- data/lib/rdoc/markup/fragments.rb +337 -0
- data/lib/rdoc/markup/inline.rb +101 -0
- data/lib/rdoc/markup/lines.rb +152 -0
- data/lib/rdoc/markup/preprocess.rb +71 -0
- data/lib/rdoc/markup/to_flow.rb +185 -0
- data/lib/rdoc/markup/to_html.rb +354 -0
- data/lib/rdoc/markup/to_html_crossref.rb +86 -0
- data/lib/rdoc/markup/to_latex.rb +328 -0
- data/lib/rdoc/markup/to_test.rb +50 -0
- data/lib/rdoc/markup/to_texinfo.rb +69 -0
- data/lib/rdoc/options.rb +621 -0
- data/lib/rdoc/parsers/parse_c.rb +775 -0
- data/lib/rdoc/parsers/parse_f95.rb +1841 -0
- data/lib/rdoc/parsers/parse_rb.rb +2584 -0
- data/lib/rdoc/parsers/parse_simple.rb +40 -0
- data/lib/rdoc/parsers/parserfactory.rb +99 -0
- data/lib/rdoc/rdoc.rb +277 -0
- data/lib/rdoc/ri.rb +4 -0
- data/lib/rdoc/ri/cache.rb +188 -0
- data/lib/rdoc/ri/descriptions.rb +150 -0
- data/lib/rdoc/ri/display.rb +274 -0
- data/lib/rdoc/ri/driver.rb +452 -0
- data/lib/rdoc/ri/formatter.rb +616 -0
- data/lib/rdoc/ri/paths.rb +102 -0
- data/lib/rdoc/ri/reader.rb +106 -0
- data/lib/rdoc/ri/util.rb +81 -0
- data/lib/rdoc/ri/writer.rb +68 -0
- data/lib/rdoc/stats.rb +25 -0
- data/lib/rdoc/template.rb +64 -0
- data/lib/rdoc/tokenstream.rb +33 -0
- data/test/test_rdoc_c_parser.rb +261 -0
- data/test/test_rdoc_info_formatting.rb +179 -0
- data/test/test_rdoc_info_sections.rb +93 -0
- data/test/test_rdoc_markup.rb +613 -0
- data/test/test_rdoc_markup_attribute_manager.rb +224 -0
- data/test/test_rdoc_ri_attribute_formatter.rb +42 -0
- data/test/test_rdoc_ri_default_display.rb +295 -0
- data/test/test_rdoc_ri_formatter.rb +318 -0
- data/test/test_rdoc_ri_overstrike_formatter.rb +69 -0
- metadata +142 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib/'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rdoc/generator/texinfo'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
# give us access to check this stuff before it's rendered
|
8
|
+
class RDoc::Generator::Texinfo; attr_reader :files, :classes; end
|
9
|
+
class RDoc::RDoc; attr_reader :options; attr_reader :gen; end
|
10
|
+
|
11
|
+
class TestRdocInfoSections < Test::Unit::TestCase
|
12
|
+
OUTPUT_DIR = "/tmp/rdoc-#{$$}"
|
13
|
+
|
14
|
+
def setup
|
15
|
+
# supress stdout
|
16
|
+
$stdout = File.new('/dev/null','w')
|
17
|
+
$stderr = File.new('/dev/null','w')
|
18
|
+
|
19
|
+
@rdoc = RDoc::RDoc.new
|
20
|
+
@rdoc.document(['--fmt=texinfo',
|
21
|
+
File.expand_path(File.dirname(__FILE__) + '/../lib/rdoc/generator/texinfo.rb'),
|
22
|
+
File.expand_path(File.dirname(__FILE__) + '/../README.txt'),
|
23
|
+
"--op=#{OUTPUT_DIR}"])
|
24
|
+
@text = File.read(OUTPUT_DIR + '/rdoc.texinfo')
|
25
|
+
end
|
26
|
+
|
27
|
+
def teardown
|
28
|
+
$stdout = STDOUT
|
29
|
+
$stderr = STDERR
|
30
|
+
FileUtils.rm_rf OUTPUT_DIR
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_output_exists
|
34
|
+
assert ! @text.empty?
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_each_class_has_a_chapter
|
38
|
+
assert_section "Class RDoc::Generator::Texinfo", '@chapter'
|
39
|
+
assert_section "Class RDoc::Generator::TexinfoTemplate", '@chapter'
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_class_descriptions_are_given
|
43
|
+
assert_match(/This generates .*Texinfo.* files for viewing with GNU Info or Emacs from .*RDoc.* extracted from Ruby source files/, @text.gsub("\n", ' '))
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_included_modules_are_given
|
47
|
+
assert_match(/Includes.* Generator::MarkUp/m, @text)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_class_methods_are_given
|
51
|
+
assert_match(/new\(options\)/, @text)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_classes_instance_methods_are_given
|
55
|
+
assert_section 'Class RDoc::Generator::Texinfo#generate'
|
56
|
+
assert_match(/generate\(toplevels\)/, @text)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_each_module_has_a_chapter
|
60
|
+
assert_section "RDoc", '@chapter'
|
61
|
+
assert_section "Generator", '@chapter'
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_methods_are_shown_only_once
|
65
|
+
methods = @rdoc.gen.classes.map { |c| c.methods.map{ |m| c.name + '#' + m.name } }.flatten
|
66
|
+
assert_equal methods, methods.uniq
|
67
|
+
end
|
68
|
+
|
69
|
+
# if system "makeinfo --version > /dev/null"
|
70
|
+
# def test_compiles_to_info
|
71
|
+
# makeinfo_output = `cd #{OUTPUT_DIR} && makeinfo rdoc.texinfo`
|
72
|
+
# assert(File.exist?(File.join(OUTPUT_DIR, 'rdoc.info')),
|
73
|
+
# "Info file was not compiled: #{makeinfo_output}")
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
|
77
|
+
# def test_constants_are_documented_somehow
|
78
|
+
# assert_section 'DEFAULT_FILENAME' # what kind of section?
|
79
|
+
# assert_section 'DEFAULT_INFO_FILENAME'
|
80
|
+
# end
|
81
|
+
|
82
|
+
# def test_oh_yeah_dont_forget_files
|
83
|
+
# end
|
84
|
+
|
85
|
+
private
|
86
|
+
def assert_section(name, command = '@section')
|
87
|
+
assert_match Regexp.new("^#{command}.*#{Regexp.escape name}"), @text, "Could not find a #{command} #{name}"
|
88
|
+
end
|
89
|
+
|
90
|
+
# def puts(*args)
|
91
|
+
# @real_stdout.puts(*args)
|
92
|
+
# end
|
93
|
+
end
|
@@ -0,0 +1,613 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rdoc/markup'
|
3
|
+
require 'rdoc/markup/to_test'
|
4
|
+
|
5
|
+
class TestRDocMarkup < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def basic_conv(str)
|
8
|
+
sm = RDoc::Markup.new
|
9
|
+
mock = RDoc::Markup::ToTest.new
|
10
|
+
sm.convert(str, mock)
|
11
|
+
sm.content
|
12
|
+
end
|
13
|
+
|
14
|
+
def line_groups(str, expected)
|
15
|
+
m = RDoc::Markup.new
|
16
|
+
mock = RDoc::Markup::ToTest.new
|
17
|
+
|
18
|
+
block = m.convert(str, mock)
|
19
|
+
|
20
|
+
if block != expected
|
21
|
+
rows = (0...([expected.size, block.size].max)).collect{|i|
|
22
|
+
[expected[i]||"nil", block[i]||"nil"]
|
23
|
+
}
|
24
|
+
printf "\n\n%35s %35s\n", "Expected", "Got"
|
25
|
+
rows.each {|e,g| printf "%35s %35s\n", e.dump, g.dump }
|
26
|
+
end
|
27
|
+
|
28
|
+
assert_equal(expected, block)
|
29
|
+
end
|
30
|
+
|
31
|
+
def line_types(str, expected)
|
32
|
+
m = RDoc::Markup.new
|
33
|
+
mock = RDoc::Markup::ToTest.new
|
34
|
+
m.convert(str, mock)
|
35
|
+
assert_equal(expected, m.get_line_types.map{|type| type.to_s[0,1]}.join(''))
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_groups
|
39
|
+
str = "now is the time"
|
40
|
+
line_groups(str, ["L0: Paragraph\nnow is the time"] )
|
41
|
+
|
42
|
+
str = "now is the time\nfor all good men"
|
43
|
+
line_groups(str, ["L0: Paragraph\nnow is the time for all good men"] )
|
44
|
+
|
45
|
+
str = %{\
|
46
|
+
now is the time
|
47
|
+
code _line_ here
|
48
|
+
for all good men}
|
49
|
+
|
50
|
+
line_groups(str,
|
51
|
+
[ "L0: Paragraph\nnow is the time",
|
52
|
+
"L0: Verbatim\n code _line_ here\n",
|
53
|
+
"L0: Paragraph\nfor all good men"
|
54
|
+
] )
|
55
|
+
|
56
|
+
str = "now is the time\n code\n more code\nfor all good men"
|
57
|
+
line_groups(str,
|
58
|
+
[ "L0: Paragraph\nnow is the time",
|
59
|
+
"L0: Verbatim\n code\n more code\n",
|
60
|
+
"L0: Paragraph\nfor all good men"
|
61
|
+
] )
|
62
|
+
|
63
|
+
str = %{\
|
64
|
+
now is
|
65
|
+
* l1
|
66
|
+
* l2
|
67
|
+
the time}
|
68
|
+
line_groups(str,
|
69
|
+
[ "L0: Paragraph\nnow is",
|
70
|
+
"L1: ListStart\n",
|
71
|
+
"L1: BULLET ListItem\nl1",
|
72
|
+
"L1: BULLET ListItem\nl2",
|
73
|
+
"L1: ListEnd\n",
|
74
|
+
"L0: Paragraph\nthe time"
|
75
|
+
])
|
76
|
+
|
77
|
+
str = %{\
|
78
|
+
now is
|
79
|
+
* l1
|
80
|
+
l1+
|
81
|
+
* l2
|
82
|
+
the time}
|
83
|
+
line_groups(str,
|
84
|
+
[ "L0: Paragraph\nnow is",
|
85
|
+
"L1: ListStart\n",
|
86
|
+
"L1: BULLET ListItem\nl1 l1+",
|
87
|
+
"L1: BULLET ListItem\nl2",
|
88
|
+
"L1: ListEnd\n",
|
89
|
+
"L0: Paragraph\nthe time"
|
90
|
+
])
|
91
|
+
|
92
|
+
str = %{\
|
93
|
+
now is
|
94
|
+
* l1
|
95
|
+
* l1.1
|
96
|
+
* l2
|
97
|
+
the time}
|
98
|
+
line_groups(str,
|
99
|
+
[ "L0: Paragraph\nnow is",
|
100
|
+
"L1: ListStart\n",
|
101
|
+
"L1: BULLET ListItem\nl1",
|
102
|
+
"L2: ListStart\n",
|
103
|
+
"L2: BULLET ListItem\nl1.1",
|
104
|
+
"L2: ListEnd\n",
|
105
|
+
"L1: BULLET ListItem\nl2",
|
106
|
+
"L1: ListEnd\n",
|
107
|
+
"L0: Paragraph\nthe time"
|
108
|
+
])
|
109
|
+
|
110
|
+
|
111
|
+
str = %{\
|
112
|
+
now is
|
113
|
+
* l1
|
114
|
+
* l1.1
|
115
|
+
text
|
116
|
+
code
|
117
|
+
code
|
118
|
+
|
119
|
+
text
|
120
|
+
* l2
|
121
|
+
the time}
|
122
|
+
line_groups(str,
|
123
|
+
[ "L0: Paragraph\nnow is",
|
124
|
+
"L1: ListStart\n",
|
125
|
+
"L1: BULLET ListItem\nl1",
|
126
|
+
"L2: ListStart\n",
|
127
|
+
"L2: BULLET ListItem\nl1.1 text",
|
128
|
+
"L2: Verbatim\n code\n code\n",
|
129
|
+
"L2: Paragraph\ntext",
|
130
|
+
"L2: ListEnd\n",
|
131
|
+
"L1: BULLET ListItem\nl2",
|
132
|
+
"L1: ListEnd\n",
|
133
|
+
"L0: Paragraph\nthe time"
|
134
|
+
])
|
135
|
+
|
136
|
+
|
137
|
+
str = %{\
|
138
|
+
now is
|
139
|
+
1. l1
|
140
|
+
* l1.1
|
141
|
+
2. l2
|
142
|
+
the time}
|
143
|
+
line_groups(str,
|
144
|
+
[ "L0: Paragraph\nnow is",
|
145
|
+
"L1: ListStart\n",
|
146
|
+
"L1: NUMBER ListItem\nl1",
|
147
|
+
"L2: ListStart\n",
|
148
|
+
"L2: BULLET ListItem\nl1.1",
|
149
|
+
"L2: ListEnd\n",
|
150
|
+
"L1: NUMBER ListItem\nl2",
|
151
|
+
"L1: ListEnd\n",
|
152
|
+
"L0: Paragraph\nthe time"
|
153
|
+
])
|
154
|
+
|
155
|
+
str = %{\
|
156
|
+
now is
|
157
|
+
[cat] l1
|
158
|
+
* l1.1
|
159
|
+
[dog] l2
|
160
|
+
the time}
|
161
|
+
line_groups(str,
|
162
|
+
[ "L0: Paragraph\nnow is",
|
163
|
+
"L1: ListStart\n",
|
164
|
+
"L1: LABELED ListItem\ncat: l1",
|
165
|
+
"L2: ListStart\n",
|
166
|
+
"L2: BULLET ListItem\nl1.1",
|
167
|
+
"L2: ListEnd\n",
|
168
|
+
"L1: LABELED ListItem\ndog: l2",
|
169
|
+
"L1: ListEnd\n",
|
170
|
+
"L0: Paragraph\nthe time"
|
171
|
+
])
|
172
|
+
|
173
|
+
str = %{\
|
174
|
+
now is
|
175
|
+
[cat] l1
|
176
|
+
continuation
|
177
|
+
[dog] l2
|
178
|
+
the time}
|
179
|
+
line_groups(str,
|
180
|
+
[ "L0: Paragraph\nnow is",
|
181
|
+
"L1: ListStart\n",
|
182
|
+
"L1: LABELED ListItem\ncat: l1 continuation",
|
183
|
+
"L1: LABELED ListItem\ndog: l2",
|
184
|
+
"L1: ListEnd\n",
|
185
|
+
"L0: Paragraph\nthe time"
|
186
|
+
])
|
187
|
+
end
|
188
|
+
|
189
|
+
def test_headings
|
190
|
+
str = "= heading one"
|
191
|
+
line_groups(str,
|
192
|
+
[ "L0: Heading\nheading one"
|
193
|
+
])
|
194
|
+
|
195
|
+
str = "=== heading three"
|
196
|
+
line_groups(str,
|
197
|
+
[ "L0: Heading\nheading three"
|
198
|
+
])
|
199
|
+
|
200
|
+
str = "text\n === heading three"
|
201
|
+
line_groups(str,
|
202
|
+
[ "L0: Paragraph\ntext",
|
203
|
+
"L0: Verbatim\n === heading three\n"
|
204
|
+
])
|
205
|
+
|
206
|
+
str = "text\n code\n === heading three"
|
207
|
+
line_groups(str,
|
208
|
+
[ "L0: Paragraph\ntext",
|
209
|
+
"L0: Verbatim\n code\n === heading three\n"
|
210
|
+
])
|
211
|
+
|
212
|
+
str = "text\n code\n=== heading three"
|
213
|
+
line_groups(str,
|
214
|
+
[ "L0: Paragraph\ntext",
|
215
|
+
"L0: Verbatim\n code\n",
|
216
|
+
"L0: Heading\nheading three"
|
217
|
+
])
|
218
|
+
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_list_alpha
|
222
|
+
str = "a. alpha\nb. baker\nB. ALPHA\nA. BAKER"
|
223
|
+
|
224
|
+
line_groups(str,
|
225
|
+
[ "L1: ListStart\n",
|
226
|
+
"L1: LOWERALPHA ListItem\nalpha",
|
227
|
+
"L1: LOWERALPHA ListItem\nbaker",
|
228
|
+
"L1: ListEnd\n",
|
229
|
+
"L1: ListStart\n",
|
230
|
+
"L1: UPPERALPHA ListItem\nALPHA",
|
231
|
+
"L1: UPPERALPHA ListItem\nBAKER",
|
232
|
+
"L1: ListEnd\n" ])
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_list_bullet_dash
|
236
|
+
str = "- one\n- two\n"
|
237
|
+
|
238
|
+
line_groups(str,
|
239
|
+
[ "L1: ListStart\n",
|
240
|
+
"L1: BULLET ListItem\none",
|
241
|
+
"L1: BULLET ListItem\ntwo",
|
242
|
+
"L1: ListEnd\n" ])
|
243
|
+
end
|
244
|
+
|
245
|
+
def test_list_bullet_star
|
246
|
+
str = "* one\n* two\n"
|
247
|
+
|
248
|
+
line_groups(str,
|
249
|
+
[ "L1: ListStart\n",
|
250
|
+
"L1: BULLET ListItem\none",
|
251
|
+
"L1: BULLET ListItem\ntwo",
|
252
|
+
"L1: ListEnd\n" ])
|
253
|
+
end
|
254
|
+
|
255
|
+
def test_list_labeled_bracket
|
256
|
+
str = "[one] item one\n[two] item two"
|
257
|
+
|
258
|
+
line_groups(str,
|
259
|
+
[ "L1: ListStart\n",
|
260
|
+
"L1: LABELED ListItem\none: item one",
|
261
|
+
"L1: LABELED ListItem\ntwo: item two",
|
262
|
+
"L1: ListEnd\n" ])
|
263
|
+
end
|
264
|
+
|
265
|
+
def test_list_labeled_bracket_continued
|
266
|
+
str = "[one]\n item one\n[two]\n item two"
|
267
|
+
|
268
|
+
line_groups(str,
|
269
|
+
[ "L1: ListStart\n",
|
270
|
+
"L1: LABELED ListItem\none: item one",
|
271
|
+
"L1: LABELED ListItem\ntwo: item two",
|
272
|
+
"L1: ListEnd\n" ])
|
273
|
+
end
|
274
|
+
|
275
|
+
def test_list_labeled_colon
|
276
|
+
str = "one:: item one\ntwo:: item two"
|
277
|
+
|
278
|
+
line_groups(str,
|
279
|
+
[ "L1: ListStart\n",
|
280
|
+
"L1: NOTE ListItem\none:: item one",
|
281
|
+
"L1: NOTE ListItem\ntwo:: item two",
|
282
|
+
"L1: ListEnd\n" ])
|
283
|
+
end
|
284
|
+
|
285
|
+
def test_list_labeled_colon_continued
|
286
|
+
str = "one::\n item one\ntwo::\n item two"
|
287
|
+
|
288
|
+
line_groups(str,
|
289
|
+
[ "L1: ListStart\n",
|
290
|
+
"L1: NOTE ListItem\none:: item one",
|
291
|
+
"L1: NOTE ListItem\ntwo:: item two",
|
292
|
+
"L1: ListEnd\n" ])
|
293
|
+
end
|
294
|
+
|
295
|
+
def test_list_nested_bullet_bullet
|
296
|
+
str = "* one\n* two\n * cat\n * dog"
|
297
|
+
|
298
|
+
line_groups(str,
|
299
|
+
[ "L1: ListStart\n",
|
300
|
+
"L1: BULLET ListItem\none",
|
301
|
+
"L1: BULLET ListItem\ntwo",
|
302
|
+
"L2: ListStart\n",
|
303
|
+
"L2: BULLET ListItem\ncat",
|
304
|
+
"L2: BULLET ListItem\ndog",
|
305
|
+
"L2: ListEnd\n",
|
306
|
+
"L1: ListEnd\n" ])
|
307
|
+
end
|
308
|
+
|
309
|
+
def test_list_nested_labeled_bullet
|
310
|
+
str = "[one]\n * cat\n * dog"
|
311
|
+
|
312
|
+
line_groups(str,
|
313
|
+
[ "L1: ListStart\n",
|
314
|
+
"L1: LABELED ListItem\none: ",
|
315
|
+
"L2: ListStart\n",
|
316
|
+
"L2: BULLET ListItem\ncat",
|
317
|
+
"L2: BULLET ListItem\ndog",
|
318
|
+
"L2: ListEnd\n",
|
319
|
+
"L1: ListEnd\n" ])
|
320
|
+
end
|
321
|
+
|
322
|
+
def test_list_nested_labeled_bullet_bullet
|
323
|
+
str = "[one]\n * cat\n * dog"
|
324
|
+
|
325
|
+
line_groups(str,
|
326
|
+
[ "L1: ListStart\n",
|
327
|
+
"L1: LABELED ListItem\none: ",
|
328
|
+
"L2: ListStart\n",
|
329
|
+
"L2: BULLET ListItem\ncat",
|
330
|
+
"L3: ListStart\n",
|
331
|
+
"L3: BULLET ListItem\ndog",
|
332
|
+
"L3: ListEnd\n",
|
333
|
+
"L2: ListEnd\n",
|
334
|
+
"L1: ListEnd\n" ])
|
335
|
+
end
|
336
|
+
|
337
|
+
def test_list_nested_number_number
|
338
|
+
str = "1. one\n1. two\n 1. cat\n 1. dog"
|
339
|
+
|
340
|
+
line_groups(str,
|
341
|
+
[ "L1: ListStart\n",
|
342
|
+
"L1: NUMBER ListItem\none",
|
343
|
+
"L1: NUMBER ListItem\ntwo",
|
344
|
+
"L2: ListStart\n",
|
345
|
+
"L2: NUMBER ListItem\ncat",
|
346
|
+
"L2: NUMBER ListItem\ndog",
|
347
|
+
"L2: ListEnd\n",
|
348
|
+
"L1: ListEnd\n" ])
|
349
|
+
end
|
350
|
+
|
351
|
+
def test_list_number
|
352
|
+
str = "1. one\n2. two\n1. three"
|
353
|
+
|
354
|
+
line_groups(str,
|
355
|
+
[ "L1: ListStart\n",
|
356
|
+
"L1: NUMBER ListItem\none",
|
357
|
+
"L1: NUMBER ListItem\ntwo",
|
358
|
+
"L1: NUMBER ListItem\nthree",
|
359
|
+
"L1: ListEnd\n" ])
|
360
|
+
end
|
361
|
+
|
362
|
+
def test_list_split
|
363
|
+
str = %{\
|
364
|
+
now is
|
365
|
+
* l1
|
366
|
+
1. n1
|
367
|
+
2. n2
|
368
|
+
* l2
|
369
|
+
the time}
|
370
|
+
line_groups(str,
|
371
|
+
[ "L0: Paragraph\nnow is",
|
372
|
+
"L1: ListStart\n",
|
373
|
+
"L1: BULLET ListItem\nl1",
|
374
|
+
"L1: ListEnd\n",
|
375
|
+
"L1: ListStart\n",
|
376
|
+
"L1: NUMBER ListItem\nn1",
|
377
|
+
"L1: NUMBER ListItem\nn2",
|
378
|
+
"L1: ListEnd\n",
|
379
|
+
"L1: ListStart\n",
|
380
|
+
"L1: BULLET ListItem\nl2",
|
381
|
+
"L1: ListEnd\n",
|
382
|
+
"L0: Paragraph\nthe time"
|
383
|
+
])
|
384
|
+
|
385
|
+
end
|
386
|
+
|
387
|
+
def test_paragraph
|
388
|
+
str = "paragraph\n\n*bold* paragraph\n"
|
389
|
+
|
390
|
+
line_groups str, [
|
391
|
+
"L0: Paragraph\nparagraph",
|
392
|
+
"L0: BlankLine\n",
|
393
|
+
"L0: Paragraph\n*bold* paragraph"
|
394
|
+
]
|
395
|
+
end
|
396
|
+
|
397
|
+
def test_tabs
|
398
|
+
str = "hello\n dave"
|
399
|
+
assert_equal(str, basic_conv(str))
|
400
|
+
str = "hello\n\tdave"
|
401
|
+
assert_equal("hello\n dave", basic_conv(str))
|
402
|
+
str = "hello\n \tdave"
|
403
|
+
assert_equal("hello\n dave", basic_conv(str))
|
404
|
+
str = "hello\n \tdave"
|
405
|
+
assert_equal("hello\n dave", basic_conv(str))
|
406
|
+
str = "hello\n \tdave"
|
407
|
+
assert_equal("hello\n dave", basic_conv(str))
|
408
|
+
str = "hello\n \tdave"
|
409
|
+
assert_equal("hello\n dave", basic_conv(str))
|
410
|
+
str = "hello\n \tdave"
|
411
|
+
assert_equal("hello\n dave", basic_conv(str))
|
412
|
+
str = "hello\n \tdave"
|
413
|
+
assert_equal("hello\n dave", basic_conv(str))
|
414
|
+
str = "hello\n \tdave"
|
415
|
+
assert_equal("hello\n dave", basic_conv(str))
|
416
|
+
str = "hello\n \tdave"
|
417
|
+
assert_equal("hello\n dave", basic_conv(str))
|
418
|
+
str = ".\t\t."
|
419
|
+
assert_equal(". .", basic_conv(str))
|
420
|
+
end
|
421
|
+
|
422
|
+
def test_types
|
423
|
+
str = "now is the time"
|
424
|
+
line_types(str, 'P')
|
425
|
+
|
426
|
+
str = "now is the time\nfor all good men"
|
427
|
+
line_types(str, 'PP')
|
428
|
+
|
429
|
+
str = "now is the time\n code\nfor all good men"
|
430
|
+
line_types(str, 'PVP')
|
431
|
+
|
432
|
+
str = "now is the time\n code\n more code\nfor all good men"
|
433
|
+
line_types(str, 'PVVP')
|
434
|
+
|
435
|
+
str = "now is\n---\nthe time"
|
436
|
+
line_types(str, 'PRP')
|
437
|
+
|
438
|
+
str = %{\
|
439
|
+
now is
|
440
|
+
* l1
|
441
|
+
* l2
|
442
|
+
the time}
|
443
|
+
line_types(str, 'PLLP')
|
444
|
+
|
445
|
+
str = %{\
|
446
|
+
now is
|
447
|
+
* l1
|
448
|
+
l1+
|
449
|
+
* l2
|
450
|
+
the time}
|
451
|
+
line_types(str, 'PLPLP')
|
452
|
+
|
453
|
+
str = %{\
|
454
|
+
now is
|
455
|
+
* l1
|
456
|
+
* l1.1
|
457
|
+
* l2
|
458
|
+
the time}
|
459
|
+
line_types(str, 'PLLLP')
|
460
|
+
|
461
|
+
str = %{\
|
462
|
+
now is
|
463
|
+
* l1
|
464
|
+
* l1.1
|
465
|
+
text
|
466
|
+
code
|
467
|
+
code
|
468
|
+
|
469
|
+
text
|
470
|
+
* l2
|
471
|
+
the time}
|
472
|
+
line_types(str, 'PLLPVVBPLP')
|
473
|
+
|
474
|
+
str = %{\
|
475
|
+
now is
|
476
|
+
1. l1
|
477
|
+
* l1.1
|
478
|
+
2. l2
|
479
|
+
the time}
|
480
|
+
line_types(str, 'PLLLP')
|
481
|
+
|
482
|
+
str = %{\
|
483
|
+
now is
|
484
|
+
[cat] l1
|
485
|
+
* l1.1
|
486
|
+
[dog] l2
|
487
|
+
the time}
|
488
|
+
line_types(str, 'PLLLP')
|
489
|
+
|
490
|
+
str = %{\
|
491
|
+
now is
|
492
|
+
[cat] l1
|
493
|
+
continuation
|
494
|
+
[dog] l2
|
495
|
+
the time}
|
496
|
+
line_types(str, 'PLPLP')
|
497
|
+
end
|
498
|
+
|
499
|
+
def test_verbatim
|
500
|
+
str = "paragraph\n *bold* verbatim\n"
|
501
|
+
|
502
|
+
line_groups str, [
|
503
|
+
"L0: Paragraph\nparagraph",
|
504
|
+
"L0: Verbatim\n *bold* verbatim\n"
|
505
|
+
]
|
506
|
+
end
|
507
|
+
|
508
|
+
def test_verbatim_merge
|
509
|
+
str = %{\
|
510
|
+
now is
|
511
|
+
code
|
512
|
+
the time}
|
513
|
+
|
514
|
+
line_groups(str,
|
515
|
+
[ "L0: Paragraph\nnow is",
|
516
|
+
"L0: Verbatim\n code\n",
|
517
|
+
"L0: Paragraph\nthe time"
|
518
|
+
])
|
519
|
+
|
520
|
+
|
521
|
+
str = %{\
|
522
|
+
now is
|
523
|
+
code
|
524
|
+
code1
|
525
|
+
the time}
|
526
|
+
|
527
|
+
line_groups(str,
|
528
|
+
[ "L0: Paragraph\nnow is",
|
529
|
+
"L0: Verbatim\n code\n code1\n",
|
530
|
+
"L0: Paragraph\nthe time"
|
531
|
+
])
|
532
|
+
|
533
|
+
|
534
|
+
str = %{\
|
535
|
+
now is
|
536
|
+
code
|
537
|
+
|
538
|
+
code1
|
539
|
+
the time}
|
540
|
+
|
541
|
+
line_groups(str,
|
542
|
+
[ "L0: Paragraph\nnow is",
|
543
|
+
"L0: Verbatim\n code\n\n code1\n",
|
544
|
+
"L0: Paragraph\nthe time"
|
545
|
+
])
|
546
|
+
|
547
|
+
|
548
|
+
str = %{\
|
549
|
+
now is
|
550
|
+
code
|
551
|
+
|
552
|
+
code1
|
553
|
+
|
554
|
+
the time}
|
555
|
+
|
556
|
+
line_groups(str,
|
557
|
+
[ "L0: Paragraph\nnow is",
|
558
|
+
"L0: Verbatim\n code\n\n code1\n",
|
559
|
+
"L0: Paragraph\nthe time"
|
560
|
+
])
|
561
|
+
|
562
|
+
|
563
|
+
str = %{\
|
564
|
+
now is
|
565
|
+
code
|
566
|
+
|
567
|
+
code1
|
568
|
+
|
569
|
+
code2
|
570
|
+
the time}
|
571
|
+
|
572
|
+
line_groups(str,
|
573
|
+
[ "L0: Paragraph\nnow is",
|
574
|
+
"L0: Verbatim\n code\n\n code1\n\n code2\n",
|
575
|
+
"L0: Paragraph\nthe time"
|
576
|
+
])
|
577
|
+
|
578
|
+
|
579
|
+
# Folds multiple blank lines
|
580
|
+
str = %{\
|
581
|
+
now is
|
582
|
+
code
|
583
|
+
|
584
|
+
|
585
|
+
code1
|
586
|
+
|
587
|
+
the time}
|
588
|
+
|
589
|
+
line_groups(str,
|
590
|
+
[ "L0: Paragraph\nnow is",
|
591
|
+
"L0: Verbatim\n code\n\n code1\n",
|
592
|
+
"L0: Paragraph\nthe time"
|
593
|
+
])
|
594
|
+
|
595
|
+
|
596
|
+
end
|
597
|
+
|
598
|
+
def test_whitespace
|
599
|
+
assert_equal("hello", basic_conv("hello"))
|
600
|
+
assert_equal("hello", basic_conv(" hello "))
|
601
|
+
assert_equal("hello", basic_conv(" \t \t hello\t\t"))
|
602
|
+
|
603
|
+
assert_equal("1\n 2\n 3", basic_conv("1\n 2\n 3"))
|
604
|
+
assert_equal("1\n 2\n 3", basic_conv(" 1\n 2\n 3"))
|
605
|
+
|
606
|
+
assert_equal("1\n 2\n 3\n1\n 2", basic_conv("1\n 2\n 3\n1\n 2"))
|
607
|
+
assert_equal("1\n 2\n 3\n1\n 2", basic_conv(" 1\n 2\n 3\n 1\n 2"))
|
608
|
+
|
609
|
+
assert_equal("1\n 2\n\n 3", basic_conv(" 1\n 2\n\n 3"))
|
610
|
+
end
|
611
|
+
|
612
|
+
end
|
613
|
+
|