bitclust-core 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ChangeLog +16 -0
- data/Gemfile +1 -7
- data/data/bitclust/template/class +14 -0
- data/data/bitclust/template/doc +1 -1
- data/data/bitclust/template/layout +1 -1
- data/data/bitclust/template.epub/class +101 -0
- data/data/bitclust/template.epub/class-index +28 -0
- data/data/bitclust/template.epub/container.xml +6 -0
- data/data/bitclust/template.epub/contents +23 -0
- data/data/bitclust/template.epub/doc +13 -0
- data/data/bitclust/template.epub/function +22 -0
- data/data/bitclust/template.epub/function-index +24 -0
- data/data/bitclust/template.epub/layout +19 -0
- data/data/bitclust/template.epub/library +75 -0
- data/data/bitclust/template.epub/library-index +47 -0
- data/data/bitclust/template.epub/method +21 -0
- data/data/bitclust/template.epub/mimetype +1 -0
- data/data/bitclust/template.epub/nav.xhtml +6 -0
- data/data/bitclust/template.epub/rd_file +6 -0
- data/data/bitclust/template.lillia/class +17 -0
- data/data/bitclust/template.lillia/doc +1 -1
- data/data/bitclust/template.lillia/layout +1 -1
- data/data/bitclust/template.offline/class +14 -0
- data/data/bitclust/template.offline/doc +1 -1
- data/data/bitclust/template.offline/layout +1 -1
- data/lib/bitclust/classentry.rb +31 -11
- data/lib/bitclust/docentry.rb +2 -2
- data/lib/bitclust/entry.rb +1 -0
- data/lib/bitclust/exception.rb +1 -0
- data/lib/bitclust/functionreferenceparser.rb +4 -3
- data/lib/bitclust/generators/epub.rb +118 -0
- data/lib/bitclust/libraryentry.rb +4 -6
- data/lib/bitclust/methodsignature.rb +1 -1
- data/lib/bitclust/nameutils.rb +12 -1
- data/lib/bitclust/rdcompiler.rb +101 -57
- data/lib/bitclust/rrdparser.rb +20 -6
- data/lib/bitclust/runner.rb +2 -0
- data/lib/bitclust/screen.rb +10 -2
- data/lib/bitclust/searcher.rb +4 -0
- data/lib/bitclust/subcommands/epub_command.rb +68 -0
- data/lib/bitclust/subcommands/methods_command.rb +13 -0
- data/lib/bitclust/subcommands/setup_command.rb +2 -2
- data/lib/bitclust/subcommands/statichtml_command.rb +54 -32
- data/lib/bitclust/version.rb +1 -1
- data/test/run_test.rb +0 -0
- data/test/test_functiondatabase.rb +3 -3
- data/test/test_functionreferenceparser.rb +51 -0
- data/test/test_methoddatabase.rb +33 -0
- data/test/test_nameutils.rb +13 -0
- data/test/test_rdcompiler.rb +176 -13
- data/test/test_refsdatabase.rb +8 -0
- metadata +41 -23
data/lib/bitclust/rrdparser.rb
CHANGED
@@ -180,10 +180,10 @@ module BitClust
|
|
180
180
|
f.skip_blank_lines
|
181
181
|
read_extends f
|
182
182
|
f.skip_blank_lines
|
183
|
-
@context.klass.source = f.break(/\A
|
183
|
+
@context.klass.source = f.break(/\A==?[^=]|\A---/).join('').rstrip
|
184
184
|
@context.visibility = :public
|
185
185
|
@context.type = :singleton_method
|
186
|
-
|
186
|
+
read_level2_blocks f
|
187
187
|
end
|
188
188
|
|
189
189
|
def read_aliases(f)
|
@@ -194,15 +194,21 @@ module BitClust
|
|
194
194
|
|
195
195
|
def read_includes(f, reopen = false)
|
196
196
|
f.while_match(/\Ainclude\s/) do |line|
|
197
|
-
|
198
|
-
|
197
|
+
if reopen
|
198
|
+
@context.dynamic_include(line.split[1])
|
199
|
+
else
|
200
|
+
@context.include(line.split[1])
|
201
|
+
end
|
199
202
|
end
|
200
203
|
end
|
201
204
|
|
202
205
|
def read_extends(f, reopen = false)
|
203
206
|
f.while_match(/\Aextend\s/) do |line|
|
204
|
-
|
205
|
-
|
207
|
+
if reopen
|
208
|
+
@context.dynamic_extend(line.split[1])
|
209
|
+
else
|
210
|
+
@context.extend(line.split[1])
|
211
|
+
end
|
206
212
|
end
|
207
213
|
end
|
208
214
|
|
@@ -403,6 +409,14 @@ module BitClust
|
|
403
409
|
@klass.extend @db.get_class(name)
|
404
410
|
end
|
405
411
|
|
412
|
+
def dynamic_include(name)
|
413
|
+
@klass.dynamic_include(@db.get_class(name), @library)
|
414
|
+
end
|
415
|
+
|
416
|
+
def dynamic_extend(name)
|
417
|
+
@klass.dynamic_extend(@db.get_class(name), @library)
|
418
|
+
end
|
419
|
+
|
406
420
|
# Add a alias +name+ to the alias list.
|
407
421
|
def alias(name)
|
408
422
|
@db.open_class(name) do |c|
|
data/lib/bitclust/runner.rb
CHANGED
@@ -62,6 +62,7 @@ Subcommands(for developers):
|
|
62
62
|
|
63
63
|
Subcommands(for packagers):
|
64
64
|
statichtml Generate static HTML files.
|
65
|
+
epub Generate EPUB file.
|
65
66
|
chm Generate static HTML files for CHM.
|
66
67
|
|
67
68
|
Global Options:
|
@@ -96,6 +97,7 @@ Global Options:
|
|
96
97
|
'statichtml' => BitClust::Subcommands::StatichtmlCommand.new,
|
97
98
|
'htmlfile' => BitClust::Subcommands::HtmlfileCommand.new,
|
98
99
|
'chm' => BitClust::Subcommands::ChmCommand.new,
|
100
|
+
'epub' => BitClust::Subcommands::EPUBCommand.new,
|
99
101
|
'ancestors' => BitClust::Subcommands::AncestorsCommand.new,
|
100
102
|
'preproc' => BitClust::Subcommands::PreprocCommand.new,
|
101
103
|
'extract' => BitClust::Subcommands::ExtractCommand.new,
|
data/lib/bitclust/screen.rb
CHANGED
@@ -392,8 +392,8 @@ module BitClust
|
|
392
392
|
rdcompiler().compile_method(m, opt)
|
393
393
|
end
|
394
394
|
|
395
|
-
def compile_function(f)
|
396
|
-
|
395
|
+
def compile_function(f, opt = nil)
|
396
|
+
rdcompiler().compile_function(f, opt)
|
397
397
|
end
|
398
398
|
|
399
399
|
def compile_rd(src)
|
@@ -565,6 +565,14 @@ module BitClust
|
|
565
565
|
|
566
566
|
class DocScreen < EntryBoundScreen
|
567
567
|
|
568
|
+
def breadcrumb_title
|
569
|
+
if /ascii/ =~ @conf[:encoding]
|
570
|
+
@entry.name
|
571
|
+
else
|
572
|
+
@entry.title
|
573
|
+
end
|
574
|
+
end
|
575
|
+
|
568
576
|
def body
|
569
577
|
run_template('doc')
|
570
578
|
end
|
data/lib/bitclust/searcher.rb
CHANGED
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
require 'bitclust'
|
5
|
+
require 'bitclust/subcommand'
|
6
|
+
require 'bitclust/generators/epub'
|
7
|
+
|
8
|
+
module BitClust
|
9
|
+
module Subcommands
|
10
|
+
class EPUBCommand < Subcommand
|
11
|
+
def initialize
|
12
|
+
super
|
13
|
+
@verbose = true
|
14
|
+
@catalogdir = nil
|
15
|
+
@templatedir = srcdir_root + "data/bitclust/template.epub"
|
16
|
+
@themedir = srcdir_root + "theme/default"
|
17
|
+
@filename = "rurema-#{Date.today}.epub"
|
18
|
+
@keep = false
|
19
|
+
@parser.banner = "Usage: #{File.basename($0, '.*')} epub [options]"
|
20
|
+
@parser.on('-o', '--outputdir=PATH', 'Output directory') do |path|
|
21
|
+
begin
|
22
|
+
@outputdir = Pathname.new(path).realpath
|
23
|
+
rescue Errno::ENOENT
|
24
|
+
FileUtils.mkdir_p(path, :verbose => @verbose)
|
25
|
+
retry
|
26
|
+
end
|
27
|
+
end
|
28
|
+
@parser.on('-f', '--filename=FILENAME',
|
29
|
+
"Filename of generated EPUB file [#{@filename}]") do |filename|
|
30
|
+
@filename = filename
|
31
|
+
end
|
32
|
+
@parser.on('--[no-]keep', 'Keep all generated files (for debug) [false]') do |keep|
|
33
|
+
@keep = keep
|
34
|
+
end
|
35
|
+
@parser.on('--catalog=PATH', 'Catalog directory') do |path|
|
36
|
+
@catalogdir = Pathname.new(path).realpath
|
37
|
+
end
|
38
|
+
@parser.on('--templatedir=PATH', 'Template directory') do |path|
|
39
|
+
@templatedir = Pathname.new(path).realpath
|
40
|
+
end
|
41
|
+
@parser.on('--themedir=PATH', 'Theme directory') do |path|
|
42
|
+
@themedir = Pathname.new(path).realpath
|
43
|
+
end
|
44
|
+
@parser.on('--fs-casesensitive', 'Filesystem is case-sensitive') do
|
45
|
+
@fs_casesensitive = true
|
46
|
+
end
|
47
|
+
@parser.on('--[no-]quiet', 'Be quiet') do |quiet|
|
48
|
+
@verbose = !quiet
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def exec(argv, options)
|
53
|
+
generator = BitClust::Generators::EPUB.new(:prefix => options[:prefix],
|
54
|
+
:capi => options[:capi],
|
55
|
+
:outputdir => @outputdir,
|
56
|
+
:catalog => @catalog,
|
57
|
+
:templatedir => @templatedir,
|
58
|
+
:themedir => @themedir,
|
59
|
+
:fs_casesensitive => @fs_casesensitive,
|
60
|
+
:verbose => @verbose,
|
61
|
+
:keep => @keep,
|
62
|
+
:filename => @filename)
|
63
|
+
generator.generate
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -137,6 +137,19 @@ module BitClust
|
|
137
137
|
puts "#{classname}\#{m}"
|
138
138
|
end
|
139
139
|
SCRIPT
|
140
|
+
when 'ARGF'
|
141
|
+
script = <<-SCRIPT
|
142
|
+
c = #{classname}.class
|
143
|
+
c.singleton_methods(false).each do |m|
|
144
|
+
puts "\#{c.to_s}.\#{m}"
|
145
|
+
end
|
146
|
+
c.instance_methods(false).each do |m|
|
147
|
+
puts "\#{c.to_s}\\#\#{m}"
|
148
|
+
end
|
149
|
+
c.ancestors.map {|mod| mod.constants }.inject {|r,n| r - n }.each do |m|
|
150
|
+
puts "\#{c.to_s}::\#{m}"
|
151
|
+
end
|
152
|
+
SCRIPT
|
140
153
|
else
|
141
154
|
script = <<-SCRIPT
|
142
155
|
#{avoid_tracer}
|
@@ -19,7 +19,7 @@ module BitClust
|
|
19
19
|
@prepare = nil
|
20
20
|
@cleanup = nil
|
21
21
|
@purge = nil
|
22
|
-
@versions = ["
|
22
|
+
@versions = ["2.0.0", "2.1.0", "2.2.0"]
|
23
23
|
@parser.banner = "Usage: #{File.basename($0, '.*')} setup [options]"
|
24
24
|
@parser.on('--prepare', 'Prepare config file and checkout repository. Do not create database.') {
|
25
25
|
@prepare = true
|
@@ -64,7 +64,7 @@ module BitClust
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def prepare
|
67
|
-
home_directory = Pathname(ENV["HOME"])
|
67
|
+
home_directory = Pathname(ENV["HOME"]).expand_path
|
68
68
|
config_dir = home_directory + ".bitclust"
|
69
69
|
config_dir.mkpath
|
70
70
|
config_path = config_dir + "config"
|
@@ -7,6 +7,7 @@
|
|
7
7
|
require 'fileutils'
|
8
8
|
|
9
9
|
require 'bitclust'
|
10
|
+
require 'bitclust/nameutils'
|
10
11
|
require 'bitclust/subcommand'
|
11
12
|
require 'bitclust/progress_bar'
|
12
13
|
require 'bitclust/silent_progress_bar'
|
@@ -14,54 +15,69 @@ require 'bitclust/silent_progress_bar'
|
|
14
15
|
module BitClust
|
15
16
|
module Subcommands
|
16
17
|
class StatichtmlCommand < Subcommand
|
18
|
+
include NameUtils
|
19
|
+
|
17
20
|
class URLMapperEx < URLMapper
|
21
|
+
include NameUtils
|
22
|
+
|
23
|
+
attr_accessor :bitclust_html_base
|
24
|
+
|
25
|
+
def initialize(h)
|
26
|
+
super
|
27
|
+
@bitclust_html_base = ""
|
28
|
+
@suffix = h[:suffix]
|
29
|
+
end
|
30
|
+
|
18
31
|
def library_url(name)
|
19
32
|
if name == '/'
|
20
|
-
|
33
|
+
@bitclust_html_base + "/library/#{html_filename("index", @suffix)}"
|
21
34
|
else
|
22
|
-
|
35
|
+
@bitclust_html_base + "/library/#{html_filename(encodename_package(name), @suffix)}"
|
23
36
|
end
|
24
37
|
end
|
25
38
|
|
26
39
|
def class_url(name)
|
27
|
-
|
40
|
+
@bitclust_html_base + "/class/#{html_filename(encodename_package(name), @suffix)}"
|
28
41
|
end
|
29
42
|
|
30
43
|
def method_url(spec)
|
31
44
|
cname, tmark, mname = *split_method_spec(spec)
|
32
|
-
|
33
|
-
|
45
|
+
filename = html_filename(encodename_package(mname), @suffix)
|
46
|
+
@bitclust_html_base +
|
47
|
+
"/method/#{encodename_package(cname)}/#{typemark2char(tmark)}/#{filename}"
|
34
48
|
end
|
35
49
|
|
36
50
|
def function_url(name)
|
37
|
-
|
51
|
+
filename = html_filename(name.empty? ? 'index' : name, @suffix)
|
52
|
+
@bitclust_html_base + "/function/#{filename}"
|
38
53
|
end
|
39
54
|
|
40
55
|
def document_url(name)
|
41
|
-
|
56
|
+
filename = html_filename(encodename_package(name), @suffix)
|
57
|
+
@bitclust_html_base + "/doc/#{filename}"
|
42
58
|
end
|
43
59
|
|
44
60
|
def css_url
|
45
|
-
|
61
|
+
@bitclust_html_base + "/" + @css_url
|
46
62
|
end
|
47
63
|
|
48
64
|
def favicon_url
|
49
|
-
|
65
|
+
@bitclust_html_base + "/" + @favicon_url
|
50
66
|
end
|
51
67
|
|
52
68
|
def library_index_url
|
53
|
-
|
69
|
+
@bitclust_html_base + "/library/#{html_filename("index", @suffix)}"
|
54
70
|
end
|
55
71
|
|
56
72
|
def function_index_url
|
57
|
-
|
73
|
+
@bitclust_html_base + "/function/#{html_filename("index", @suffix)}"
|
58
74
|
end
|
59
75
|
|
60
76
|
def encodename_package(str)
|
61
|
-
if
|
62
|
-
|
77
|
+
if @fs_casesensitive
|
78
|
+
encodename_url(str)
|
63
79
|
else
|
64
|
-
|
80
|
+
encodename_fs(str)
|
65
81
|
end
|
66
82
|
end
|
67
83
|
end
|
@@ -75,6 +91,7 @@ module BitClust
|
|
75
91
|
@catalogdir = nil
|
76
92
|
@templatedir = srcdir_root + "data/bitclust/template.offline"
|
77
93
|
@themedir = srcdir_root + "theme/default"
|
94
|
+
@suffix = ".html"
|
78
95
|
@parser.banner = "Usage: #{File.basename($0, '.*')} statichtml [options]"
|
79
96
|
@parser.on('-o', '--outputdir=PATH', 'Output directory') do |path|
|
80
97
|
begin
|
@@ -93,8 +110,11 @@ module BitClust
|
|
93
110
|
@parser.on('--themedir=PATH', 'Theme directory') do |path|
|
94
111
|
@themedir = Pathname.new(path).realpath
|
95
112
|
end
|
113
|
+
@parser.on('--suffix=SUFFIX', 'Suffix for each (X)HTML file [.html]') do |suffix|
|
114
|
+
@suffix = suffix
|
115
|
+
end
|
96
116
|
@parser.on('--fs-casesensitive', 'Filesystem is case-sensitive') do
|
97
|
-
|
117
|
+
@fs_casesensitive = true
|
98
118
|
end
|
99
119
|
@parser.on('--[no-]quiet', 'Be quiet') do |quiet|
|
100
120
|
@verbose = !quiet
|
@@ -128,14 +148,14 @@ module BitClust
|
|
128
148
|
create_html_entries("capi", fdb.functions, manager, fdb)
|
129
149
|
end
|
130
150
|
|
131
|
-
|
132
|
-
create_file(@outputdir +
|
151
|
+
@urlmapper.bitclust_html_base = '..'
|
152
|
+
create_file(@outputdir + "library/#{html_filename("index", @suffix)}",
|
133
153
|
manager.library_index_screen(db.libraries.sort, {:database => db}).body,
|
134
154
|
:verbose => @verbose)
|
135
|
-
create_file(@outputdir +
|
155
|
+
create_file(@outputdir + "class/#{html_filename("index", @suffix)}",
|
136
156
|
manager.class_index_screen(db.classes.sort, {:database => db}).body,
|
137
157
|
:verbose => @verbose)
|
138
|
-
create_file(@outputdir +
|
158
|
+
create_file(@outputdir + "function/#{html_filename("index", @suffix)}",
|
139
159
|
manager.function_index_screen(fdb.functions.sort, { :database => fdb }).body,
|
140
160
|
:verbose => @verbose)
|
141
161
|
create_index_html(@outputdir)
|
@@ -159,7 +179,7 @@ module BitClust
|
|
159
179
|
def create_manager_config
|
160
180
|
@manager_config = {
|
161
181
|
:catalogdir => @catalogdir,
|
162
|
-
:suffix =>
|
182
|
+
:suffix => @suffix,
|
163
183
|
:templatedir => @templatedir,
|
164
184
|
:themedir => @themedir,
|
165
185
|
:css_url => 'style.css',
|
@@ -168,6 +188,7 @@ module BitClust
|
|
168
188
|
:tochm_mode => true
|
169
189
|
}
|
170
190
|
@manager_config[:urlmapper] = URLMapperEx.new(@manager_config)
|
191
|
+
@urlmapper = @manager_config[:urlmapper]
|
171
192
|
end
|
172
193
|
|
173
194
|
def create_html_entries(title, entries, manager, db)
|
@@ -203,11 +224,12 @@ module BitClust
|
|
203
224
|
end
|
204
225
|
|
205
226
|
def create_index_html(outputdir)
|
206
|
-
|
227
|
+
index_filename = html_filename("index", @suffix)
|
228
|
+
path = outputdir + index_filename
|
207
229
|
File.open(path, 'w'){|io|
|
208
230
|
io.write <<HERE
|
209
|
-
<meta http-equiv="refresh" content="0; URL=doc
|
210
|
-
<a href="doc
|
231
|
+
<meta http-equiv="refresh" content="0; URL=doc/#{index_filename}">
|
232
|
+
<a href="doc/#{index_filename}">Go</a>
|
211
233
|
HERE
|
212
234
|
}
|
213
235
|
end
|
@@ -216,8 +238,8 @@ HERE
|
|
216
238
|
e = entry.is_a?(Array) ? entry.sort.first : entry
|
217
239
|
case e.type_id
|
218
240
|
when :library, :class, :doc
|
219
|
-
|
220
|
-
path = outputdir + e.type_id.to_s + (encodename_package(e.name)
|
241
|
+
@urlmapper.bitclust_html_base = '..'
|
242
|
+
path = outputdir + e.type_id.to_s + html_filename(encodename_package(e.name), @suffix)
|
221
243
|
create_html_file_p(entry, manager, path, db)
|
222
244
|
path.relative_path_from(outputdir).to_s
|
223
245
|
when :function
|
@@ -230,19 +252,19 @@ HERE
|
|
230
252
|
|
231
253
|
def create_html_method_file(method_name, entries, manager, outputdir, db)
|
232
254
|
path = nil
|
233
|
-
|
255
|
+
@urlmapper.bitclust_html_base = '../../..'
|
234
256
|
e = entries.sort.first
|
235
257
|
name = method_name.sub(e.klass.name + e.typemark, "")
|
236
258
|
path = outputdir + e.type_id.to_s + encodename_package(e.klass.name) +
|
237
|
-
e.typechar + (encodename_package(name)
|
259
|
+
e.typechar + html_filename(encodename_package(name), @suffix)
|
238
260
|
create_html_file_p(entries, manager, path, db)
|
239
261
|
path.relative_path_from(outputdir).to_s
|
240
262
|
end
|
241
263
|
|
242
264
|
def create_html_function_file(entry, manager, outputdir, db)
|
243
265
|
path = nil
|
244
|
-
|
245
|
-
path = outputdir + entry.type_id.to_s + (entry.name
|
266
|
+
@urlmapper.bitclust_html_base = '..'
|
267
|
+
path = outputdir + entry.type_id.to_s + html_filename(entry.name, @suffix)
|
246
268
|
create_html_file_p(entry, manager, path, db)
|
247
269
|
path.relative_path_from(outputdir).to_s
|
248
270
|
end
|
@@ -265,10 +287,10 @@ HERE
|
|
265
287
|
end
|
266
288
|
|
267
289
|
def encodename_package(str)
|
268
|
-
if
|
269
|
-
|
290
|
+
if @fs_casesensitive
|
291
|
+
encodename_url(str)
|
270
292
|
else
|
271
|
-
|
293
|
+
encodename_fs(str)
|
272
294
|
end
|
273
295
|
end
|
274
296
|
end
|
data/lib/bitclust/version.rb
CHANGED
data/test/run_test.rb
CHANGED
File without changes
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
require 'bitclust'
|
3
|
-
require 'bitclust/
|
3
|
+
require 'bitclust/functiondatabase'
|
4
4
|
require 'tmpdir'
|
5
5
|
require 'fileutils'
|
6
6
|
|
@@ -22,7 +22,7 @@ some text
|
|
22
22
|
some text
|
23
23
|
HERE
|
24
24
|
end
|
25
|
-
@db = BitClust::
|
25
|
+
@db = BitClust::FunctionDatabase.new(prefix)
|
26
26
|
@db.transaction {
|
27
27
|
@db.update_by_file(src, src)
|
28
28
|
}
|
@@ -48,7 +48,7 @@ HERE
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def test_search_functions__nonexistent
|
51
|
-
assert_raise(BitClust::
|
51
|
+
assert_raise(BitClust::FunctionNotFound) do
|
52
52
|
@db.search_functions('nonexistent')
|
53
53
|
end
|
54
54
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'bitclust'
|
3
|
+
require 'bitclust/functionreferenceparser'
|
4
|
+
|
5
|
+
class TestFunctionReferenceParser < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
prefix = 'db'
|
8
|
+
src = "test.rd"
|
9
|
+
|
10
|
+
@pwd = Dir.pwd
|
11
|
+
Dir.chdir(@tmpdir = Dir.mktmpdir)
|
12
|
+
File.open(src, 'w') do |file|
|
13
|
+
file.puts <<'HERE'
|
14
|
+
--- VALUE func()
|
15
|
+
#@since 2.0.0
|
16
|
+
some text 1
|
17
|
+
#@else
|
18
|
+
some text 2
|
19
|
+
#@end
|
20
|
+
HERE
|
21
|
+
end
|
22
|
+
@path = File.join(@tmpdir, src)
|
23
|
+
@db = BitClust::FunctionDatabase.new(prefix)
|
24
|
+
@parser = BitClust::FunctionReferenceParser.new(@db)
|
25
|
+
end
|
26
|
+
|
27
|
+
def teardown
|
28
|
+
Dir.chdir @pwd
|
29
|
+
FileUtils.rm_r(@tmpdir, :force => true)
|
30
|
+
end
|
31
|
+
|
32
|
+
data("1.9.3" => {
|
33
|
+
:version => "1.9.3",
|
34
|
+
:expected => ["some text 2\n"],
|
35
|
+
},
|
36
|
+
"2.0.0" => {
|
37
|
+
:version => "2.0.0",
|
38
|
+
:expected => ["some text 1\n"],
|
39
|
+
},
|
40
|
+
"2.1.0" => {
|
41
|
+
:version => "2.1.0",
|
42
|
+
:expected => ["some text 1\n"],
|
43
|
+
})
|
44
|
+
def test_parse_file(data)
|
45
|
+
@db.transaction {
|
46
|
+
result =
|
47
|
+
@parser.parse_file(@path, "test.c", {"version" => data[:version]})
|
48
|
+
assert_equal data[:expected], result.collect(&:source)
|
49
|
+
}
|
50
|
+
end
|
51
|
+
end
|
data/test/test_methoddatabase.rb
CHANGED
@@ -50,12 +50,25 @@ class TestMethodDatabase < Test::Unit::TestCase
|
|
50
50
|
assert_equal 'AAA', result.records.first.entry.name
|
51
51
|
end
|
52
52
|
|
53
|
+
def test_dynamic_include
|
54
|
+
assert_equal(["BazA"],
|
55
|
+
@db.get_class("A").dynamically_included.map{|m| m.name})
|
56
|
+
assert_equal(["BazB"],
|
57
|
+
@db.get_class("B").dynamically_included.map{|m| m.name})
|
58
|
+
end
|
59
|
+
|
53
60
|
private
|
54
61
|
def setup_files
|
55
62
|
FileUtils.mkdir_p("#{@root}/_builtin")
|
63
|
+
|
56
64
|
File.open("#{@root}/LIBRARIES", 'w+') do |file|
|
57
65
|
file.puts '_builtin'
|
66
|
+
file.puts 'dyn_include_open_a'
|
67
|
+
file.puts 'dyn_include_reopen_a'
|
68
|
+
file.puts 'dyn_include_reopen_b'
|
69
|
+
file.puts 'dyn_include_open_b'
|
58
70
|
end
|
71
|
+
|
59
72
|
File.open("#{@root}/_builtin.rd", 'w+') do |file|
|
60
73
|
file.puts <<'HERE'
|
61
74
|
description
|
@@ -77,5 +90,25 @@ aaa
|
|
77
90
|
|
78
91
|
HERE
|
79
92
|
end
|
93
|
+
|
94
|
+
File.open("#{@root}/dyn_include_open_a.rd", 'w+') do |file|
|
95
|
+
file.puts "= class A"
|
96
|
+
end
|
97
|
+
|
98
|
+
File.open("#{@root}/dyn_include_reopen_a.rd", 'w+') do |file|
|
99
|
+
file.puts "= module BazA"
|
100
|
+
file.puts "= reopen A"
|
101
|
+
file.puts "include BazA"
|
102
|
+
end
|
103
|
+
|
104
|
+
File.open("#{@root}/dyn_include_open_b.rd", 'w+') do |file|
|
105
|
+
file.puts "= class B"
|
106
|
+
end
|
107
|
+
|
108
|
+
File.open("#{@root}/dyn_include_reopen_b.rd", 'w+') do |file|
|
109
|
+
file.puts "= module BazB"
|
110
|
+
file.puts "= reopen B"
|
111
|
+
file.puts "include BazB"
|
112
|
+
end
|
80
113
|
end
|
81
114
|
end
|
data/test/test_nameutils.rb
CHANGED
@@ -340,6 +340,19 @@ class TestNameUtils < Test::Unit::TestCase
|
|
340
340
|
assert_equal(expected, decodename_url(target))
|
341
341
|
end
|
342
342
|
|
343
|
+
data("Array" => ["Array", "Array"],
|
344
|
+
"String" => ["String", "String"],
|
345
|
+
"index" => ["index", "index"],
|
346
|
+
"*" => ["2A", "*"],
|
347
|
+
"**" => ["2A-2A", "**"],
|
348
|
+
"<=>" => ["3C-3D-3E", "<=>"],
|
349
|
+
"open-uri" => ["open-2Duri", "open-uri"],
|
350
|
+
"net.http" => ["net.http", "net.http"])
|
351
|
+
def test_encodename_rdocurl(data)
|
352
|
+
expected, target = data
|
353
|
+
assert_equal(expected, encodename_rdocurl(target))
|
354
|
+
end
|
355
|
+
|
343
356
|
data("Array" => ["-array", "Array"],
|
344
357
|
"String" => ["-string", "String"],
|
345
358
|
"CGI" => ["-c-g-i", "CGI"],
|