bitclust-core 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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"],
|