bitclust-core 0.5.5 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,10 @@
1
+ 2013-04-06 Sho Hashimoto <sho-h@netlab.jp>
2
+
3
+ * lib/bitclust/nameutils.rb
4
+ (BitClust::NameUtils::CLASS_NAME_RE): support main and
5
+ *::compatible class. (see #8186)
6
+ (BitClust::NameUtils::CLASS_PATH_RE): ditto.
7
+
1
8
  2012-10-09 Ippei Obayashi <ohai@kmc.gr.jp>
2
9
 
3
10
  * lib/bitclust/subcommands/server_command.rb
data/bitclust.gemspec CHANGED
@@ -27,5 +27,7 @@ EOD
27
27
  # s.add_development_dependency "rspec"
28
28
  # s.add_runtime_dependency "rest-client"
29
29
  s.add_development_dependency "test-unit", ">= 2.3.0"
30
+ s.add_development_dependency "test-unit-notify"
31
+ s.add_development_dependency "test-unit-rr"
30
32
  s.add_runtime_dependency "rack"
31
33
  end
@@ -46,6 +46,8 @@ FileFormat
46
46
  ファイルフォーマット
47
47
  Function Index
48
48
  関数一覧
49
+ Index
50
+ 目次
49
51
  I/O
50
52
  入出力
51
53
  Inherited Methods
@@ -38,14 +38,34 @@
38
38
 
39
39
  <%
40
40
  ents = @entry.partitioned_entries(@alevel)
41
+ items =
41
42
  [[_('Singleton Methods'), ents.singleton_methods ],
42
43
  [_('Instance Methods'), ents.instance_methods ],
43
44
  [_('Private Singleton Methods'), ents.private_singleton_methods ],
44
45
  [_('Private Instance Methods'), ents.private_instance_methods ],
45
46
  [_('Module Functions'), ents.module_functions ],
46
47
  [_('Constants'), ents.constants ],
47
- [_('Special Variables'), ents.special_variables ]]\
48
- .each do |label, entries|
48
+ [_('Special Variables'), ents.special_variables ,'$']] %>
49
+ <%= headline(_("Index")) %>
50
+ <dl>
51
+ <% items.each do |label, entries, prefix| next if entries.empty? %>
52
+ <dt><%= label %></dt>
53
+ <dd>
54
+ <%
55
+ entries.each do |m|
56
+ m.names.each do |mname|
57
+ %>
58
+ <a href="#<%= m.index_id(mname, false) %>"><%= "#{prefix}#{mname}" %></a>
59
+ <%
60
+ end
61
+ end
62
+ %>
63
+ </dd>
64
+ <% end %>
65
+ </dl>
66
+
67
+ <%
68
+ items.each do |label, entries|
49
69
  unless entries.empty? %>
50
70
  <%= headline(label) %>
51
71
  <dl>
@@ -122,6 +122,11 @@ module BitClust
122
122
  "#{t == '#' ? '' : t}#{m}"
123
123
  end
124
124
 
125
+ def index_id(name, remove_prefix = true)
126
+ name = name.sub(/^\$/, '') if remove_prefix
127
+ "#{methodid2typechar(@id)}_#{encodename_fs(name).gsub(/=/, '--')}".upcase
128
+ end
129
+
125
130
  def labels
126
131
  c, t, m, lib = methodid2specparts(@id)
127
132
  names().map {|name| "#{c}#{t}#{name}" }
@@ -18,8 +18,8 @@ module BitClust
18
18
  LIBNAME_RE = %r<[\w\-]+(/[\w\-]+)*>
19
19
  CONST_RE = /[A-Z]\w*/
20
20
  CONST_PATH_RE = /#{CONST_RE}(?:::#{CONST_RE})*/
21
- CLASS_NAME_RE = /(?:#{CONST_RE}|fatal|ARGF.class)/
22
- CLASS_PATH_RE = /(?:#{CONST_PATH_RE}|fatal|ARGF.class)/
21
+ CLASS_NAME_RE = /(?:#{CONST_RE}(?:::compatible)?|fatal|ARGF.class|main)/
22
+ CLASS_PATH_RE = /(?:#{CONST_PATH_RE}(?:::compatible)?|fatal|ARGF.class|main)/
23
23
  METHOD_NAME_RE = /\w+[?!=]?|===|==|=~|<=>|<=|>=|!=|!|!@|!~|\[\]=|\[\]|\*\*|>>|<<|\+@|\-@|[~+\-*\/%&|^<>`]/
24
24
  TYPEMARK_RE = /(?:\.|\#|\.\#|::|\$)/
25
25
  METHOD_SPEC_RE = /#{CLASS_PATH_RE}#{TYPEMARK_RE}#{METHOD_NAME_RE}/
@@ -93,8 +93,10 @@ module BitClust
93
93
 
94
94
  def method_entry_chunk
95
95
  @out.puts '<dl>' if @option[:force]
96
+ first = true
96
97
  @f.while_match(/\A---/) do |line|
97
- method_signature line
98
+ method_signature(line, first)
99
+ first = false
98
100
  end
99
101
  props = {}
100
102
  @f.while_match(/\A:/) do |line|
@@ -327,13 +329,20 @@ module BitClust
327
329
  f.span(%r<\A(?!---|=|//emlist\{|@[a-z])\S>)
328
330
  end
329
331
 
330
- def method_signature(sig_line)
332
+ def method_signature(sig_line, first)
331
333
  # FIXME: check parameters, types, etc.
332
334
  sig = MethodSignature.parse(sig_line)
333
- string '<dt class="method-heading"><code>'
335
+ string %Q(<dt class="method-heading")
336
+ string %Q( id="#{@method.index_id(sig.name)}") if first
337
+ string '><code>'
334
338
  string @method.klass.name + @method.typemark if @opt
335
339
  string escape_html(sig.friendly_string)
336
340
  string '</code>'
341
+ if first
342
+ string '<span class="permalink">['
343
+ string a_href(@urlmapper.method_url(methodid2specstring(@method.id)), "permalink")
344
+ string ']</span>'
345
+ end
337
346
  if @method and not @method.defined?
338
347
  line %Q( <span class="kindinfo">[#{@method.kind} by #{library_link(@method.library.name)}]</span>)
339
348
  end
@@ -20,7 +20,7 @@ module BitClust
20
20
  buf.each_line{|l|
21
21
  if /((?:\\,|[^,])+),((?:\\,|[^,])+),((?:\\,|[^,])+),((?:\\,|[^,])+)\n/ =~ l
22
22
  type, id, linkid, desc = [$1, $2, $3, $4].map{|e| e.gsub(/\\(.)/){|s| $1 == ',' ? ',' : s } }
23
- refs[type, id, linkid] = desc
23
+ refs[type, id, linkid] = desc
24
24
  end
25
25
  }
26
26
  refs
@@ -51,6 +51,7 @@ module BitClust
51
51
  @h.each{|k, v|
52
52
  io.write( [k, v].flatten.map{|e| e.gsub(/,/, '\\,') }.join(',') + "\n" )
53
53
  }
54
+ io.close
54
55
  end
55
56
 
56
57
  def extract(entry)
@@ -56,7 +56,7 @@ Global Options:
56
56
  @parser.on('-d', '--database=PATH', 'Database prefix.') {|path|
57
57
  @prefix = path
58
58
  }
59
- @parser.on('-t', '--targer=VERSION', 'Specify Ruby version.') {|v|
59
+ @parser.on('-t', '--target=VERSION', 'Specify Ruby version.') {|v|
60
60
  @version = v
61
61
  }
62
62
  @parser.on('--capi', 'Process C API database.') {
@@ -186,7 +186,7 @@ module BitClust::Subcommands
186
186
  @browser = "start"
187
187
  end
188
188
  end
189
- system("#{browser} http://localhost:#{params[:Port]}/") if @browser
189
+ system("#{@browser} http://localhost:#{@params[:Port]}/") if @browser
190
190
  server.start
191
191
  end
192
192
 
@@ -16,7 +16,7 @@ module BitClust::Subcommands
16
16
  def initialize
17
17
  @prepare = nil
18
18
  @cleanup = nil
19
- @versions = ["1.8.7", "1.9.3"]
19
+ @versions = ["1.8.7", "1.9.3", "2.0.0"]
20
20
  @parser = OptionParser.new {|opt|
21
21
  opt.banner = "Usage: #{File.basename($0, '.*')} setup [options]"
22
22
  opt.on('--prepare', 'Prepare config file and checkout repository. Do not create database.') {
@@ -1,3 +1,3 @@
1
1
  module BitClust
2
- VERSION = "0.5.5"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -60,6 +60,7 @@ class TestNameUtils < Test::Unit::TestCase
60
60
  "Net::HTTP" => [true, "Net::HTTP"],
61
61
  "Test::Unit::TestCase" => [true, "Test::Unit::TestCase"],
62
62
  "ARGF.class" => [true, "ARGF.class"],
63
+ "Complex::compatible" => [true, "Complex::compatible"],
63
64
  "empty string" => [false, ""],
64
65
  "following space" => [false, "Array "],
65
66
  "leading space" => [false, " Array"],
@@ -80,17 +81,19 @@ class TestNameUtils < Test::Unit::TestCase
80
81
  "String" => ["String", "String"],
81
82
  "Net::HTTP" => ["Net=HTTP", "Net::HTTP"],
82
83
  "Test::Unit::TestCase" => ["Test=Unit=TestCase", "Test::Unit::TestCase"],
83
- "ARGF.class" => ["ARGF.class", "ARGF.class"])
84
+ "ARGF.class" => ["ARGF.class", "ARGF.class"],
85
+ "Complex::compatible" => ["Complex=compatible", "Complex::compatible"])
84
86
  def test_classname2id(data)
85
87
  expected, target = data
86
88
  assert_equal(expected, classname2id(target))
87
89
  end
88
90
 
89
- data("Array" => ["Array", "Array"],
90
- "String" => ["String", "String"],
91
- "Net=HTTP" => ["Net::HTTP", "Net=HTTP"],
92
- "Test=Unit=TestCase" => ["Test::Unit::TestCase", "Test=Unit=TestCase"],
93
- "ARGF.class" => ["ARGF.class", "ARGF.class"])
91
+ data("Array" => ["Array", "Array"],
92
+ "String" => ["String", "String"],
93
+ "Net=HTTP" => ["Net::HTTP", "Net=HTTP"],
94
+ "Test=Unit=TestCase" => ["Test::Unit::TestCase", "Test=Unit=TestCase"],
95
+ "ARGF.class" => ["ARGF.class", "ARGF.class"],
96
+ "Complex=compatible" => ["Complex::compatible", "Complex=compatible"])
94
97
  def test_classid2name(data)
95
98
  expected, target = data
96
99
  assert_equal(expected, classid2name(target))
@@ -134,10 +137,10 @@ class TestNameUtils < Test::Unit::TestCase
134
137
  assert_equal(expected, methodid2classid(target))
135
138
  end
136
139
 
137
- data("String/i.index._builtin" => [:instance_method, "String/i.index._builtin"],
138
- "CGI/i.accept.cgi" => [:instance_method, "CGI/i.accept.cgi"],
139
- "Net=HTTP/i.ca_path.net.http" => [:instance_method, "Net=HTTP/i.ca_path.net.http"],
140
- "String/s.new._builtin" => [:singleton_method, "String/s.new._builtin"])
140
+ data("String/i.index._builtin" => [:instance_method, "String/i.index._builtin"],
141
+ "CGI/i.accept.cgi" => [:instance_method, "CGI/i.accept.cgi"],
142
+ "Net=HTTP/i.ca_path.net.http" => [:instance_method, "Net=HTTP/i.ca_path.net.http"],
143
+ "String/s.new._builtin" => [:singleton_method, "String/s.new._builtin"])
141
144
  def test_methodid2typename(data)
142
145
  expected, target = data
143
146
  assert_equal(expected, methodid2typename(target))
@@ -151,61 +154,61 @@ class TestNameUtils < Test::Unit::TestCase
151
154
  assert_equal(expected, methodid2mname(target))
152
155
  end
153
156
 
154
- data("index" => [true, "index"],
155
- "accept" => [true, "accept"],
156
- "get" => [true, "get"],
157
- "Array" => [true, "Array"],
158
- "getIndex" => [true, "getIndex"],
159
- "PROXY" => [true, "PROXY"],
160
- "HTTP_PROXY" => [true, "HTTP_PROXY"],
161
- "gsub!" => [true, "gsub!"],
162
- "empty? " => [true, "empty?"],
163
- "instance_eval" => [true, "instance_eval"],
164
- "__send" => [true, "__send"],
165
- "__send__" => [true, "__send__"],
166
- "__send!" => [true, "__send!"],
167
- "+" => [true, "+"],
168
- "-" => [true, "-"],
169
- "*" => [true, "*"],
170
- "/" => [true, "/"],
171
- "&" => [true, "&"],
172
- "|" => [true, "|"],
173
- "^" => [true, "^"],
174
- "`" => [true, "`"],
175
- ">>" => [true, ">>"],
176
- "<<" => [true, "<<"],
177
- "+@" => [true, "+@"],
178
- "-@" => [true, "-@"],
179
- "!" => [true, "!"],
180
- "!@" => [true, "!@"],
181
- "~" => [true, "~"],
182
- "**" => [true, "**"],
183
- "<" => [true, "<"],
184
- ">" => [true, ">"],
185
- "<=" => [true, "<="],
186
- ">=" => [true, ">="],
187
- "==" => [true, "=="],
188
- "===" => [true, "==="],
189
- "=~" => [true, "=~"],
190
- "[]" => [true, "[]"],
191
- "[]=" => [true, "[]="],
192
- "" => [false, ""],
193
- "!=" => [true, "!="],
194
- "!~" => [true, "!~"],
195
- "&&" => [false, "&&"],
196
- "||" => [false, "||"],
197
- "++" => [false, "++"],
198
- ">>>" => [false, ">>>"],
199
- "***" => [false, "***"],
200
- "====" => [false, "===="],
201
- "#accept" => [false, "#accept"],
202
- ".new" => [false, ".new"],
203
- ".#cp" => [false, ".#cp"],
204
- "$gvar" => [false, "$gvar"],
205
- "CGI#accept" => [false, "CGI#accept"],
206
- "String.new" => [false, "String.new"],
207
- "Net::HTTP.get" => [false, "Net::HTTP.get"],
208
- "Net::HTTP.new" => [false, "Net::HTTP.new"])
157
+ data("index" => [true, "index"],
158
+ "accept" => [true, "accept"],
159
+ "get" => [true, "get"],
160
+ "Array" => [true, "Array"],
161
+ "getIndex" => [true, "getIndex"],
162
+ "PROXY" => [true, "PROXY"],
163
+ "HTTP_PROXY" => [true, "HTTP_PROXY"],
164
+ "gsub!" => [true, "gsub!"],
165
+ "empty? " => [true, "empty?"],
166
+ "instance_eval" => [true, "instance_eval"],
167
+ "__send" => [true, "__send"],
168
+ "__send__" => [true, "__send__"],
169
+ "__send!" => [true, "__send!"],
170
+ "+" => [true, "+"],
171
+ "-" => [true, "-"],
172
+ "*" => [true, "*"],
173
+ "/" => [true, "/"],
174
+ "&" => [true, "&"],
175
+ "|" => [true, "|"],
176
+ "^" => [true, "^"],
177
+ "`" => [true, "`"],
178
+ ">>" => [true, ">>"],
179
+ "<<" => [true, "<<"],
180
+ "+@" => [true, "+@"],
181
+ "-@" => [true, "-@"],
182
+ "!" => [true, "!"],
183
+ "!@" => [true, "!@"],
184
+ "~" => [true, "~"],
185
+ "**" => [true, "**"],
186
+ "<" => [true, "<"],
187
+ ">" => [true, ">"],
188
+ "<=" => [true, "<="],
189
+ ">=" => [true, ">="],
190
+ "==" => [true, "=="],
191
+ "===" => [true, "==="],
192
+ "=~" => [true, "=~"],
193
+ "[]" => [true, "[]"],
194
+ "[]=" => [true, "[]="],
195
+ "" => [false, ""],
196
+ "!=" => [true, "!="],
197
+ "!~" => [true, "!~"],
198
+ "&&" => [false, "&&"],
199
+ "||" => [false, "||"],
200
+ "++" => [false, "++"],
201
+ ">>>" => [false, ">>>"],
202
+ "***" => [false, "***"],
203
+ "====" => [false, "===="],
204
+ "#accept" => [false, "#accept"],
205
+ ".new" => [false, ".new"],
206
+ ".#cp" => [false, ".#cp"],
207
+ "$gvar" => [false, "$gvar"],
208
+ "CGI#accept" => [false, "CGI#accept"],
209
+ "String.new" => [false, "String.new"],
210
+ "Net::HTTP.get" => [false, "Net::HTTP.get"],
211
+ "Net::HTTP.new" => [false, "Net::HTTP.new"])
209
212
  def test_methodname?(data)
210
213
  expected, target = data
211
214
  assert_equal(expected, methodname?(target))
@@ -344,7 +347,7 @@ class TestNameUtils < Test::Unit::TestCase
344
347
  "=2a=2a" => ["=2a=2a", "=2a=2a"],
345
348
  "open=2duri" => ["open=2duri", "open=2duri"],
346
349
  "Net=HTTP" => ["-net=-h-t-t-p", "Net=HTTP"])
347
- def test_encodeid
350
+ def test_encodeid(data)
348
351
  expected, target = data
349
352
  assert_equal(expected, encodeid(target))
350
353
  end
@@ -356,7 +359,7 @@ class TestNameUtils < Test::Unit::TestCase
356
359
  "=2a=2a" => ["=2a=2a", "=2a=2a"],
357
360
  "open=2duri" => ["open=2duri", "open=2duri"],
358
361
  "-net=-h-t-t-p" => ["Net=HTTP", "-net=-h-t-t-p"])
359
- def test_decodeid
362
+ def test_decodeid(data)
360
363
  expected, target = data
361
364
  assert_equal(expected, decodeid(target))
362
365
  end
@@ -368,7 +371,7 @@ class TestNameUtils < Test::Unit::TestCase
368
371
  "**" => ["=2a=2a", "**"],
369
372
  "open-uri" => ["open=2duri", "open-uri"],
370
373
  "net.http" => ["net=2ehttp", "net.http"])
371
- def test_encodename_fs
374
+ def test_encodename_fs(data)
372
375
  expected, target = data
373
376
  assert_equal(expected, encodename_fs(target))
374
377
  end
@@ -380,7 +383,7 @@ class TestNameUtils < Test::Unit::TestCase
380
383
  "=2a=2a" => ["**", "=2a=2a"],
381
384
  "open=2duri" => ["open-uri", "open=2duri"],
382
385
  "net=2ehttp" => ["net.http", "net=2ehttp"])
383
- def test_decodename_fs
386
+ def test_decodename_fs(data)
384
387
  expected, target = data
385
388
  assert_equal(expected, decodename_fs(target))
386
389
  end
@@ -13,8 +13,17 @@ class TestRDCompiler < Test::Unit::TestCase
13
13
  @c = BitClust::RDCompiler.new(@u, 1, {:database => BitClust::MethodDatabase.dummy})
14
14
  end
15
15
 
16
- def compile_and_assert_equal(expected, src)
17
- assert_equal expected, @c.compile(src)
16
+ def assert_compiled_source(expected, src)
17
+ assert_equal(expected, @c.compile(src))
18
+ end
19
+
20
+ def assert_compiled_method_source(expected, src)
21
+ method_entry = Object.new
22
+ mock(method_entry).source{ src }
23
+ mock(method_entry).index_id(anything).any_times{ "dummy" }
24
+ mock(method_entry).defined?.any_times{ true }
25
+ mock(method_entry).id.any_times{ "String/i.index._builtin" }
26
+ assert_equal(expected, @c.compile_method(method_entry))
18
27
  end
19
28
 
20
29
  def test_dlist
@@ -42,8 +51,10 @@ c2-2
42
51
  </dd>
43
52
  </dl>
44
53
  HERE
45
- compile_and_assert_equal(expected, src)
54
+ assert_compiled_source(expected, src)
55
+ end
46
56
 
57
+ def test_dlist_with_empty_line
47
58
  src = <<HERE
48
59
  : t1
49
60
  c1
@@ -72,8 +83,10 @@ c3
72
83
  </dd>
73
84
  </dl>
74
85
  HERE
75
- compile_and_assert_equal(expected, src)
86
+ assert_compiled_source(expected, src)
87
+ end
76
88
 
89
+ def test_dlist_with_emlist
77
90
  src = <<HERE
78
91
  : t1
79
92
  c1
@@ -102,8 +115,10 @@ c2
102
115
  </dd>
103
116
  </dl>
104
117
  HERE
105
- compile_and_assert_equal(expected, src)
118
+ assert_compiled_source(expected, src)
119
+ end
106
120
 
121
+ def test_dlist_with_paragraph
107
122
  src = <<HERE
108
123
  : t1
109
124
  c1
@@ -128,7 +143,7 @@ c2
128
143
  text
129
144
  </p>
130
145
  HERE
131
- compile_and_assert_equal(expected, src)
146
+ assert_compiled_source(expected, src)
132
147
  end
133
148
 
134
149
  def test_pre
@@ -146,7 +161,7 @@ hoge
146
161
  foo
147
162
  </pre>
148
163
  HERE
149
- compile_and_assert_equal(expected, src)
164
+ assert_compiled_source(expected, src)
150
165
 
151
166
  src = <<'HERE'
152
167
  pretext
@@ -160,7 +175,7 @@ pretext
160
175
  * hoge1
161
176
  </pre>
162
177
  HERE
163
- compile_and_assert_equal(expected, src)
178
+ assert_compiled_source(expected, src)
164
179
  end
165
180
 
166
181
  def test_method
@@ -171,7 +186,7 @@ bar
171
186
  text
172
187
  HERE
173
188
  expected = <<'HERE'
174
- <dt class="method-heading"><code>hoge</code></dt>
189
+ <dt class="method-heading" id="dummy"><code>hoge</code><span class="permalink">[<a href="dummy/method/String/i/index">permalink</a>]</span></dt>
175
190
  <dd class="method-description">
176
191
  <p>
177
192
  foo
@@ -182,8 +197,10 @@ text
182
197
  </pre>
183
198
  </dd>
184
199
  HERE
185
- compile_and_assert_equal(expected, src)
200
+ assert_compiled_method_source(expected, src)
201
+ end
186
202
 
203
+ def test_method_with_emlist
187
204
  src = <<'HERE'
188
205
  --- <=>
189
206
 
@@ -193,7 +210,7 @@ text
193
210
  //}
194
211
  HERE
195
212
  expected = <<'HERE'
196
- <dt class="method-heading"><code>self &lt;=&gt; </code></dt>
213
+ <dt class="method-heading" id="dummy"><code>self &lt;=&gt; </code><span class="permalink">[<a href="dummy/method/String/i/index">permalink</a>]</span></dt>
197
214
  <dd class="method-description">
198
215
  <p>
199
216
  abs
@@ -203,8 +220,10 @@ text
203
220
  </pre>
204
221
  </dd>
205
222
  HERE
206
- compile_and_assert_equal(expected, src)
223
+ assert_compiled_method_source(expected, src)
224
+ end
207
225
 
226
+ def test_method_with_dlist
208
227
  src = <<'HERE'
209
228
  --- method
210
229
 
@@ -212,7 +231,7 @@ HERE
212
231
  dsc
213
232
  HERE
214
233
  expected = <<'HERE'
215
- <dt class="method-heading"><code>method</code></dt>
234
+ <dt class="method-heading" id="dummy"><code>method</code><span class="permalink">[<a href="dummy/method/String/i/index">permalink</a>]</span></dt>
216
235
  <dd class="method-description">
217
236
  <dl>
218
237
  <dt>word1</dt>
@@ -224,8 +243,10 @@ dsc
224
243
  </dl>
225
244
  </dd>
226
245
  HERE
227
- compile_and_assert_equal(expected, src)
246
+ assert_compiled_method_source(expected, src)
247
+ end
228
248
 
249
+ def test_method_with_tags
229
250
  src = <<'HERE'
230
251
  --- method
231
252
  dsc
@@ -237,7 +258,7 @@ dsc
237
258
  @see hoge
238
259
  HERE
239
260
  expected = <<'HERE'
240
- <dt class="method-heading"><code>method</code></dt>
261
+ <dt class="method-heading" id="dummy"><code>method</code><span class="permalink">[<a href="dummy/method/String/i/index">permalink</a>]</span></dt>
241
262
  <dd class="method-description">
242
263
  <p>
243
264
  dsc
@@ -261,8 +282,10 @@ dsc
261
282
  </p>
262
283
  </dd>
263
284
  HERE
264
- compile_and_assert_equal(expected, src)
285
+ assert_compiled_method_source(expected, src)
286
+ end
265
287
 
288
+ def test_method_with_formatted_text
266
289
  src = <<'HERE'
267
290
  --- method
268
291
 
@@ -272,7 +295,7 @@ HERE
272
295
  dsc3
273
296
  HERE
274
297
  expected = <<'HERE'
275
- <dt class="method-heading"><code>method</code></dt>
298
+ <dt class="method-heading" id="dummy"><code>method</code><span class="permalink">[<a href="dummy/method/String/i/index">permalink</a>]</span></dt>
276
299
  <dd class="method-description">
277
300
  <dl>
278
301
  <dt class='method-param'>[PARAM] arg:</dt>
@@ -286,8 +309,10 @@ dsc3
286
309
  </pre>
287
310
  </dd>
288
311
  HERE
289
- compile_and_assert_equal(expected, src)
312
+ assert_compiled_method_source(expected, src)
313
+ end
290
314
 
315
+ def test_method_with_param_and_emlist
291
316
  src = <<'HERE'
292
317
  --- method
293
318
 
@@ -298,7 +323,7 @@ dsc3
298
323
  //}
299
324
  HERE
300
325
  expected = <<'HERE'
301
- <dt class="method-heading"><code>method</code></dt>
326
+ <dt class="method-heading" id="dummy"><code>method</code><span class="permalink">[<a href="dummy/method/String/i/index">permalink</a>]</span></dt>
302
327
  <dd class="method-description">
303
328
  <dl>
304
329
  <dt class='method-param'>[PARAM] arg:</dt>
@@ -312,8 +337,7 @@ dsc3
312
337
  </dl>
313
338
  </dd>
314
339
  HERE
315
- compile_and_assert_equal(expected, src)
316
-
340
+ assert_compiled_method_source(expected, src)
317
341
  end
318
342
 
319
343
  def test_method2
@@ -325,7 +349,7 @@ bar
325
349
  HERE
326
350
  expected = <<'HERE'
327
351
  <dl>
328
- <dt class="method-heading"><code>hoge1</code></dt>
352
+ <dt class="method-heading" id="dummy"><code>hoge1</code><span class="permalink">[<a href="dummy/method/String/i/index">permalink</a>]</span></dt>
329
353
  <dt class="method-heading"><code>hoge2</code></dt>
330
354
  <dd class="method-description">
331
355
  <p>
@@ -334,7 +358,7 @@ bar
334
358
  </dd>
335
359
  </dl>
336
360
  HERE
337
- compile_and_assert_equal(expected, src)
361
+ assert_compiled_method_source(expected, src)
338
362
  end
339
363
 
340
364
  def test_ulist
@@ -348,7 +372,7 @@ HERE
348
372
  <li>hoge2</li>
349
373
  </ul>
350
374
  HERE
351
- compile_and_assert_equal(expected, src)
375
+ assert_compiled_source(expected, src)
352
376
 
353
377
  src = <<'HERE'
354
378
  * hoge1
@@ -363,7 +387,7 @@ HERE
363
387
  <li>hoge2</li>
364
388
  </ul>
365
389
  HERE
366
- compile_and_assert_equal(expected, src)
390
+ assert_compiled_source(expected, src)
367
391
 
368
392
  src = <<'HERE'
369
393
  * hoge1
@@ -377,7 +401,7 @@ bar</li>
377
401
  <li>hoge2</li>
378
402
  </ul>
379
403
  HERE
380
- compile_and_assert_equal(expected, src)
404
+ assert_compiled_source(expected, src)
381
405
 
382
406
  end
383
407
 
@@ -394,7 +418,7 @@ bar</li>
394
418
  <li>hoge2</li>
395
419
  </ol>
396
420
  HERE
397
- compile_and_assert_equal(expected, src)
421
+ assert_compiled_source(expected, src)
398
422
  end
399
423
 
400
424
 
@@ -411,48 +435,43 @@ HERE
411
435
  end
412
436
  end
413
437
 
414
- def test_bracket_link
415
- [
416
- ['[[c:String]]', '<a href="dummy/class/String">String</a>' ],
417
- ['[[c:String ]]', '[[c:String ]]' ],
418
- ['[[String]]', '[[String]]' ],
419
- ['[[c:File::Stat]]', '<a href="dummy/class/File=Stat">File::Stat</a>' ],
420
- ['[[m:String.new]]', '<a href="dummy/method/String/s/new">String.new</a>'],
421
- ['[[m:String#dump]]', '<a href="dummy/method/String/i/dump">String#dump</a>'],
422
- ['[[m:String#[] ]]', '<a href="dummy/method/String/i/=5b=5d">String#[]</a>'],
423
- ['[[f:rb_ary_new3]]', '<a href="dummy/function/rb_ary_new3">rb_ary_new3</a>'],
424
- ['[[f:/]]', '<a href="dummy/function/">All C API</a>'],
425
- ['[[f:_index]]', '<a href="dummy/function/">All C API</a>'],
426
- ['[[lib:jcode]]', '<a href="dummy/library/jcode">jcode</a>'],
427
- ['[[man:tr(1)]]', '<a class="external" href="http://www.opengroup.org/onlinepubs/009695399/utilities/tr.html">tr(1)</a>'],
428
- ['[[man:sys/socket.h(header)]]', '<a class="external" href="http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/socket.h.html">sys/socket.h(header)</a>'],
429
- ['[[man:fopen(3linux)]]', '<a class="external" href="http://man7.org/linux/man-pages/man3/fopen.3.html">fopen(3linux)</a>'],
430
- ['[[RFC:2822]]', '<a class="external" href="http://www.ietf.org/rfc/rfc2822.txt">[RFC2822]</a>'],
431
- ['[[m:$~]]', '<a href="dummy/method/Kernel/v/=7e">$~</a>'],
432
- ['[[m:$,]]', '<a href="dummy/method/Kernel/v/=2c">$,</a>'],
433
- ['[[c:String]]]', '<a href="dummy/class/String">String</a>]'],
434
- ['[[c:String]][[c:String]]',
435
- '<a href="dummy/class/String">String</a><a href="dummy/class/String">String</a>'],
436
- ['[[m:File::SEPARATOR]]', '<a href="dummy/method/File/c/SEPARATOR">File::SEPARATOR</a>'],
437
- ['[[url:http://i.loveruby.net]]', '<a class="external" href="http://i.loveruby.net">http://i.loveruby.net</a>'],
438
- ['[[ruby-list:12345]]',
439
- '<a class="external" href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/12345">[ruby-list:12345]</a>'],
440
- ].each{|src, expected|
441
- assert_equal expected, @c.send(:compile_text, src), src
442
- }
443
-
444
- [
445
- ['[[d:hoge/bar]]', '<a href="dummy/hoge/bar">.*</a>'],
446
- ['[[ref:d:hoge/bar#frag]]', '<a href="dummy/hoge/bar#frag">.*</a>'],
447
- ['[[ref:c:Hoge#frag]]', '<a href="dummy/class/Hoge#frag">.*</a>'],
448
- ['[[ref:m:$~#frag]]', '<a href="dummy/method/Kernel/v/=7e#frag">.*</a>'],
449
- ['[[ref:lib:jcode#frag]]', '<a href="dummy/library/jcode#frag">.*</a>'],
450
-
451
- ['[[ref:c:Hoge]]', 'compileerror'],
452
- ['[[ref:ref:hoge/bar#frag]]', 'compileerror'],
453
- ].each{|src, expected|
454
- assert_match /#{expected}/, @c.send(:compile_text, src), src
455
- }
438
+ data("class" => ['[[c:String]]', '<a href="dummy/class/String">String</a>'],
439
+ "with garbage" => ['[[c:String ]]', '[[c:String ]]'],
440
+ "missing type" => ['[[String]]', '[[String]]'],
441
+ "nested class" => ['[[c:File::Stat]]', '<a href="dummy/class/File=Stat">File::Stat</a>'],
442
+ "singleton method" => ['[[m:String.new]]', '<a href="dummy/method/String/s/new">String.new</a>'],
443
+ "instance method" => ['[[m:String#dump]]', '<a href="dummy/method/String/i/dump">String#dump</a>'],
444
+ "indexer" => ['[[m:String#[] ]]', '<a href="dummy/method/String/i/=5b=5d">String#[]</a>'],
445
+ "C API" => ['[[f:rb_ary_new3]]', '<a href="dummy/function/rb_ary_new3">rb_ary_new3</a>'],
446
+ "C API root" => ['[[f:/]]', '<a href="dummy/function/">All C API</a>'],
447
+ "C API index" => ['[[f:_index]]', '<a href="dummy/function/">All C API</a>'],
448
+ "standard library" => ['[[lib:jcode]]', '<a href="dummy/library/jcode">jcode</a>'],
449
+ "man command" => ['[[man:tr(1)]]', '<a class="external" href="http://www.opengroup.org/onlinepubs/009695399/utilities/tr.html">tr(1)</a>'],
450
+ "man header" => ['[[man:sys/socket.h(header)]]', '<a class="external" href="http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/socket.h.html">sys/socket.h(header)</a>'],
451
+ "man system call" => ['[[man:fopen(3linux)]]', '<a class="external" href="http://man7.org/linux/man-pages/man3/fopen.3.html">fopen(3linux)</a>'],
452
+ "RFC" => ['[[RFC:2822]]', '<a class="external" href="http://www.ietf.org/rfc/rfc2822.txt">[RFC2822]</a>'],
453
+ "special var $~" => ['[[m:$~]]', '<a href="dummy/method/Kernel/v/=7e">$~</a>'],
454
+ "special var $," => ['[[m:$,]]', '<a href="dummy/method/Kernel/v/=2c">$,</a>'],
455
+ "extra close bracket" => ['[[c:String]]]', '<a href="dummy/class/String">String</a>]'],
456
+ "continuity" => ['[[c:String]][[c:String]]', '<a href="dummy/class/String">String</a><a href="dummy/class/String">String</a>'],
457
+ "constant" => ['[[m:File::SEPARATOR]]', '<a href="dummy/method/File/c/SEPARATOR">File::SEPARATOR</a>'],
458
+ "url" => ['[[url:http://i.loveruby.net]]', '<a class="external" href="http://i.loveruby.net">http://i.loveruby.net</a>'],
459
+ "ruby-list" => ['[[ruby-list:12345]]', '<a class="external" href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/12345">[ruby-list:12345]</a>'],)
460
+ def test_bracket_link(data)
461
+ target, expected = data
462
+ assert_equal(expected, @c.send(:compile_text, target), target)
463
+ end
464
+
465
+ data("doc" => ['[[d:hoge/bar]]', '<a href="dummy/hoge/bar">.*</a>'],
466
+ "ref doc" => ['[[ref:d:hoge/bar#frag]]', '<a href="dummy/hoge/bar#frag">.*</a>'],
467
+ "ref class" => ['[[ref:c:Hoge#frag]]', '<a href="dummy/class/Hoge#frag">.*</a>'],
468
+ "ref special var" => ['[[ref:m:$~#frag]]', '<a href="dummy/method/Kernel/v/=7e#frag">.*</a>'],
469
+ "ref library" => ['[[ref:lib:jcode#frag]]', '<a href="dummy/library/jcode#frag">.*</a>'],
470
+ "ref class" => ['[[ref:c:Hoge]]', 'compileerror'],
471
+ "ref ref" => ['[[ref:ref:hoge/bar#frag]]', 'compileerror'],)
472
+ def test_bracket_link_doc(data)
473
+ target, expected = data
474
+ assert_match(/#{expected}/, @c.send(:compile_text, target), target)
456
475
  end
457
476
 
458
477
  def test_array_join
@@ -462,14 +481,14 @@ HERE
462
481
  @see [[m:Array#*]], [[m:$,]]
463
482
  HERE
464
483
  expected = <<'HERE'
465
- <dt class="method-heading"><code>join(sep = $,) -&gt; String</code></dt>
484
+ <dt class="method-heading" id="dummy"><code>join(sep = $,) -&gt; String</code><span class="permalink">[<a href="dummy/method/String/i/index">permalink</a>]</span></dt>
466
485
  <dd class="method-description">
467
486
  <p>
468
487
  [SEE_ALSO] <a href="dummy/method/Array/i/=2a">Array#*</a>, <a href="dummy/method/Kernel/v/=2c">$,</a>
469
488
  </p>
470
489
  </dd>
471
490
  HERE
472
- compile_and_assert_equal(expected, src)
491
+ assert_compiled_method_source(expected, src)
473
492
  end
474
493
 
475
494
  def test_todo
@@ -480,7 +499,7 @@ HERE
480
499
  description
481
500
  HERE
482
501
  expected = <<'HERE'
483
- <dt class="method-heading"><code>puts(str) -&gt; String</code></dt>
502
+ <dt class="method-heading" id="dummy"><code>puts(str) -&gt; String</code><span class="permalink">[<a href="dummy/method/String/i/index">permalink</a>]</span></dt>
484
503
  <dd class="method-description">
485
504
  <p class="todo">
486
505
  [TODO]
@@ -490,7 +509,7 @@ description
490
509
  </p>
491
510
  </dd>
492
511
  HERE
493
- compile_and_assert_equal(expected, src)
512
+ assert_compiled_method_source(expected, src)
494
513
  end
495
514
 
496
515
  def test_todo_with_comment
@@ -501,7 +520,7 @@ HERE
501
520
  description
502
521
  HERE
503
522
  expected = <<'HERE'
504
- <dt class="method-heading"><code>puts(str) -&gt; String</code></dt>
523
+ <dt class="method-heading" id="dummy"><code>puts(str) -&gt; String</code><span class="permalink">[<a href="dummy/method/String/i/index">permalink</a>]</span></dt>
505
524
  <dd class="method-description">
506
525
  <p class="todo">
507
526
  [TODO] 1.9.2
@@ -511,24 +530,37 @@ description
511
530
  </p>
512
531
  </dd>
513
532
  HERE
514
- compile_and_assert_equal(expected, src)
533
+ assert_compiled_method_source(expected, src)
515
534
  end
516
535
 
517
-
536
+
518
537
  class BitClust::RDCompiler; public :man_url; end
519
-
520
- def test_man_url
521
- assert_equal("http://www.opengroup.org/onlinepubs/009695399/utilities/tr.html",
522
- @c.man_url("1", "tr"))
523
- assert_equal("http://www.opengroup.org/onlinepubs/009695399/functions/fopen.html",
524
- @c.man_url("3", "fopen"))
525
- assert_equal("http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/socket.h.html",
526
- @c.man_url("header", "sys/socket.h"))
527
- assert_equal("http://man7.org/linux/man-pages/man3/fopen.3.html",
528
- @c.man_url("3linux", "fopen"))
529
- assert_equal("http://www.freebsd.org/cgi/man.cgi?query=fopen&sektion=3&manpath=FreeBSD+9.0-RELEASE",
530
- @c.man_url("3freebsd", "fopen"))
531
- assert_equal(nil, @c.man_url("foo", "tr"))
532
-
538
+
539
+ data("tr(1)" => {
540
+ :params => ["1", "tr"],
541
+ :expected => "http://www.opengroup.org/onlinepubs/009695399/utilities/tr.html"
542
+ },
543
+ "fopen(3)" => {
544
+ :params => ["3", "fopen"],
545
+ :expected => "http://www.opengroup.org/onlinepubs/009695399/functions/fopen.html"
546
+ },
547
+ "sys/socket.h(header)" => {
548
+ :params => ["header", "sys/socket.h"],
549
+ :expected => "http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/socket.h.html"
550
+ },
551
+ "fopen(3linux)" => {
552
+ :params => ["3linux", "fopen"],
553
+ :expected => "http://man7.org/linux/man-pages/man3/fopen.3.html"
554
+ },
555
+ "fopen(3freebsd)" => {
556
+ :params => ["3freebsd", "fopen"],
557
+ :expected => "http://www.freebsd.org/cgi/man.cgi?query=fopen&sektion=3&manpath=FreeBSD+9.0-RELEASE"
558
+ },
559
+ "tr(foo)" => {
560
+ :params => ["foo", "tr"],
561
+ :expected => nil
562
+ })
563
+ def test_man_url(data)
564
+ assert_equal(data[:expected], @c.man_url(*data[:params]))
533
565
  end
534
566
  end
@@ -248,6 +248,11 @@ a.external:hover, a.external:focus, a.external:active {
248
248
  background-color: #33a;
249
249
  }
250
250
 
251
+ span.permalink {
252
+ float: right;
253
+ font-weight: normal;
254
+ }
255
+
251
256
  form {
252
257
  padding: 0px;
253
258
  margin: 0px;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitclust-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-19 00:00:00.000000000 Z
12
+ date: 2013-04-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: test-unit
@@ -27,6 +27,38 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: 2.3.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: test-unit-notify
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: test-unit-rr
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
30
62
  - !ruby/object:Gem::Dependency
31
63
  name: rack
32
64
  requirement: !ruby/object:Gem::Requirement
@@ -172,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
172
204
  version: '0'
173
205
  segments:
174
206
  - 0
175
- hash: -3700746749855450805
207
+ hash: 1699377220203508
176
208
  required_rubygems_version: !ruby/object:Gem::Requirement
177
209
  none: false
178
210
  requirements:
@@ -181,10 +213,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
213
  version: '0'
182
214
  segments:
183
215
  - 0
184
- hash: -3700746749855450805
216
+ hash: 1699377220203508
185
217
  requirements: []
186
218
  rubyforge_project: ''
187
- rubygems_version: 1.8.25
219
+ rubygems_version: 1.8.23
188
220
  signing_key:
189
221
  specification_version: 3
190
222
  summary: BitClust is a rurema document processor.