зеркало из https://github.com/github/ruby.git
* lib/rdoc/context.rb (class RDoc): Fix infinite loop caused by
re-encountering BasicObject. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31561 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
ad10cfeb52
Коммит
4bf8c87101
|
@ -1,3 +1,8 @@
|
|||
Sat May 14 12:06:49 2011 Eric Hodel <drbrain@segment7.net>
|
||||
|
||||
* lib/rdoc/context.rb (class RDoc): Fix infinite loop caused by
|
||||
re-encountering BasicObject.
|
||||
|
||||
Sat May 14 10:32:36 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
|
||||
|
||||
* test/openssl/test_pkey_rsa.rb: Add tests that ensure new public key
|
||||
|
|
|
@ -373,6 +373,12 @@ class RDoc::Context < RDoc::CodeObject
|
|||
end
|
||||
end
|
||||
|
||||
# fix up superclass
|
||||
superclass = nil if full_name == 'BasicObject'
|
||||
superclass = nil if full_name == 'Object' and defined?(::BasicObject)
|
||||
superclass = '::BasicObject' if
|
||||
defined?(::BasicObject) and full_name == 'Object'
|
||||
|
||||
# find the superclass full name
|
||||
if superclass then
|
||||
if superclass =~ /^:+/ then
|
||||
|
@ -657,6 +663,13 @@ class RDoc::Context < RDoc::CodeObject
|
|||
end
|
||||
end
|
||||
|
||||
##
|
||||
# Iterator for ancestors for duck-typing. Does nothing. See
|
||||
# RDoc::ClassModule#each_ancestor.
|
||||
|
||||
def each_ancestor # :nodoc:
|
||||
end
|
||||
|
||||
##
|
||||
# Iterator for attributes
|
||||
|
||||
|
|
|
@ -105,6 +105,38 @@ class TestRDocContext < XrefTestCase
|
|||
assert_includes RDoc::TopLevel.classes.map { |k| k.full_name }, 'C1::Klass'
|
||||
end
|
||||
|
||||
def test_add_class_basic_object
|
||||
skip 'BasicObject is 1.9 only' unless defined?(BasicObject)
|
||||
|
||||
@xref_data.add_class RDoc::NormalClass, 'BasicObject'
|
||||
|
||||
basic = @xref_data.find_module_named 'BasicObject'
|
||||
|
||||
assert_nil basic.superclass
|
||||
|
||||
@c1.add_class RDoc::NormalClass, 'BasicObject'
|
||||
|
||||
basic = @c1.find_module_named 'BasicObject'
|
||||
|
||||
assert_equal 'Object', basic.superclass
|
||||
end
|
||||
|
||||
def test_add_class_object
|
||||
root_class = defined?(BasicObject) ? 'BasicObject' : nil
|
||||
|
||||
@xref_data.add_class RDoc::NormalClass, 'Object'
|
||||
|
||||
object = @xref_data.find_module_named 'Object'
|
||||
|
||||
assert_equal root_class, object.superclass
|
||||
|
||||
@c1.add_class RDoc::NormalClass, 'Object'
|
||||
|
||||
object = @c1.find_module_named 'Object'
|
||||
|
||||
assert_equal 'Object', object.superclass.full_name
|
||||
end
|
||||
|
||||
def test_add_class_superclass
|
||||
@c1.add_class RDoc::NormalClass, 'Klass', 'Object'
|
||||
@c1.add_class RDoc::NormalClass, 'Klass', 'Other'
|
||||
|
|
|
@ -215,6 +215,8 @@ class TestRDocRIStore < MiniTest::Unit::TestCase
|
|||
},
|
||||
}
|
||||
|
||||
expected[:ancestors]['Object'] = %w[BasicObject] if defined?(::BasicObject)
|
||||
|
||||
open File.join(@tmpdir, 'cache.ri'), 'rb' do |io|
|
||||
cache = Marshal.load io.read
|
||||
|
||||
|
@ -250,8 +252,10 @@ class TestRDocRIStore < MiniTest::Unit::TestCase
|
|||
assert_directory File.join(@tmpdir, 'Object')
|
||||
assert_file File.join(@tmpdir, 'Object', 'cdesc-Object.ri')
|
||||
|
||||
object_ancestors = defined?(::BasicObject) ? %w[BasicObject] : []
|
||||
|
||||
assert_cache({}, {}, { 'Object' => ['attr_accessor attr'] }, %w[Object],
|
||||
'Object' => %w[])
|
||||
'Object' => object_ancestors)
|
||||
|
||||
assert_equal @klass, @s.load_class('Object')
|
||||
end
|
||||
|
@ -303,8 +307,10 @@ class TestRDocRIStore < MiniTest::Unit::TestCase
|
|||
assert_directory File.join(@tmpdir, 'Object')
|
||||
assert_file File.join(@tmpdir, 'Object', 'cdesc-Object.ri')
|
||||
|
||||
object_ancestors = defined?(::BasicObject) ? %w[BasicObject] : []
|
||||
|
||||
assert_cache({}, {}, { 'Object' => ['attr_accessor attr'] }, %w[Object],
|
||||
'Object' => %w[])
|
||||
'Object' => object_ancestors)
|
||||
|
||||
assert_equal @klass, @s.load_class('Object')
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче