mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Import RDoc 2.5
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27147 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9b40cdfe8c
commit
46580b5147
176 changed files with 17841 additions and 16457 deletions
1
test/rdoc/hidden.zip.txt
Normal file
1
test/rdoc/hidden.zip.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
PK
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
#
|
||||
# This file is parsed by test_rdoc_markup_to_html_crossref.rb
|
||||
# during its tests.
|
||||
#
|
||||
class Ref_Class1
|
||||
end
|
||||
|
||||
class Ref_Class2
|
||||
class Ref_Class3
|
||||
def method
|
||||
end
|
||||
|
||||
class Helper1
|
||||
def method?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Ref_Class3
|
||||
class Helper1
|
||||
end
|
||||
|
||||
class Helper2
|
||||
end
|
||||
end
|
||||
|
||||
class Ref_Class4
|
||||
class Ref_Class4
|
||||
end
|
||||
end
|
||||
8
test/rdoc/test.ja.rdoc
Normal file
8
test/rdoc/test.ja.rdoc
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
こんにちは!
|
||||
|
||||
初めまして。アーロンと申します。
|
||||
|
||||
どんな食べ物が好きですか?私はフランスの料理が大好きです。
|
||||
日本の料理も大好きです。
|
||||
|
||||
食べ物を食べるのが大好きだけど、お皿を洗うのが大嫌いです。
|
||||
8
test/rdoc/test.ja.txt
Normal file
8
test/rdoc/test.ja.txt
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
こんにちは!
|
||||
|
||||
初めまして。アーロンと申します。
|
||||
|
||||
どんな食べ物が好きですか?私はフランスの料理が大好きです。
|
||||
日本の料理も大好きです。
|
||||
|
||||
食べ物を食べるのが大好きだけど、お皿を洗うのが大嫌いです。
|
||||
1
test/rdoc/test.txt
Normal file
1
test/rdoc/test.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
test file
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc'
|
||||
require 'rdoc/markup'
|
||||
require 'rdoc/markup/attribute_manager'
|
||||
|
||||
class TestAttributeManager < MiniTest::Unit::TestCase
|
||||
|
|
@ -9,29 +11,21 @@ class TestAttributeManager < MiniTest::Unit::TestCase
|
|||
@klass = RDoc::Markup::AttributeManager
|
||||
end
|
||||
|
||||
def teardown
|
||||
silently do
|
||||
@klass.const_set(:MATCHING_WORD_PAIRS, {})
|
||||
@klass.const_set(:WORD_PAIR_MAP, {})
|
||||
@klass.const_set(:HTML_TAGS, {})
|
||||
end
|
||||
end
|
||||
|
||||
def test_initial_word_pairs
|
||||
word_pairs = @klass::MATCHING_WORD_PAIRS
|
||||
word_pairs = @am.matching_word_pairs
|
||||
assert word_pairs.is_a?(Hash)
|
||||
assert_equal(3, word_pairs.size)
|
||||
end
|
||||
|
||||
def test_initial_html
|
||||
html_tags = @klass::HTML_TAGS
|
||||
html_tags = @am.html_tags
|
||||
assert html_tags.is_a?(Hash)
|
||||
assert_equal(5, html_tags.size)
|
||||
end
|
||||
|
||||
def test_add_matching_word_pair
|
||||
@am.add_word_pair("x","x", :TEST)
|
||||
word_pairs = @klass::MATCHING_WORD_PAIRS
|
||||
word_pairs = @am.matching_word_pairs
|
||||
assert_equal(4,word_pairs.size)
|
||||
assert(word_pairs.has_key?("x"))
|
||||
end
|
||||
|
|
@ -44,21 +38,21 @@ class TestAttributeManager < MiniTest::Unit::TestCase
|
|||
|
||||
def test_add_word_pair_map
|
||||
@am.add_word_pair("x", "y", :TEST)
|
||||
word_pair_map = @klass::WORD_PAIR_MAP
|
||||
word_pair_map = @am.word_pair_map
|
||||
assert_equal(1,word_pair_map.size)
|
||||
assert_equal(word_pair_map. keys.first.source, "(x)(\\S+)(y)")
|
||||
end
|
||||
|
||||
def test_add_html_tag
|
||||
@am.add_html("Test", :TEST)
|
||||
tags = @klass::HTML_TAGS
|
||||
tags = @am.html_tags
|
||||
assert_equal(6, tags.size)
|
||||
assert(tags.has_key?("test"))
|
||||
end
|
||||
|
||||
def test_add_special
|
||||
@am.add_special("WikiWord", :WIKIWORD)
|
||||
specials = @klass::SPECIAL
|
||||
specials = @am.special
|
||||
assert_equal(1,specials.size)
|
||||
assert(specials.has_key?("WikiWord"))
|
||||
end
|
||||
|
|
@ -73,4 +67,3 @@ class TestAttributeManager < MiniTest::Unit::TestCase
|
|||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
|
|||
33
test/rdoc/test_rdoc_any_method.rb
Normal file
33
test/rdoc/test_rdoc_any_method.rb
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
require File.expand_path '../xref_test_case', __FILE__
|
||||
|
||||
class RDocAnyMethodTest < XrefTestCase
|
||||
|
||||
def test_full_name
|
||||
assert_equal 'C1::m', @c1.method_list.first.full_name
|
||||
end
|
||||
|
||||
def test_parent_name
|
||||
assert_equal 'C1', @c1.method_list.first.parent_name
|
||||
assert_equal 'C1', @c1.method_list.last.parent_name
|
||||
end
|
||||
|
||||
def test_marshal_load
|
||||
instance_method = Marshal.load Marshal.dump(@c1.method_list.last)
|
||||
|
||||
assert_equal 'C1#m', instance_method.full_name
|
||||
assert_equal 'C1', instance_method.parent_name
|
||||
|
||||
class_method = Marshal.load Marshal.dump(@c1.method_list.first)
|
||||
|
||||
assert_equal 'C1::m', class_method.full_name
|
||||
assert_equal 'C1', class_method.parent_name
|
||||
end
|
||||
|
||||
def test_name
|
||||
m = RDoc::AnyMethod.new nil, nil
|
||||
|
||||
assert_nil m.name
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
40
test/rdoc/test_rdoc_attr.rb
Normal file
40
test/rdoc/test_rdoc_attr.rb
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/rdoc'
|
||||
|
||||
class TestRDocAttr < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@a = RDoc::Attr.new nil, 'attr', 'RW', ''
|
||||
end
|
||||
|
||||
def test_block_params
|
||||
assert_nil @a.block_params
|
||||
end
|
||||
|
||||
def test_call_seq
|
||||
assert_nil @a.call_seq
|
||||
end
|
||||
|
||||
def test_full_name
|
||||
assert_equal '(unknown)#attr', @a.full_name
|
||||
end
|
||||
|
||||
def test_singleton
|
||||
refute @a.singleton
|
||||
end
|
||||
|
||||
def test_type
|
||||
assert_equal 'attr_accessor', @a.type
|
||||
|
||||
@a.rw = 'R'
|
||||
|
||||
assert_equal 'attr_reader', @a.type
|
||||
|
||||
@a.rw = 'W'
|
||||
|
||||
assert_equal 'attr_writer', @a.type
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
100
test/rdoc/test_rdoc_class_module.rb
Normal file
100
test/rdoc/test_rdoc_class_module.rb
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
require File.expand_path '../xref_test_case', __FILE__
|
||||
|
||||
class TestRDocClassModule < XrefTestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@RM = RDoc::Markup
|
||||
end
|
||||
|
||||
def test_comment_equals
|
||||
cm = RDoc::ClassModule.new 'Klass'
|
||||
cm.comment = '# comment 1'
|
||||
|
||||
assert_equal 'comment 1', cm.comment
|
||||
|
||||
cm.comment = '# comment 2'
|
||||
|
||||
assert_equal "comment 1\n---\ncomment 2", cm.comment
|
||||
|
||||
cm.comment = "# * comment 3"
|
||||
|
||||
assert_equal "comment 1\n---\ncomment 2\n---\n* comment 3", cm.comment
|
||||
end
|
||||
|
||||
# handle making a short module alias of yourself
|
||||
|
||||
def test_find_class_named
|
||||
@c2.classes_hash['C2'] = @c2
|
||||
|
||||
assert_nil @c2.find_class_named('C1')
|
||||
end
|
||||
|
||||
def test_merge
|
||||
cm1 = RDoc::ClassModule.new 'Klass'
|
||||
cm1.comment = 'klass 1'
|
||||
cm1.add_attribute RDoc::Attr.new(nil, 'a1', 'RW', '')
|
||||
cm1.add_attribute RDoc::Attr.new(nil, 'a3', 'R', '')
|
||||
cm1.add_constant RDoc::Constant.new('C1', nil, '')
|
||||
cm1.add_include RDoc::Include.new('I1', '')
|
||||
cm1.add_method RDoc::AnyMethod.new(nil, 'm1')
|
||||
|
||||
cm2 = RDoc::ClassModule.new 'Klass'
|
||||
cm2.instance_variable_set(:@comment,
|
||||
@RM::Document.new(
|
||||
@RM::Paragraph.new('klass 2')))
|
||||
cm2.add_attribute RDoc::Attr.new(nil, 'a2', 'RW', '')
|
||||
cm2.add_attribute RDoc::Attr.new(nil, 'a3', 'W', '')
|
||||
cm2.add_constant RDoc::Constant.new('C2', nil, '')
|
||||
cm2.add_include RDoc::Include.new('I2', '')
|
||||
cm2.add_method RDoc::AnyMethod.new(nil, 'm2')
|
||||
|
||||
cm1.merge cm2
|
||||
|
||||
document = @RM::Document.new(
|
||||
@RM::Paragraph.new('klass 2'),
|
||||
@RM::Paragraph.new('klass 1'))
|
||||
|
||||
assert_equal document, cm1.comment
|
||||
|
||||
expected = [
|
||||
RDoc::Attr.new(nil, 'a1', 'RW', ''),
|
||||
RDoc::Attr.new(nil, 'a2', 'RW', ''),
|
||||
RDoc::Attr.new(nil, 'a3', 'RW', ''),
|
||||
]
|
||||
|
||||
expected.each do |a| a.parent = cm1 end
|
||||
assert_equal expected, cm1.attributes.sort
|
||||
|
||||
expected = [
|
||||
RDoc::Constant.new('C1', nil, ''),
|
||||
RDoc::Constant.new('C2', nil, ''),
|
||||
]
|
||||
|
||||
expected.each do |c| c.parent = cm1 end
|
||||
assert_equal expected, cm1.constants.sort
|
||||
|
||||
expected = [
|
||||
RDoc::Include.new('I1', ''),
|
||||
RDoc::Include.new('I2', ''),
|
||||
]
|
||||
|
||||
expected.each do |i| i.parent = cm1 end
|
||||
assert_equal expected, cm1.includes.sort
|
||||
|
||||
expected = [
|
||||
RDoc::AnyMethod.new(nil, 'm1'),
|
||||
RDoc::AnyMethod.new(nil, 'm2'),
|
||||
]
|
||||
|
||||
expected.each do |m| m.parent = cm1 end
|
||||
assert_equal expected, cm1.method_list.sort
|
||||
end
|
||||
|
||||
def test_superclass
|
||||
assert_equal @c3_h1, @c3_h2.superclass
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
96
test/rdoc/test_rdoc_code_object.rb
Normal file
96
test/rdoc/test_rdoc_code_object.rb
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require File.expand_path '../xref_test_case', __FILE__
|
||||
require 'rdoc/code_object'
|
||||
|
||||
class TestRDocCodeObject < XrefTestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@co = RDoc::CodeObject.new
|
||||
end
|
||||
|
||||
def test_initialize
|
||||
assert @co.document_self, 'document_self'
|
||||
assert @co.document_children, 'document_children'
|
||||
refute @co.force_documentation, 'force_documentation'
|
||||
refute @co.done_documenting, 'done_documenting'
|
||||
assert_equal '', @co.comment, 'comment is empty'
|
||||
end
|
||||
|
||||
def test_comment_equals
|
||||
@co.comment = ''
|
||||
|
||||
assert_equal '', @co.comment
|
||||
|
||||
@co.comment = 'I am a comment'
|
||||
|
||||
assert_equal 'I am a comment', @co.comment
|
||||
end
|
||||
|
||||
def test_document_children_equals
|
||||
@co.document_children = false
|
||||
refute @co.document_children
|
||||
|
||||
@c2.document_children = false
|
||||
assert_empty @c2.classes
|
||||
end
|
||||
|
||||
def test_document_self_equals
|
||||
@co.document_self = false
|
||||
refute @co.document_self
|
||||
|
||||
@c1.document_self = false
|
||||
assert_empty @c1.method_list
|
||||
end
|
||||
|
||||
def test_documented_eh
|
||||
refute @co.documented?
|
||||
|
||||
@co.comment = 'hi'
|
||||
|
||||
assert @co.documented?
|
||||
|
||||
@co.comment.replace ''
|
||||
|
||||
refute @co.documented?
|
||||
|
||||
@co.document_self = false
|
||||
|
||||
assert @co.documented?
|
||||
end
|
||||
|
||||
def test_parent_file_name
|
||||
assert_equal '(unknown)', @co.parent_file_name
|
||||
assert_equal 'xref_data.rb', @c1.parent_file_name
|
||||
end
|
||||
|
||||
def test_parent_name
|
||||
assert_equal '(unknown)', @co.parent_name
|
||||
assert_equal 'xref_data.rb', @c1.parent_name
|
||||
assert_equal 'C2', @c2_c3.parent_name
|
||||
end
|
||||
|
||||
def test_start_doc
|
||||
@co.document_self = false
|
||||
@co.document_children = false
|
||||
|
||||
@co.start_doc
|
||||
|
||||
assert @co.document_self
|
||||
assert @co.document_children
|
||||
end
|
||||
|
||||
def test_stop_doc
|
||||
@co.document_self = true
|
||||
@co.document_children = true
|
||||
|
||||
@co.stop_doc
|
||||
|
||||
refute @co.document_self
|
||||
refute @co.document_children
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
15
test/rdoc/test_rdoc_constant.rb
Normal file
15
test/rdoc/test_rdoc_constant.rb
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
require File.expand_path '../xref_test_case', __FILE__
|
||||
|
||||
class TestRDocConstant < XrefTestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@const = @c1.constants.first
|
||||
end
|
||||
|
||||
def test_path
|
||||
assert_equal 'C1.html#CONST', @const.path
|
||||
end
|
||||
|
||||
end
|
||||
291
test/rdoc/test_rdoc_context.rb
Normal file
291
test/rdoc/test_rdoc_context.rb
Normal file
|
|
@ -0,0 +1,291 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require File.expand_path '../xref_test_case', __FILE__
|
||||
|
||||
class TestRDocContext < XrefTestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@context = RDoc::Context.new
|
||||
end
|
||||
|
||||
def test_initialize
|
||||
assert_empty @context.in_files
|
||||
assert_equal 'unknown', @context.name
|
||||
assert_equal '', @context.comment
|
||||
assert_equal nil, @context.parent
|
||||
assert_equal :public, @context.visibility
|
||||
assert_equal 1, @context.sections.length
|
||||
|
||||
assert_empty @context.classes_hash
|
||||
assert_empty @context.modules_hash
|
||||
|
||||
assert_empty @context.method_list
|
||||
assert_empty @context.attributes
|
||||
assert_empty @context.aliases
|
||||
assert_empty @context.requires
|
||||
assert_empty @context.includes
|
||||
assert_empty @context.constants
|
||||
end
|
||||
|
||||
def test_add_alias
|
||||
as = RDoc::Alias.new nil, 'old_name', 'new_name', 'comment'
|
||||
|
||||
@context.add_alias as
|
||||
|
||||
assert_equal [as], @context.aliases
|
||||
assert_equal [as], @context.unmatched_alias_lists['old_name']
|
||||
end
|
||||
|
||||
def test_add_alias_method
|
||||
meth = RDoc::AnyMethod.new nil, 'old_name'
|
||||
as = RDoc::Alias.new nil, 'old_name', 'new_name', 'comment'
|
||||
as.parent = @context
|
||||
|
||||
@context.add_method meth
|
||||
@context.add_alias as
|
||||
|
||||
assert_empty @context.aliases
|
||||
assert_empty @context.unmatched_alias_lists
|
||||
assert_equal %w[old_name new_name], @context.method_list.map { |m| m.name }
|
||||
end
|
||||
|
||||
def test_add_alias_impl
|
||||
meth = RDoc::AnyMethod.new nil, 'old_name'
|
||||
meth.comment = 'old comment'
|
||||
meth.singleton = false
|
||||
meth.visibility = :private
|
||||
|
||||
alas = RDoc::Alias.new nil, 'old_name', 'new_name', 'new comment'
|
||||
|
||||
@context.add_alias_impl alas, meth
|
||||
|
||||
assert_equal 1, @context.method_list.length
|
||||
|
||||
alas_meth = @context.method_list.first
|
||||
assert_equal 'new_name', alas_meth.name
|
||||
assert_equal 'new comment', alas_meth.comment
|
||||
assert_equal false, alas_meth.singleton
|
||||
assert_equal meth, alas_meth.is_alias_for
|
||||
assert_equal :private, alas_meth.visibility
|
||||
|
||||
assert_equal [alas_meth], meth.aliases
|
||||
end
|
||||
|
||||
def test_add_class
|
||||
@c1.add_class RDoc::NormalClass, 'Klass', 'Object'
|
||||
|
||||
assert_includes @c1.classes.map { |k| k.full_name }, 'C1::Klass'
|
||||
assert_includes RDoc::TopLevel.classes.map { |k| k.full_name }, 'C1::Klass'
|
||||
end
|
||||
|
||||
def test_add_class_superclass
|
||||
@c1.add_class RDoc::NormalClass, 'Klass', 'Object'
|
||||
@c1.add_class RDoc::NormalClass, 'Klass', 'Other'
|
||||
@c1.add_class RDoc::NormalClass, 'Klass', 'Object'
|
||||
|
||||
klass = @c1.find_module_named 'Klass'
|
||||
assert_equal 'Other', klass.superclass
|
||||
end
|
||||
|
||||
def test_add_class_upgrade
|
||||
@c1.add_module RDoc::NormalModule, 'Klass'
|
||||
@c1.add_class RDoc::NormalClass, 'Klass', nil
|
||||
|
||||
assert_includes @c1.classes.map { |k| k.full_name }, 'C1::Klass',
|
||||
'c1 classes'
|
||||
refute_includes @c1.modules.map { |k| k.full_name }, 'C1::Klass',
|
||||
'c1 modules'
|
||||
|
||||
assert_includes RDoc::TopLevel.classes.map { |k| k.full_name }, 'C1::Klass',
|
||||
'TopLevel classes'
|
||||
refute_includes RDoc::TopLevel.modules.map { |k| k.full_name }, 'C1::Klass',
|
||||
'TopLevel modules'
|
||||
end
|
||||
|
||||
def test_add_constant
|
||||
const = RDoc::Constant.new 'NAME', 'value', 'comment'
|
||||
@context.add_constant const
|
||||
|
||||
assert_equal [const], @context.constants
|
||||
end
|
||||
|
||||
def test_add_include
|
||||
incl = RDoc::Include.new 'Name', 'comment'
|
||||
@context.add_include incl
|
||||
|
||||
assert_equal [incl], @context.includes
|
||||
end
|
||||
|
||||
def test_add_method
|
||||
meth = RDoc::AnyMethod.new nil, 'old_name'
|
||||
meth.visibility = nil
|
||||
|
||||
@context.add_method meth
|
||||
|
||||
assert_equal [meth], @context.method_list
|
||||
assert_equal :public, meth.visibility
|
||||
end
|
||||
|
||||
def test_add_method_alias
|
||||
as = RDoc::Alias.new nil, 'old_name', 'new_name', 'comment'
|
||||
meth = RDoc::AnyMethod.new nil, 'old_name'
|
||||
|
||||
@context.add_alias as
|
||||
refute_empty @context.aliases
|
||||
|
||||
@context.add_method meth
|
||||
|
||||
assert_empty @context.aliases
|
||||
assert_empty @context.unmatched_alias_lists
|
||||
assert_equal %w[old_name new_name], @context.method_list.map { |m| m.name }
|
||||
end
|
||||
|
||||
def test_add_module
|
||||
@c1.add_module RDoc::NormalModule, 'Mod'
|
||||
|
||||
assert_includes @c1.modules.map { |m| m.full_name }, 'C1::Mod'
|
||||
end
|
||||
|
||||
def test_add_module_alias
|
||||
c3_c4 = @c2.add_module_alias @c2_c3, 'C4'
|
||||
|
||||
assert_equal @c2.find_module_named('C4'), c3_c4
|
||||
end
|
||||
|
||||
def test_add_module_class
|
||||
k = @c1.add_class RDoc::NormalClass, 'Klass', nil
|
||||
m = @c1.add_module RDoc::NormalModule, 'Klass'
|
||||
|
||||
assert_equal k, m, 'returns class'
|
||||
assert_empty @c1.modules
|
||||
end
|
||||
|
||||
def test_add_require
|
||||
req = RDoc::Require.new 'require', 'comment'
|
||||
@c1.add_require req
|
||||
|
||||
assert_empty @c1.requires
|
||||
assert_includes @c1.top_level.requires, req
|
||||
end
|
||||
|
||||
def test_add_to
|
||||
incl = RDoc::Include.new 'Name', 'comment'
|
||||
arr = []
|
||||
@context.add_to arr, incl
|
||||
|
||||
assert_includes arr, incl
|
||||
assert_equal @context, incl.parent
|
||||
assert_equal @context.current_section, incl.section
|
||||
end
|
||||
|
||||
def test_add_to_no_document_self
|
||||
incl = RDoc::Include.new 'Name', 'comment'
|
||||
arr = []
|
||||
@context.document_self = false
|
||||
@context.add_to arr, incl
|
||||
|
||||
refute_includes arr, incl
|
||||
end
|
||||
|
||||
def test_add_to_done_documenting
|
||||
incl = RDoc::Include.new 'Name', 'comment'
|
||||
arr = []
|
||||
@context.done_documenting = true
|
||||
@context.add_to arr, incl
|
||||
|
||||
refute_includes arr, incl
|
||||
end
|
||||
|
||||
def test_child_name
|
||||
assert_equal 'C1::C1', @c1.child_name('C1')
|
||||
end
|
||||
|
||||
def test_classes
|
||||
assert_equal %w[C2::C3], @c2.classes.map { |k| k.full_name }
|
||||
assert_equal %w[C3::H1 C3::H2], @c3.classes.map { |k| k.full_name }
|
||||
end
|
||||
|
||||
def test_defined_in_eh
|
||||
assert @c1.defined_in?(@c1.top_level)
|
||||
|
||||
refute @c1.defined_in?(RDoc::TopLevel.new('name.rb'))
|
||||
end
|
||||
|
||||
def test_equals2
|
||||
assert_equal @c3, @c3
|
||||
refute_equal @c2, @c3
|
||||
refute_equal @c2_c3, @c3
|
||||
end
|
||||
|
||||
def test_find_attribute_named
|
||||
assert_equal nil, @c1.find_attribute_named('none')
|
||||
assert_equal 'R', @c1.find_attribute_named('attr').rw
|
||||
assert_equal 'R', @c1.find_attribute_named('attr_reader').rw
|
||||
assert_equal 'W', @c1.find_attribute_named('attr_writer').rw
|
||||
assert_equal 'RW', @c1.find_attribute_named('attr_accessor').rw
|
||||
end
|
||||
|
||||
def test_find_constant_named
|
||||
assert_equal nil, @c1.find_constant_named('NONE')
|
||||
assert_equal ':const', @c1.find_constant_named('CONST').value
|
||||
end
|
||||
|
||||
def test_find_enclosing_module_named
|
||||
assert_equal nil, @c2_c3.find_enclosing_module_named('NONE')
|
||||
assert_equal @c1, @c2_c3.find_enclosing_module_named('C1')
|
||||
assert_equal @c2, @c2_c3.find_enclosing_module_named('C2')
|
||||
end
|
||||
|
||||
def test_find_file_named
|
||||
assert_equal nil, @c1.find_file_named('nonexistent.rb')
|
||||
assert_equal @xref_data, @c1.find_file_named(@file_name)
|
||||
end
|
||||
|
||||
def test_find_instance_method_named
|
||||
assert_equal nil, @c1.find_instance_method_named('none')
|
||||
|
||||
m = @c1.find_instance_method_named('m')
|
||||
assert_instance_of RDoc::AnyMethod, m
|
||||
assert_equal false, m.singleton
|
||||
end
|
||||
|
||||
def test_find_local_symbol
|
||||
assert_equal true, @c1.find_local_symbol('m').singleton
|
||||
assert_equal ':const', @c1.find_local_symbol('CONST').value
|
||||
assert_equal 'R', @c1.find_local_symbol('attr').rw
|
||||
assert_equal @xref_data, @c1.find_local_symbol(@file_name)
|
||||
assert_equal @c2_c3, @c2.find_local_symbol('C3')
|
||||
end
|
||||
|
||||
def test_find_method_named
|
||||
assert_equal true, @c1.find_method_named('m').singleton
|
||||
end
|
||||
|
||||
def test_find_module_named
|
||||
assert_equal @c2_c3, @c2.find_module_named('C3')
|
||||
assert_equal @c2, @c2.find_module_named('C2')
|
||||
assert_equal @c1, @c2.find_module_named('C1')
|
||||
|
||||
assert_equal 'C2::C3', @c2.find_module_named('C3').full_name
|
||||
end
|
||||
|
||||
def test_find_symbol
|
||||
c3 = @xref_data.find_module_named('C3')
|
||||
assert_equal c3, @xref_data.find_symbol('C3')
|
||||
assert_equal c3, @c2.find_symbol('::C3')
|
||||
assert_equal @c2_c3, @c2.find_symbol('C3')
|
||||
end
|
||||
|
||||
def test_spaceship
|
||||
assert_equal(-1, @c2.<=>(@c3))
|
||||
assert_equal 0, @c2.<=>(@c2)
|
||||
assert_equal 1, @c3.<=>(@c2)
|
||||
|
||||
assert_equal 1, @c2_c3.<=>(@c2)
|
||||
assert_equal(-1, @c2_c3.<=>(@c3))
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
56
test/rdoc/test_rdoc_generator_ri.rb
Normal file
56
test/rdoc/test_rdoc_generator_ri.rb
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/rdoc'
|
||||
require 'tmpdir'
|
||||
require 'fileutils'
|
||||
|
||||
class TestRDocGeneratorRI < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@pwd = Dir.pwd
|
||||
RDoc::TopLevel.reset
|
||||
|
||||
@tmpdir = File.join Dir.tmpdir, "test_rdoc_generator_ri_#{$$}"
|
||||
FileUtils.mkdir_p @tmpdir
|
||||
Dir.chdir @tmpdir
|
||||
options = RDoc::Options.new
|
||||
|
||||
@g = RDoc::Generator::RI.new options
|
||||
|
||||
@top_level = RDoc::TopLevel.new 'file.rb'
|
||||
@klass = @top_level.add_class RDoc::NormalClass, 'Object'
|
||||
@meth = RDoc::AnyMethod.new nil, 'method'
|
||||
@meth_bang = RDoc::AnyMethod.new nil, 'method!'
|
||||
@attr = RDoc::Attr.new nil, 'attr', 'RW', ''
|
||||
|
||||
@klass.add_method @meth
|
||||
@klass.add_method @meth_bang
|
||||
@klass.add_attribute @attr
|
||||
end
|
||||
|
||||
def teardown
|
||||
Dir.chdir @pwd
|
||||
FileUtils.rm_rf @tmpdir
|
||||
end
|
||||
|
||||
def assert_file path
|
||||
assert File.file?(path), "#{path} is not a file"
|
||||
end
|
||||
|
||||
def test_generate
|
||||
top_level = RDoc::TopLevel.new 'file.rb'
|
||||
top_level.add_class @klass.class, @klass.name
|
||||
|
||||
@g.generate nil
|
||||
|
||||
assert_file File.join(@tmpdir, 'cache.ri')
|
||||
|
||||
assert_file File.join(@tmpdir, 'Object', 'cdesc-Object.ri')
|
||||
|
||||
assert_file File.join(@tmpdir, 'Object', 'attr-i.ri')
|
||||
assert_file File.join(@tmpdir, 'Object', 'method-i.ri')
|
||||
assert_file File.join(@tmpdir, 'Object', 'method%21-i.ri')
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
17
test/rdoc/test_rdoc_include.rb
Normal file
17
test/rdoc/test_rdoc_include.rb
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
require File.expand_path '../xref_test_case', __FILE__
|
||||
|
||||
class TestRDocInclude < XrefTestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@inc = RDoc::Include.new 'M1', 'comment'
|
||||
end
|
||||
|
||||
def test_module
|
||||
assert_equal @m1, @inc.module
|
||||
assert_equal 'Unknown', RDoc::Include.new('Unknown', 'comment').module
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
@ -1,179 +0,0 @@
|
|||
require 'fileutils'
|
||||
require 'tmpdir'
|
||||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
|
||||
require 'rdoc/generator/texinfo'
|
||||
|
||||
# From chapter 18 of the Pickaxe 3rd ed. and the TexInfo manual.
|
||||
class TestRDocInfoFormatting < MiniTest::Unit::TestCase
|
||||
def setup
|
||||
@output_dir = File.join Dir.mktmpdir("test_rdoc_"), "info_formatting"
|
||||
@output_file = File.join @output_dir, 'rdoc.texinfo'
|
||||
|
||||
RDoc::RDoc.new.document(['--fmt=texinfo', '--quiet',
|
||||
File.expand_path(__FILE__),
|
||||
"--op=#{@output_dir}"])
|
||||
@text = File.read @output_file
|
||||
|
||||
# File.open('rdoc.texinfo', 'w') { |f| f.puts @text }
|
||||
end
|
||||
|
||||
def teardown
|
||||
FileUtils.rm_rf File.dirname(@output_dir)
|
||||
end
|
||||
|
||||
# Make sure tags like *this* do not make HTML
|
||||
def test_descriptions_are_not_html
|
||||
refute_match Regexp.new("\<b\>this\<\/b\>"), @text,
|
||||
"We had some HTML; icky!"
|
||||
end
|
||||
|
||||
# Ensure we get a reasonable amount
|
||||
#
|
||||
# of space in between paragraphs.
|
||||
def test_paragraphs_are_spaced
|
||||
assert_match(/amount\n\n\nof space/, @text)
|
||||
end
|
||||
|
||||
# @ and {} should be at-sign-prefixed
|
||||
def test_escaping
|
||||
assert_match(/@@ and @\{@\} should be at-sign-prefixed/)
|
||||
end
|
||||
|
||||
# This tests that *bold* and <b>bold me</b> become @strong{bolded}
|
||||
def test_bold
|
||||
# Seems like a limitation of the Info format: @strong{bold}
|
||||
# becomes *bold* when read in Info or M-x info. highly lame!
|
||||
assert_match(/@strong\{bold\}/)
|
||||
assert_match(/@strong\{bold me\}/)
|
||||
end
|
||||
|
||||
# Test that _italics_ and <em>italicize me</em> becomes @emph{italicized}
|
||||
def test_italics
|
||||
assert_match(/@emph\{italics\}/)
|
||||
assert_match(/@emph\{italicize me\}/)
|
||||
end
|
||||
|
||||
# And that typewriter +text+ and <tt>typewriter me</tt> becomes @code{typewriter}
|
||||
def test_tt
|
||||
assert_match(/@code\{text\}/)
|
||||
assert_match(/@code\{typewriter me\}/)
|
||||
end
|
||||
|
||||
# Check that
|
||||
# anything indented is
|
||||
# verbatim @verb{|foo bar baz|}
|
||||
def test_literal_code
|
||||
assert_match("@verb{| anything indented is
|
||||
verbatim @@verb@{|foo bar baz|@}
|
||||
|}")
|
||||
end
|
||||
|
||||
# = Huge heading should be a @majorheading
|
||||
# == There is also @chapheading
|
||||
# === Everything deeper becomes a regular @heading
|
||||
# ====== Regardless of its nesting level
|
||||
def test_headings
|
||||
assert_match(/@majorheading Huge heading should be a @@majorheading/)
|
||||
assert_match(/@chapheading There is also @@chapheading/)
|
||||
assert_match(/@heading Everything deeper becomes a regular @@heading/)
|
||||
assert_match(/@heading Regardless of its nesting level/)
|
||||
end
|
||||
|
||||
# * list item
|
||||
# * list item2
|
||||
#
|
||||
# with a paragraph in between
|
||||
#
|
||||
# - hyphen lists
|
||||
# - are also allowed
|
||||
# and items may flow over lines
|
||||
def test_bullet_lists
|
||||
assert_match("@itemize @bullet
|
||||
@item
|
||||
list item
|
||||
@item
|
||||
list item2
|
||||
@end itemize")
|
||||
assert_match("@itemize @bullet
|
||||
@item
|
||||
hyphen lists
|
||||
@item
|
||||
are also allowed and items may flow over lines
|
||||
@end itemize")
|
||||
end
|
||||
|
||||
# 2. numbered lists
|
||||
# 8. are made by
|
||||
# 9. a digit followed by a period
|
||||
def test_numbered_lists
|
||||
end
|
||||
|
||||
# a. alpha lists
|
||||
# b. should be parsed too
|
||||
def test_alpha_lists
|
||||
end
|
||||
|
||||
# [cat] small domestic animal
|
||||
# [+cat+] command to copy standard input
|
||||
# to standard output
|
||||
def test_labelled_lists
|
||||
end
|
||||
|
||||
# * First item.
|
||||
# * Inner item.
|
||||
# * Second inner item.
|
||||
# * Second outer item.
|
||||
def test_nested_lists
|
||||
assert_match("@itemize @bullet
|
||||
@item
|
||||
First item.
|
||||
@itemize @bullet
|
||||
@item
|
||||
Inner item.
|
||||
@item
|
||||
Second inner item.
|
||||
@end itemize
|
||||
@item
|
||||
Second outer item.
|
||||
@end itemize")
|
||||
end
|
||||
|
||||
def test_internal_hyperlinks
|
||||
# be sure to test multi-word hyperlinks as well.
|
||||
end
|
||||
|
||||
def test_hyperlink_targets
|
||||
end
|
||||
|
||||
def test_web_links
|
||||
# An example of the two-argument form: The official
|
||||
# @uref{ftp://ftp.gnu.org/gnu, GNU ftp site} holds programs and texts.
|
||||
|
||||
# produces:
|
||||
# The official GNU ftp site (ftp://ftp.gnu.org/gnu)
|
||||
# holds programs and texts.
|
||||
# and the HTML output is this:
|
||||
# The official <a href="ftp://ftp.gnu.org/gnu">GNU ftp site</a>
|
||||
# holds programs and texts.
|
||||
end
|
||||
|
||||
# three or more hyphens
|
||||
# ----
|
||||
# should produce a horizontal rule
|
||||
def test_horizontal_rule
|
||||
# gah; not sure texinfo supports horizontal rules
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# We don't want the whole string inspected if we pass our own
|
||||
# message in.
|
||||
def assert_match(regex, string = @text,
|
||||
message = "Didn't find #{regex.inspect} in #{string}.")
|
||||
assert string[regex] #, message
|
||||
end
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
@ -1,139 +0,0 @@
|
|||
require 'fileutils'
|
||||
require 'tempfile'
|
||||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'tmpdir'
|
||||
|
||||
require 'rdoc/generator/texinfo'
|
||||
|
||||
# give us access to check this stuff before it's rendered
|
||||
class RDoc::Generator::TEXINFO; attr_reader :files, :classes; end
|
||||
class RDoc::RDoc; attr_reader :options; attr_reader :gen; end
|
||||
|
||||
class TestRDocInfoSections < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@output_dir = File.join Dir.tmpdir, "test_rdoc_info_sections_#{$$}"
|
||||
@output_file = File.join @output_dir, 'rdoc.texinfo'
|
||||
|
||||
@input_file = Tempfile.new 'my_file.rb'
|
||||
|
||||
open @input_file.path, 'w' do |io|
|
||||
io.write TEST_DOC
|
||||
end
|
||||
|
||||
RDoc::Parser.alias_extension '.rb', File.extname(@input_file.path)
|
||||
|
||||
@rdoc = RDoc::RDoc.new
|
||||
@rdoc.document(['--fmt=texinfo', '--quiet', @input_file.path,
|
||||
"--op=#{@output_dir}"])
|
||||
|
||||
@text = File.read @output_file
|
||||
end
|
||||
|
||||
def teardown
|
||||
@input_file.close
|
||||
FileUtils.rm_rf @output_dir
|
||||
end
|
||||
|
||||
def test_output_exists
|
||||
assert ! @text.empty?
|
||||
end
|
||||
|
||||
def test_each_class_has_a_chapter
|
||||
assert_section "Class MyClass", '@chapter'
|
||||
end
|
||||
|
||||
def test_class_descriptions_are_given
|
||||
assert_match(/Documentation for my class/, @text.gsub("\n", ' '))
|
||||
end
|
||||
|
||||
def test_included_modules_are_given
|
||||
assert_match(/Includes.* MyModule/m, @text)
|
||||
end
|
||||
|
||||
def test_class_methods_are_given
|
||||
assert_match(/my_class_method\(my_first_argument\)/, @text)
|
||||
end
|
||||
|
||||
def test_classes_instance_methods_are_given
|
||||
assert_section 'Class MyClass#my_method'
|
||||
assert_match(/my_method\(my_first_argument\)/, @text)
|
||||
end
|
||||
|
||||
def test_each_module_has_a_chapter
|
||||
assert_section 'MyModule', '@chapter'
|
||||
end
|
||||
|
||||
def test_methods_are_shown_only_once
|
||||
methods = @rdoc.gen.classes.map do |c|
|
||||
c.methods.map do |m|
|
||||
c.name + '#' + m.name
|
||||
end
|
||||
end.flatten
|
||||
|
||||
assert_equal methods, methods.uniq
|
||||
end
|
||||
|
||||
# if system "makeinfo --version > /dev/null"
|
||||
# def test_compiles_to_info
|
||||
# makeinfo_output = `cd #{@output_dir} && makeinfo rdoc.texinfo`
|
||||
# assert(File.exist?(File.join(@output_dir, 'rdoc.info')),
|
||||
# "Info file was not compiled: #{makeinfo_output}")
|
||||
# end
|
||||
# end
|
||||
|
||||
# def test_constants_are_documented_somehow
|
||||
# assert_section 'DEFAULT_FILENAME' # what kind of section?
|
||||
# assert_section 'DEFAULT_INFO_FILENAME'
|
||||
# end
|
||||
|
||||
# def test_oh_yeah_dont_forget_files
|
||||
# end
|
||||
|
||||
def assert_section(name, command = '@section')
|
||||
assert_match Regexp.new("^#{command}.*#{Regexp.escape name}"), @text, "Could not find a #{command} #{name}"
|
||||
end
|
||||
|
||||
TEST_DOC = <<-DOC
|
||||
##
|
||||
# Documentation for my module
|
||||
|
||||
module MyModule
|
||||
|
||||
##
|
||||
# Documentation for my included method
|
||||
|
||||
def my_included_method() end
|
||||
|
||||
end
|
||||
|
||||
##
|
||||
# Documentation for my class
|
||||
|
||||
class MyClass
|
||||
|
||||
include MyModule
|
||||
|
||||
##
|
||||
# Documentation for my constant
|
||||
|
||||
MY_CONSTANT = 'my value'
|
||||
|
||||
##
|
||||
# Documentation for my class method
|
||||
|
||||
def self.my_class_method(my_first_argument) end
|
||||
|
||||
##
|
||||
# Documentation for my method
|
||||
|
||||
def my_method(my_first_argument) end
|
||||
|
||||
end
|
||||
|
||||
DOC
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
@ -1,615 +1,37 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/markup'
|
||||
require 'rdoc/markup/to_test'
|
||||
|
||||
class TestRDocMarkup < MiniTest::Unit::TestCase
|
||||
|
||||
def basic_conv(str)
|
||||
sm = RDoc::Markup.new
|
||||
mock = RDoc::Markup::ToTest.new
|
||||
sm.convert(str, mock)
|
||||
sm.content
|
||||
end
|
||||
def test_convert
|
||||
str = <<-STR
|
||||
now is
|
||||
the time
|
||||
|
||||
hello
|
||||
dave
|
||||
|
||||
1. l1
|
||||
2. l2
|
||||
STR
|
||||
|
||||
def line_groups(str, expected)
|
||||
m = RDoc::Markup.new
|
||||
mock = RDoc::Markup::ToTest.new
|
||||
out = m.convert str, RDoc::Markup::ToTest.new
|
||||
|
||||
block = m.convert(str, mock)
|
||||
|
||||
if block != expected
|
||||
rows = (0...([expected.size, block.size].max)).collect{|i|
|
||||
[expected[i]||"nil", block[i]||"nil"]
|
||||
}
|
||||
printf "\n\n%35s %35s\n", "Expected", "Got"
|
||||
rows.each {|e,g| printf "%35s %35s\n", e.dump, g.dump }
|
||||
end
|
||||
|
||||
assert_equal(expected, block)
|
||||
end
|
||||
|
||||
def line_types(str, expected)
|
||||
m = RDoc::Markup.new
|
||||
mock = RDoc::Markup::ToTest.new
|
||||
m.convert(str, mock)
|
||||
assert_equal(expected, m.get_line_types.map{|type| type.to_s[0,1]}.join(''))
|
||||
end
|
||||
|
||||
def test_groups
|
||||
str = "now is the time"
|
||||
line_groups(str, ["L0: Paragraph\nnow is the time"] )
|
||||
|
||||
str = "now is the time\nfor all good men"
|
||||
line_groups(str, ["L0: Paragraph\nnow is the time for all good men"] )
|
||||
|
||||
str = %{\
|
||||
now is the time
|
||||
code _line_ here
|
||||
for all good men}
|
||||
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is the time",
|
||||
"L0: Verbatim\n code _line_ here\n",
|
||||
"L0: Paragraph\nfor all good men"
|
||||
] )
|
||||
|
||||
str = "now is the time\n code\n more code\nfor all good men"
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is the time",
|
||||
"L0: Verbatim\n code\n more code\n",
|
||||
"L0: Paragraph\nfor all good men"
|
||||
] )
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
* l1
|
||||
* l2
|
||||
the time}
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L1: ListStart\n",
|
||||
"L1: BULLET ListItem\nl1",
|
||||
"L1: BULLET ListItem\nl2",
|
||||
"L1: ListEnd\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
* l1
|
||||
l1+
|
||||
* l2
|
||||
the time}
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L1: ListStart\n",
|
||||
"L1: BULLET ListItem\nl1 l1+",
|
||||
"L1: BULLET ListItem\nl2",
|
||||
"L1: ListEnd\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
* l1
|
||||
* l1.1
|
||||
* l2
|
||||
the time}
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L1: ListStart\n",
|
||||
"L1: BULLET ListItem\nl1",
|
||||
"L2: ListStart\n",
|
||||
"L2: BULLET ListItem\nl1.1",
|
||||
"L2: ListEnd\n",
|
||||
"L1: BULLET ListItem\nl2",
|
||||
"L1: ListEnd\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
* l1
|
||||
* l1.1
|
||||
text
|
||||
code
|
||||
code
|
||||
|
||||
text
|
||||
* l2
|
||||
the time}
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L1: ListStart\n",
|
||||
"L1: BULLET ListItem\nl1",
|
||||
"L2: ListStart\n",
|
||||
"L2: BULLET ListItem\nl1.1 text",
|
||||
"L2: Verbatim\n code\n code\n",
|
||||
"L2: Paragraph\ntext",
|
||||
"L2: ListEnd\n",
|
||||
"L1: BULLET ListItem\nl2",
|
||||
"L1: ListEnd\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
1. l1
|
||||
* l1.1
|
||||
2. l2
|
||||
the time}
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L1: ListStart\n",
|
||||
"L1: NUMBER ListItem\nl1",
|
||||
"L2: ListStart\n",
|
||||
"L2: BULLET ListItem\nl1.1",
|
||||
"L2: ListEnd\n",
|
||||
"L1: NUMBER ListItem\nl2",
|
||||
"L1: ListEnd\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
[cat] l1
|
||||
* l1.1
|
||||
[dog] l2
|
||||
the time}
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L1: ListStart\n",
|
||||
"L1: LABELED ListItem\ncat: l1",
|
||||
"L2: ListStart\n",
|
||||
"L2: BULLET ListItem\nl1.1",
|
||||
"L2: ListEnd\n",
|
||||
"L1: LABELED ListItem\ndog: l2",
|
||||
"L1: ListEnd\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
[cat] l1
|
||||
continuation
|
||||
[dog] l2
|
||||
the time}
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L1: ListStart\n",
|
||||
"L1: LABELED ListItem\ncat: l1 continuation",
|
||||
"L1: LABELED ListItem\ndog: l2",
|
||||
"L1: ListEnd\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
end
|
||||
|
||||
def test_headings
|
||||
str = "= heading one"
|
||||
line_groups(str,
|
||||
[ "L0: Heading\nheading one"
|
||||
])
|
||||
|
||||
str = "=== heading three"
|
||||
line_groups(str,
|
||||
[ "L0: Heading\nheading three"
|
||||
])
|
||||
|
||||
str = "text\n === heading three"
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\ntext",
|
||||
"L0: Verbatim\n === heading three\n"
|
||||
])
|
||||
|
||||
str = "text\n code\n === heading three"
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\ntext",
|
||||
"L0: Verbatim\n code\n === heading three\n"
|
||||
])
|
||||
|
||||
str = "text\n code\n=== heading three"
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\ntext",
|
||||
"L0: Verbatim\n code\n",
|
||||
"L0: Heading\nheading three"
|
||||
])
|
||||
|
||||
end
|
||||
|
||||
def test_list_alpha
|
||||
str = "a. alpha\nb. baker\nB. ALPHA\nA. BAKER"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: LOWERALPHA ListItem\nalpha",
|
||||
"L1: LOWERALPHA ListItem\nbaker",
|
||||
"L1: ListEnd\n",
|
||||
"L1: ListStart\n",
|
||||
"L1: UPPERALPHA ListItem\nALPHA",
|
||||
"L1: UPPERALPHA ListItem\nBAKER",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_bullet_dash
|
||||
str = "- one\n- two\n"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: BULLET ListItem\none",
|
||||
"L1: BULLET ListItem\ntwo",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_bullet_star
|
||||
str = "* one\n* two\n"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: BULLET ListItem\none",
|
||||
"L1: BULLET ListItem\ntwo",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_labeled_bracket
|
||||
str = "[one] item one\n[two] item two"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: LABELED ListItem\none: item one",
|
||||
"L1: LABELED ListItem\ntwo: item two",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_labeled_bracket_continued
|
||||
str = "[one]\n item one\n[two]\n item two"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: LABELED ListItem\none: item one",
|
||||
"L1: LABELED ListItem\ntwo: item two",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_labeled_colon
|
||||
str = "one:: item one\ntwo:: item two"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: NOTE ListItem\none:: item one",
|
||||
"L1: NOTE ListItem\ntwo:: item two",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_labeled_colon_continued
|
||||
str = "one::\n item one\ntwo::\n item two"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: NOTE ListItem\none:: item one",
|
||||
"L1: NOTE ListItem\ntwo:: item two",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_nested_bullet_bullet
|
||||
str = "* one\n* two\n * cat\n * dog"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: BULLET ListItem\none",
|
||||
"L1: BULLET ListItem\ntwo",
|
||||
"L2: ListStart\n",
|
||||
"L2: BULLET ListItem\ncat",
|
||||
"L2: BULLET ListItem\ndog",
|
||||
"L2: ListEnd\n",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_nested_labeled_bullet
|
||||
str = "[one]\n * cat\n * dog"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: LABELED ListItem\none: ",
|
||||
"L2: ListStart\n",
|
||||
"L2: BULLET ListItem\ncat",
|
||||
"L2: BULLET ListItem\ndog",
|
||||
"L2: ListEnd\n",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_nested_labeled_bullet_bullet
|
||||
str = "[one]\n * cat\n * dog"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: LABELED ListItem\none: ",
|
||||
"L2: ListStart\n",
|
||||
"L2: BULLET ListItem\ncat",
|
||||
"L3: ListStart\n",
|
||||
"L3: BULLET ListItem\ndog",
|
||||
"L3: ListEnd\n",
|
||||
"L2: ListEnd\n",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_nested_number_number
|
||||
str = "1. one\n1. two\n 1. cat\n 1. dog"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: NUMBER ListItem\none",
|
||||
"L1: NUMBER ListItem\ntwo",
|
||||
"L2: ListStart\n",
|
||||
"L2: NUMBER ListItem\ncat",
|
||||
"L2: NUMBER ListItem\ndog",
|
||||
"L2: ListEnd\n",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_number
|
||||
str = "1. one\n2. two\n1. three"
|
||||
|
||||
line_groups(str,
|
||||
[ "L1: ListStart\n",
|
||||
"L1: NUMBER ListItem\none",
|
||||
"L1: NUMBER ListItem\ntwo",
|
||||
"L1: NUMBER ListItem\nthree",
|
||||
"L1: ListEnd\n" ])
|
||||
end
|
||||
|
||||
def test_list_split
|
||||
str = %{\
|
||||
now is
|
||||
* l1
|
||||
1. n1
|
||||
2. n2
|
||||
* l2
|
||||
the time}
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L1: ListStart\n",
|
||||
"L1: BULLET ListItem\nl1",
|
||||
"L1: ListEnd\n",
|
||||
"L1: ListStart\n",
|
||||
"L1: NUMBER ListItem\nn1",
|
||||
"L1: NUMBER ListItem\nn2",
|
||||
"L1: ListEnd\n",
|
||||
"L1: ListStart\n",
|
||||
"L1: BULLET ListItem\nl2",
|
||||
"L1: ListEnd\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
end
|
||||
|
||||
def test_paragraph
|
||||
str = "paragraph\n\n*bold* paragraph\n"
|
||||
|
||||
line_groups str, [
|
||||
"L0: Paragraph\nparagraph",
|
||||
"L0: BlankLine\n",
|
||||
"L0: Paragraph\n*bold* paragraph"
|
||||
expected = [
|
||||
"now is the time",
|
||||
"\n",
|
||||
" hello\n dave\n",
|
||||
"1: ",
|
||||
"l1",
|
||||
"1: ",
|
||||
"l2",
|
||||
]
|
||||
end
|
||||
|
||||
def test_tabs
|
||||
str = "hello\n dave"
|
||||
assert_equal(str, basic_conv(str))
|
||||
str = "hello\n\tdave"
|
||||
assert_equal("hello\n dave", basic_conv(str))
|
||||
str = "hello\n \tdave"
|
||||
assert_equal("hello\n dave", basic_conv(str))
|
||||
str = "hello\n \tdave"
|
||||
assert_equal("hello\n dave", basic_conv(str))
|
||||
str = "hello\n \tdave"
|
||||
assert_equal("hello\n dave", basic_conv(str))
|
||||
str = "hello\n \tdave"
|
||||
assert_equal("hello\n dave", basic_conv(str))
|
||||
str = "hello\n \tdave"
|
||||
assert_equal("hello\n dave", basic_conv(str))
|
||||
str = "hello\n \tdave"
|
||||
assert_equal("hello\n dave", basic_conv(str))
|
||||
str = "hello\n \tdave"
|
||||
assert_equal("hello\n dave", basic_conv(str))
|
||||
str = "hello\n \tdave"
|
||||
assert_equal("hello\n dave", basic_conv(str))
|
||||
str = ".\t\t."
|
||||
assert_equal(". .", basic_conv(str))
|
||||
end
|
||||
|
||||
def test_types
|
||||
str = "now is the time"
|
||||
line_types(str, 'P')
|
||||
|
||||
str = "now is the time\nfor all good men"
|
||||
line_types(str, 'PP')
|
||||
|
||||
str = "now is the time\n code\nfor all good men"
|
||||
line_types(str, 'PVP')
|
||||
|
||||
str = "now is the time\n code\n more code\nfor all good men"
|
||||
line_types(str, 'PVVP')
|
||||
|
||||
str = "now is\n---\nthe time"
|
||||
line_types(str, 'PRP')
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
* l1
|
||||
* l2
|
||||
the time}
|
||||
line_types(str, 'PLLP')
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
* l1
|
||||
l1+
|
||||
* l2
|
||||
the time}
|
||||
line_types(str, 'PLPLP')
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
* l1
|
||||
* l1.1
|
||||
* l2
|
||||
the time}
|
||||
line_types(str, 'PLLLP')
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
* l1
|
||||
* l1.1
|
||||
text
|
||||
code
|
||||
code
|
||||
|
||||
text
|
||||
* l2
|
||||
the time}
|
||||
line_types(str, 'PLLPVVBPLP')
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
1. l1
|
||||
* l1.1
|
||||
2. l2
|
||||
the time}
|
||||
line_types(str, 'PLLLP')
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
[cat] l1
|
||||
* l1.1
|
||||
[dog] l2
|
||||
the time}
|
||||
line_types(str, 'PLLLP')
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
[cat] l1
|
||||
continuation
|
||||
[dog] l2
|
||||
the time}
|
||||
line_types(str, 'PLPLP')
|
||||
end
|
||||
|
||||
def test_verbatim
|
||||
str = "paragraph\n *bold* verbatim\n"
|
||||
|
||||
line_groups str, [
|
||||
"L0: Paragraph\nparagraph",
|
||||
"L0: Verbatim\n *bold* verbatim\n"
|
||||
]
|
||||
end
|
||||
|
||||
def test_verbatim_merge
|
||||
str = %{\
|
||||
now is
|
||||
code
|
||||
the time}
|
||||
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L0: Verbatim\n code\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
code
|
||||
code1
|
||||
the time}
|
||||
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L0: Verbatim\n code\n code1\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
code
|
||||
|
||||
code1
|
||||
the time}
|
||||
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L0: Verbatim\n code\n\n code1\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
code
|
||||
|
||||
code1
|
||||
|
||||
the time}
|
||||
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L0: Verbatim\n code\n\n code1\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
|
||||
str = %{\
|
||||
now is
|
||||
code
|
||||
|
||||
code1
|
||||
|
||||
code2
|
||||
the time}
|
||||
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L0: Verbatim\n code\n\n code1\n\n code2\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
|
||||
# Folds multiple blank lines
|
||||
str = %{\
|
||||
now is
|
||||
code
|
||||
|
||||
|
||||
code1
|
||||
|
||||
the time}
|
||||
|
||||
line_groups(str,
|
||||
[ "L0: Paragraph\nnow is",
|
||||
"L0: Verbatim\n code\n\n code1\n",
|
||||
"L0: Paragraph\nthe time"
|
||||
])
|
||||
|
||||
|
||||
end
|
||||
|
||||
def test_whitespace
|
||||
assert_equal("hello", basic_conv("hello"))
|
||||
assert_equal("hello", basic_conv(" hello "))
|
||||
assert_equal("hello", basic_conv(" \t \t hello\t\t"))
|
||||
|
||||
assert_equal("1\n 2\n 3", basic_conv("1\n 2\n 3"))
|
||||
assert_equal("1\n 2\n 3", basic_conv(" 1\n 2\n 3"))
|
||||
|
||||
assert_equal("1\n 2\n 3\n1\n 2", basic_conv("1\n 2\n 3\n1\n 2"))
|
||||
assert_equal("1\n 2\n 3\n1\n 2", basic_conv(" 1\n 2\n 3\n 1\n 2"))
|
||||
|
||||
assert_equal("1\n 2\n\n 3", basic_conv(" 1\n 2\n\n 3"))
|
||||
assert_equal expected, out
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
|
|||
|
|
@ -1,14 +1,13 @@
|
|||
require "rubygems"
|
||||
require "minitest/unit"
|
||||
require "minitest/autorun"
|
||||
require 'rdoc'
|
||||
require 'rdoc/markup'
|
||||
require "rdoc/markup/inline"
|
||||
require "rdoc/markup/to_html_crossref"
|
||||
|
||||
class TestRDocMarkupAttributeManager < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@orig_special = RDoc::Markup::AttributeManager::SPECIAL
|
||||
RDoc::Markup::AttributeManager::SPECIAL.replace Hash.new
|
||||
|
||||
@am = RDoc::Markup::AttributeManager.new
|
||||
|
||||
@bold_on = @am.changed_attribute_by_name([], [:BOLD])
|
||||
|
|
@ -32,10 +31,6 @@ class TestRDocMarkupAttributeManager < MiniTest::Unit::TestCase
|
|||
@wombat_off = @am.changed_attribute_by_name([:WOMBAT], [])
|
||||
end
|
||||
|
||||
def teardown
|
||||
RDoc::Markup::AttributeManager::SPECIAL.replace @orig_special
|
||||
end
|
||||
|
||||
def crossref(text)
|
||||
crossref_bitmap = RDoc::Markup::Attribute.bitmap_for(:_SPECIAL_) |
|
||||
RDoc::Markup::Attribute.bitmap_for(:CROSSREF)
|
||||
|
|
@ -55,9 +50,9 @@ class TestRDocMarkupAttributeManager < MiniTest::Unit::TestCase
|
|||
def test_add_word_pair
|
||||
@am.add_word_pair '%', '&', 'percent and'
|
||||
|
||||
assert RDoc::Markup::AttributeManager::WORD_PAIR_MAP.include?(/(%)(\S+)(&)/)
|
||||
assert RDoc::Markup::AttributeManager::PROTECTABLE.include?('%')
|
||||
assert !RDoc::Markup::AttributeManager::PROTECTABLE.include?('&')
|
||||
assert @am.word_pair_map.include?(/(%)(\S+)(&)/)
|
||||
assert @am.protectable.include?('%')
|
||||
assert !@am.protectable.include?('&')
|
||||
end
|
||||
|
||||
def test_add_word_pair_angle
|
||||
|
|
@ -71,8 +66,8 @@ class TestRDocMarkupAttributeManager < MiniTest::Unit::TestCase
|
|||
def test_add_word_pair_matching
|
||||
@am.add_word_pair '^', '^', 'caret'
|
||||
|
||||
assert RDoc::Markup::AttributeManager::MATCHING_WORD_PAIRS.include?('^')
|
||||
assert RDoc::Markup::AttributeManager::PROTECTABLE.include?('^')
|
||||
assert @am.matching_word_pairs.include?('^')
|
||||
assert @am.protectable.include?('^')
|
||||
end
|
||||
|
||||
def test_basic
|
||||
|
|
@ -124,6 +119,10 @@ class TestRDocMarkupAttributeManager < MiniTest::Unit::TestCase
|
|||
@am.flow("*\\bold*")
|
||||
end
|
||||
|
||||
def test_bold_html_escaped
|
||||
assert_equal ['cat <b>dog</b>'], @am.flow('cat \<b>dog</b>')
|
||||
end
|
||||
|
||||
def test_combined
|
||||
assert_equal(["cat ", @em_on, "and", @em_off, " ", @bold_on, "dog", @bold_off],
|
||||
@am.flow("cat _and_ *dog*"))
|
||||
|
|
@ -196,14 +195,17 @@ class TestRDocMarkupAttributeManager < MiniTest::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_protect
|
||||
assert_equal(['cat \\ dog'], @am.flow('cat \\ dog'))
|
||||
assert_equal(['cat \\ dog'],
|
||||
@am.flow('cat \\ dog'))
|
||||
|
||||
assert_equal(["cat <tt>dog</Tt>"], @am.flow("cat \\<tt>dog</Tt>"))
|
||||
assert_equal(["cat <tt>dog</Tt>"],
|
||||
@am.flow("cat \\<tt>dog</Tt>"))
|
||||
|
||||
assert_equal(["cat ", @em_on, "and", @em_off, " <B>dog</b>"],
|
||||
@am.flow("cat <i>and</i> \\<B>dog</b>"))
|
||||
|
||||
assert_equal(["*word* or <b>text</b>"], @am.flow("\\*word* or \\<b>text</b>"))
|
||||
assert_equal(["*word* or <b>text</b>"],
|
||||
@am.flow("\\*word* or \\<b>text</b>"))
|
||||
|
||||
assert_equal(["_cat_", @em_on, "dog", @em_off],
|
||||
@am.flow("\\_cat_<i>dog</i>"))
|
||||
|
|
@ -229,6 +231,10 @@ class TestRDocMarkupAttributeManager < MiniTest::Unit::TestCase
|
|||
assert_equal(["cats' ", crossref("#fred")].flatten, @am.flow("cats' #fred"))
|
||||
end
|
||||
|
||||
def test_tt_html
|
||||
assert_equal [@tt_on, '"\n"', @tt_off],
|
||||
@am.flow('<tt>"\n"</tt>')
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
|
|||
51
test/rdoc/test_rdoc_markup_document.rb
Normal file
51
test/rdoc/test_rdoc_markup_document.rb
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
require 'pp'
|
||||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/markup'
|
||||
|
||||
class TestRDocMarkupDocument < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@RM = RDoc::Markup
|
||||
@d = @RM::Document.new
|
||||
end
|
||||
|
||||
def mu_pp obj
|
||||
s = ''
|
||||
s = PP.pp obj, s
|
||||
s.force_encoding Encoding.default_external if defined? Encoding
|
||||
s.chomp
|
||||
end
|
||||
|
||||
def test_append
|
||||
@d << @RM::Paragraph.new('hi')
|
||||
|
||||
expected = @RM::Document.new @RM::Paragraph.new('hi')
|
||||
|
||||
assert_equal expected, @d
|
||||
end
|
||||
|
||||
def test_append_document
|
||||
@d << @RM::Document.new
|
||||
|
||||
assert_empty @d
|
||||
|
||||
@d << @RM::Document.new(@RM::Paragraph.new('hi'))
|
||||
|
||||
expected = @RM::Document.new @RM::Paragraph.new('hi'), @RM::BlankLine.new
|
||||
|
||||
assert_equal expected, @d
|
||||
end
|
||||
|
||||
def test_append_string
|
||||
@d << ''
|
||||
|
||||
assert_empty @d
|
||||
|
||||
assert_raises ArgumentError do
|
||||
@d << 'hi'
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
27
test/rdoc/test_rdoc_markup_paragraph.rb
Normal file
27
test/rdoc/test_rdoc_markup_paragraph.rb
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
require 'pp'
|
||||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/markup'
|
||||
|
||||
class TestRDocMarkupParagraph < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@RM = RDoc::Markup
|
||||
@p = @RM::Paragraph.new
|
||||
end
|
||||
|
||||
def mu_pp obj
|
||||
s = ''
|
||||
s = PP.pp obj, s
|
||||
s.force_encoding Encoding.default_external if defined? Encoding
|
||||
s.chomp
|
||||
end
|
||||
|
||||
def test_push
|
||||
@p.push 'hi', 'there'
|
||||
|
||||
assert_equal @RM::Paragraph.new('hi', 'there'), @p
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
1327
test/rdoc/test_rdoc_markup_parser.rb
Normal file
1327
test/rdoc/test_rdoc_markup_parser.rb
Normal file
File diff suppressed because it is too large
Load diff
426
test/rdoc/test_rdoc_markup_to_ansi.rb
Normal file
426
test/rdoc/test_rdoc_markup_to_ansi.rb
Normal file
|
|
@ -0,0 +1,426 @@
|
|||
require 'rubygems'
|
||||
require 'rdoc/markup/formatter_test_case'
|
||||
require 'rdoc/markup/to_ansi'
|
||||
require 'minitest/autorun'
|
||||
|
||||
class TestRDocMarkupToAnsi < RDoc::Markup::FormatterTestCase
|
||||
|
||||
add_visitor_tests
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@to = RDoc::Markup::ToAnsi.new
|
||||
end
|
||||
|
||||
def accept_blank_line
|
||||
assert_equal "\e[0m\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_heading
|
||||
assert_equal "\e[0mHello\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_end_bullet
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_label
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_lalpha
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_note
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_number
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_ualpha
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_item_end_bullet
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
end
|
||||
|
||||
def accept_list_item_end_label
|
||||
assert_equal "\e[0m\n", @to.res.join
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
end
|
||||
|
||||
def accept_list_item_end_lalpha
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
assert_equal 'b', @to.list_index.last
|
||||
end
|
||||
|
||||
def accept_list_item_end_note
|
||||
assert_equal "\e[0m\n", @to.res.join
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
end
|
||||
|
||||
def accept_list_item_end_number
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
assert_equal 2, @to.list_index.last
|
||||
end
|
||||
|
||||
def accept_list_item_end_ualpha
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
assert_equal 'B', @to.list_index.last
|
||||
end
|
||||
|
||||
def accept_list_item_start_bullet
|
||||
assert_equal %W"\e[0m", @to.res
|
||||
assert_equal '* ', @to.prefix
|
||||
end
|
||||
|
||||
def accept_list_item_start_label
|
||||
assert_equal %W"\e[0m", @to.res
|
||||
assert_equal "cat:\n ", @to.prefix
|
||||
|
||||
assert_equal 2, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_lalpha
|
||||
assert_equal %W"\e[0m", @to.res
|
||||
assert_equal 'a. ', @to.prefix
|
||||
|
||||
assert_equal 'a', @to.list_index.last
|
||||
assert_equal 3, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_note
|
||||
assert_equal %W"\e[0m", @to.res
|
||||
assert_equal "cat:\n ", @to.prefix
|
||||
|
||||
assert_equal 2, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_number
|
||||
assert_equal %W"\e[0m", @to.res
|
||||
assert_equal '1. ', @to.prefix
|
||||
|
||||
assert_equal 1, @to.list_index.last
|
||||
assert_equal 3, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_ualpha
|
||||
assert_equal %W"\e[0m", @to.res
|
||||
assert_equal 'A. ', @to.prefix
|
||||
|
||||
assert_equal 'A', @to.list_index.last
|
||||
assert_equal 3, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_start_bullet
|
||||
assert_equal "\e[0m", @to.res.join
|
||||
assert_equal [nil], @to.list_index
|
||||
assert_equal [:BULLET], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_label
|
||||
assert_equal "\e[0m", @to.res.join
|
||||
assert_equal [nil], @to.list_index
|
||||
assert_equal [:LABEL], @to.list_type
|
||||
assert_equal [2], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_lalpha
|
||||
assert_equal "\e[0m", @to.res.join
|
||||
assert_equal ['a'], @to.list_index
|
||||
assert_equal [:LALPHA], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_note
|
||||
assert_equal "\e[0m", @to.res.join
|
||||
assert_equal [nil], @to.list_index
|
||||
assert_equal [:NOTE], @to.list_type
|
||||
assert_equal [2], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_number
|
||||
assert_equal "\e[0m", @to.res.join
|
||||
assert_equal [1], @to.list_index
|
||||
assert_equal [:NUMBER], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_ualpha
|
||||
assert_equal "\e[0m", @to.res.join
|
||||
assert_equal ['A'], @to.list_index
|
||||
assert_equal [:UALPHA], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_paragraph
|
||||
assert_equal "\e[0mhi\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_rule
|
||||
assert_equal "\e[0m#{'-' * 78}\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_verbatim # FormatterTestCase doesn't set indent for ToAnsi
|
||||
assert_equal "\e[0m hi\n world\n\n", @to.res.join
|
||||
end
|
||||
|
||||
def end_accepting
|
||||
assert_equal "\e[0mhi", @to.end_accepting
|
||||
end
|
||||
|
||||
def start_accepting
|
||||
assert_equal 0, @to.indent
|
||||
assert_equal %W"\e[0m", @to.res
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def test_accept_heading_1
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(1, 'Hello')
|
||||
|
||||
assert_equal "\e[0m\e[1;32mHello\e[m\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_2
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(2, 'Hello')
|
||||
|
||||
assert_equal "\e[0m\e[4;32mHello\e[m\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_3
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(3, 'Hello')
|
||||
|
||||
assert_equal "\e[0m\e[32mHello\e[m\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_4
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(4, 'Hello')
|
||||
|
||||
assert_equal "\e[0mHello\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_indent
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
@to.accept_heading @RM::Heading.new(1, 'Hello')
|
||||
|
||||
assert_equal "\e[0m \e[1;32mHello\e[m\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_b
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
@to.accept_heading @RM::Heading.new(1, '*Hello*')
|
||||
|
||||
assert_equal "\e[0m \e[1;32m\e[1mHello\e[m\e[m\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_list_item_start_note_2
|
||||
list = @RM::List.new(:NOTE,
|
||||
@RM::ListItem.new('<tt>teletype</tt>',
|
||||
@RM::Paragraph.new('teletype description')))
|
||||
|
||||
@to.start_accepting
|
||||
|
||||
list.accept @to
|
||||
|
||||
expected = "\e[0m\e[7mteletype\e[m:\n teletype description\n\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_b
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('reg <b>bold words</b> reg')
|
||||
|
||||
expected = "\e[0mreg \e[1mbold words\e[m reg\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_i
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('reg <em>italic words</em> reg')
|
||||
|
||||
expected = "\e[0mreg \e[4mitalic words\e[m reg\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_indent
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
@to.accept_paragraph @RM::Paragraph.new('words ' * 30)
|
||||
|
||||
expected = <<-EXPECTED
|
||||
\e[0m words words words words words words words words words words words words
|
||||
words words words words words words words words words words words words
|
||||
words words words words words words
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_plus
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('regular +teletype+ regular')
|
||||
|
||||
expected = "\e[0mregular \e[7mteletype\e[m regular\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_star
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('regular *bold* regular')
|
||||
|
||||
expected = "\e[0mregular \e[1mbold\e[m regular\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_underscore
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('regular _italic_ regular')
|
||||
|
||||
expected = "\e[0mregular \e[4mitalic\e[m regular\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_wrap
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('words ' * 30)
|
||||
|
||||
expected = <<-EXPECTED
|
||||
\e[0mwords words words words words words words words words words words words words
|
||||
words words words words words words words words words words words words words
|
||||
words words words words
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_rule_indent
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
|
||||
@to.accept_rule @RM::Rule.new(1)
|
||||
|
||||
assert_equal "\e[0m #{'-' * 75}\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_verbatim_indent
|
||||
@to.start_accepting
|
||||
|
||||
@to.indent = 2
|
||||
|
||||
@to.accept_verbatim @RM::Verbatim.new(' ', 'hi', "\n",
|
||||
' ', 'world', "\n")
|
||||
|
||||
assert_equal "\e[0m hi\n world\n\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_verbatim_big_indent
|
||||
@to.start_accepting
|
||||
|
||||
@to.indent = 2
|
||||
|
||||
@to.accept_verbatim @RM::Verbatim.new(' ', 'hi', "\n",
|
||||
' ', 'world', "\n")
|
||||
|
||||
assert_equal "\e[0m hi\n world\n\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_attributes
|
||||
assert_equal 'Dog', @to.attributes("\\Dog")
|
||||
end
|
||||
|
||||
def test_list_nested
|
||||
doc = @RM::Document.new(
|
||||
@RM::List.new(:BULLET,
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('l1'),
|
||||
@RM::List.new(:BULLET,
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('l1.1')))),
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('l2'))))
|
||||
|
||||
output = doc.accept @to
|
||||
|
||||
expected = <<-EXPECTED
|
||||
\e[0m* l1
|
||||
* l1.1
|
||||
* l2
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, output
|
||||
end
|
||||
|
||||
def test_list_verbatim # HACK overblown
|
||||
doc = @RM::Document.new(
|
||||
@RM::List.new(:BULLET,
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('list', 'stuff'),
|
||||
@RM::BlankLine.new(),
|
||||
@RM::Verbatim.new(' ', '*', ' ', 'list', "\n",
|
||||
' ', 'with', "\n",
|
||||
"\n",
|
||||
' ', 'second', "\n",
|
||||
"\n",
|
||||
' ', '1.', ' ', 'indented', "\n",
|
||||
' ', '2.', ' ', 'numbered', "\n",
|
||||
"\n",
|
||||
' ', 'third', "\n",
|
||||
"\n",
|
||||
' ', '*', ' ', 'second', "\n"))))
|
||||
|
||||
output = doc.accept @to
|
||||
|
||||
expected = <<-EXPECTED
|
||||
\e[0m* list stuff
|
||||
|
||||
* list
|
||||
with
|
||||
|
||||
second
|
||||
|
||||
1. indented
|
||||
2. numbered
|
||||
|
||||
third
|
||||
|
||||
* second
|
||||
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, output
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
443
test/rdoc/test_rdoc_markup_to_bs.rb
Normal file
443
test/rdoc/test_rdoc_markup_to_bs.rb
Normal file
|
|
@ -0,0 +1,443 @@
|
|||
require 'rubygems'
|
||||
require 'rdoc/markup/formatter_test_case'
|
||||
require 'rdoc/markup/to_bs'
|
||||
require 'minitest/autorun'
|
||||
|
||||
class TestRDocMarkupToBs < RDoc::Markup::FormatterTestCase
|
||||
|
||||
add_visitor_tests
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@to = RDoc::Markup::ToBs.new
|
||||
end
|
||||
|
||||
def accept_blank_line
|
||||
assert_equal "\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_heading
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
assert_equal "===== H\bHe\bel\bll\blo\bo\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_end_bullet
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_label
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_lalpha
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_note
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_number
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_ualpha
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_item_end_bullet
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
end
|
||||
|
||||
def accept_list_item_end_label
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
end
|
||||
|
||||
def accept_list_item_end_lalpha
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
assert_equal 'b', @to.list_index.last
|
||||
end
|
||||
|
||||
def accept_list_item_end_note
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
end
|
||||
|
||||
def accept_list_item_end_number
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
assert_equal 2, @to.list_index.last
|
||||
end
|
||||
|
||||
def accept_list_item_end_ualpha
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
assert_equal 'B', @to.list_index.last
|
||||
end
|
||||
|
||||
def accept_list_item_start_bullet
|
||||
assert_equal [''], @to.res
|
||||
assert_equal '* ', @to.prefix
|
||||
end
|
||||
|
||||
def accept_list_item_start_label
|
||||
assert_equal [''], @to.res
|
||||
assert_equal "cat:\n ", @to.prefix
|
||||
|
||||
assert_equal 2, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_lalpha
|
||||
assert_equal [''], @to.res
|
||||
assert_equal 'a. ', @to.prefix
|
||||
|
||||
assert_equal 'a', @to.list_index.last
|
||||
assert_equal 3, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_note
|
||||
assert_equal [''], @to.res
|
||||
assert_equal "cat:\n ", @to.prefix
|
||||
|
||||
assert_equal 2, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_number
|
||||
assert_equal [''], @to.res
|
||||
assert_equal '1. ', @to.prefix
|
||||
|
||||
assert_equal 1, @to.list_index.last
|
||||
assert_equal 3, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_ualpha
|
||||
assert_equal [''], @to.res
|
||||
assert_equal 'A. ', @to.prefix
|
||||
|
||||
assert_equal 'A', @to.list_index.last
|
||||
assert_equal 3, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_start_bullet
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal [nil], @to.list_index
|
||||
assert_equal [:BULLET], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_label
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal [nil], @to.list_index
|
||||
assert_equal [:LABEL], @to.list_type
|
||||
assert_equal [2], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_lalpha
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal ['a'], @to.list_index
|
||||
assert_equal [:LALPHA], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_note
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal [nil], @to.list_index
|
||||
assert_equal [:NOTE], @to.list_type
|
||||
assert_equal [2], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_number
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal [1], @to.list_index
|
||||
assert_equal [:NUMBER], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_ualpha
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal ['A'], @to.list_index
|
||||
assert_equal [:UALPHA], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_paragraph
|
||||
assert_equal "hi\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_rule
|
||||
assert_equal "#{'-' * 78}\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_verbatim # FormatterTestCase doesn't set indent for ToAnsi
|
||||
assert_equal " hi\n world\n\n", @to.res.join
|
||||
end
|
||||
|
||||
def end_accepting
|
||||
assert_equal "hi", @to.end_accepting
|
||||
end
|
||||
|
||||
def start_accepting
|
||||
assert_equal 0, @to.indent
|
||||
assert_equal [''], @to.res
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def test_accept_heading_1
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(1, 'Hello')
|
||||
|
||||
assert_equal "= H\bHe\bel\bll\blo\bo\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_2
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(2, 'Hello')
|
||||
|
||||
assert_equal "== H\bHe\bel\bll\blo\bo\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_3
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(3, 'Hello')
|
||||
|
||||
assert_equal "=== H\bHe\bel\bll\blo\bo\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_4
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(4, 'Hello')
|
||||
|
||||
assert_equal "==== H\bHe\bel\bll\blo\bo\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_indent
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
@to.accept_heading @RM::Heading.new(1, 'Hello')
|
||||
|
||||
assert_equal " = H\bHe\bel\bll\blo\bo\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_b
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
@to.accept_heading @RM::Heading.new(1, '*Hello*')
|
||||
|
||||
assert_equal " = H\bHe\bel\bll\blo\bo\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_suppressed_crossref
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(1, '\\Hello')
|
||||
|
||||
assert_equal "= H\bHe\bel\bll\blo\bo\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_list_item_start_note_2
|
||||
list = @RM::List.new(:NOTE,
|
||||
@RM::ListItem.new('<tt>teletype</tt>',
|
||||
@RM::Paragraph.new('teletype description')))
|
||||
|
||||
@to.start_accepting
|
||||
|
||||
list.accept @to
|
||||
|
||||
expected = "teletype:\n teletype description\n\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_b
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('reg <b>bold words</b> reg')
|
||||
|
||||
expected = "reg b\bbo\bol\bld\bd \b w\bwo\bor\brd\bds\bs reg\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_i
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('reg <em>italic words</em> reg')
|
||||
|
||||
expected = "reg _\bi_\bt_\ba_\bl_\bi_\bc_\b _\bw_\bo_\br_\bd_\bs reg\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_indent
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
@to.accept_paragraph @RM::Paragraph.new('words ' * 30)
|
||||
|
||||
expected = <<-EXPECTED
|
||||
words words words words words words words words words words words words
|
||||
words words words words words words words words words words words words
|
||||
words words words words words words
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_plus
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('regular +teletype+ regular')
|
||||
|
||||
expected = "regular teletype regular\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_star
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('regular *bold* regular')
|
||||
|
||||
expected = "regular b\bbo\bol\bld\bd regular\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_underscore
|
||||
skip "No String#chars, upgrade your ruby" unless ''.respond_to? :chars
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('regular _italic_ regular')
|
||||
|
||||
expected = "regular _\bi_\bt_\ba_\bl_\bi_\bc regular\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_wrap
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('words ' * 30)
|
||||
|
||||
expected = <<-EXPECTED
|
||||
words words words words words words words words words words words words words
|
||||
words words words words words words words words words words words words words
|
||||
words words words words
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_rule_indent
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
|
||||
@to.accept_rule @RM::Rule.new(1)
|
||||
|
||||
assert_equal " #{'-' * 75}\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_verbatim_indent
|
||||
@to.start_accepting
|
||||
|
||||
@to.indent = 2
|
||||
|
||||
@to.accept_verbatim @RM::Verbatim.new(' ', 'hi', "\n",
|
||||
' ', 'world', "\n")
|
||||
|
||||
assert_equal " hi\n world\n\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_verbatim_big_indent
|
||||
@to.start_accepting
|
||||
|
||||
@to.indent = 2
|
||||
|
||||
@to.accept_verbatim @RM::Verbatim.new(' ', 'hi', "\n",
|
||||
' ', 'world', "\n")
|
||||
|
||||
assert_equal " hi\n world\n\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_attributes
|
||||
assert_equal 'Dog', @to.attributes("\\Dog")
|
||||
end
|
||||
|
||||
def test_list_nested
|
||||
doc = @RM::Document.new(
|
||||
@RM::List.new(:BULLET,
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('l1'),
|
||||
@RM::List.new(:BULLET,
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('l1.1')))),
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('l2'))))
|
||||
|
||||
output = doc.accept @to
|
||||
|
||||
expected = <<-EXPECTED
|
||||
* l1
|
||||
* l1.1
|
||||
* l2
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, output
|
||||
end
|
||||
|
||||
def test_list_verbatim # HACK overblown
|
||||
doc = @RM::Document.new(
|
||||
@RM::List.new(:BULLET,
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('list', 'stuff'),
|
||||
@RM::BlankLine.new(),
|
||||
@RM::Verbatim.new(' ', '*', ' ', 'list', "\n",
|
||||
' ', 'with', "\n",
|
||||
"\n",
|
||||
' ', 'second', "\n",
|
||||
"\n",
|
||||
' ', '1.', ' ', 'indented', "\n",
|
||||
' ', '2.', ' ', 'numbered', "\n",
|
||||
"\n",
|
||||
' ', 'third', "\n",
|
||||
"\n",
|
||||
' ', '*', ' ', 'second', "\n"))))
|
||||
|
||||
output = doc.accept @to
|
||||
|
||||
expected = <<-EXPECTED
|
||||
* list stuff
|
||||
|
||||
* list
|
||||
with
|
||||
|
||||
second
|
||||
|
||||
1. indented
|
||||
2. numbered
|
||||
|
||||
third
|
||||
|
||||
* second
|
||||
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, output
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
@ -1,18 +1,220 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'rdoc/markup'
|
||||
require 'rdoc/markup/formatter_test_case'
|
||||
require 'rdoc/markup/to_html'
|
||||
require 'minitest/autorun'
|
||||
|
||||
class TestRDocMarkupToHtml < MiniTest::Unit::TestCase
|
||||
class TestRDocMarkupToHtml < RDoc::Markup::FormatterTestCase
|
||||
|
||||
add_visitor_tests
|
||||
|
||||
def setup
|
||||
@am = RDoc::Markup::AttributeManager.new
|
||||
@th = RDoc::Markup::ToHtml.new
|
||||
super
|
||||
|
||||
@to = RDoc::Markup::ToHtml.new
|
||||
end
|
||||
|
||||
def test_class_gen_relative_url
|
||||
def gen(from, to)
|
||||
RDoc::Markup::ToHtml.gen_relative_url from, to
|
||||
end
|
||||
|
||||
assert_equal 'a.html', gen('a.html', 'a.html')
|
||||
assert_equal 'b.html', gen('a.html', 'b.html')
|
||||
|
||||
assert_equal 'd.html', gen('a/c.html', 'a/d.html')
|
||||
assert_equal '../a.html', gen('a/c.html', 'a.html')
|
||||
assert_equal 'a/c.html', gen('a.html', 'a/c.html')
|
||||
end
|
||||
|
||||
def accept_blank_line
|
||||
assert_empty @to.res.join
|
||||
end
|
||||
|
||||
def accept_heading
|
||||
assert_equal "<h5>Hello</h5>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_end_bullet
|
||||
assert_equal [], @to.list
|
||||
assert_equal [], @to.in_list_entry
|
||||
|
||||
assert_equal "<ul>\n</ul>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_end_label
|
||||
assert_equal [], @to.list
|
||||
assert_equal [], @to.in_list_entry
|
||||
|
||||
assert_equal "<dl>\n</dl>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_end_lalpha
|
||||
assert_equal [], @to.list
|
||||
assert_equal [], @to.in_list_entry
|
||||
|
||||
assert_equal "<ol style=\"display: lower-alpha\">\n</ol>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_end_number
|
||||
assert_equal [], @to.list
|
||||
assert_equal [], @to.in_list_entry
|
||||
|
||||
assert_equal "<ol>\n</ol>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_end_note
|
||||
assert_equal [], @to.list
|
||||
assert_equal [], @to.in_list_entry
|
||||
|
||||
assert_equal "<table>\n</table>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_end_ualpha
|
||||
assert_equal [], @to.list
|
||||
assert_equal [], @to.in_list_entry
|
||||
|
||||
assert_equal "<ol style=\"display: upper-alpha\">\n</ol>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_item_end_bullet
|
||||
assert_equal %w[</li>], @to.in_list_entry
|
||||
end
|
||||
|
||||
def accept_list_item_end_label
|
||||
assert_equal %w[</dd>], @to.in_list_entry
|
||||
end
|
||||
|
||||
def accept_list_item_end_lalpha
|
||||
assert_equal %w[</li>], @to.in_list_entry
|
||||
end
|
||||
|
||||
def accept_list_item_end_note
|
||||
assert_equal %w[</td></tr>], @to.in_list_entry
|
||||
end
|
||||
|
||||
def accept_list_item_end_number
|
||||
assert_equal %w[</li>], @to.in_list_entry
|
||||
end
|
||||
|
||||
def accept_list_item_end_ualpha
|
||||
assert_equal %w[</li>], @to.in_list_entry
|
||||
end
|
||||
|
||||
def accept_list_item_start_bullet
|
||||
assert_equal "<ul>\n<li>", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_item_start_label
|
||||
assert_equal "<dl>\n<dt>cat</dt><dd>", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_item_start_lalpha
|
||||
assert_equal "<ol style=\"display: lower-alpha\">\n<li>", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_item_start_note
|
||||
assert_equal "<table>\n<tr><td valign=\"top\">cat</td><td>", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_item_start_number
|
||||
assert_equal "<ol>\n<li>", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_item_start_ualpha
|
||||
assert_equal "<ol style=\"display: upper-alpha\">\n<li>", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_start_bullet
|
||||
assert_equal [:BULLET], @to.list
|
||||
assert_equal [false], @to.in_list_entry
|
||||
|
||||
assert_equal "<ul>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_start_label
|
||||
assert_equal [:LABEL], @to.list
|
||||
assert_equal [false], @to.in_list_entry
|
||||
|
||||
assert_equal "<dl>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_start_lalpha
|
||||
assert_equal [:LALPHA], @to.list
|
||||
assert_equal [false], @to.in_list_entry
|
||||
|
||||
assert_equal "<ol style=\"display: lower-alpha\">\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_start_note
|
||||
assert_equal [:NOTE], @to.list
|
||||
assert_equal [false], @to.in_list_entry
|
||||
|
||||
assert_equal "<table>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_start_number
|
||||
assert_equal [:NUMBER], @to.list
|
||||
assert_equal [false], @to.in_list_entry
|
||||
|
||||
assert_equal "<ol>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_start_ualpha
|
||||
assert_equal [:UALPHA], @to.list
|
||||
assert_equal [false], @to.in_list_entry
|
||||
|
||||
assert_equal "<ol style=\"display: upper-alpha\">\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_paragraph
|
||||
assert_equal "<p>\nhi\n</p>\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_rule
|
||||
assert_equal '<hr style="height: 4px"></hr>', @to.res.join
|
||||
end
|
||||
|
||||
def accept_verbatim
|
||||
assert_equal "<pre>\n hi\n world\n</pre>\n", @to.res.join
|
||||
end
|
||||
|
||||
def end_accepting
|
||||
assert_equal 'hi', @to.end_accepting
|
||||
end
|
||||
|
||||
def start_accepting
|
||||
assert_equal [], @to.res
|
||||
assert_equal [], @to.in_list_entry
|
||||
assert_equal [], @to.list
|
||||
end
|
||||
|
||||
def test_list_verbatim
|
||||
str = "* one\n verb1\n verb2\n* two\n"
|
||||
|
||||
expected = <<-EXPECTED
|
||||
<ul>
|
||||
<li><p>
|
||||
one
|
||||
</p>
|
||||
<pre>
|
||||
verb1
|
||||
verb2
|
||||
</pre>
|
||||
</li>
|
||||
<li><p>
|
||||
two
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, @m.convert(str, @to)
|
||||
end
|
||||
|
||||
def test_tt_formatting
|
||||
assert_equal "<p>\n<tt>--</tt> — <tt>cats'</tt> cats’\n</p>\n",
|
||||
util_format("<tt>--</tt> -- <tt>cats'</tt> cats'")
|
||||
|
||||
assert_equal "<p>\n<b>—</b>\n</p>\n", util_format("<b>--</b>")
|
||||
end
|
||||
|
||||
|
|
@ -28,18 +230,17 @@ class TestRDocMarkupToHtml < MiniTest::Unit::TestCase
|
|||
assert_equal "<p>\ncat’s-\n</p>\n", util_format("cat\'s-")
|
||||
end
|
||||
|
||||
def util_fragment(text)
|
||||
RDoc::Markup::Fragment.new 0, nil, nil, text
|
||||
def util_paragraph(text)
|
||||
RDoc::Markup::Paragraph.new text
|
||||
end
|
||||
|
||||
def util_format(text)
|
||||
fragment = util_fragment text
|
||||
paragraph = util_paragraph text
|
||||
|
||||
@th.start_accepting
|
||||
@th.accept_paragraph @am, fragment
|
||||
@th.end_accepting
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph paragraph
|
||||
@to.end_accepting
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
|
|||
|
|
@ -1,299 +1,159 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'rdoc/generator'
|
||||
require 'rdoc/stats'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/rdoc'
|
||||
require 'rdoc/code_objects'
|
||||
require 'rdoc/markup/to_html_crossref'
|
||||
require 'rdoc/parser/ruby'
|
||||
require File.expand_path '../xref_test_case', __FILE__
|
||||
|
||||
require 'pathname'
|
||||
class TestRDocMarkupToHtmlCrossref < XrefTestCase
|
||||
|
||||
class TestRDocMarkupToHtmlCrossref < MiniTest::Unit::TestCase
|
||||
def setup
|
||||
super
|
||||
|
||||
#
|
||||
# This method parses a source file and returns a Hash mapping
|
||||
# class names (Strings) to RDoc::Generator::Class instances
|
||||
# (classes), which can be used to create RDoc::Markup::ToHtmlCrossref
|
||||
# instances. The unit tests only test against classes starting with
|
||||
# Ref_, so this method only includes such classes in the Hash.
|
||||
#
|
||||
def create_class_hash
|
||||
# The relative gem would help here...
|
||||
# @source_file_name must be cleaned because rdoc does not deal
|
||||
# well with paths containing "." or "..".
|
||||
curr_file = Pathname.new(__FILE__)
|
||||
@source_file_name = curr_file.dirname + "rdoc_markup_to_html_crossref_reference.rb"
|
||||
@source_file_name = @source_file_name.cleanpath.to_s
|
||||
|
||||
RDoc::TopLevel.reset
|
||||
|
||||
# Reset RDoc::Generator::Method so that the method sequence number starts
|
||||
# at 1, making the method sequence numbers for the methods in the Ref_
|
||||
# predicable.
|
||||
RDoc::Generator::Method.reset
|
||||
top_level = RDoc::TopLevel.new @source_file_name
|
||||
|
||||
options = RDoc::Options.new
|
||||
options.quiet = true
|
||||
|
||||
# If this is false, then RDoc::Generator::Method will attempt to create
|
||||
# an HTML file containing the method source code when being instantiated,
|
||||
# which does not work in the context of this unit test.
|
||||
#
|
||||
# RDoc::Generator::Method needs to be refactored so that this does *not*
|
||||
# happen as part of instantiation.
|
||||
options.inline_source = true
|
||||
|
||||
stats = RDoc::Stats.new 0
|
||||
|
||||
parser = RDoc::Parser::Ruby.new(top_level,
|
||||
@source_file_name,
|
||||
IO.read(@source_file_name),
|
||||
options,
|
||||
stats)
|
||||
top_levels = []
|
||||
top_levels.push(parser.scan())
|
||||
|
||||
files, classes = RDoc::Generator::Context.build_indices(top_levels, options)
|
||||
|
||||
class_hash = {}
|
||||
classes.each do |klass|
|
||||
if(klass.name.include?("Ref_"))
|
||||
class_hash[klass.name] = klass
|
||||
end
|
||||
end
|
||||
|
||||
return class_hash
|
||||
@xref = RDoc::Markup::ToHtmlCrossref.new 'index.html', @c1, true
|
||||
end
|
||||
|
||||
#
|
||||
# This method uses xref to cross-reference String reference and
|
||||
# asserts that xref.convert(reference) is equal
|
||||
# to String expected_result.
|
||||
#
|
||||
def verify_convert(xref, reference, expected_result)
|
||||
# Everything converted in the tests will be within paragraph markup, so
|
||||
# add paragraph markup to the expected result.
|
||||
actual_expected_result = "<p>\n#{expected_result}\n</p>\n"
|
||||
|
||||
result = xref.convert(reference)
|
||||
|
||||
# RDoc::Markup::ToHtml word-wraps lines. It is tricky to predict where
|
||||
# a line will be wrapped except that it will happen on a space, so replace
|
||||
# all newlines with spaces in order to not have to worry about this.
|
||||
actual_expected_result.gsub!(/\n/, " ")
|
||||
result.gsub!(/\n/, " ")
|
||||
|
||||
begin
|
||||
assert_equal actual_expected_result, result
|
||||
rescue MiniTest::Assertion => e
|
||||
bt = caller(2)
|
||||
raise e, [e.message, *bt.grep(/\A#{Regexp.quote(__FILE__)}:/o)].join("\n"), bt
|
||||
end
|
||||
def assert_ref(path, ref)
|
||||
assert_equal "<p>\n<a href=\"#{path}\">#{ref}</a>\n</p>\n",
|
||||
@xref.convert(ref)
|
||||
end
|
||||
|
||||
#
|
||||
# This method verifies that xref generates no cross-reference link for
|
||||
# String reference.
|
||||
#
|
||||
def verify_no_crossref(xref, reference)
|
||||
if(reference[0, 1] == "\\") # Remove the markup suppression character
|
||||
expected_result = reference[1, reference.length() - 1]
|
||||
else
|
||||
expected_result = reference
|
||||
end
|
||||
|
||||
verify_convert(xref, reference, expected_result)
|
||||
def refute_ref(body, ref)
|
||||
assert_equal "<p>\n#{body}\n</p>\n", @xref.convert(ref)
|
||||
end
|
||||
|
||||
#
|
||||
# This method verifies that xref generates a cross-reference link to
|
||||
# class_name (String) for String reference.
|
||||
#
|
||||
def verify_class_crossref(xref, reference, class_name)
|
||||
class_file_name = class_name.gsub(/::/, "/")
|
||||
def test_handle_special_CROSSREF_C2
|
||||
@xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C2.html', @c2, true
|
||||
|
||||
result = "<a href=\"../classes/#{class_file_name}.html\">#{reference}</a>"
|
||||
refute_ref '#m', '#m'
|
||||
|
||||
verify_convert xref, reference, result
|
||||
assert_ref '../C2/C3.html', 'C2::C3'
|
||||
assert_ref '../C2/C3.html#M000002', 'C2::C3#m'
|
||||
assert_ref '../C2/C3/H1.html', 'C3::H1'
|
||||
assert_ref '../C4.html', 'C4'
|
||||
|
||||
# TODO there is a C3::H2 in the top-level namespace and RDoc should follow
|
||||
# constant scoping rules
|
||||
refute_ref 'C3::H2', 'C3::H2'
|
||||
refute_ref 'H1', 'H1'
|
||||
end
|
||||
|
||||
#
|
||||
# This method verifies that xref generates a cross-reference link to method
|
||||
# method_seq (String, e.g, "M000001") in class_name (String) for
|
||||
# String reference.
|
||||
#
|
||||
def verify_method_crossref(xref, reference, class_name, method_seq)
|
||||
class_file_name = class_name.gsub(/::/, "/")
|
||||
def test_handle_special_CROSSREF_C2_C3
|
||||
@xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C2/C3.html', @c2_c3, true
|
||||
|
||||
result = "<a href=\"../classes/#{class_file_name}.html##{method_seq}\">#{reference}</a>"
|
||||
assert_ref '../../C2/C3.html#M000002', '#m'
|
||||
|
||||
verify_convert xref, reference, result
|
||||
assert_ref '../../C2/C3.html', 'C3'
|
||||
assert_ref '../../C2/C3.html#M000002', 'C3#m'
|
||||
|
||||
assert_ref '../../C2/C3/H1.html', 'H1'
|
||||
assert_ref '../../C2/C3/H1.html', 'C3::H1'
|
||||
|
||||
assert_ref '../../C4.html', 'C4'
|
||||
|
||||
refute_ref 'C3::H2', 'C3::H2'
|
||||
end
|
||||
|
||||
#
|
||||
# This method verifies that xref generates a cross-reference link to
|
||||
# file_name (String) for String reference.
|
||||
#
|
||||
def verify_file_crossref(xref, reference, file_name)
|
||||
generated_document_path = Pathname.new("../files/#{file_name.gsub(/\./, '_')}.html").cleanpath.to_s
|
||||
result = "<a href=\"#{generated_document_path}\">#{reference}</a>"
|
||||
def test_handle_special_CROSSREF_C3
|
||||
@xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C3.html', @c3, true
|
||||
|
||||
verify_convert xref, reference, result
|
||||
assert_ref '../C3.html', 'C3'
|
||||
|
||||
refute_ref '#m', '#m'
|
||||
refute_ref 'C3#m', 'C3#m'
|
||||
|
||||
assert_ref '../C3/H1.html', 'H1'
|
||||
|
||||
assert_ref '../C3/H1.html', 'C3::H1'
|
||||
assert_ref '../C3/H2.html', 'C3::H2'
|
||||
|
||||
assert_ref '../C4.html', 'C4'
|
||||
end
|
||||
|
||||
#
|
||||
# This method verifies that several invariant cross-references are
|
||||
# (or are not) generated.
|
||||
#
|
||||
def verify_invariant_crossrefs(xref)
|
||||
# bogus does not exist and so no cross-reference should be generated.
|
||||
verify_no_crossref xref, "bogus"
|
||||
verify_no_crossref xref, "\\bogus"
|
||||
def test_handle_special_CROSSREF_C4
|
||||
@xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C4.html', @c4, true
|
||||
|
||||
# Ref_Class1 is in the top-level namespace, and so a cross-reference always
|
||||
# should be generated, unless markup is suppressed.
|
||||
verify_class_crossref xref, "Ref_Class1", "Ref_Class1"
|
||||
verify_no_crossref xref, "\\Ref_Class1"
|
||||
|
||||
# Ref_Class2 is in the top-level namespace, and so a cross-reference always
|
||||
# should be generated for it and for its nested classes.
|
||||
verify_class_crossref xref, "Ref_Class2", "Ref_Class2"
|
||||
verify_class_crossref xref, "Ref_Class2::Ref_Class3", "Ref_Class2::Ref_Class3"
|
||||
verify_method_crossref xref, "Ref_Class2::Ref_Class3#method", "Ref_Class2::Ref_Class3", "M000001"
|
||||
verify_method_crossref xref, "Ref_Class2::Ref_Class3#method()", "Ref_Class2::Ref_Class3", "M000001"
|
||||
verify_method_crossref xref, "Ref_Class2::Ref_Class3.method()", "Ref_Class2::Ref_Class3", "M000001"
|
||||
verify_method_crossref xref, "Ref_Class2::Ref_Class3.method(*)", "Ref_Class2::Ref_Class3", "M000001"
|
||||
verify_class_crossref xref, "Ref_Class2::Ref_Class3::Helper1", "Ref_Class2::Ref_Class3::Helper1"
|
||||
verify_method_crossref xref, "Ref_Class2::Ref_Class3::Helper1#method?", "Ref_Class2::Ref_Class3::Helper1", "M000002"
|
||||
|
||||
# The hyphen character is not a valid class/method separator character, so
|
||||
# rdoc just generates a class cross-reference (perhaps it should not
|
||||
# generate anything?).
|
||||
result = "<a href=\"../classes/Ref_Class2/Ref_Class3.html\">Ref_Class2::Ref_Class3</a>;method(*)"
|
||||
verify_convert xref, "Ref_Class2::Ref_Class3;method(*)", result
|
||||
|
||||
# There is one Ref_Class3 nested in Ref_Class2 and one defined in the
|
||||
# top-level namespace; regardless, ::Ref_Class3 (Ref_Class3 relative
|
||||
# to the top-level namespace) always should generate a link to the
|
||||
# top-level Ref_Class3 (unless of course cross-references are suppressed).
|
||||
verify_class_crossref xref, "::Ref_Class3", "Ref_Class3"
|
||||
verify_no_crossref xref, "\\::Ref_Class3"
|
||||
verify_class_crossref xref, "::Ref_Class3::Helper1", "Ref_Class3::Helper1"
|
||||
verify_class_crossref xref, "::Ref_Class3::Helper2", "Ref_Class3::Helper2"
|
||||
|
||||
#
|
||||
# Ref_Class3::Helper1 does not have method method.
|
||||
#
|
||||
verify_no_crossref xref, "::Ref_Class3::Helper1#method"
|
||||
verify_no_crossref xref, "\\::Ref_Class3::Helper1#method"
|
||||
|
||||
# References to Ref_Class2 relative to the top-level namespace always should
|
||||
# generate links to Ref_Class2.
|
||||
verify_method_crossref xref, "::Ref_Class2::Ref_Class3#method", "Ref_Class2::Ref_Class3", "M000001"
|
||||
verify_method_crossref xref, "::Ref_Class2::Ref_Class3#method()", "Ref_Class2::Ref_Class3", "M000001"
|
||||
verify_method_crossref xref, "::Ref_Class2::Ref_Class3#method(*)", "Ref_Class2::Ref_Class3", "M000001"
|
||||
verify_class_crossref xref, "::Ref_Class2::Ref_Class3::Helper1", "Ref_Class2::Ref_Class3::Helper1"
|
||||
verify_no_crossref xref, "\\::Ref_Class2::Ref_Class3#method(*)"
|
||||
|
||||
# Suppressing cross-references always should suppress the generation of
|
||||
# links.
|
||||
verify_no_crossref xref, "\\#method"
|
||||
verify_no_crossref xref, "\\#method()"
|
||||
verify_no_crossref xref, "\\#method(*)"
|
||||
|
||||
# Links never should be generated for words solely consisting of lowercase
|
||||
# letters, because too many links would get generated by mistake (i.e., the
|
||||
# word "new" always would be a link).
|
||||
verify_no_crossref xref, "method"
|
||||
|
||||
# A link always should be generated for a file name.
|
||||
verify_file_crossref xref, @source_file_name, @source_file_name
|
||||
|
||||
# References should be generated correctly for a class scoped within
|
||||
# a class of the same name.
|
||||
verify_class_crossref xref, "Ref_Class4::Ref_Class4", "Ref_Class4::Ref_Class4"
|
||||
# C4 ref inside a C4 containing a C4 should resolve to the contained class
|
||||
assert_ref '../C4/C4.html', 'C4'
|
||||
end
|
||||
|
||||
def test_handle_special_CROSSREF_no_underscore
|
||||
class_hash = create_class_hash
|
||||
def test_handle_special_CROSSREF_C4_C4
|
||||
@xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C4/C4.html', @c4_c4, true
|
||||
|
||||
# Note that we instruct the ToHtmlCrossref instance to show hashes so that
|
||||
# an exception won't have to be made for words starting with a '#'.
|
||||
# I'm also not convinced that the current behavior of the rdoc code
|
||||
# is correct since, without this, it strips the leading # from all
|
||||
# words, whether or not they end up as cross-references.
|
||||
#
|
||||
# After the behavior has been sorted out, this can be changed.
|
||||
#
|
||||
# Create a variety of RDoc::Markup::ToHtmlCrossref instances, for
|
||||
# different classes, and test the cross-references generated by
|
||||
# each.
|
||||
klass = class_hash["Ref_Class1"]
|
||||
xref = RDoc::Markup::ToHtmlCrossref.new 'from_path', klass, true
|
||||
verify_invariant_crossrefs xref
|
||||
verify_class_crossref xref, "Ref_Class3", "Ref_Class3"
|
||||
verify_no_crossref xref, "Ref_Class3#method"
|
||||
verify_no_crossref xref, "#method"
|
||||
verify_class_crossref xref, "Ref_Class3::Helper1", "Ref_Class3::Helper1"
|
||||
verify_class_crossref xref, "Ref_Class3::Helper2", "Ref_Class3::Helper2"
|
||||
verify_no_crossref xref, "Helper1"
|
||||
verify_class_crossref xref, "Ref_Class4", "Ref_Class4"
|
||||
|
||||
klass = class_hash["Ref_Class2"]
|
||||
xref = RDoc::Markup::ToHtmlCrossref.new 'from_path', klass, true
|
||||
verify_invariant_crossrefs xref
|
||||
verify_class_crossref xref, "Ref_Class3", "Ref_Class2::Ref_Class3"
|
||||
verify_method_crossref xref, "Ref_Class3#method", "Ref_Class2::Ref_Class3", "M000001"
|
||||
verify_no_crossref xref, "#method"
|
||||
verify_class_crossref xref, "Ref_Class3::Helper1", "Ref_Class2::Ref_Class3::Helper1"
|
||||
verify_class_crossref xref, "Ref_Class4", "Ref_Class4"
|
||||
|
||||
# This one possibly is an rdoc bug...
|
||||
# Ref_Class2 has a nested Ref_Class3, but
|
||||
# Ref_Class2::Ref_Class3::Helper2 does not exist.
|
||||
# On the other hand, there is a Ref_Class3::Helper2
|
||||
# in the top-level namespace... Should rdoc stop
|
||||
# looking if it finds one class match?
|
||||
verify_no_crossref xref, "Ref_Class3::Helper2"
|
||||
verify_no_crossref xref, "Helper1"
|
||||
|
||||
klass = class_hash["Ref_Class2::Ref_Class3"]
|
||||
xref = RDoc::Markup::ToHtmlCrossref.new 'from_path', klass, true
|
||||
verify_invariant_crossrefs xref
|
||||
verify_class_crossref xref, "Ref_Class3", "Ref_Class2::Ref_Class3"
|
||||
verify_method_crossref xref, "Ref_Class3#method", "Ref_Class2::Ref_Class3", "M000001"
|
||||
verify_method_crossref xref, "#method", "Ref_Class2::Ref_Class3", "M000001"
|
||||
verify_class_crossref xref, "Ref_Class3::Helper1", "Ref_Class2::Ref_Class3::Helper1"
|
||||
verify_no_crossref xref, "Ref_Class3::Helper2"
|
||||
verify_class_crossref xref, "Helper1", "Ref_Class2::Ref_Class3::Helper1"
|
||||
verify_class_crossref xref, "Ref_Class4", "Ref_Class4"
|
||||
|
||||
klass = class_hash["Ref_Class3"]
|
||||
xref = RDoc::Markup::ToHtmlCrossref.new 'from_path', klass, true
|
||||
verify_invariant_crossrefs xref
|
||||
verify_class_crossref xref, "Ref_Class3", "Ref_Class3"
|
||||
verify_no_crossref xref, "Ref_Class3#method"
|
||||
verify_no_crossref xref, "#method"
|
||||
verify_class_crossref xref, "Ref_Class3::Helper1", "Ref_Class3::Helper1"
|
||||
verify_class_crossref xref, "Ref_Class3::Helper2", "Ref_Class3::Helper2"
|
||||
verify_class_crossref xref, "Helper1", "Ref_Class3::Helper1"
|
||||
verify_class_crossref xref, "Ref_Class4", "Ref_Class4"
|
||||
|
||||
klass = class_hash["Ref_Class4"]
|
||||
xref = RDoc::Markup::ToHtmlCrossref.new 'from_path', klass, true
|
||||
verify_invariant_crossrefs xref
|
||||
# A Ref_Class4 reference inside a Ref_Class4 class containing a
|
||||
# Ref_Class4 class should resolve to the contained class.
|
||||
verify_class_crossref xref, "Ref_Class4", "Ref_Class4::Ref_Class4"
|
||||
|
||||
klass = class_hash["Ref_Class4::Ref_Class4"]
|
||||
xref = RDoc::Markup::ToHtmlCrossref.new 'from_path', klass, true
|
||||
verify_invariant_crossrefs xref
|
||||
# A Ref_Class4 reference inside a Ref_Class4 class contained within
|
||||
# a Ref_Class4 class should resolve to the inner Ref_Class4 class.
|
||||
verify_class_crossref xref, "Ref_Class4", "Ref_Class4::Ref_Class4"
|
||||
# A C4 reference inside a C4 class contained within a C4 class should
|
||||
# resolve to the inner C4 class.
|
||||
assert_ref '../../C4/C4.html', 'C4'
|
||||
end
|
||||
|
||||
def test_handle_special_CROSSREF_class
|
||||
assert_ref 'C1.html', 'C1'
|
||||
refute_ref 'H1', 'H1'
|
||||
|
||||
assert_ref 'C2.html', 'C2'
|
||||
assert_ref 'C2/C3.html', 'C2::C3'
|
||||
assert_ref 'C2/C3/H1.html', 'C2::C3::H1'
|
||||
|
||||
assert_ref 'C3.html', '::C3'
|
||||
assert_ref 'C3/H1.html', '::C3::H1'
|
||||
|
||||
assert_ref 'C4/C4.html', 'C4::C4'
|
||||
end
|
||||
|
||||
def test_handle_special_CROSSREF_file
|
||||
assert_ref 'xref_data_rb.html', 'xref_data.rb'
|
||||
end
|
||||
|
||||
def test_handle_special_CROSSREF_method
|
||||
refute_ref 'm', 'm'
|
||||
assert_ref 'C1.html#M000000', '#m'
|
||||
|
||||
assert_ref 'C1.html#M000000', 'C1#m'
|
||||
assert_ref 'C1.html#M000000', 'C1#m()'
|
||||
assert_ref 'C1.html#M000000', 'C1#m(*)'
|
||||
|
||||
assert_ref 'C1.html#M000000', 'C1.m'
|
||||
assert_ref 'C1.html#M000000', 'C1.m()'
|
||||
assert_ref 'C1.html#M000000', 'C1.m(*)'
|
||||
|
||||
# HACK should this work
|
||||
#assert_ref 'classes/C1.html#M000001', 'C1::m'
|
||||
#assert_ref 'classes/C1.html#M000001', 'C1::m()'
|
||||
#assert_ref 'classes/C1.html#M000001', 'C1::m(*)'
|
||||
|
||||
assert_ref 'C2/C3.html#M000002', 'C2::C3#m'
|
||||
|
||||
assert_ref 'C2/C3.html#M000002', 'C2::C3.m'
|
||||
|
||||
assert_ref 'C2/C3/H1.html#M000003', 'C2::C3::H1#m?'
|
||||
|
||||
assert_ref 'C2/C3.html#M000002', '::C2::C3#m'
|
||||
assert_ref 'C2/C3.html#M000002', '::C2::C3#m()'
|
||||
assert_ref 'C2/C3.html#M000002', '::C2::C3#m(*)'
|
||||
end
|
||||
|
||||
def test_handle_special_CROSSREF_no_ref
|
||||
assert_equal '', @xref.convert('')
|
||||
|
||||
refute_ref 'bogus', 'bogus'
|
||||
refute_ref 'bogus', '\bogus'
|
||||
refute_ref '\bogus', '\\\bogus'
|
||||
|
||||
refute_ref '#n', '\#n'
|
||||
refute_ref '#n()', '\#n()'
|
||||
refute_ref '#n(*)', '\#n(*)'
|
||||
|
||||
refute_ref 'C1', '\C1'
|
||||
refute_ref '::C3', '\::C3'
|
||||
|
||||
refute_ref '::C3::H1#n', '::C3::H1#n'
|
||||
refute_ref '::C3::H1#n(*)', '::C3::H1#n(*)'
|
||||
refute_ref '::C3::H1#n', '\::C3::H1#n'
|
||||
end
|
||||
|
||||
def test_handle_special_CROSSREF_special
|
||||
assert_equal "<p>\n<a href=\"C2/C3.html\">C2::C3</a>;method(*)\n</p>\n",
|
||||
@xref.convert('C2::C3;method(*)')
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
|
|||
426
test/rdoc/test_rdoc_markup_to_rdoc.rb
Normal file
426
test/rdoc/test_rdoc_markup_to_rdoc.rb
Normal file
|
|
@ -0,0 +1,426 @@
|
|||
require 'rubygems'
|
||||
require 'rdoc/markup/formatter_test_case'
|
||||
require 'rdoc/markup/to_rdoc'
|
||||
require 'minitest/autorun'
|
||||
|
||||
class TestRDocMarkupToRdoc < RDoc::Markup::FormatterTestCase
|
||||
|
||||
add_visitor_tests
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@to = RDoc::Markup::ToRdoc.new
|
||||
end
|
||||
|
||||
def accept_blank_line
|
||||
assert_equal "\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_heading
|
||||
assert_equal "===== Hello\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_list_end_bullet
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_label
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_lalpha
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_note
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_number
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_end_ualpha
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_item_end_bullet
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
end
|
||||
|
||||
def accept_list_item_end_label
|
||||
assert_equal "\n", @to.res.join
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
end
|
||||
|
||||
def accept_list_item_end_lalpha
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
assert_equal 'b', @to.list_index.last
|
||||
end
|
||||
|
||||
def accept_list_item_end_note
|
||||
assert_equal "\n", @to.res.join
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
end
|
||||
|
||||
def accept_list_item_end_number
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
assert_equal 2, @to.list_index.last
|
||||
end
|
||||
|
||||
def accept_list_item_end_ualpha
|
||||
assert_equal 0, @to.indent, 'indent'
|
||||
assert_equal 'B', @to.list_index.last
|
||||
end
|
||||
|
||||
def accept_list_item_start_bullet
|
||||
assert_equal [""], @to.res
|
||||
assert_equal '* ', @to.prefix
|
||||
end
|
||||
|
||||
def accept_list_item_start_label
|
||||
assert_equal [""], @to.res
|
||||
assert_equal "cat:\n ", @to.prefix
|
||||
|
||||
assert_equal 2, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_lalpha
|
||||
assert_equal [""], @to.res
|
||||
assert_equal 'a. ', @to.prefix
|
||||
|
||||
assert_equal 'a', @to.list_index.last
|
||||
assert_equal 3, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_note
|
||||
assert_equal [""], @to.res
|
||||
assert_equal "cat:\n ", @to.prefix
|
||||
|
||||
assert_equal 2, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_number
|
||||
assert_equal [""], @to.res
|
||||
assert_equal '1. ', @to.prefix
|
||||
|
||||
assert_equal 1, @to.list_index.last
|
||||
assert_equal 3, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_item_start_ualpha
|
||||
assert_equal [""], @to.res
|
||||
assert_equal 'A. ', @to.prefix
|
||||
|
||||
assert_equal 'A', @to.list_index.last
|
||||
assert_equal 3, @to.indent
|
||||
end
|
||||
|
||||
def accept_list_start_bullet
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal [nil], @to.list_index
|
||||
assert_equal [:BULLET], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_label
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal [nil], @to.list_index
|
||||
assert_equal [:LABEL], @to.list_type
|
||||
assert_equal [2], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_lalpha
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal ['a'], @to.list_index
|
||||
assert_equal [:LALPHA], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_note
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal [nil], @to.list_index
|
||||
assert_equal [:NOTE], @to.list_type
|
||||
assert_equal [2], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_number
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal [1], @to.list_index
|
||||
assert_equal [:NUMBER], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_list_start_ualpha
|
||||
assert_equal "", @to.res.join
|
||||
assert_equal ['A'], @to.list_index
|
||||
assert_equal [:UALPHA], @to.list_type
|
||||
assert_equal [1], @to.list_width
|
||||
end
|
||||
|
||||
def accept_paragraph
|
||||
assert_equal "hi\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_rule
|
||||
assert_equal "#{'-' * 78}\n", @to.res.join
|
||||
end
|
||||
|
||||
def accept_verbatim # FormatterTestCase doesn't set indent for ToAnsi
|
||||
assert_equal " hi\n world\n\n", @to.res.join
|
||||
end
|
||||
|
||||
def end_accepting
|
||||
assert_equal "hi", @to.end_accepting
|
||||
end
|
||||
|
||||
def start_accepting
|
||||
assert_equal 0, @to.indent
|
||||
assert_equal [""], @to.res
|
||||
assert_empty @to.list_index
|
||||
assert_empty @to.list_type
|
||||
assert_empty @to.list_width
|
||||
end
|
||||
|
||||
def test_accept_heading_1
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(1, 'Hello')
|
||||
|
||||
assert_equal "= Hello\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_2
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(2, 'Hello')
|
||||
|
||||
assert_equal "== Hello\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_3
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(3, 'Hello')
|
||||
|
||||
assert_equal "=== Hello\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_4
|
||||
@to.start_accepting
|
||||
@to.accept_heading @RM::Heading.new(4, 'Hello')
|
||||
|
||||
assert_equal "==== Hello\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_indent
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
@to.accept_heading @RM::Heading.new(1, 'Hello')
|
||||
|
||||
assert_equal " = Hello\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_heading_b
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
@to.accept_heading @RM::Heading.new(1, '*Hello*')
|
||||
|
||||
assert_equal " = <b>Hello</b>\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_list_item_start_note_2
|
||||
list = @RM::List.new(:NOTE,
|
||||
@RM::ListItem.new('<tt>teletype</tt>',
|
||||
@RM::Paragraph.new('teletype description')))
|
||||
|
||||
@to.start_accepting
|
||||
|
||||
list.accept @to
|
||||
|
||||
expected = "<tt>teletype</tt>:\n teletype description\n\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_b
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('reg <b>bold words</b> reg')
|
||||
|
||||
expected = "reg <b>bold words</b> reg\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_i
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('reg <em>italic words</em> reg')
|
||||
|
||||
expected = "reg <em>italic words</em> reg\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_indent
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
@to.accept_paragraph @RM::Paragraph.new('words ' * 30)
|
||||
|
||||
expected = <<-EXPECTED
|
||||
words words words words words words words words words words words words
|
||||
words words words words words words words words words words words words
|
||||
words words words words words words
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_plus
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('regular +teletype+ regular')
|
||||
|
||||
expected = "regular <tt>teletype</tt> regular\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_star
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('regular *bold* regular')
|
||||
|
||||
expected = "regular <b>bold</b> regular\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_underscore
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('regular _italic_ regular')
|
||||
|
||||
expected = "regular <em>italic</em> regular\n"
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_paragraph_wrap
|
||||
@to.start_accepting
|
||||
@to.accept_paragraph @RM::Paragraph.new('words ' * 30)
|
||||
|
||||
expected = <<-EXPECTED
|
||||
words words words words words words words words words words words words words
|
||||
words words words words words words words words words words words words words
|
||||
words words words words
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_rule_indent
|
||||
@to.start_accepting
|
||||
@to.indent = 3
|
||||
|
||||
@to.accept_rule @RM::Rule.new(1)
|
||||
|
||||
assert_equal " #{'-' * 75}\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_verbatim_indent
|
||||
@to.start_accepting
|
||||
|
||||
@to.indent = 2
|
||||
|
||||
@to.accept_verbatim @RM::Verbatim.new(' ', 'hi', "\n",
|
||||
' ', 'world', "\n")
|
||||
|
||||
assert_equal " hi\n world\n\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_accept_verbatim_big_indent
|
||||
@to.start_accepting
|
||||
|
||||
@to.indent = 2
|
||||
|
||||
@to.accept_verbatim @RM::Verbatim.new(' ', 'hi', "\n",
|
||||
' ', 'world', "\n")
|
||||
|
||||
assert_equal " hi\n world\n\n", @to.end_accepting
|
||||
end
|
||||
|
||||
def test_attributes
|
||||
assert_equal 'Dog', @to.attributes("\\Dog")
|
||||
end
|
||||
|
||||
def test_list_nested
|
||||
doc = @RM::Document.new(
|
||||
@RM::List.new(:BULLET,
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('l1'),
|
||||
@RM::List.new(:BULLET,
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('l1.1')))),
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('l2'))))
|
||||
|
||||
output = doc.accept @to
|
||||
|
||||
expected = <<-EXPECTED
|
||||
* l1
|
||||
* l1.1
|
||||
* l2
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, output
|
||||
end
|
||||
|
||||
def test_list_verbatim # HACK overblown
|
||||
doc = @RM::Document.new(
|
||||
@RM::List.new(:BULLET,
|
||||
@RM::ListItem.new(nil,
|
||||
@RM::Paragraph.new('list', 'stuff'),
|
||||
@RM::BlankLine.new(),
|
||||
@RM::Verbatim.new(' ', '*', ' ', 'list', "\n",
|
||||
' ', 'with', "\n",
|
||||
"\n",
|
||||
' ', 'second', "\n",
|
||||
"\n",
|
||||
' ', '1.', ' ', 'indented', "\n",
|
||||
' ', '2.', ' ', 'numbered', "\n",
|
||||
"\n",
|
||||
' ', 'third', "\n",
|
||||
"\n",
|
||||
' ', '*', ' ', 'second', "\n"))))
|
||||
|
||||
output = doc.accept @to
|
||||
|
||||
expected = <<-EXPECTED
|
||||
* list stuff
|
||||
|
||||
* list
|
||||
with
|
||||
|
||||
second
|
||||
|
||||
1. indented
|
||||
2. numbered
|
||||
|
||||
third
|
||||
|
||||
* second
|
||||
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, output
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
17
test/rdoc/test_rdoc_normal_class.rb
Normal file
17
test/rdoc/test_rdoc_normal_class.rb
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
require File.expand_path '../xref_test_case', __FILE__
|
||||
|
||||
class TestRDocNormalClass < XrefTestCase
|
||||
|
||||
def test_ancestors_class
|
||||
top_level = RDoc::TopLevel.new 'file.rb'
|
||||
klass = top_level.add_class RDoc::NormalClass, 'Klass'
|
||||
incl = RDoc::Include.new 'Incl', ''
|
||||
|
||||
sub_klass = klass.add_class RDoc::NormalClass, 'SubClass', 'Klass'
|
||||
sub_klass.add_include incl
|
||||
|
||||
assert_equal [incl, klass], sub_klass.ancestors
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
26
test/rdoc/test_rdoc_normal_module.rb
Normal file
26
test/rdoc/test_rdoc_normal_module.rb
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
require File.expand_path '../xref_test_case', __FILE__
|
||||
|
||||
class TestRDocNormalModule < XrefTestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@mod = RDoc::NormalModule.new 'Mod'
|
||||
end
|
||||
|
||||
def test_ancestors_module
|
||||
top_level = RDoc::TopLevel.new 'file.rb'
|
||||
mod = top_level.add_module RDoc::NormalModule, 'Mod'
|
||||
incl = RDoc::Include.new 'Incl', ''
|
||||
|
||||
mod.add_include incl
|
||||
|
||||
assert_equal [incl], mod.ancestors
|
||||
end
|
||||
|
||||
def test_module_eh
|
||||
assert @mod.module?
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
41
test/rdoc/test_rdoc_options.rb
Normal file
41
test/rdoc/test_rdoc_options.rb
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/options'
|
||||
|
||||
class TestRDocOptions < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@options = RDoc::Options.new
|
||||
end
|
||||
|
||||
def test_parse_ignore_invalid
|
||||
out, err = capture_io do
|
||||
@options.parse %w[--ignore-invalid --bogus]
|
||||
end
|
||||
|
||||
refute_match %r%^Usage: %, err
|
||||
assert_match %r%^invalid option: --bogus%, err
|
||||
end
|
||||
|
||||
def test_parse_ignore_invalid_default
|
||||
out, err = capture_io do
|
||||
@options.parse %w[--bogus]
|
||||
end
|
||||
|
||||
refute_match %r%^Usage: %, err
|
||||
assert_match %r%^invalid option: --bogus%, err
|
||||
end
|
||||
|
||||
def test_parse_ignore_invalid_no
|
||||
out, err = capture_io do
|
||||
assert_raises SystemExit do
|
||||
@options.parse %w[--no-ignore-invalid --bogus]
|
||||
end
|
||||
end
|
||||
|
||||
assert_match %r%^Usage: %, err
|
||||
assert_match %r%^invalid option: --bogus%, err
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
@ -1,25 +1,78 @@
|
|||
require 'rubygems'
|
||||
require 'test/unit'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/parser'
|
||||
require 'rdoc/parser/ruby'
|
||||
require 'tmpdir'
|
||||
|
||||
class TestRDocParser < Test::Unit::TestCase
|
||||
def test_can_parse
|
||||
assert_equal(RDoc::Parser.can_parse(__FILE__), RDoc::Parser::Ruby)
|
||||
class TestRDocParser < MiniTest::Unit::TestCase
|
||||
|
||||
readme_file_name = File.join(File.dirname(__FILE__), "..", "README.txt")
|
||||
def setup
|
||||
@RP = RDoc::Parser
|
||||
@binary_dat = File.expand_path '../binary.dat', __FILE__
|
||||
end
|
||||
|
||||
unless File.exist? readme_file_name then # HACK for tests in trunk :/
|
||||
readme_file_name = File.join File.dirname(__FILE__), '..', '..', 'README'
|
||||
def test_class_binary_eh_erb
|
||||
erb = File.join Dir.tmpdir, "test_rdoc_parser_#{$$}.erb"
|
||||
open erb, 'wb' do |io|
|
||||
io.write 'blah blah <%= stuff %> <% more stuff %>'
|
||||
end
|
||||
|
||||
assert_equal(RDoc::Parser.can_parse(readme_file_name), RDoc::Parser::Simple)
|
||||
assert @RP.binary?(erb)
|
||||
|
||||
binary_file_name = File.join(File.dirname(__FILE__), "binary.dat")
|
||||
assert_nil(RDoc::Parser.can_parse(binary_file_name))
|
||||
empty_file_name = File.join(File.dirname(__FILE__), "empty.dat")
|
||||
assert_not_nil(RDoc::Parser.can_parse(empty_file_name))
|
||||
erb_rb = File.join Dir.tmpdir, "test_rdoc_parser_#{$$}.erb.rb"
|
||||
open erb_rb, 'wb' do |io|
|
||||
io.write 'blah blah <%= stuff %>'
|
||||
end
|
||||
|
||||
refute @RP.binary?(erb_rb)
|
||||
ensure
|
||||
File.unlink erb
|
||||
File.unlink erb_rb if erb_rb
|
||||
end
|
||||
|
||||
def test_class_binary_eh_marshal
|
||||
marshal = File.join Dir.tmpdir, "test_rdoc_parser_#{$$}.marshal"
|
||||
open marshal, 'wb' do |io|
|
||||
io.write Marshal.dump('')
|
||||
io.write 'lots of text ' * 500
|
||||
end
|
||||
|
||||
assert @RP.binary?(marshal)
|
||||
ensure
|
||||
File.unlink marshal
|
||||
end
|
||||
|
||||
def test_class_can_parse
|
||||
assert_equal @RP.can_parse(__FILE__), @RP::Ruby
|
||||
|
||||
readme_file_name = File.expand_path '../test.txt', __FILE__
|
||||
|
||||
assert_equal @RP::Simple, @RP.can_parse(readme_file_name)
|
||||
|
||||
assert_nil @RP.can_parse(@binary_dat)
|
||||
|
||||
jtest_file_name = File.expand_path '../test.ja.txt', __FILE__
|
||||
assert_equal @RP::Simple, @RP.can_parse(jtest_file_name)
|
||||
|
||||
jtest_rdoc_file_name = File.expand_path '../test.ja.rdoc', __FILE__
|
||||
assert_equal @RP::Simple, @RP.can_parse(jtest_rdoc_file_name)
|
||||
end
|
||||
|
||||
##
|
||||
# Selenium hides a .jar file using a .txt extension.
|
||||
|
||||
def test_class_can_parse_zip
|
||||
hidden_zip = File.expand_path '../hidden.zip.txt', __FILE__
|
||||
assert_nil @RP.can_parse(hidden_zip)
|
||||
end
|
||||
|
||||
def test_class_for_binary
|
||||
rp = @RP.dup
|
||||
|
||||
def rp.can_parse(*args) nil end
|
||||
|
||||
assert_nil @RP.for(nil, @binary_dat, nil, nil, nil)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@ class TestRDocParserC < MiniTest::Unit::TestCase
|
|||
@fn = filename
|
||||
@options = RDoc::Options.new
|
||||
@stats = RDoc::Stats.new 0
|
||||
|
||||
RDoc::Parser::C.reset
|
||||
RDoc::TopLevel.reset
|
||||
end
|
||||
|
||||
def teardown
|
||||
|
|
@ -32,11 +35,25 @@ class TestRDocParserC < MiniTest::Unit::TestCase
|
|||
/* Document-class: Foo
|
||||
* this is the Foo boot class
|
||||
*/
|
||||
VALUE cFoo = boot_defclass("Foo", rb_cObject);
|
||||
EOF
|
||||
|
||||
klass = util_get_class content, 'cFoo'
|
||||
assert_equal "this is the Foo boot class", klass.comment
|
||||
assert_equal 'Object', klass.superclass
|
||||
end
|
||||
|
||||
def test_do_classes_boot_class_nil
|
||||
content = <<-EOF
|
||||
/* Document-class: Foo
|
||||
* this is the Foo boot class
|
||||
*/
|
||||
VALUE cFoo = boot_defclass("Foo", 0);
|
||||
EOF
|
||||
|
||||
klass = util_get_class content, 'cFoo'
|
||||
assert_equal " this is the Foo boot class\n ", klass.comment
|
||||
assert_equal "this is the Foo boot class", klass.comment
|
||||
assert_equal nil, klass.superclass
|
||||
end
|
||||
|
||||
def test_do_classes_class
|
||||
|
|
@ -48,7 +65,7 @@ VALUE cFoo = rb_define_class("Foo", rb_cObject);
|
|||
EOF
|
||||
|
||||
klass = util_get_class content, 'cFoo'
|
||||
assert_equal " this is the Foo class\n ", klass.comment
|
||||
assert_equal "this is the Foo class", klass.comment
|
||||
end
|
||||
|
||||
def test_do_classes_class_under
|
||||
|
|
@ -60,7 +77,7 @@ VALUE cFoo = rb_define_class_under(rb_mKernel, "Foo", rb_cObject);
|
|||
EOF
|
||||
|
||||
klass = util_get_class content, 'cFoo'
|
||||
assert_equal " this is the Foo class under Kernel\n ", klass.comment
|
||||
assert_equal "this is the Foo class under Kernel", klass.comment
|
||||
end
|
||||
|
||||
def test_do_classes_module
|
||||
|
|
@ -72,7 +89,7 @@ VALUE mFoo = rb_define_module("Foo");
|
|||
EOF
|
||||
|
||||
klass = util_get_class content, 'mFoo'
|
||||
assert_equal " this is the Foo module\n ", klass.comment
|
||||
assert_equal "this is the Foo module", klass.comment
|
||||
end
|
||||
|
||||
def test_do_classes_module_under
|
||||
|
|
@ -84,7 +101,7 @@ VALUE mFoo = rb_define_module_under(rb_mKernel, "Foo");
|
|||
EOF
|
||||
|
||||
klass = util_get_class content, 'mFoo'
|
||||
assert_equal " this is the Foo module under Kernel\n ", klass.comment
|
||||
assert_equal "this is the Foo module under Kernel", klass.comment
|
||||
end
|
||||
|
||||
def test_do_constants
|
||||
|
|
@ -100,7 +117,7 @@ void Init_foo(){
|
|||
/* Huzzah!: What you cheer when you roll a perfect game */
|
||||
rb_define_const(cFoo, "CHEER", rb_str_new2("Huzzah!"));
|
||||
|
||||
/* TEST\:TEST: Checking to see if escaped semicolon works */
|
||||
/* TEST\:TEST: Checking to see if escaped colon works */
|
||||
rb_define_const(cFoo, "TEST", rb_str_new2("TEST:TEST"));
|
||||
|
||||
/* \\: The file separator on MS Windows */
|
||||
|
|
@ -137,12 +154,12 @@ void Init_foo(){
|
|||
}
|
||||
EOF
|
||||
|
||||
parser = util_parser content
|
||||
@parser = util_parser content
|
||||
|
||||
parser.do_classes
|
||||
parser.do_constants
|
||||
@parser.do_classes
|
||||
@parser.do_constants
|
||||
|
||||
klass = parser.classes['cFoo']
|
||||
klass = @parser.classes['cFoo']
|
||||
assert klass
|
||||
|
||||
constants = klass.constants
|
||||
|
|
@ -150,48 +167,35 @@ void Init_foo(){
|
|||
|
||||
constants = constants.map { |c| [c.name, c.value, c.comment] }
|
||||
|
||||
assert_equal ['PERFECT', '300',
|
||||
"\n The highest possible score in bowling \n "],
|
||||
assert_equal ['PERFECT', '300', 'The highest possible score in bowling '],
|
||||
constants.shift
|
||||
assert_equal ['CHEER', 'Huzzah!',
|
||||
"\n What you cheer when you roll a perfect game \n "],
|
||||
'What you cheer when you roll a perfect game '],
|
||||
constants.shift
|
||||
assert_equal ['TEST', 'TEST:TEST',
|
||||
"\n Checking to see if escaped semicolon works \n "],
|
||||
'Checking to see if escaped colon works '],
|
||||
constants.shift
|
||||
assert_equal ['MSEPARATOR', '\\',
|
||||
"\n The file separator on MS Windows \n "],
|
||||
'The file separator on MS Windows '],
|
||||
constants.shift
|
||||
assert_equal ['SEPARATOR', '/',
|
||||
"\n The file separator on Unix \n "],
|
||||
'The file separator on Unix '],
|
||||
constants.shift
|
||||
assert_equal ['STUFF', 'C:\\Program Files\\Stuff',
|
||||
"\n A directory on MS Windows \n "],
|
||||
'A directory on MS Windows '],
|
||||
constants.shift
|
||||
assert_equal ['NOSEMI', 'INT2FIX(99)',
|
||||
"\n Default definition \n "],
|
||||
'Default definition '],
|
||||
constants.shift
|
||||
assert_equal ['NOCOMMENT', 'rb_str_new2("No comment")', nil],
|
||||
assert_equal ['NOCOMMENT', 'rb_str_new2("No comment")', ''],
|
||||
constants.shift
|
||||
|
||||
comment = <<-EOF.chomp
|
||||
|
||||
|
||||
Multiline comment goes here because this comment spans multiple lines.
|
||||
Multiline comment goes here because this comment spans multiple lines.
|
||||
|
||||
|
||||
EOF
|
||||
assert_equal ['MULTILINE', 'INT2FIX(1)', comment], constants.shift
|
||||
assert_equal ['MULTILINE_VALUE', '1', comment], constants.shift
|
||||
|
||||
comment = <<-EOF.chomp
|
||||
|
||||
Multiline comment goes here because this comment spans multiple lines.
|
||||
Multiline comment goes here because this comment spans multiple lines.
|
||||
|
||||
|
||||
Multiline comment goes here because this comment spans multiple lines.
|
||||
Multiline comment goes here because this comment spans multiple lines.
|
||||
EOF
|
||||
assert_equal ['MULTILINE', 'INT2FIX(1)', comment], constants.shift
|
||||
assert_equal ['MULTILINE_VALUE', '1', comment], constants.shift
|
||||
assert_equal ['MULTILINE_NOT_EMPTY', 'INT2FIX(1)', comment], constants.shift
|
||||
|
||||
assert constants.empty?, constants.inspect
|
||||
|
|
@ -210,7 +214,7 @@ Init_Foo(void) {
|
|||
|
||||
klass = util_get_class content, 'foo'
|
||||
|
||||
assert_equal " \n a comment for class Foo\n \n", klass.comment
|
||||
assert_equal "a comment for class Foo", klass.comment
|
||||
end
|
||||
|
||||
def test_find_class_comment_define_class
|
||||
|
|
@ -223,7 +227,7 @@ VALUE foo = rb_define_class("Foo", rb_cObject);
|
|||
|
||||
klass = util_get_class content, 'foo'
|
||||
|
||||
assert_equal " \n a comment for class Foo\n ", klass.comment
|
||||
assert_equal "a comment for class Foo", klass.comment
|
||||
end
|
||||
|
||||
def test_find_class_comment_define_class_Init_Foo
|
||||
|
|
@ -242,7 +246,144 @@ Init_Foo(void) {
|
|||
|
||||
klass = util_get_class content, 'foo'
|
||||
|
||||
assert_equal " \n a comment for class Foo on Init\n \n", klass.comment
|
||||
assert_equal "a comment for class Foo on Init", klass.comment
|
||||
end
|
||||
|
||||
def test_find_class_comment_define_class_Init_Foo_no_void
|
||||
content = <<-EOF
|
||||
/*
|
||||
* a comment for class Foo on Init
|
||||
*/
|
||||
void
|
||||
Init_Foo() {
|
||||
/*
|
||||
* a comment for class Foo on rb_define_class
|
||||
*/
|
||||
VALUE foo = rb_define_class("Foo", rb_cObject);
|
||||
}
|
||||
EOF
|
||||
|
||||
klass = util_get_class content, 'foo'
|
||||
|
||||
assert_equal "a comment for class Foo on Init", klass.comment
|
||||
end
|
||||
|
||||
def test_find_class_comment_define_class_bogus_comment
|
||||
content = <<-EOF
|
||||
/*
|
||||
* a comment for other_function
|
||||
*/
|
||||
void
|
||||
other_function() {
|
||||
}
|
||||
|
||||
void
|
||||
Init_Foo(void) {
|
||||
VALUE foo = rb_define_class("Foo", rb_cObject);
|
||||
}
|
||||
EOF
|
||||
|
||||
klass = util_get_class content, 'foo'
|
||||
|
||||
assert_equal '', klass.comment
|
||||
end
|
||||
|
||||
def test_find_body
|
||||
content = <<-EOF
|
||||
/*
|
||||
* a comment for other_function
|
||||
*/
|
||||
VALUE
|
||||
other_function() {
|
||||
}
|
||||
|
||||
void
|
||||
Init_Foo(void) {
|
||||
VALUE foo = rb_define_class("Foo", rb_cObject);
|
||||
|
||||
rb_define_method(foo, "my_method", other_function, 0);
|
||||
}
|
||||
EOF
|
||||
|
||||
klass = util_get_class content, 'foo'
|
||||
other_function = klass.method_list.first
|
||||
|
||||
assert_equal 'my_method', other_function.name
|
||||
assert_equal "a comment for other_function",
|
||||
other_function.comment
|
||||
assert_equal '()', other_function.params
|
||||
|
||||
code = other_function.token_stream.first.text
|
||||
|
||||
assert_equal "VALUE\nother_function() ", code
|
||||
end
|
||||
|
||||
def test_find_body_define
|
||||
content = <<-EOF
|
||||
/*
|
||||
* a comment for other_function
|
||||
*/
|
||||
#define other_function rb_other_function
|
||||
|
||||
/* */
|
||||
VALUE
|
||||
rb_other_function() {
|
||||
}
|
||||
|
||||
void
|
||||
Init_Foo(void) {
|
||||
VALUE foo = rb_define_class("Foo", rb_cObject);
|
||||
|
||||
rb_define_method(foo, "my_method", other_function, 0);
|
||||
}
|
||||
EOF
|
||||
|
||||
klass = util_get_class content, 'foo'
|
||||
other_function = klass.method_list.first
|
||||
|
||||
assert_equal 'my_method', other_function.name
|
||||
assert_equal "a comment for other_function",
|
||||
other_function.comment
|
||||
assert_equal '()', other_function.params
|
||||
|
||||
code = other_function.token_stream.first.text
|
||||
|
||||
assert_equal "#define other_function rb_other_function", code
|
||||
end
|
||||
|
||||
def test_find_body_document_method
|
||||
content = <<-EOF
|
||||
/*
|
||||
* Document-method: bar
|
||||
* Document-method: baz
|
||||
*
|
||||
* a comment for bar
|
||||
*/
|
||||
VALUE
|
||||
bar() {
|
||||
}
|
||||
|
||||
void
|
||||
Init_Foo(void) {
|
||||
VALUE foo = rb_define_class("Foo", rb_cObject);
|
||||
|
||||
rb_define_method(foo, "bar", bar, 0);
|
||||
rb_define_method(foo, "baz", bar, 0);
|
||||
}
|
||||
EOF
|
||||
|
||||
klass = util_get_class content, 'foo'
|
||||
assert_equal 2, klass.method_list.length
|
||||
|
||||
methods = klass.method_list.sort
|
||||
|
||||
bar = methods.first
|
||||
assert_equal 'Foo#bar', bar.full_name
|
||||
assert_equal "a comment for bar", bar.comment
|
||||
|
||||
baz = methods.last
|
||||
assert_equal 'Foo#baz', baz.full_name
|
||||
assert_equal "a comment for bar", bar.comment
|
||||
end
|
||||
|
||||
def test_define_method
|
||||
|
|
@ -269,13 +410,41 @@ Init_IO(void) {
|
|||
klass = util_get_class content, 'rb_cIO'
|
||||
read_method = klass.method_list.first
|
||||
assert_equal "read", read_method.name
|
||||
assert_equal " Method Comment! \n", read_method.comment
|
||||
assert_equal "Method Comment! ", read_method.comment
|
||||
end
|
||||
|
||||
def test_define_method_private
|
||||
content = <<-EOF
|
||||
/*Method Comment! */
|
||||
static VALUE
|
||||
rb_io_s_read(argc, argv, io)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE io;
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Init_IO(void) {
|
||||
/*
|
||||
* a comment for class Foo on rb_define_class
|
||||
*/
|
||||
VALUE rb_cIO = rb_define_class("IO", rb_cObject);
|
||||
rb_define_private_method(rb_cIO, "read", rb_io_s_read, -1);
|
||||
}
|
||||
EOF
|
||||
|
||||
klass = util_get_class content, 'rb_cIO'
|
||||
read_method = klass.method_list.first
|
||||
assert_equal 'IO#read', read_method.full_name
|
||||
assert_equal :private, read_method.visibility
|
||||
assert_equal "Method Comment! ", read_method.comment
|
||||
end
|
||||
|
||||
def util_get_class(content, name)
|
||||
parser = util_parser content
|
||||
parser.scan
|
||||
parser.classes[name]
|
||||
@parser = util_parser content
|
||||
@parser.scan
|
||||
@parser.classes[name]
|
||||
end
|
||||
|
||||
def util_parser(content)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
require 'stringio'
|
||||
require 'tempfile'
|
||||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/options'
|
||||
require 'rdoc/parser/perl'
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ This just contains plain old documentation
|
|||
=end
|
||||
EOF
|
||||
comment = util_get_comment content
|
||||
assert_equal "\nThis just contains plain old documentation\n\n", comment
|
||||
assert_equal 'This just contains plain old documentation', comment
|
||||
end
|
||||
|
||||
# Get the comment of the @top_level when it has processed the input.
|
||||
|
|
@ -71,4 +71,3 @@ This just contains plain old documentation
|
|||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# coding: utf-8
|
||||
|
||||
require 'stringio'
|
||||
require 'tempfile'
|
||||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'minitest/autorun'
|
||||
|
||||
require 'rdoc/options'
|
||||
require 'rdoc/parser/ruby'
|
||||
|
|
@ -17,7 +19,7 @@ class TestRDocParserRuby < MiniTest::Unit::TestCase
|
|||
@tempfile2 = Tempfile.new self.class.name
|
||||
@filename2 = @tempfile2.path
|
||||
|
||||
util_toplevel
|
||||
util_top_level
|
||||
@options = RDoc::Options.new
|
||||
@options.quiet = true
|
||||
@stats = RDoc::Stats.new 0
|
||||
|
|
@ -28,6 +30,28 @@ class TestRDocParserRuby < MiniTest::Unit::TestCase
|
|||
@tempfile2.close
|
||||
end
|
||||
|
||||
def test_look_for_directives_in_attr
|
||||
util_parser ""
|
||||
|
||||
comment = "# :attr: my_attr\n"
|
||||
|
||||
@parser.look_for_directives_in @top_level, comment
|
||||
|
||||
assert_equal "# :attr: my_attr\n", comment
|
||||
|
||||
comment = "# :attr_reader: my_method\n"
|
||||
|
||||
@parser.look_for_directives_in @top_level, comment
|
||||
|
||||
assert_equal "# :attr_reader: my_method\n", comment
|
||||
|
||||
comment = "# :attr_writer: my_method\n"
|
||||
|
||||
@parser.look_for_directives_in @top_level, comment
|
||||
|
||||
assert_equal "# :attr_writer: my_method\n", comment
|
||||
end
|
||||
|
||||
def test_look_for_directives_in_commented
|
||||
util_parser ""
|
||||
|
||||
|
|
@ -136,6 +160,197 @@ class TestRDocParserRuby < MiniTest::Unit::TestCase
|
|||
assert_equal 'hi', @options.title
|
||||
end
|
||||
|
||||
def test_parse_alias
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
util_parser "alias :next= :bar"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
alas = @parser.parse_alias klass, RDoc::Parser::Ruby::NORMAL, tk, 'comment'
|
||||
|
||||
assert_equal 'bar', alas.old_name
|
||||
assert_equal 'next=', alas.new_name
|
||||
assert_equal klass, alas.parent
|
||||
assert_equal 'comment', alas.comment
|
||||
end
|
||||
|
||||
def test_parse_alias_meta
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
util_parser "alias m.chop m"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
alas = @parser.parse_alias klass, RDoc::Parser::Ruby::NORMAL, tk, 'comment'
|
||||
|
||||
assert_nil alas
|
||||
end
|
||||
|
||||
def test_parse_attr
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# my attr\n"
|
||||
|
||||
util_parser "attr :foo, :bar"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
assert_equal 1, klass.attributes.length
|
||||
|
||||
foo = klass.attributes.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal 'my attr', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_attr_accessor
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# my attr\n"
|
||||
|
||||
util_parser "attr_accessor :foo, :bar"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_attr_accessor klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
assert_equal 2, klass.attributes.length
|
||||
|
||||
foo = klass.attributes.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal 'RW', foo.rw
|
||||
assert_equal 'my attr', foo.comment
|
||||
|
||||
bar = klass.attributes.last
|
||||
assert_equal 'bar', bar.name
|
||||
assert_equal 'RW', bar.rw
|
||||
assert_equal 'my attr', bar.comment
|
||||
end
|
||||
|
||||
def test_parse_attr_accessor_writer
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# my attr\n"
|
||||
|
||||
util_parser "attr_writer :foo, :bar"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_attr_accessor klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
assert_equal 2, klass.attributes.length
|
||||
|
||||
foo = klass.attributes.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal 'W', foo.rw
|
||||
assert_equal "my attr", foo.comment
|
||||
|
||||
bar = klass.attributes.last
|
||||
assert_equal 'bar', bar.name
|
||||
assert_equal 'W', bar.rw
|
||||
assert_equal "my attr", bar.comment
|
||||
end
|
||||
|
||||
def test_parse_meta_attr
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# :attr: \n# my method\n"
|
||||
|
||||
util_parser "add_my_method :foo, :bar"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_meta_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
assert_equal 2, klass.attributes.length
|
||||
foo = klass.attributes.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal 'RW', foo.rw
|
||||
assert_equal "my method", foo.comment
|
||||
end
|
||||
|
||||
def test_parse_meta_attr_accessor
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# :attr_accessor: \n# my method\n"
|
||||
|
||||
util_parser "add_my_method :foo, :bar"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_meta_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
assert_equal 2, klass.attributes.length
|
||||
foo = klass.attributes.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal 'RW', foo.rw
|
||||
assert_equal 'my method', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_meta_attr_named
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# :attr: foo\n# my method\n"
|
||||
|
||||
util_parser "add_my_method :foo, :bar"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_meta_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
assert_equal 1, klass.attributes.length
|
||||
foo = klass.attributes.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal 'RW', foo.rw
|
||||
assert_equal 'my method', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_meta_attr_reader
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# :attr_reader: \n# my method\n"
|
||||
|
||||
util_parser "add_my_method :foo, :bar"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_meta_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
foo = klass.attributes.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal 'R', foo.rw
|
||||
assert_equal 'my method', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_meta_attr_writer
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# :attr_writer: \n# my method\n"
|
||||
|
||||
util_parser "add_my_method :foo, :bar"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_meta_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
foo = klass.attributes.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal 'W', foo.rw
|
||||
assert_equal "my method", foo.comment
|
||||
end
|
||||
|
||||
def test_parse_class
|
||||
comment = "##\n# my method\n"
|
||||
|
||||
|
|
@ -147,7 +362,27 @@ class TestRDocParserRuby < MiniTest::Unit::TestCase
|
|||
|
||||
foo = @top_level.classes.first
|
||||
assert_equal 'Foo', foo.full_name
|
||||
assert_equal comment, foo.comment
|
||||
assert_equal 'my method', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_class_ghost_method
|
||||
util_parser <<-CLASS
|
||||
class Foo
|
||||
##
|
||||
# :method: blah
|
||||
# my method
|
||||
end
|
||||
CLASS
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_class @top_level, RDoc::Parser::Ruby::NORMAL, tk, ''
|
||||
|
||||
foo = @top_level.classes.first
|
||||
assert_equal 'Foo', foo.full_name
|
||||
|
||||
blah = foo.method_list.first
|
||||
assert_equal 'Foo#blah', blah.full_name
|
||||
end
|
||||
|
||||
def test_parse_class_nested_superclass
|
||||
|
|
@ -175,15 +410,45 @@ class TestRDocParserRuby < MiniTest::Unit::TestCase
|
|||
|
||||
foo = @top_level.modules.first
|
||||
assert_equal 'Foo', foo.full_name
|
||||
assert_equal comment, foo.comment
|
||||
assert_equal 'my module', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_class_colon3
|
||||
code = <<-CODE
|
||||
class A
|
||||
class ::B
|
||||
end
|
||||
end
|
||||
CODE
|
||||
|
||||
util_parser code
|
||||
|
||||
@parser.parse_class @top_level, false, @parser.get_tk, ''
|
||||
|
||||
assert_equal %w[A B], RDoc::TopLevel.classes.map { |c| c.full_name }
|
||||
end
|
||||
|
||||
def test_parse_class_single
|
||||
code = <<-CODE
|
||||
class A
|
||||
class << B
|
||||
end
|
||||
end
|
||||
CODE
|
||||
|
||||
util_parser code
|
||||
|
||||
@parser.parse_class @top_level, false, @parser.get_tk, ''
|
||||
|
||||
assert_equal %w[A], RDoc::TopLevel.classes.map { |c| c.full_name }
|
||||
assert_equal %w[A::B], RDoc::TopLevel.modules.map { |c| c.full_name }
|
||||
end
|
||||
|
||||
def test_parse_class_mistaken_for_module
|
||||
#
|
||||
# The code below is not strictly legal Ruby (Foo must have been defined
|
||||
# before Foo::Bar is encountered), but RDoc might encounter Foo::Bar before
|
||||
# Foo if they live in different files.
|
||||
#
|
||||
# The code below is not strictly legal Ruby (Foo must have been defined
|
||||
# before Foo::Bar is encountered), but RDoc might encounter Foo::Bar
|
||||
# before Foo if they live in different files.
|
||||
|
||||
code = <<-EOF
|
||||
class Foo::Bar
|
||||
end
|
||||
|
|
@ -193,13 +458,15 @@ end
|
|||
|
||||
class Foo
|
||||
end
|
||||
EOF
|
||||
EOF
|
||||
|
||||
util_parser code
|
||||
|
||||
@parser.scan()
|
||||
@parser.scan
|
||||
|
||||
assert_equal %w[Foo::Baz], RDoc::TopLevel.modules_hash.keys
|
||||
assert_empty @top_level.modules
|
||||
|
||||
assert(@top_level.modules.empty?)
|
||||
foo = @top_level.classes.first
|
||||
assert_equal 'Foo', foo.full_name
|
||||
|
||||
|
|
@ -211,24 +478,25 @@ EOF
|
|||
end
|
||||
|
||||
def test_parse_class_definition_encountered_after_class_reference
|
||||
#
|
||||
# The code below is not strictly legal Ruby (Foo must have been defined
|
||||
# before Foo.bar is encountered), but RDoc might encounter Foo.bar before
|
||||
# Foo if they live in different files.
|
||||
#
|
||||
# The code below is not strictly legal Ruby (Foo must have been defined
|
||||
# before Foo.bar is encountered), but RDoc might encounter Foo.bar before
|
||||
# Foo if they live in different files.
|
||||
|
||||
code = <<-EOF
|
||||
def Foo.bar
|
||||
end
|
||||
|
||||
class Foo < IO
|
||||
end
|
||||
EOF
|
||||
EOF
|
||||
|
||||
util_parser code
|
||||
|
||||
@parser.scan()
|
||||
@parser.scan
|
||||
|
||||
assert(@top_level.modules.empty?)
|
||||
assert_empty RDoc::TopLevel.modules_hash
|
||||
# HACK why does it fail?
|
||||
#assert_empty @top_level.modules
|
||||
|
||||
foo = @top_level.classes.first
|
||||
assert_equal 'Foo', foo.full_name
|
||||
|
|
@ -257,21 +525,41 @@ EOF
|
|||
|
||||
foo = @top_level.modules.first
|
||||
assert_equal 'Foo', foo.full_name
|
||||
assert_equal comment, foo.comment
|
||||
assert_equal 'Weirdly named module', foo.comment
|
||||
|
||||
helper = foo.classes.first
|
||||
assert_equal 'Foo::Helper', helper.full_name
|
||||
end
|
||||
|
||||
def test_parse_comment
|
||||
content = <<-EOF
|
||||
class Foo
|
||||
##
|
||||
# :method: my_method
|
||||
# my method comment
|
||||
def test_parse_comment_attr
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
end
|
||||
EOF
|
||||
comment = "##\n# :attr: foo\n# my attr\n"
|
||||
|
||||
util_parser "\n"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_comment klass, tk, comment
|
||||
|
||||
foo = klass.attributes.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal 'RW', foo.rw
|
||||
assert_equal 'my attr', foo.comment
|
||||
|
||||
assert_equal nil, foo.viewer
|
||||
assert_equal true, foo.document_children
|
||||
assert_equal true, foo.document_self
|
||||
assert_equal false, foo.done_documenting
|
||||
assert_equal false, foo.force_documentation
|
||||
assert_equal klass, foo.parent
|
||||
assert_equal :public, foo.visibility
|
||||
assert_equal "\n", foo.text
|
||||
assert_equal klass.current_section, foo.section
|
||||
end
|
||||
|
||||
def test_parse_comment_method
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
|
|
@ -285,7 +573,7 @@ end
|
|||
|
||||
foo = klass.method_list.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal comment, foo.comment
|
||||
assert_equal 'my method', foo.comment
|
||||
|
||||
assert_equal [], foo.aliases
|
||||
assert_equal nil, foo.block_params
|
||||
|
|
@ -305,14 +593,44 @@ end
|
|||
assert_equal klass.current_section, foo.section
|
||||
|
||||
stream = [
|
||||
tk(:COMMENT, 1, 1, nil, "# File #{@top_level.file_absolute_name}, line 1"),
|
||||
tk(:COMMENT, 1, 1, nil, "# File #{@top_level.absolute_name}, line 1"),
|
||||
RDoc::Parser::Ruby::NEWLINE_TOKEN,
|
||||
tk(:SPACE, 1, 1, nil, ''),
|
||||
tk(:SPACE, 1, 1, nil, ''),
|
||||
]
|
||||
|
||||
assert_equal stream, foo.token_stream
|
||||
end
|
||||
|
||||
def test_parse_constant_alias
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
cB = klass.add_class RDoc::NormalClass, 'B'
|
||||
|
||||
util_parser "A = B"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_constant klass, tk, ''
|
||||
|
||||
assert_equal cB, klass.find_module_named('A')
|
||||
end
|
||||
|
||||
def test_parse_constant_alias_same_name
|
||||
foo = @top_level.add_class RDoc::NormalClass, 'Foo'
|
||||
top_bar = @top_level.add_class RDoc::NormalClass, 'Bar'
|
||||
bar = foo.add_class RDoc::NormalClass, 'Bar'
|
||||
|
||||
assert RDoc::TopLevel.find_class_or_module('::Bar')
|
||||
|
||||
util_parser "A = ::Bar"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_constant foo, tk, ''
|
||||
|
||||
assert_equal top_bar, bar.find_module_named('A')
|
||||
end
|
||||
|
||||
def test_parse_meta_method
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
|
@ -327,7 +645,7 @@ end
|
|||
|
||||
foo = klass.method_list.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal comment, foo.comment
|
||||
assert_equal 'my method', foo.comment
|
||||
|
||||
assert_equal [], foo.aliases
|
||||
assert_equal nil, foo.block_params
|
||||
|
|
@ -347,7 +665,7 @@ end
|
|||
assert_equal klass.current_section, foo.section
|
||||
|
||||
stream = [
|
||||
tk(:COMMENT, 1, 1, nil, "# File #{@top_level.file_absolute_name}, line 1"),
|
||||
tk(:COMMENT, 1, 1, nil, "# File #{@top_level.absolute_name}, line 1"),
|
||||
RDoc::Parser::Ruby::NEWLINE_TOKEN,
|
||||
tk(:SPACE, 1, 1, nil, ''),
|
||||
tk(:IDENTIFIER, 1, 0, 'add_my_method', 'add_my_method'),
|
||||
|
|
@ -376,7 +694,7 @@ end
|
|||
|
||||
foo = klass.method_list.first
|
||||
assert_equal 'woo_hoo!', foo.name
|
||||
assert_equal "##\n# my method\n", foo.comment
|
||||
assert_equal 'my method', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_meta_method_singleton
|
||||
|
|
@ -394,7 +712,7 @@ end
|
|||
foo = klass.method_list.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal true, foo.singleton, 'singleton method'
|
||||
assert_equal "##\n# my method\n", foo.comment
|
||||
assert_equal 'my method', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_meta_method_singleton_name
|
||||
|
|
@ -412,7 +730,7 @@ end
|
|||
foo = klass.method_list.first
|
||||
assert_equal 'woo_hoo!', foo.name
|
||||
assert_equal true, foo.singleton, 'singleton method'
|
||||
assert_equal "##\n# my method\n", foo.comment
|
||||
assert_equal 'my method', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_meta_method_string_name
|
||||
|
|
@ -427,7 +745,22 @@ end
|
|||
|
||||
foo = klass.method_list.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal comment, foo.comment
|
||||
assert_equal 'my method', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_meta_method_unknown
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
comment = "##\n# my method\n"
|
||||
|
||||
util_parser "add_my_method ('foo')"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_meta_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
foo = klass.method_list.first
|
||||
assert_equal 'unknown', foo.name
|
||||
assert_equal 'my method', foo.comment
|
||||
end
|
||||
|
||||
def test_parse_method
|
||||
|
|
@ -444,7 +777,7 @@ end
|
|||
|
||||
foo = klass.method_list.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal comment, foo.comment
|
||||
assert_equal 'my method', foo.comment
|
||||
|
||||
assert_equal [], foo.aliases
|
||||
assert_equal nil, foo.block_params
|
||||
|
|
@ -464,7 +797,7 @@ end
|
|||
assert_equal klass.current_section, foo.section
|
||||
|
||||
stream = [
|
||||
tk(:COMMENT, 1, 1, nil, "# File #{@top_level.file_absolute_name}, line 1"),
|
||||
tk(:COMMENT, 1, 1, nil, "# File #{@top_level.absolute_name}, line 1"),
|
||||
RDoc::Parser::Ruby::NEWLINE_TOKEN,
|
||||
tk(:SPACE, 1, 1, nil, ''),
|
||||
tk(:DEF, 1, 0, 'def', 'def'),
|
||||
|
|
@ -482,6 +815,184 @@ end
|
|||
assert_equal stream, foo.token_stream
|
||||
end
|
||||
|
||||
def test_parse_method_alias
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
util_parser "def m() alias a b; end"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, ''
|
||||
|
||||
assert klass.aliases.empty?
|
||||
end
|
||||
|
||||
def test_parse_method_utf8
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# my method\n"
|
||||
|
||||
method = "def ω() end"
|
||||
|
||||
assert_equal Encoding::UTF_8, method.encoding if defined? ::Encoding
|
||||
|
||||
util_parser method
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
omega = klass.method_list.first
|
||||
assert_equal "def \317\211", omega.text
|
||||
end
|
||||
|
||||
def test_parse_method_funky
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# my method\n"
|
||||
|
||||
util_parser "def (blah).foo() :bar end"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
assert klass.method_list.empty?
|
||||
end
|
||||
|
||||
def test_parse_method_internal_ivar
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
util_parser "def foo() def @blah.bar() end end"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, ''
|
||||
|
||||
assert_equal 1, klass.method_list.length
|
||||
end
|
||||
|
||||
def test_parse_method_internal_lvar
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
util_parser "def foo() def blah.bar() end end"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, ''
|
||||
|
||||
assert_equal 1, klass.method_list.length
|
||||
end
|
||||
|
||||
def test_parse_method_no_parens
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# my method\n"
|
||||
|
||||
util_parser "def foo arg1, arg2\nend"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
foo = klass.method_list.first
|
||||
assert_equal '(arg1, arg2)', foo.params
|
||||
end
|
||||
|
||||
def test_parse_method_parameters_comment
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# my method\n"
|
||||
|
||||
util_parser "def foo arg1, arg2 # some useful comment\nend"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
foo = klass.method_list.first
|
||||
assert_equal '(arg1, arg2)', foo.params
|
||||
end
|
||||
|
||||
def test_parse_method_parameters_comment_continue
|
||||
klass = RDoc::NormalClass.new 'Foo'
|
||||
klass.parent = @top_level
|
||||
|
||||
comment = "##\n# my method\n"
|
||||
|
||||
util_parser "def foo arg1, arg2, # some useful comment\narg3\nend"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
foo = klass.method_list.first
|
||||
assert_equal '(arg1, arg2, arg3)', foo.params
|
||||
end
|
||||
|
||||
def test_parse_method_toplevel
|
||||
klass = @top_level
|
||||
|
||||
comment = "##\n# my method\n"
|
||||
|
||||
util_parser "def foo arg1, arg2\nend"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
|
||||
|
||||
object = RDoc::TopLevel.find_class_named 'Object'
|
||||
|
||||
foo = object.method_list.first
|
||||
assert_equal 'Object#foo', foo.full_name
|
||||
end
|
||||
|
||||
def test_parse_method_toplevel_class
|
||||
klass = @top_level
|
||||
|
||||
util_parser "def Object.foo arg1, arg2\nend"
|
||||
|
||||
tk = @parser.get_tk
|
||||
|
||||
@parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, ''
|
||||
|
||||
object = RDoc::TopLevel.find_class_named 'Object'
|
||||
|
||||
foo = object.method_list.first
|
||||
assert_equal 'Object::foo', foo.full_name
|
||||
end
|
||||
|
||||
def test_parse_statements_class_if
|
||||
comment = "##\n# my method\n"
|
||||
|
||||
util_parser <<-CODE
|
||||
module Foo
|
||||
X = if TRUE then
|
||||
''
|
||||
end
|
||||
|
||||
def blah
|
||||
end
|
||||
end
|
||||
CODE
|
||||
|
||||
@parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
|
||||
|
||||
foo = @top_level.modules.first
|
||||
assert_equal 'Foo', foo.full_name, 'module Foo'
|
||||
|
||||
methods = foo.method_list
|
||||
assert_equal 1, methods.length
|
||||
assert_equal 'Foo#blah', methods.first.full_name
|
||||
end
|
||||
|
||||
def test_parse_statements_class_nested
|
||||
comment = "##\n# my method\n"
|
||||
|
||||
|
|
@ -494,7 +1005,7 @@ end
|
|||
|
||||
bar = foo.classes.first
|
||||
assert_equal 'Foo::Bar', bar.full_name, 'class Foo::Bar'
|
||||
assert_equal comment, bar.comment
|
||||
assert_equal 'my method', bar.comment
|
||||
end
|
||||
|
||||
def test_parse_statements_identifier_meta_method
|
||||
|
|
@ -648,20 +1159,6 @@ EOF
|
|||
assert_equal 'RW', foo.rw
|
||||
end
|
||||
|
||||
def test_parse_statements_identifier_extra_accessors
|
||||
@options.extra_accessors = /^my_accessor$/
|
||||
|
||||
content = "class Foo; my_accessor :foo; end"
|
||||
|
||||
util_parser content
|
||||
|
||||
@parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
|
||||
|
||||
foo = @top_level.classes.first.attributes.first
|
||||
assert_equal 'foo', foo.name
|
||||
assert_equal '?', foo.rw
|
||||
end
|
||||
|
||||
def test_parse_statements_identifier_include
|
||||
content = "class Foo; include Bar; end"
|
||||
|
||||
|
|
@ -713,14 +1210,70 @@ EOF
|
|||
assert_equal 1, @top_level.requires.length
|
||||
end
|
||||
|
||||
def test_parse_top_level_statements_alias_method
|
||||
content = <<-CONTENT
|
||||
class A
|
||||
alias_method :a, :[] unless c
|
||||
end
|
||||
|
||||
B = A
|
||||
|
||||
class C
|
||||
end
|
||||
CONTENT
|
||||
|
||||
util_parser content
|
||||
|
||||
@parser.parse_statements @top_level
|
||||
end
|
||||
|
||||
def test_sanity_integer
|
||||
util_parser '1'
|
||||
assert_equal '1', @parser.get_tk.text
|
||||
|
||||
util_parser '1.0'
|
||||
assert_equal '1.0', @parser.get_tk.text
|
||||
end
|
||||
|
||||
def test_sanity_interpolation
|
||||
last_tk = nil
|
||||
util_parser 'class A; B = "#{c}"; end'
|
||||
|
||||
while tk = @parser.get_tk do last_tk = tk end
|
||||
|
||||
assert_equal "\n", last_tk.text
|
||||
end
|
||||
|
||||
# If you're writing code like this you're doing it wrong
|
||||
|
||||
def x_test_sanity_interpolation_crazy
|
||||
last_tk = nil
|
||||
util_parser '"#{"#{"a")}" if b}"'
|
||||
|
||||
assert_equal RDoc::RubyToken::TkDSTRING, tk.class
|
||||
assert_equal RDoc::RubyToken::TkNL, @parser.get_tk.class
|
||||
end
|
||||
|
||||
def test_sanity_interpolation_format
|
||||
util_parser '"#{stftime("%m-%d")}"'
|
||||
|
||||
while tk = @parser.get_tk do end
|
||||
end
|
||||
|
||||
def test_sanity_symbol_interpolation
|
||||
util_parser ':"#{bar}="'
|
||||
|
||||
while tk = @parser.get_tk do end
|
||||
end
|
||||
|
||||
def tk(klass, line, char, name, text)
|
||||
klass = RDoc::RubyToken.const_get "Tk#{klass.to_s.upcase}"
|
||||
|
||||
token = if klass.instance_method(:initialize).arity == 2 then
|
||||
token = if klass.instance_method(:initialize).arity == 3 then
|
||||
raise ArgumentError, "name not used for #{klass}" unless name.nil?
|
||||
klass.new line, char
|
||||
klass.new nil, line, char
|
||||
else
|
||||
klass.new line, char, name
|
||||
klass.new nil, line, char, name
|
||||
end
|
||||
|
||||
token.set_text text
|
||||
|
|
@ -740,7 +1293,7 @@ EOF
|
|||
second_file_content, @options, @stats
|
||||
end
|
||||
|
||||
def util_toplevel
|
||||
def util_top_level
|
||||
RDoc::TopLevel.reset
|
||||
@top_level = RDoc::TopLevel.new @filename
|
||||
@top_level2 = RDoc::TopLevel.new @filename2
|
||||
|
|
@ -748,4 +1301,3 @@ EOF
|
|||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
|
|||
48
test/rdoc/test_rdoc_parser_simple.rb
Normal file
48
test/rdoc/test_rdoc_parser_simple.rb
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
require 'tempfile'
|
||||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/options'
|
||||
require 'rdoc/parser'
|
||||
|
||||
class TestRDocParserSimple < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@tempfile = Tempfile.new self.class.name
|
||||
filename = @tempfile.path
|
||||
|
||||
@top_level = RDoc::TopLevel.new filename
|
||||
@fn = filename
|
||||
@options = RDoc::Options.new
|
||||
@stats = RDoc::Stats.new 0
|
||||
|
||||
RDoc::TopLevel.reset
|
||||
end
|
||||
|
||||
def teardown
|
||||
@tempfile.close
|
||||
end
|
||||
|
||||
def test_remove_private_comments
|
||||
parser = util_parser ''
|
||||
text = "foo\n\n--\nbar\n++\n\nbaz\n"
|
||||
|
||||
expected = "foo\n\n\n\nbaz\n"
|
||||
|
||||
assert_equal expected, parser.remove_private_comments(text)
|
||||
end
|
||||
|
||||
def test_remove_private_comments_star
|
||||
parser = util_parser ''
|
||||
|
||||
text = "* foo\n* bar\n"
|
||||
expected = text.dup
|
||||
|
||||
assert_equal expected, parser.remove_private_comments(text)
|
||||
end
|
||||
|
||||
def util_parser(content)
|
||||
RDoc::Parser::Simple.new @top_level, @fn, content, @options, @stats
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
66
test/rdoc/test_rdoc_rdoc.rb
Normal file
66
test/rdoc/test_rdoc_rdoc.rb
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
require 'tempfile'
|
||||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/rdoc'
|
||||
|
||||
class TestRDocRDoc < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@rdoc = RDoc::RDoc.new
|
||||
@tempfile = Tempfile.new 'test_rdoc_rdoc'
|
||||
end
|
||||
|
||||
def teardown
|
||||
@tempfile.close
|
||||
end
|
||||
|
||||
def test_gather_files
|
||||
assert_equal(%w[lib/rdoc.rb],
|
||||
@rdoc.gather_files(%w[lib/rdoc.rb lib/rdoc.rb]))
|
||||
end
|
||||
|
||||
def test_read_file_contents
|
||||
@tempfile.write "hi everybody"
|
||||
@tempfile.flush
|
||||
|
||||
assert_equal "hi everybody", @rdoc.read_file_contents(@tempfile.path)
|
||||
end
|
||||
|
||||
def test_read_file_contents_encoding
|
||||
skip "Encoding not implemented" unless defined? ::Encoding
|
||||
|
||||
@tempfile.write "# coding: utf-8\nhi everybody"
|
||||
@tempfile.flush
|
||||
|
||||
contents = @rdoc.read_file_contents @tempfile.path
|
||||
assert_equal "# coding: utf-8\nhi everybody", contents
|
||||
assert_equal Encoding::UTF_8, contents.encoding
|
||||
end
|
||||
|
||||
def test_read_file_contents_encoding_fancy
|
||||
skip "Encoding not implemented" unless defined? ::Encoding
|
||||
|
||||
@tempfile.write "# -*- coding: utf-8; fill-column: 74 -*-\nhi everybody"
|
||||
@tempfile.flush
|
||||
|
||||
contents = @rdoc.read_file_contents @tempfile.path
|
||||
assert_equal("# -*- coding: utf-8; fill-column: 74 -*-\nhi everybody",
|
||||
contents)
|
||||
assert_equal Encoding::UTF_8, contents.encoding
|
||||
end
|
||||
|
||||
def test_remove_unparsable
|
||||
file_list = %w[
|
||||
blah.class
|
||||
blah.eps
|
||||
blah.erb
|
||||
blah.scpt.txt
|
||||
blah.ttf
|
||||
blah.yml
|
||||
]
|
||||
|
||||
assert_empty @rdoc.remove_unparseable file_list
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
25
test/rdoc/test_rdoc_require.rb
Normal file
25
test/rdoc/test_rdoc_require.rb
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
require File.expand_path '../xref_test_case', __FILE__
|
||||
|
||||
class TestRDocRequire < XrefTestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@req = RDoc::Require.new 'foo', 'comment'
|
||||
end
|
||||
|
||||
def test_initialize
|
||||
assert_equal 'foo', @req.name
|
||||
|
||||
req = RDoc::Require.new '"foo"', ''
|
||||
assert_equal 'foo', @req.name
|
||||
|
||||
req = RDoc::Require.new '\'foo\'', ''
|
||||
assert_equal 'foo', @req.name
|
||||
|
||||
req = RDoc::Require.new '|foo|', ''
|
||||
assert_equal 'foo', @req.name, 'for fortran?'
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
require 'stringio'
|
||||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'rdoc/ri/formatter'
|
||||
|
||||
class TestRDocRIAttributeFormatter < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@output = StringIO.new
|
||||
@width = 78
|
||||
@indent = ' '
|
||||
|
||||
@f = RDoc::RI::AttributeFormatter.new @output, @width, @indent
|
||||
end
|
||||
|
||||
def test_wrap_empty
|
||||
@f.wrap ''
|
||||
assert_equal '', @output.string
|
||||
end
|
||||
|
||||
def test_wrap_long
|
||||
@f.wrap 'a ' * (@width / 2)
|
||||
assert_equal " a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a \n a \n",
|
||||
@output.string
|
||||
end
|
||||
|
||||
def test_wrap_markup
|
||||
@f.wrap 'a <tt>b</tt> c'
|
||||
assert_equal " a b c\n", @output.string
|
||||
end
|
||||
|
||||
def test_wrap_nil
|
||||
@f.wrap nil
|
||||
assert_equal '', @output.string
|
||||
end
|
||||
|
||||
def test_wrap_short
|
||||
@f.wrap 'a b c'
|
||||
assert_equal " a b c\n", @output.string
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
@ -1,301 +0,0 @@
|
|||
require 'stringio'
|
||||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'rdoc/ri/formatter'
|
||||
require 'rdoc/ri/display'
|
||||
require 'rdoc/ri/driver'
|
||||
|
||||
class TestRDocRiDefaultDisplay < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@output = StringIO.new
|
||||
@width = 78
|
||||
@indent = ' '
|
||||
|
||||
@dd = RDoc::RI::DefaultDisplay.new RDoc::RI::Formatter, @width, true,
|
||||
@output
|
||||
|
||||
@some_method = h \
|
||||
'aliases' => [{'name' => 'some_method_alias'}],
|
||||
'block_params' => 'block_param',
|
||||
'comment' => [RDoc::Markup::Flow::P.new('some comment')],
|
||||
'full_name' => 'SomeClass#some_method',
|
||||
'is_singleton' => false,
|
||||
'name' => 'some_method',
|
||||
'params' => '(arg1, arg2) {|block_param| ...}',
|
||||
'source_path' => '/nonexistent',
|
||||
'visibility' => 'public'
|
||||
end
|
||||
|
||||
def test_display_class_info
|
||||
klass = h \
|
||||
'attributes' => [
|
||||
{ 'name' => 'attribute', 'rw' => 'RW',
|
||||
'comment' => [RDoc::Markup::Flow::P.new('attribute comment')] },
|
||||
{ 'name' => 'attribute_no_comment', 'rw' => 'RW',
|
||||
'comment' => nil },
|
||||
],
|
||||
'class_methods' => [
|
||||
{ 'name' => 'class_method' },
|
||||
],
|
||||
'class_method_extensions' => [
|
||||
{ 'name' => 'class_method_extension' },
|
||||
],
|
||||
'comment' => [RDoc::Markup::Flow::P.new('SomeClass comment')],
|
||||
'constants' => [
|
||||
{ 'name' => 'CONSTANT', 'value' => '"value1"',
|
||||
'comment' => [RDoc::Markup::Flow::P.new('CONSTANT value')] },
|
||||
{ 'name' => 'CONSTANT_NOCOMMENT', 'value' => '"value2"',
|
||||
'comment' => nil },
|
||||
],
|
||||
'display_name' => 'Class',
|
||||
'full_name' => 'SomeClass',
|
||||
'includes' => [],
|
||||
'instance_methods' => [
|
||||
{ 'name' => 'instance_method' },
|
||||
{ 'name' => 'instance_method2' },
|
||||
],
|
||||
'instance_method_extensions' => [
|
||||
{ 'name' => 'instance_method_extension' },
|
||||
],
|
||||
'superclass' => 'Object'
|
||||
|
||||
@dd.display_class_info klass
|
||||
|
||||
expected = <<-EOF
|
||||
---------------------------------------------------- Class: SomeClass < Object
|
||||
SomeClass comment
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
||||
Constants:
|
||||
----------
|
||||
|
||||
CONSTANT = "value1"
|
||||
CONSTANT value
|
||||
|
||||
CONSTANT_NOCOMMENT = "value2"
|
||||
|
||||
|
||||
Attributes:
|
||||
-----------
|
||||
|
||||
attribute (RW):
|
||||
attribute comment
|
||||
|
||||
attribute_no_comment (RW)
|
||||
|
||||
|
||||
Class methods:
|
||||
--------------
|
||||
|
||||
class_method
|
||||
|
||||
|
||||
Class method extensions:
|
||||
------------------------
|
||||
|
||||
class_method_extension
|
||||
|
||||
|
||||
Instance methods:
|
||||
-----------------
|
||||
|
||||
instance_method, instance_method2
|
||||
|
||||
|
||||
Instance method extensions:
|
||||
---------------------------
|
||||
|
||||
instance_method_extension
|
||||
EOF
|
||||
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_display_flow
|
||||
flow = [RDoc::Markup::Flow::P.new('flow')]
|
||||
|
||||
@dd.display_flow flow
|
||||
|
||||
assert_equal " flow\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_flow_empty
|
||||
@dd.display_flow []
|
||||
|
||||
assert_equal " [no description]\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_flow_nil
|
||||
@dd.display_flow nil
|
||||
|
||||
assert_equal " [no description]\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_method_info
|
||||
@dd.display_method_info @some_method
|
||||
|
||||
expected = <<-EOF
|
||||
-------------------------------------------------------- SomeClass#some_method
|
||||
some_method(arg1, arg2) {|block_param| ...}
|
||||
|
||||
From /nonexistent
|
||||
------------------------------------------------------------------------------
|
||||
some comment
|
||||
|
||||
|
||||
(also known as some_method_alias)
|
||||
EOF
|
||||
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_display_method_info_singleton
|
||||
method = RDoc::RI::Driver::OpenStructHash.new.update \
|
||||
'aliases' => [],
|
||||
'block_params' => nil,
|
||||
'comment' => nil,
|
||||
'full_name' => 'SomeClass::some_method',
|
||||
'is_singleton' => true,
|
||||
'name' => 'some_method',
|
||||
'params' => '(arg1, arg2)',
|
||||
'visibility' => 'public'
|
||||
|
||||
@dd.display_method_info method
|
||||
|
||||
expected = <<-EOF
|
||||
------------------------------------------------------- SomeClass::some_method
|
||||
SomeClass::some_method(arg1, arg2)
|
||||
|
||||
From
|
||||
------------------------------------------------------------------------------
|
||||
[no description]
|
||||
EOF
|
||||
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_display_method_list
|
||||
methods = [
|
||||
RDoc::RI::Driver::OpenStructHash.new.update(
|
||||
"aliases" => [],
|
||||
"block_params" => nil,
|
||||
"comment" => nil,
|
||||
"full_name" => "SomeClass#some_method",
|
||||
"is_singleton" => false,
|
||||
"name" => "some_method",
|
||||
"params" => "()",
|
||||
"visibility" => "public"
|
||||
),
|
||||
RDoc::RI::Driver::OpenStructHash.new.update(
|
||||
"aliases" => [],
|
||||
"block_params" => nil,
|
||||
"comment" => nil,
|
||||
"full_name" => "SomeClass#some_other_method",
|
||||
"is_singleton" => false,
|
||||
"name" => "some_other_method",
|
||||
"params" => "()",
|
||||
"visibility" => "public"
|
||||
),
|
||||
]
|
||||
|
||||
@dd.display_method_list methods
|
||||
|
||||
expected = <<-EOF
|
||||
More than one method matched your request. You can refine your search by
|
||||
asking for information on one of:
|
||||
|
||||
SomeClass#some_method []
|
||||
SomeClass#some_other_method []
|
||||
EOF
|
||||
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_display_params
|
||||
@dd.display_params @some_method
|
||||
|
||||
expected = <<-EOF
|
||||
some_method(arg1, arg2) {|block_param| ...}
|
||||
|
||||
From /nonexistent
|
||||
EOF
|
||||
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_display_params_multiple
|
||||
@some_method['params'] = <<-EOF
|
||||
some_method(index)
|
||||
some_method(start, length)
|
||||
EOF
|
||||
|
||||
@dd.display_params @some_method
|
||||
|
||||
expected = <<-EOF
|
||||
some_method(index)
|
||||
some_method(start, length)
|
||||
|
||||
From /nonexistent
|
||||
EOF
|
||||
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_display_params_singleton
|
||||
@some_method['is_singleton'] = true
|
||||
@some_method['full_name'] = 'SomeClass::some_method'
|
||||
|
||||
@dd.display_params @some_method
|
||||
|
||||
expected = <<-EOF
|
||||
SomeClass::some_method(arg1, arg2) {|block_param| ...}
|
||||
|
||||
From /nonexistent
|
||||
EOF
|
||||
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_list_known_classes
|
||||
klasses = %w[SomeClass SomeModule]
|
||||
|
||||
@dd.list_known_classes klasses
|
||||
|
||||
expected = <<-EOF
|
||||
---------------------------------------------------- Known classes and modules
|
||||
|
||||
SomeClass, SomeModule
|
||||
EOF
|
||||
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_list_known_classes_empty
|
||||
@dd.list_known_classes []
|
||||
|
||||
expected = <<-EOF
|
||||
No ri data found
|
||||
|
||||
If you've installed Ruby yourself, you need to generate documentation using:
|
||||
|
||||
make install-doc
|
||||
|
||||
from the same place you ran `make` to build ruby.
|
||||
|
||||
If you installed Ruby from a packaging system, then you may need to
|
||||
install an additional package, or ask the packager to enable ri generation.
|
||||
EOF
|
||||
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def h(hash)
|
||||
RDoc::RI::Driver::OpenStructHash.convert hash
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
@ -1,94 +1,808 @@
|
|||
require 'pp'
|
||||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'minitest/autorun'
|
||||
require 'tmpdir'
|
||||
require 'fileutils'
|
||||
require 'rdoc/ri/driver'
|
||||
|
||||
class TestRDocRIDriver < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@RM = RDoc::Markup
|
||||
|
||||
@tmpdir = File.join Dir.tmpdir, "test_rdoc_ri_driver_#{$$}"
|
||||
@home_ri = File.join @tmpdir, 'dot_ri'
|
||||
@cache_dir = File.join @home_ri, 'cache'
|
||||
@class_cache = File.join @cache_dir, 'classes'
|
||||
|
||||
FileUtils.mkdir_p @tmpdir
|
||||
FileUtils.mkdir_p @home_ri
|
||||
FileUtils.mkdir_p @cache_dir
|
||||
|
||||
@driver = RDoc::RI::Driver.new(RDoc::RI::Driver.process_args([]))
|
||||
@driver.homepath = @home_ri
|
||||
@orig_ri = ENV['RI']
|
||||
@orig_home = ENV['HOME']
|
||||
ENV['HOME'] = @tmpdir
|
||||
ENV.delete 'RI'
|
||||
|
||||
options = RDoc::RI::Driver.process_args []
|
||||
options[:home] = @tmpdir
|
||||
options[:use_stdout] = true
|
||||
options[:formatter] = @RM::ToRdoc
|
||||
@driver = RDoc::RI::Driver.new options
|
||||
end
|
||||
|
||||
def teardown
|
||||
ENV['HOME'] = @orig_home
|
||||
ENV['RI'] = @orig_ri
|
||||
FileUtils.rm_rf @tmpdir
|
||||
end
|
||||
|
||||
def test_lookup_method
|
||||
def @driver.load_cache_for(klassname)
|
||||
{ 'Foo#bar' => :found }
|
||||
def mu_pp(obj)
|
||||
s = ''
|
||||
s = PP.pp obj, s
|
||||
s = s.force_encoding(Encoding.default_external) if defined? Encoding
|
||||
s.chomp
|
||||
end
|
||||
|
||||
def test_self_dump
|
||||
util_store
|
||||
|
||||
out, err = capture_io do
|
||||
RDoc::RI::Driver.dump @store.cache_path
|
||||
end
|
||||
|
||||
assert @driver.lookup_method('Foo#bar', 'Foo')
|
||||
assert_match %r%:class_methods%, out
|
||||
assert_match %r%:modules%, out
|
||||
assert_match %r%:instance_methods%, out
|
||||
assert_match %r%:ancestors%, out
|
||||
end
|
||||
|
||||
def test_lookup_method_class_method
|
||||
def @driver.load_cache_for(klassname)
|
||||
{ 'Foo::Bar' => :found }
|
||||
def test_add_also_in_empty
|
||||
out = @RM::Document.new
|
||||
|
||||
@driver.add_also_in out, []
|
||||
|
||||
assert_empty out
|
||||
end
|
||||
|
||||
def test_add_also_in
|
||||
util_multi_store
|
||||
@store1.type = :system
|
||||
@store2.type = :home
|
||||
|
||||
out = @RM::Document.new
|
||||
|
||||
@driver.add_also_in out, [@store1, @store2]
|
||||
|
||||
expected = @RM::Document.new(
|
||||
@RM::Rule.new(1),
|
||||
@RM::Paragraph.new('Also found in:'),
|
||||
@RM::Verbatim.new(' ', 'ruby core', "\n",
|
||||
' ', '~/.ri', "\n"))
|
||||
|
||||
assert_equal expected, out
|
||||
end
|
||||
|
||||
def test_add_class
|
||||
util_multi_store
|
||||
|
||||
out = @RM::Document.new
|
||||
|
||||
@driver.add_class out, 'Bar', [@cBar]
|
||||
|
||||
expected = @RM::Document.new(
|
||||
@RM::Heading.new(1, 'Bar < Foo'),
|
||||
@RM::BlankLine.new)
|
||||
|
||||
assert_equal expected, out
|
||||
end
|
||||
|
||||
def test_add_from
|
||||
util_store
|
||||
@store.type = :system
|
||||
|
||||
out = @RM::Document.new
|
||||
|
||||
@driver.add_from out, @store
|
||||
|
||||
expected = @RM::Document.new @RM::Paragraph.new("(from ruby core)")
|
||||
|
||||
assert_equal expected, out
|
||||
end
|
||||
|
||||
def test_add_includes_empty
|
||||
out = @RM::Document.new
|
||||
|
||||
@driver.add_includes out, []
|
||||
|
||||
assert_empty out
|
||||
end
|
||||
|
||||
def test_add_includes_many
|
||||
util_store
|
||||
|
||||
out = @RM::Document.new
|
||||
|
||||
enum = RDoc::Include.new 'Enumerable', nil
|
||||
@cFoo.add_include enum
|
||||
|
||||
@driver.add_includes out, [[[@cFooInc, enum], @store]]
|
||||
|
||||
expected = @RM::Document.new(
|
||||
@RM::Rule.new(1),
|
||||
@RM::Heading.new(1, "Includes:"),
|
||||
@RM::Paragraph.new("(from #{@store.friendly_path})"),
|
||||
@RM::BlankLine.new,
|
||||
@RM::Paragraph.new("Inc"),
|
||||
@RM::BlankLine.new,
|
||||
@RM::Paragraph.new("Include thingy"),
|
||||
@RM::BlankLine.new,
|
||||
@RM::Verbatim.new(' ', 'Enumerable', "\n"))
|
||||
|
||||
assert_equal expected, out
|
||||
end
|
||||
|
||||
def test_add_includes_many_no_doc
|
||||
util_store
|
||||
|
||||
out = @RM::Document.new
|
||||
|
||||
enum = RDoc::Include.new 'Enumerable', nil
|
||||
@cFoo.add_include enum
|
||||
@cFooInc.instance_variable_set :@comment, ''
|
||||
|
||||
@driver.add_includes out, [[[@cFooInc, enum], @store]]
|
||||
|
||||
expected = @RM::Document.new(
|
||||
@RM::Rule.new(1),
|
||||
@RM::Heading.new(1, "Includes:"),
|
||||
@RM::Paragraph.new("(from #{@store.friendly_path})"),
|
||||
@RM::Verbatim.new(' ', 'Inc', "\n",
|
||||
' ', 'Enumerable', "\n"))
|
||||
|
||||
assert_equal expected, out
|
||||
end
|
||||
|
||||
def test_add_includes_one
|
||||
util_store
|
||||
|
||||
out = @RM::Document.new
|
||||
|
||||
@driver.add_includes out, [[[@cFooInc], @store]]
|
||||
|
||||
expected = @RM::Document.new(
|
||||
@RM::Rule.new(1),
|
||||
@RM::Heading.new(1, "Includes:"),
|
||||
@RM::Paragraph.new("Inc (from #{@store.friendly_path})"),
|
||||
@RM::BlankLine.new,
|
||||
@RM::Paragraph.new("Include thingy"),
|
||||
@RM::BlankLine.new)
|
||||
|
||||
assert_equal expected, out
|
||||
end
|
||||
|
||||
def test_add_method_list
|
||||
out = @RM::Document.new
|
||||
|
||||
@driver.add_method_list out, %w[new], 'Class methods'
|
||||
|
||||
expected = @RM::Document.new(
|
||||
@RM::Heading.new(1, 'Class methods:'),
|
||||
@RM::BlankLine.new,
|
||||
@RM::Verbatim.new(' ', 'new'),
|
||||
@RM::BlankLine.new)
|
||||
|
||||
assert_equal expected, out
|
||||
end
|
||||
|
||||
def test_add_method_list_none
|
||||
out = @RM::Document.new
|
||||
|
||||
@driver.add_method_list out, nil, 'Class'
|
||||
|
||||
assert_equal @RM::Document.new, out
|
||||
end
|
||||
|
||||
def test_ancestors_of
|
||||
util_ancestors_store
|
||||
|
||||
assert_equal %w[X Mixin Object Foo], @driver.ancestors_of('Foo::Bar')
|
||||
end
|
||||
|
||||
def test_classes
|
||||
util_multi_store
|
||||
|
||||
expected = {
|
||||
'Ambiguous' => [@store1, @store2],
|
||||
'Bar' => [@store2],
|
||||
'Foo' => [@store1],
|
||||
'Foo::Bar' => [@store1],
|
||||
'Foo::Baz' => [@store1, @store2],
|
||||
'Inc' => [@store1],
|
||||
}
|
||||
|
||||
assert_equal expected, @driver.classes
|
||||
end
|
||||
|
||||
def test_complete
|
||||
store = RDoc::RI::Store.new @home_ri
|
||||
store.cache[:ancestors] = {
|
||||
'Foo' => %w[Object],
|
||||
'Foo::Bar' => %w[Object],
|
||||
}
|
||||
store.cache[:class_methods] = {
|
||||
'Foo' => %w[bar]
|
||||
}
|
||||
store.cache[:instance_methods] = {
|
||||
'Foo' => %w[Bar]
|
||||
}
|
||||
store.cache[:modules] = %w[
|
||||
Foo
|
||||
Foo::Bar
|
||||
]
|
||||
|
||||
@driver.stores = [store]
|
||||
|
||||
assert_equal %w[Foo Foo::Bar], @driver.complete('F')
|
||||
assert_equal %w[ Foo::Bar], @driver.complete('Foo::B')
|
||||
|
||||
assert_equal %w[Foo#Bar], @driver.complete('Foo#'), 'Foo#'
|
||||
assert_equal %w[Foo#Bar Foo::bar], @driver.complete('Foo.'), 'Foo.'
|
||||
assert_equal %w[Foo::Bar Foo::bar], @driver.complete('Foo::'), 'Foo::'
|
||||
end
|
||||
|
||||
def test_complete_ancestor
|
||||
util_ancestors_store
|
||||
|
||||
assert_equal %w[Foo::Bar#i_method], @driver.complete('Foo::Bar#')
|
||||
|
||||
assert_equal %w[Foo::Bar#i_method Foo::Bar::c_method Foo::Bar::new],
|
||||
@driver.complete('Foo::Bar.')
|
||||
end
|
||||
|
||||
def test_complete_classes
|
||||
util_store
|
||||
|
||||
assert_equal %w[Foo Foo::Bar Foo::Baz], @driver.complete('F')
|
||||
assert_equal %w[Foo:: Foo::Bar Foo::Baz], @driver.complete('Foo::')
|
||||
assert_equal %w[ Foo::Bar Foo::Baz], @driver.complete('Foo::B')
|
||||
end
|
||||
|
||||
def test_complete_multistore
|
||||
util_multi_store
|
||||
|
||||
assert_equal %w[Bar], @driver.complete('B')
|
||||
assert_equal %w[Foo Foo::Bar Foo::Baz], @driver.complete('F')
|
||||
end
|
||||
|
||||
def test_display
|
||||
doc = @RM::Document.new(
|
||||
@RM::Paragraph.new('hi'))
|
||||
|
||||
out, err = capture_io do
|
||||
@driver.display doc
|
||||
end
|
||||
|
||||
assert @driver.lookup_method('Foo::Bar', 'Foo::Bar')
|
||||
assert_equal "hi\n", out
|
||||
end
|
||||
|
||||
def test_lookup_method_class_missing
|
||||
def @driver.load_cache_for(klassname) end
|
||||
def test_display_class
|
||||
util_store
|
||||
|
||||
assert_nil @driver.lookup_method('Foo#bar', 'Foo')
|
||||
end
|
||||
|
||||
def test_lookup_method_dot_instance
|
||||
def @driver.load_cache_for(klassname)
|
||||
{ 'Foo#bar' => :instance, 'Foo::bar' => :klass }
|
||||
out, err = capture_io do
|
||||
@driver.display_class 'Foo::Bar'
|
||||
end
|
||||
|
||||
assert_equal :instance, @driver.lookup_method('Foo.bar', 'Foo')
|
||||
assert_match %r%^= Foo::Bar%, out
|
||||
assert_match %r%^\(from%, out # )
|
||||
|
||||
assert_match %r%^= Class methods:%, out
|
||||
assert_match %r%^ new%, out
|
||||
assert_match %r%^= Instance methods:%, out
|
||||
assert_match %r%^ blah%, out
|
||||
assert_match %r%^= Attributes:%, out
|
||||
assert_match %r%^ attr_accessor attr%, out
|
||||
|
||||
assert_equal 1, out.scan(/-\n/).length
|
||||
end
|
||||
|
||||
def test_lookup_method_dot_class
|
||||
def @driver.load_cache_for(klassname)
|
||||
{ 'Foo::bar' => :found }
|
||||
def test_display_class_ambiguous
|
||||
util_multi_store
|
||||
|
||||
out, err = capture_io do
|
||||
@driver.display_class 'Ambiguous'
|
||||
end
|
||||
|
||||
assert @driver.lookup_method('Foo.bar', 'Foo')
|
||||
assert_match %r%^= Ambiguous < Object$%, out
|
||||
end
|
||||
|
||||
def test_lookup_method_method_missing
|
||||
def @driver.load_cache_for(klassname) {} end
|
||||
def test_display_class_multi_no_doc
|
||||
util_multi_store
|
||||
|
||||
assert_nil @driver.lookup_method('Foo#bar', 'Foo')
|
||||
out, err = capture_io do
|
||||
@driver.display_class 'Foo::Baz'
|
||||
end
|
||||
|
||||
assert_match %r%^= Foo::Baz%, out
|
||||
assert_match %r%-\n%, out
|
||||
assert_match %r%Also found in:%, out
|
||||
assert_match %r%#{Regexp.escape @home_ri}%, out
|
||||
assert_match %r%#{Regexp.escape @home_ri2}%, out
|
||||
end
|
||||
|
||||
def test_parse_name
|
||||
klass, meth = @driver.parse_name 'Foo::Bar'
|
||||
def test_display_class_superclass
|
||||
util_multi_store
|
||||
|
||||
assert_equal 'Foo::Bar', klass, 'Foo::Bar class'
|
||||
assert_equal nil, meth, 'Foo::Bar method'
|
||||
out, err = capture_io do
|
||||
@driver.display_class 'Bar'
|
||||
end
|
||||
|
||||
klass, meth = @driver.parse_name 'Foo#Bar'
|
||||
assert_match %r%^= Bar < Foo%, out
|
||||
end
|
||||
|
||||
def test_display_class_module
|
||||
util_store
|
||||
|
||||
out, err = capture_io do
|
||||
@driver.display_class 'Inc'
|
||||
end
|
||||
|
||||
assert_match %r%^= Inc$%, out
|
||||
end
|
||||
|
||||
def test_display_method
|
||||
util_store
|
||||
|
||||
out, err = capture_io do
|
||||
@driver.display_method 'Foo::Bar#blah'
|
||||
end
|
||||
|
||||
assert_match %r%Foo::Bar#blah%, out
|
||||
assert_match %r%blah.5%, out
|
||||
assert_match %r%blah.6%, out
|
||||
assert_match %r%yields: stuff%, out
|
||||
end
|
||||
|
||||
def test_display_method_attribute
|
||||
util_store
|
||||
|
||||
out, err = capture_io do
|
||||
@driver.display_method 'Foo::Bar#attr'
|
||||
end
|
||||
|
||||
assert_match %r%Foo::Bar#attr%, out
|
||||
refute_match %r%Implementation from%, out
|
||||
end
|
||||
|
||||
def test_display_method_inherited
|
||||
util_multi_store
|
||||
|
||||
out, err = capture_io do
|
||||
@driver.display_method 'Bar#inherit'
|
||||
end
|
||||
|
||||
assert_match %r%^= Bar#inherit%, out
|
||||
assert_match %r%^=== Implementation from Foo%, out
|
||||
end
|
||||
|
||||
def test_display_name_not_found_class
|
||||
util_store
|
||||
|
||||
out, err = capture_io do
|
||||
assert_equal false, @driver.display_name('Foo::B')
|
||||
end
|
||||
|
||||
expected = <<-EXPECTED
|
||||
Foo::B not found, maybe you meant:
|
||||
|
||||
Foo::Bar
|
||||
Foo::Baz
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, out
|
||||
end
|
||||
|
||||
def test_display_name_not_found_method
|
||||
util_store
|
||||
|
||||
out, err = capture_io do
|
||||
assert_equal false, @driver.display_name('Foo::Bar#b')
|
||||
end
|
||||
|
||||
expected = <<-EXPECTED
|
||||
Foo::Bar#b not found, maybe you meant:
|
||||
|
||||
Foo::Bar#blah
|
||||
Foo::Bar#bother
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, out
|
||||
end
|
||||
|
||||
def test_expand_class
|
||||
util_store
|
||||
|
||||
assert_equal 'Foo', @driver.expand_class('F')
|
||||
assert_equal 'Foo::Bar', @driver.expand_class('F::Bar')
|
||||
|
||||
assert_raises RDoc::RI::Driver::NotFoundError do
|
||||
@driver.expand_class 'F::B'
|
||||
end
|
||||
end
|
||||
|
||||
def test_expand_name
|
||||
util_store
|
||||
|
||||
assert_equal '.b', @driver.expand_name('b')
|
||||
assert_equal 'Foo', @driver.expand_name('F')
|
||||
assert_equal 'Foo::Bar#', @driver.expand_name('F::Bar#')
|
||||
|
||||
e = assert_raises RDoc::RI::Driver::NotFoundError do
|
||||
@driver.expand_name 'Z'
|
||||
end
|
||||
|
||||
assert_equal 'Z', e.name
|
||||
end
|
||||
|
||||
def test_find_methods
|
||||
util_store
|
||||
|
||||
items = []
|
||||
|
||||
@driver.find_methods 'Foo::Bar.' do |store, klass, ancestor, types, method|
|
||||
items << [store, klass, ancestor, types, method]
|
||||
end
|
||||
|
||||
expected = [
|
||||
[@store, 'Foo::Bar', 'Foo::Bar', :both, nil],
|
||||
]
|
||||
|
||||
assert_equal expected, items
|
||||
end
|
||||
|
||||
def test_find_methods_method
|
||||
util_store
|
||||
|
||||
items = []
|
||||
|
||||
@driver.find_methods '.blah' do |store, klass, ancestor, types, method|
|
||||
items << [store, klass, ancestor, types, method]
|
||||
end
|
||||
|
||||
expected = [
|
||||
[@store, 'Ambiguous', 'Ambiguous', :both, 'blah'],
|
||||
[@store, 'Foo', 'Foo', :both, 'blah'],
|
||||
[@store, 'Foo::Bar', 'Foo::Bar', :both, 'blah'],
|
||||
[@store, 'Foo::Baz', 'Foo::Baz', :both, 'blah'],
|
||||
[@store, 'Inc', 'Inc', :both, 'blah'],
|
||||
]
|
||||
|
||||
assert_equal expected, items
|
||||
end
|
||||
|
||||
def test_formatter
|
||||
driver = RDoc::RI::Driver.new
|
||||
|
||||
assert_instance_of @RM::ToAnsi, driver.formatter
|
||||
|
||||
driver.instance_variable_set :@paging, true
|
||||
|
||||
assert_instance_of @RM::ToBs, driver.formatter
|
||||
|
||||
driver.instance_variable_set :@formatter_klass, @RM::ToHtml
|
||||
|
||||
assert_instance_of @RM::ToHtml, driver.formatter
|
||||
end
|
||||
|
||||
def test_method_type
|
||||
assert_equal :both, @driver.method_type(nil)
|
||||
assert_equal :both, @driver.method_type('.')
|
||||
assert_equal :instance, @driver.method_type('#')
|
||||
assert_equal :class, @driver.method_type('::')
|
||||
end
|
||||
|
||||
def test_list_known_classes
|
||||
util_store
|
||||
|
||||
out, err = capture_io do
|
||||
@driver.list_known_classes
|
||||
end
|
||||
|
||||
assert_equal "Ambiguous\nFoo\nFoo::Bar\nFoo::Baz\nInc\n", out
|
||||
end
|
||||
|
||||
def test_list_methods_matching
|
||||
util_store
|
||||
|
||||
assert_equal %w[Foo::Bar#attr Foo::Bar#blah Foo::Bar#bother Foo::Bar::new],
|
||||
@driver.list_methods_matching('Foo::Bar.')
|
||||
end
|
||||
|
||||
def test_load_method
|
||||
util_store
|
||||
|
||||
method = @driver.load_method(@store, :instance_methods, 'Foo', '#',
|
||||
'inherit')
|
||||
|
||||
assert_equal @inherit, method
|
||||
end
|
||||
|
||||
def test_load_method_inherited
|
||||
util_multi_store
|
||||
|
||||
method = @driver.load_method(@store2, :instance_methods, 'Bar', '#',
|
||||
'inherit')
|
||||
|
||||
assert_equal nil, method
|
||||
end
|
||||
|
||||
def test_load_methods_matching
|
||||
util_store
|
||||
|
||||
expected = [[@store, [@inherit]]]
|
||||
|
||||
assert_equal expected, @driver.load_methods_matching('Foo#inherit')
|
||||
|
||||
expected = [[@store, [@blah]]]
|
||||
|
||||
assert_equal expected, @driver.load_methods_matching('.blah')
|
||||
|
||||
assert_empty @driver.load_methods_matching('.b')
|
||||
end
|
||||
|
||||
def test_load_methods_matching_inherited
|
||||
util_multi_store
|
||||
|
||||
expected = [[@store1, [@inherit]]]
|
||||
|
||||
assert_equal expected, @driver.load_methods_matching('Bar#inherit')
|
||||
end
|
||||
|
||||
def test_page
|
||||
@driver.use_stdout = false
|
||||
|
||||
@driver.page do |io|
|
||||
skip "couldn't find a standard pager" if io == $stdout
|
||||
|
||||
assert @driver.paging?
|
||||
end
|
||||
|
||||
refute @driver.paging?
|
||||
end
|
||||
|
||||
def test_page_stdout
|
||||
@driver.use_stdout = true
|
||||
|
||||
@driver.page do |io|
|
||||
assert_equal $stdout, io
|
||||
end
|
||||
|
||||
refute @driver.paging?
|
||||
end
|
||||
|
||||
def test_parse_name_method
|
||||
klass, type, meth = @driver.parse_name 'foo'
|
||||
|
||||
assert_equal '', klass, 'foo class'
|
||||
assert_equal '.', type, 'foo type'
|
||||
assert_equal 'foo', meth, 'foo method'
|
||||
|
||||
klass, type, meth = @driver.parse_name '#foo'
|
||||
|
||||
assert_equal '', klass, '#foo class'
|
||||
assert_equal '#', type, '#foo type'
|
||||
assert_equal 'foo', meth, '#foo method'
|
||||
|
||||
klass, type, meth = @driver.parse_name '::foo'
|
||||
|
||||
assert_equal '', klass, '::foo class'
|
||||
assert_equal '::', type, '::foo type'
|
||||
assert_equal 'foo', meth, '::foo method'
|
||||
end
|
||||
|
||||
def test_parse_name_single_class
|
||||
klass, type, meth = @driver.parse_name 'Foo'
|
||||
|
||||
assert_equal 'Foo', klass, 'Foo class'
|
||||
assert_equal nil, type, 'Foo type'
|
||||
assert_equal nil, meth, 'Foo method'
|
||||
|
||||
klass, type, meth = @driver.parse_name 'Foo#'
|
||||
|
||||
assert_equal 'Foo', klass, 'Foo# class'
|
||||
assert_equal '#', type, 'Foo# type'
|
||||
assert_equal nil, meth, 'Foo# method'
|
||||
|
||||
klass, type, meth = @driver.parse_name 'Foo::'
|
||||
|
||||
assert_equal 'Foo', klass, 'Foo:: class'
|
||||
assert_equal '::', type, 'Foo:: type'
|
||||
assert_equal nil, meth, 'Foo:: method'
|
||||
|
||||
klass, type, meth = @driver.parse_name 'Foo.'
|
||||
|
||||
assert_equal 'Foo', klass, 'Foo. class'
|
||||
assert_equal '.', type, 'Foo. type'
|
||||
assert_equal nil, meth, 'Foo. method'
|
||||
|
||||
klass, type, meth = @driver.parse_name 'Foo#Bar'
|
||||
|
||||
assert_equal 'Foo', klass, 'Foo#Bar class'
|
||||
assert_equal '#', type, 'Foo#Bar type'
|
||||
assert_equal 'Bar', meth, 'Foo#Bar method'
|
||||
|
||||
klass, meth = @driver.parse_name 'Foo.Bar'
|
||||
klass, type, meth = @driver.parse_name 'Foo.Bar'
|
||||
|
||||
assert_equal 'Foo', klass, 'Foo#Bar class'
|
||||
assert_equal 'Bar', meth, 'Foo#Bar method'
|
||||
assert_equal 'Foo', klass, 'Foo.Bar class'
|
||||
assert_equal '.', type, 'Foo.Bar type'
|
||||
assert_equal 'Bar', meth, 'Foo.Bar method'
|
||||
|
||||
klass, meth = @driver.parse_name 'Foo::bar'
|
||||
klass, type, meth = @driver.parse_name 'Foo::bar'
|
||||
|
||||
assert_equal 'Foo', klass, 'Foo::bar class'
|
||||
assert_equal '::', type, 'Foo::bar type'
|
||||
assert_equal 'bar', meth, 'Foo::bar method'
|
||||
end
|
||||
|
||||
def test_parse_name_namespace
|
||||
klass, type, meth = @driver.parse_name 'Foo::Bar'
|
||||
|
||||
assert_equal 'Foo::Bar', klass, 'Foo::Bar class'
|
||||
assert_equal nil, type, 'Foo::Bar type'
|
||||
assert_equal nil, meth, 'Foo::Bar method'
|
||||
|
||||
klass, type, meth = @driver.parse_name 'Foo::Bar#'
|
||||
|
||||
assert_equal 'Foo::Bar', klass, 'Foo::Bar# class'
|
||||
assert_equal '#', type, 'Foo::Bar# type'
|
||||
assert_equal nil, meth, 'Foo::Bar# method'
|
||||
|
||||
klass, type, meth = @driver.parse_name 'Foo::Bar#baz'
|
||||
|
||||
assert_equal 'Foo::Bar', klass, 'Foo::Bar#baz class'
|
||||
assert_equal '#', type, 'Foo::Bar#baz type'
|
||||
assert_equal 'baz', meth, 'Foo::Bar#baz method'
|
||||
end
|
||||
|
||||
def test_setup_pager
|
||||
@driver.use_stdout = false
|
||||
|
||||
pager = @driver.setup_pager
|
||||
|
||||
skip "couldn't find a standard pager" unless pager
|
||||
|
||||
assert @driver.paging?
|
||||
ensure
|
||||
pager.close if pager
|
||||
end
|
||||
|
||||
def util_ancestors_store
|
||||
store1 = RDoc::RI::Store.new @home_ri
|
||||
store1.cache[:ancestors] = {
|
||||
'Foo' => %w[Object],
|
||||
'Foo::Bar' => %w[Foo],
|
||||
}
|
||||
store1.cache[:class_methods] = {
|
||||
'Foo' => %w[c_method new],
|
||||
'Foo::Bar' => %w[new],
|
||||
}
|
||||
store1.cache[:instance_methods] = {
|
||||
'Foo' => %w[i_method],
|
||||
}
|
||||
store1.cache[:modules] = %w[
|
||||
Foo
|
||||
Foo::Bar
|
||||
]
|
||||
|
||||
store2 = RDoc::RI::Store.new @home_ri
|
||||
store2.cache[:ancestors] = {
|
||||
'Foo' => %w[Mixin Object],
|
||||
'Mixin' => %w[],
|
||||
'Object' => %w[X Object],
|
||||
'X' => %w[Object],
|
||||
}
|
||||
store2.cache[:class_methods] = {
|
||||
'Foo' => %w[c_method new],
|
||||
'Mixin' => %w[],
|
||||
'X' => %w[],
|
||||
'Object' => %w[],
|
||||
}
|
||||
store2.cache[:instance_methods] = {
|
||||
'Foo' => %w[i_method],
|
||||
'Mixin' => %w[],
|
||||
}
|
||||
store2.cache[:modules] = %w[
|
||||
Foo
|
||||
Mixin
|
||||
Object
|
||||
X
|
||||
]
|
||||
|
||||
@driver.stores = store1, store2
|
||||
end
|
||||
|
||||
def util_multi_store
|
||||
util_store
|
||||
@store1 = @store
|
||||
|
||||
@home_ri2 = "#{@home_ri}2"
|
||||
@store2 = RDoc::RI::Store.new @home_ri2
|
||||
|
||||
# as if seen in a namespace like class Ambiguous::Other
|
||||
@mAmbiguous = RDoc::NormalModule.new 'Ambiguous'
|
||||
|
||||
@cFoo = RDoc::NormalClass.new 'Foo'
|
||||
@cBar = RDoc::NormalClass.new 'Bar'
|
||||
@cBar.superclass = 'Foo'
|
||||
@cFoo_Baz = RDoc::NormalClass.new 'Baz'
|
||||
@cFoo_Baz.parent = @cFoo
|
||||
|
||||
@baz = RDoc::AnyMethod.new nil, 'baz'
|
||||
@cBar.add_method @baz
|
||||
|
||||
@store2.save_class @mAmbiguous
|
||||
@store2.save_class @cBar
|
||||
@store2.save_class @cFoo_Baz
|
||||
|
||||
@store2.save_method @cBar, @baz
|
||||
|
||||
@store2.save_cache
|
||||
|
||||
@driver.stores = [@store1, @store2]
|
||||
end
|
||||
|
||||
def util_store
|
||||
@store = RDoc::RI::Store.new @home_ri
|
||||
|
||||
@cFoo = RDoc::NormalClass.new 'Foo'
|
||||
@mInc = RDoc::NormalModule.new 'Inc'
|
||||
@cAmbiguous = RDoc::NormalClass.new 'Ambiguous'
|
||||
|
||||
doc = @RM::Document.new @RM::Paragraph.new('Include thingy')
|
||||
|
||||
@cFooInc = RDoc::Include.new 'Inc', doc
|
||||
@cFoo.add_include @cFooInc
|
||||
|
||||
@cFoo_Bar = RDoc::NormalClass.new 'Bar'
|
||||
@cFoo_Bar.parent = @cFoo
|
||||
|
||||
@blah = RDoc::AnyMethod.new nil, 'blah'
|
||||
@blah.call_seq = "blah(5) => 5\nblah(6) => 6\n"
|
||||
@blah.block_params = "stuff"
|
||||
|
||||
@bother = RDoc::AnyMethod.new nil, 'bother'
|
||||
|
||||
@new = RDoc::AnyMethod.new nil, 'new'
|
||||
@new.singleton = true
|
||||
|
||||
@cFoo_Bar.add_method @blah
|
||||
@cFoo_Bar.add_method @bother
|
||||
@cFoo_Bar.add_method @new
|
||||
|
||||
@attr = RDoc::Attr.new nil, 'attr', 'RW', ''
|
||||
|
||||
@cFoo_Bar.add_attribute @attr
|
||||
|
||||
@cFoo_Baz = RDoc::NormalClass.new 'Baz'
|
||||
@cFoo_Baz.parent = @cFoo
|
||||
|
||||
@inherit = RDoc::AnyMethod.new nil, 'inherit'
|
||||
@cFoo.add_method @inherit
|
||||
|
||||
@store.save_class @cFoo
|
||||
@store.save_class @cFoo_Bar
|
||||
@store.save_class @cFoo_Baz
|
||||
@store.save_class @mInc
|
||||
@store.save_class @cAmbiguous
|
||||
|
||||
@store.save_method @cFoo_Bar, @blah
|
||||
@store.save_method @cFoo_Bar, @bother
|
||||
@store.save_method @cFoo_Bar, @new
|
||||
@store.save_method @cFoo_Bar, @attr
|
||||
|
||||
@store.save_method @cFoo, @inherit
|
||||
|
||||
@store.save_cache
|
||||
|
||||
@driver.stores = [@store]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
|
|||
|
|
@ -1,320 +0,0 @@
|
|||
require 'stringio'
|
||||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'rdoc/ri/formatter'
|
||||
require 'rdoc/markup/to_flow'
|
||||
|
||||
class TestRDocRIFormatter < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@output = StringIO.new
|
||||
@width = 78
|
||||
@indent = ' '
|
||||
|
||||
@f = RDoc::RI::Formatter.new @output, @width, @indent
|
||||
@markup = RDoc::Markup.new
|
||||
@flow = RDoc::Markup::ToFlow.new
|
||||
end
|
||||
|
||||
def test_blankline
|
||||
@f.blankline
|
||||
|
||||
assert_equal "\n", @output.string
|
||||
end
|
||||
|
||||
def test_bold_print
|
||||
@f.bold_print 'a b c'
|
||||
|
||||
assert_equal 'a b c', @output.string
|
||||
end
|
||||
|
||||
def test_break_to_newline
|
||||
@f.break_to_newline
|
||||
|
||||
assert_equal '', @output.string
|
||||
end
|
||||
|
||||
def test_conv_html
|
||||
assert_equal '> < " &', @f.conv_html('> < " &')
|
||||
end
|
||||
|
||||
def test_conv_markup
|
||||
text = '<tt>a</tt> <code>b</code> <b>c</b> <em>d</em>'
|
||||
|
||||
expected = '+a+ +b+ *c* _d_'
|
||||
|
||||
assert_equal expected, @f.conv_markup(text)
|
||||
end
|
||||
|
||||
def test_display_flow
|
||||
flow = [
|
||||
RDoc::Markup::Flow::H.new(1, 'heading'),
|
||||
RDoc::Markup::Flow::P.new('paragraph'),
|
||||
]
|
||||
|
||||
@f.display_flow flow
|
||||
|
||||
assert_equal "\nHEADING\n=======\n\n paragraph\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_flow_item_h
|
||||
item = RDoc::Markup::Flow::H.new 1, 'heading'
|
||||
|
||||
@f.display_flow_item item
|
||||
|
||||
assert_equal "\nHEADING\n=======\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_flow_item_li
|
||||
item = RDoc::Markup::Flow::LI.new nil, 'paragraph'
|
||||
|
||||
@f.display_flow_item item
|
||||
|
||||
assert_equal " paragraph\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_flow_item_list
|
||||
item = RDoc::Markup::Flow::LIST.new :NUMBER
|
||||
|
||||
@f.display_flow_item item
|
||||
|
||||
assert_equal "", @output.string
|
||||
end
|
||||
|
||||
def test_display_flow_item_p
|
||||
item = RDoc::Markup::Flow::P.new 'paragraph'
|
||||
|
||||
@f.display_flow_item item
|
||||
|
||||
assert_equal " paragraph\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_flow_item_rule
|
||||
item = RDoc::Markup::Flow::RULE.new 1
|
||||
|
||||
@f.display_flow_item item
|
||||
|
||||
assert_equal "#{'-' * 78}\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_flow_item_unknown
|
||||
e = assert_raises RDoc::Error do
|
||||
@f.display_flow_item Object.new
|
||||
end
|
||||
|
||||
assert_equal "Unknown flow element: Object", e.message
|
||||
end
|
||||
|
||||
def test_display_flow_item_verb
|
||||
item = RDoc::Markup::Flow::VERB.new 'a b c'
|
||||
|
||||
@f.display_flow_item item
|
||||
|
||||
assert_equal " a b c\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_heading_1
|
||||
@f.display_heading 'heading', 1, ' '
|
||||
|
||||
assert_equal "\nHEADING\n=======\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_heading_2
|
||||
@f.display_heading 'heading', 2, ' '
|
||||
|
||||
assert_equal "\nheading\n-------\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_heading_3
|
||||
@f.display_heading 'heading', 3, ' '
|
||||
|
||||
assert_equal " heading\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_list
|
||||
list = RDoc::Markup::Flow::LIST.new :NUMBER
|
||||
list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
|
||||
list << RDoc::Markup::Flow::LI.new(nil, 'd e f')
|
||||
|
||||
@f.display_list list
|
||||
|
||||
assert_equal " 1. a b c\n\n 2. d e f\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_list_bullet
|
||||
list = RDoc::Markup::Flow::LIST.new :BULLET
|
||||
list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
|
||||
|
||||
@f.display_list list
|
||||
|
||||
assert_equal " * a b c\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_list_labeled
|
||||
list = RDoc::Markup::Flow::LIST.new :LABELED
|
||||
list << RDoc::Markup::Flow::LI.new('label', 'a b c')
|
||||
|
||||
@f.display_list list
|
||||
|
||||
assert_equal " label a b c\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_list_lower_alpha
|
||||
list = RDoc::Markup::Flow::LIST.new :LOWERALPHA
|
||||
list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
|
||||
|
||||
@f.display_list list
|
||||
|
||||
assert_equal " a. a b c\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_list_note
|
||||
list = RDoc::Markup::Flow::LIST.new :NOTE
|
||||
list << RDoc::Markup::Flow::LI.new('note:', 'a b c')
|
||||
|
||||
@f.display_list list
|
||||
|
||||
assert_equal " note: a b c\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_list_number
|
||||
list = RDoc::Markup::Flow::LIST.new :NUMBER
|
||||
list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
|
||||
|
||||
@f.display_list list
|
||||
|
||||
assert_equal " 1. a b c\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_list_unknown
|
||||
list = RDoc::Markup::Flow::LIST.new :UNKNOWN
|
||||
list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
|
||||
|
||||
e = assert_raises ArgumentError do
|
||||
@f.display_list list
|
||||
end
|
||||
|
||||
assert_equal 'unknown list type UNKNOWN', e.message
|
||||
end
|
||||
|
||||
def test_display_list_upper_alpha
|
||||
list = RDoc::Markup::Flow::LIST.new :UPPERALPHA
|
||||
list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
|
||||
|
||||
@f.display_list list
|
||||
|
||||
assert_equal " A. a b c\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_verbatim_flow_item
|
||||
verbatim = RDoc::Markup::Flow::VERB.new "a b c\nd e f"
|
||||
|
||||
@f.display_verbatim_flow_item verbatim
|
||||
|
||||
assert_equal " a b c\n d e f\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_display_verbatim_flow_item_bold
|
||||
verbatim = RDoc::Markup::Flow::VERB.new "*a* b c"
|
||||
|
||||
@f.display_verbatim_flow_item verbatim
|
||||
|
||||
assert_equal " *a* b c\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_draw_line
|
||||
@f.draw_line
|
||||
|
||||
expected = '-' * @width + "\n"
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_draw_line_label
|
||||
@f.draw_line 'label'
|
||||
|
||||
expected = '-' * (@width - 6) + " label\n"
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_draw_line_label_long
|
||||
@f.draw_line 'a' * @width
|
||||
|
||||
expected = '-' * @width + "\n" + ('a' * @width) + "\n"
|
||||
assert_equal expected, @output.string
|
||||
end
|
||||
|
||||
def test_raw_print_line
|
||||
@f.raw_print_line 'a b c'
|
||||
|
||||
assert_equal "a b c", @output.string
|
||||
end
|
||||
|
||||
def test_strip_attributes_b
|
||||
text = @f.strip_attributes 'hello <b>world</b>'
|
||||
|
||||
expected = 'hello world'
|
||||
|
||||
assert_equal expected, text
|
||||
end
|
||||
|
||||
def test_strip_attributes_code
|
||||
text = @f.strip_attributes 'hello <code>world</code>'
|
||||
|
||||
expected = 'hello world'
|
||||
|
||||
assert_equal expected, text
|
||||
end
|
||||
|
||||
def test_strip_attributes_em
|
||||
text = @f.strip_attributes 'hello <em>world</em>'
|
||||
|
||||
expected = 'hello world'
|
||||
|
||||
assert_equal expected, text
|
||||
end
|
||||
|
||||
def test_strip_attributes_i
|
||||
text = @f.strip_attributes 'hello <i>world</i>'
|
||||
|
||||
expected = 'hello world'
|
||||
|
||||
assert_equal expected, text
|
||||
end
|
||||
|
||||
def test_strip_attributes_tt
|
||||
text = @f.strip_attributes 'hello <tt>world</tt>'
|
||||
|
||||
expected = 'hello world'
|
||||
|
||||
assert_equal expected, text
|
||||
end
|
||||
|
||||
def test_wrap_empty
|
||||
@f.wrap ''
|
||||
assert_equal '', @output.string
|
||||
end
|
||||
|
||||
def test_wrap_long
|
||||
@f.wrap 'a ' * (@width / 2)
|
||||
assert_equal " a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a\n a \n",
|
||||
@output.string
|
||||
end
|
||||
|
||||
def test_wrap_markup
|
||||
@f.wrap 'a <tt>b</tt> c'
|
||||
assert_equal " a +b+ c\n", @output.string
|
||||
end
|
||||
|
||||
def test_wrap_nil
|
||||
@f.wrap nil
|
||||
assert_equal '', @output.string
|
||||
end
|
||||
|
||||
def test_wrap_short
|
||||
@f.wrap 'a b c'
|
||||
assert_equal " a b c\n", @output.string
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
require 'stringio'
|
||||
require 'rubygems'
|
||||
require 'minitest/unit'
|
||||
require 'rdoc/ri/formatter'
|
||||
require 'rdoc/markup/fragments'
|
||||
require 'rdoc/markup/to_flow'
|
||||
|
||||
class TestRDocRIOverstrikeFormatter < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@output = StringIO.new
|
||||
@width = 78
|
||||
@indent = ' '
|
||||
|
||||
@f = RDoc::RI::OverstrikeFormatter.new @output, @width, @indent
|
||||
@markup = RDoc::Markup.new
|
||||
@flow = RDoc::Markup::ToFlow.new
|
||||
|
||||
@af = RDoc::RI::AttributeFormatter
|
||||
end
|
||||
|
||||
def test_display_verbatim_flow_item_bold
|
||||
verbatim = RDoc::Markup::Flow::VERB.new "*a* b c"
|
||||
|
||||
@f.display_verbatim_flow_item verbatim
|
||||
|
||||
assert_equal " *a* b c\n\n", @output.string
|
||||
end
|
||||
|
||||
def test_write_attribute_text_bold
|
||||
line = [RDoc::RI::AttributeFormatter::AttrChar.new('b', @af::BOLD)]
|
||||
|
||||
@f.write_attribute_text ' ', line
|
||||
|
||||
assert_equal " b\bb\n", @output.string
|
||||
end
|
||||
|
||||
def test_write_attribute_text_bold_italic
|
||||
attr = @af::BOLD | @af::ITALIC
|
||||
line = [RDoc::RI::AttributeFormatter::AttrChar.new('d', attr)]
|
||||
|
||||
@f.write_attribute_text ' ', line
|
||||
|
||||
assert_equal " _\bd\bd\n", @output.string
|
||||
end
|
||||
|
||||
def test_write_attribute_text_code
|
||||
line = [RDoc::RI::AttributeFormatter::AttrChar.new('c', @af::CODE)]
|
||||
|
||||
@f.write_attribute_text ' ', line
|
||||
|
||||
assert_equal " _\bc\n", @output.string
|
||||
end
|
||||
|
||||
def test_write_attribute_text_italic
|
||||
line = [RDoc::RI::AttributeFormatter::AttrChar.new('a', @af::ITALIC)]
|
||||
|
||||
@f.write_attribute_text ' ', line
|
||||
|
||||
assert_equal " _\ba\n", @output.string
|
||||
end
|
||||
|
||||
def test_bold_print
|
||||
@f.bold_print 'a b c'
|
||||
|
||||
assert_equal "a\ba \b b\bb \b c\bc", @output.string
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
43
test/rdoc/test_rdoc_ri_paths.rb
Normal file
43
test/rdoc/test_rdoc_ri_paths.rb
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'tmpdir'
|
||||
require 'fileutils'
|
||||
require 'rdoc/ri/paths'
|
||||
|
||||
class TestRDocRIPaths < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
RDoc::RI::Paths.instance_variable_set :@gemdirs, %w[/nonexistent/gemdir]
|
||||
end
|
||||
|
||||
def teardown
|
||||
RDoc::RI::Paths.instance_variable_set :@gemdirs, nil
|
||||
end
|
||||
|
||||
def test_class_path_nonexistent
|
||||
path = RDoc::RI::Paths.path true, true, true, true, '/nonexistent'
|
||||
|
||||
refute_includes path, '/nonexistent'
|
||||
end
|
||||
|
||||
def test_class_raw_path
|
||||
path = RDoc::RI::Paths.raw_path true, true, true, true
|
||||
|
||||
assert_equal RDoc::RI::Paths::SYSDIR, path.shift
|
||||
assert_equal RDoc::RI::Paths::SITEDIR, path.shift
|
||||
assert_equal RDoc::RI::Paths::HOMEDIR, path.shift
|
||||
assert_equal '/nonexistent/gemdir', path.shift
|
||||
end
|
||||
|
||||
def test_class_raw_path_extra_dirs
|
||||
path = RDoc::RI::Paths.raw_path true, true, true, true, '/nonexistent'
|
||||
|
||||
assert_equal '/nonexistent', path.shift
|
||||
assert_equal RDoc::RI::Paths::SYSDIR, path.shift
|
||||
assert_equal RDoc::RI::Paths::SITEDIR, path.shift
|
||||
assert_equal RDoc::RI::Paths::HOMEDIR, path.shift
|
||||
assert_equal '/nonexistent/gemdir', path.shift
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
309
test/rdoc/test_rdoc_ri_store.rb
Normal file
309
test/rdoc/test_rdoc_ri_store.rb
Normal file
|
|
@ -0,0 +1,309 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/ri'
|
||||
require 'rdoc/markup'
|
||||
require 'tmpdir'
|
||||
require 'fileutils'
|
||||
|
||||
class TestRDocRIStore < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
RDoc::TopLevel.reset
|
||||
|
||||
@tmpdir = File.join Dir.tmpdir, "test_rdoc_ri_store_#{$$}"
|
||||
@s = RDoc::RI::Store.new @tmpdir
|
||||
|
||||
@top_level = RDoc::TopLevel.new 'file.rb'
|
||||
|
||||
@klass = @top_level.add_class RDoc::NormalClass, 'Object'
|
||||
@klass.comment = 'original'
|
||||
|
||||
@cmeth = RDoc::AnyMethod.new nil, 'cmethod'
|
||||
@cmeth.singleton = true
|
||||
|
||||
@meth = RDoc::AnyMethod.new nil, 'method'
|
||||
@meth_bang = RDoc::AnyMethod.new nil, 'method!'
|
||||
|
||||
@attr = RDoc::Attr.new nil, 'attr', 'RW', ''
|
||||
|
||||
@klass.add_method @cmeth
|
||||
@klass.add_method @meth
|
||||
@klass.add_method @meth_bang
|
||||
@klass.add_attribute @attr
|
||||
|
||||
@nest_klass = @klass.add_class RDoc::NormalClass, 'SubClass'
|
||||
@nest_meth = RDoc::AnyMethod.new nil, 'method'
|
||||
@nest_incl = RDoc::Include.new 'Incl', ''
|
||||
|
||||
@nest_klass.add_method @nest_meth
|
||||
@nest_klass.add_include @nest_incl
|
||||
|
||||
@RM = RDoc::Markup
|
||||
end
|
||||
|
||||
def teardown
|
||||
FileUtils.rm_rf @tmpdir
|
||||
end
|
||||
|
||||
def assert_cache imethods, cmethods, attrs, modules, ancestors = {}
|
||||
expected = {
|
||||
:class_methods => cmethods,
|
||||
:instance_methods => imethods,
|
||||
:attributes => attrs,
|
||||
:modules => modules,
|
||||
:ancestors => ancestors
|
||||
}
|
||||
|
||||
assert_equal expected, @s.cache
|
||||
end
|
||||
|
||||
def assert_directory path
|
||||
assert File.directory?(path), "#{path} is not a directory"
|
||||
end
|
||||
|
||||
def assert_file path
|
||||
assert File.file?(path), "#{path} is not a file"
|
||||
end
|
||||
|
||||
def test_attributes
|
||||
@s.cache[:attributes]['Object'] = %w[attr]
|
||||
|
||||
expected = { 'Object' => %w[attr] }
|
||||
|
||||
assert_equal expected, @s.attributes
|
||||
end
|
||||
|
||||
def test_class_file
|
||||
assert_equal File.join(@tmpdir, 'Object', 'cdesc-Object.ri'),
|
||||
@s.class_file('Object')
|
||||
assert_equal File.join(@tmpdir, 'Object', 'SubClass', 'cdesc-SubClass.ri'),
|
||||
@s.class_file('Object::SubClass')
|
||||
end
|
||||
|
||||
def test_class_methods
|
||||
@s.cache[:class_methods]['Object'] = %w[method]
|
||||
|
||||
expected = { 'Object' => %w[method] }
|
||||
|
||||
assert_equal expected, @s.class_methods
|
||||
end
|
||||
|
||||
def test_class_path
|
||||
assert_equal File.join(@tmpdir, 'Object'), @s.class_path('Object')
|
||||
assert_equal File.join(@tmpdir, 'Object', 'SubClass'),
|
||||
@s.class_path('Object::SubClass')
|
||||
end
|
||||
|
||||
def test_friendly_path
|
||||
@s.path = @tmpdir
|
||||
@s.type = nil
|
||||
assert_equal @s.path, @s.friendly_path
|
||||
|
||||
@s.type = :extra
|
||||
assert_equal @s.path, @s.friendly_path
|
||||
|
||||
@s.type = :system
|
||||
assert_equal "ruby core", @s.friendly_path
|
||||
|
||||
@s.type = :site
|
||||
assert_equal "ruby site", @s.friendly_path
|
||||
|
||||
@s.type = :home
|
||||
assert_equal "~/.ri", @s.friendly_path
|
||||
|
||||
@s.type = :gem
|
||||
@s.path = "#{@tmpdir}/gem_repository/doc/gem_name-1.0/ri"
|
||||
assert_equal "gem gem_name-1.0", @s.friendly_path
|
||||
end
|
||||
|
||||
def test_instance_methods
|
||||
@s.cache[:instance_methods]['Object'] = %w[method]
|
||||
|
||||
expected = { 'Object' => %w[method] }
|
||||
|
||||
assert_equal expected, @s.instance_methods
|
||||
end
|
||||
|
||||
def test_load_cache
|
||||
cache = {
|
||||
:methods => %w[Object#method],
|
||||
:modules => %w[Object],
|
||||
}
|
||||
|
||||
Dir.mkdir @tmpdir
|
||||
|
||||
open File.join(@tmpdir, 'cache.ri'), 'wb' do |io|
|
||||
Marshal.dump cache, io
|
||||
end
|
||||
|
||||
@s.load_cache
|
||||
|
||||
assert_equal cache, @s.cache
|
||||
end
|
||||
|
||||
def test_load_cache_no_cache
|
||||
cache = {
|
||||
:ancestors => {},
|
||||
:attributes => {},
|
||||
:class_methods => {},
|
||||
:instance_methods => {},
|
||||
:modules => [],
|
||||
}
|
||||
|
||||
@s.load_cache
|
||||
|
||||
assert_equal cache, @s.cache
|
||||
end
|
||||
|
||||
def test_load_class
|
||||
@s.save_class @klass
|
||||
|
||||
assert_equal @klass, @s.load_class('Object')
|
||||
end
|
||||
|
||||
def test_load_method_bang
|
||||
@s.save_method @klass, @meth_bang
|
||||
|
||||
meth = @s.load_method('Object', '#method!')
|
||||
assert_equal @meth_bang, meth
|
||||
end
|
||||
|
||||
def test_method_file
|
||||
assert_equal File.join(@tmpdir, 'Object', 'method-i.ri'),
|
||||
@s.method_file('Object', 'Object#method')
|
||||
|
||||
assert_equal File.join(@tmpdir, 'Object', 'method%21-i.ri'),
|
||||
@s.method_file('Object', 'Object#method!')
|
||||
|
||||
assert_equal File.join(@tmpdir, 'Object', 'SubClass', 'method%21-i.ri'),
|
||||
@s.method_file('Object::SubClass', 'Object::SubClass#method!')
|
||||
|
||||
assert_equal File.join(@tmpdir, 'Object', 'method-c.ri'),
|
||||
@s.method_file('Object', 'Object::method')
|
||||
end
|
||||
|
||||
def test_save_cache
|
||||
@s.save_class @klass
|
||||
@s.save_method @klass, @meth
|
||||
@s.save_method @klass, @cmeth
|
||||
@s.save_class @nest_klass
|
||||
|
||||
@s.save_cache
|
||||
|
||||
assert_file File.join(@tmpdir, 'cache.ri')
|
||||
|
||||
expected = {
|
||||
:attributes => { 'Object' => ['attr_accessor attr'] },
|
||||
:class_methods => { 'Object' => %w[cmethod] },
|
||||
:instance_methods => { 'Object' => %w[method] },
|
||||
:modules => %w[Object Object::SubClass],
|
||||
:ancestors => {
|
||||
'Object' => %w[Object],
|
||||
'Object::SubClass' => %w[Incl Object],
|
||||
},
|
||||
}
|
||||
|
||||
open File.join(@tmpdir, 'cache.ri'), 'rb' do |io|
|
||||
cache = Marshal.load io.read
|
||||
|
||||
assert_equal expected, cache
|
||||
end
|
||||
end
|
||||
|
||||
def test_save_cache_duplicate_methods
|
||||
@s.save_method @klass, @meth
|
||||
@s.save_method @klass, @meth
|
||||
|
||||
@s.save_cache
|
||||
|
||||
assert_cache({ 'Object' => %w[method] }, {}, {}, [])
|
||||
end
|
||||
|
||||
def test_save_class
|
||||
@s.save_class @klass
|
||||
|
||||
assert_directory File.join(@tmpdir, 'Object')
|
||||
assert_file File.join(@tmpdir, 'Object', 'cdesc-Object.ri')
|
||||
|
||||
assert_cache({}, {}, { 'Object' => ['attr_accessor attr'] }, %w[Object],
|
||||
'Object' => %w[Object])
|
||||
|
||||
assert_equal @klass, @s.load_class('Object')
|
||||
end
|
||||
|
||||
def test_save_class_basic_object
|
||||
@klass.instance_variable_set :@superclass, nil
|
||||
|
||||
@s.save_class @klass
|
||||
|
||||
assert_directory File.join(@tmpdir, 'Object')
|
||||
assert_file File.join(@tmpdir, 'Object', 'cdesc-Object.ri')
|
||||
|
||||
assert_cache({}, {}, { 'Object' => ['attr_accessor attr'] }, %w[Object],
|
||||
'Object' => %w[])
|
||||
|
||||
assert_equal @klass, @s.load_class('Object')
|
||||
end
|
||||
|
||||
def test_save_class_merge
|
||||
@s.save_class @klass
|
||||
|
||||
klass = RDoc::NormalClass.new 'Object'
|
||||
klass.comment = 'new class'
|
||||
|
||||
s = RDoc::RI::Store.new @tmpdir
|
||||
s.save_class klass
|
||||
|
||||
s = RDoc::RI::Store.new @tmpdir
|
||||
|
||||
document = @RM::Document.new(
|
||||
@RM::Paragraph.new('original'),
|
||||
@RM::Paragraph.new('new class'))
|
||||
|
||||
assert_equal document, s.load_class('Object').comment
|
||||
end
|
||||
|
||||
def test_save_class_methods
|
||||
@s.save_class @klass
|
||||
|
||||
assert_directory File.join(@tmpdir, 'Object')
|
||||
assert_file File.join(@tmpdir, 'Object', 'cdesc-Object.ri')
|
||||
|
||||
assert_cache({}, {}, { 'Object' => ['attr_accessor attr'] }, %w[Object],
|
||||
'Object' => %w[Object])
|
||||
|
||||
assert_equal @klass, @s.load_class('Object')
|
||||
end
|
||||
|
||||
def test_save_class_nested
|
||||
@s.save_class @nest_klass
|
||||
|
||||
assert_directory File.join(@tmpdir, 'Object', 'SubClass')
|
||||
assert_file File.join(@tmpdir, 'Object', 'SubClass', 'cdesc-SubClass.ri')
|
||||
|
||||
assert_cache({}, {}, {}, %w[Object::SubClass],
|
||||
'Object::SubClass' => %w[Incl Object])
|
||||
end
|
||||
|
||||
def test_save_method
|
||||
@s.save_method @klass, @meth
|
||||
|
||||
assert_directory File.join(@tmpdir, 'Object')
|
||||
assert_file File.join(@tmpdir, 'Object', 'method-i.ri')
|
||||
|
||||
assert_cache({ 'Object' => %w[method] }, {}, {}, [])
|
||||
|
||||
assert_equal @meth, @s.load_method('Object', '#method')
|
||||
end
|
||||
|
||||
def test_save_method_nested
|
||||
@s.save_method @nest_klass, @nest_meth
|
||||
|
||||
assert_directory File.join(@tmpdir, 'Object', 'SubClass')
|
||||
assert_file File.join(@tmpdir, 'Object', 'SubClass', 'method-i.ri')
|
||||
|
||||
assert_cache({ 'Object::SubClass' => %w[method] }, {}, {}, [])
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
64
test/rdoc/test_rdoc_task.rb
Normal file
64
test/rdoc/test_rdoc_task.rb
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc/task'
|
||||
|
||||
class TestRDocTask < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
Rake::Task.clear
|
||||
end
|
||||
|
||||
def test_tasks_creation
|
||||
RDoc::Task.new
|
||||
assert Rake::Task[:rdoc]
|
||||
assert Rake::Task[:clobber_rdoc]
|
||||
assert Rake::Task[:rerdoc]
|
||||
end
|
||||
|
||||
def test_tasks_creation_with_custom_name_symbol
|
||||
rd = RDoc::Task.new(:rdoc_dev)
|
||||
assert Rake::Task[:rdoc_dev]
|
||||
assert Rake::Task[:clobber_rdoc_dev]
|
||||
assert Rake::Task[:rerdoc_dev]
|
||||
assert_equal :rdoc_dev, rd.name
|
||||
end
|
||||
|
||||
def test_tasks_creation_with_custom_name_string
|
||||
rd = RDoc::Task.new("rdoc_dev")
|
||||
assert Rake::Task[:rdoc_dev]
|
||||
assert Rake::Task[:clobber_rdoc_dev]
|
||||
assert Rake::Task[:rerdoc_dev]
|
||||
assert_equal "rdoc_dev", rd.name
|
||||
end
|
||||
|
||||
def test_tasks_creation_with_custom_name_hash
|
||||
options = { :rdoc => "rdoc", :clobber_rdoc => "rdoc:clean", :rerdoc => "rdoc:force" }
|
||||
rd = RDoc::Task.new(options)
|
||||
assert Rake::Task[:"rdoc"]
|
||||
assert Rake::Task[:"rdoc:clean"]
|
||||
assert Rake::Task[:"rdoc:force"]
|
||||
assert_raises(RuntimeError) { Rake::Task[:clobber_rdoc] }
|
||||
assert_equal options, rd.name
|
||||
end
|
||||
|
||||
def test_tasks_creation_with_custom_name_hash_will_use_default_if_an_option_isnt_given
|
||||
rd = RDoc::Task.new(:clobber_rdoc => "rdoc:clean")
|
||||
assert Rake::Task[:rdoc]
|
||||
assert Rake::Task[:"rdoc:clean"]
|
||||
assert Rake::Task[:rerdoc]
|
||||
end
|
||||
|
||||
def test_tasks_creation_with_custom_name_hash_raises_exception_if_invalid_option_given
|
||||
assert_raises(ArgumentError) do
|
||||
RDoc::Task.new(:foo => "bar")
|
||||
end
|
||||
|
||||
begin
|
||||
RDoc::Task.new(:foo => "bar")
|
||||
rescue ArgumentError => e
|
||||
assert_match(/foo/, e.message)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
157
test/rdoc/test_rdoc_text.rb
Normal file
157
test/rdoc/test_rdoc_text.rb
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc'
|
||||
require 'rdoc/text'
|
||||
require 'rdoc/markup'
|
||||
require 'rdoc/markup/formatter'
|
||||
|
||||
class TestRDocText < MiniTest::Unit::TestCase
|
||||
|
||||
include RDoc::Text
|
||||
|
||||
def test_expand_tabs
|
||||
assert_equal("hello\n dave",
|
||||
expand_tabs("hello\n dave"), 'spaces')
|
||||
|
||||
assert_equal("hello\n dave",
|
||||
expand_tabs("hello\n\tdave"), 'tab')
|
||||
|
||||
assert_equal("hello\n dave",
|
||||
expand_tabs("hello\n \tdave"), '1 space tab')
|
||||
|
||||
assert_equal("hello\n dave",
|
||||
expand_tabs("hello\n \tdave"), '2 space tab')
|
||||
|
||||
assert_equal("hello\n dave",
|
||||
expand_tabs("hello\n \tdave"), '3 space tab')
|
||||
|
||||
assert_equal("hello\n dave",
|
||||
expand_tabs("hello\n \tdave"), '4 space tab')
|
||||
|
||||
assert_equal("hello\n dave",
|
||||
expand_tabs("hello\n \tdave"), '5 space tab')
|
||||
|
||||
assert_equal("hello\n dave",
|
||||
expand_tabs("hello\n \tdave"), '6 space tab')
|
||||
|
||||
assert_equal("hello\n dave",
|
||||
expand_tabs("hello\n \tdave"), '7 space tab')
|
||||
|
||||
assert_equal("hello\n dave",
|
||||
expand_tabs("hello\n \tdave"), '8 space tab')
|
||||
|
||||
assert_equal('. .',
|
||||
expand_tabs(".\t\t."), 'dot tab tab dot')
|
||||
end
|
||||
|
||||
def test_flush_left
|
||||
text = <<-TEXT
|
||||
|
||||
we don't worry too much.
|
||||
|
||||
The comments associated with
|
||||
TEXT
|
||||
|
||||
expected = <<-EXPECTED
|
||||
|
||||
we don't worry too much.
|
||||
|
||||
The comments associated with
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, flush_left(text)
|
||||
end
|
||||
|
||||
def test_markup
|
||||
def formatter() RDoc::Markup::ToHtml.new end
|
||||
|
||||
assert_equal "<p>\nhi\n</p>\n", markup('hi')
|
||||
end
|
||||
|
||||
def test_normalize_comment
|
||||
text = <<-TEXT
|
||||
##
|
||||
# we don't worry too much.
|
||||
#
|
||||
# The comments associated with
|
||||
TEXT
|
||||
|
||||
expected = <<-EXPECTED.rstrip
|
||||
we don't worry too much.
|
||||
|
||||
The comments associated with
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, normalize_comment(text)
|
||||
end
|
||||
|
||||
def test_parse
|
||||
assert_kind_of RDoc::Markup::Document, parse('hi')
|
||||
end
|
||||
|
||||
def test_parse_document
|
||||
assert_equal RDoc::Markup::Document.new, parse(RDoc::Markup::Document.new)
|
||||
end
|
||||
|
||||
def test_parse_empty
|
||||
assert_equal RDoc::Markup::Document.new, parse('')
|
||||
end
|
||||
|
||||
def test_parse_empty_newline
|
||||
assert_equal RDoc::Markup::Document.new, parse("#\n")
|
||||
end
|
||||
|
||||
def test_parse_newline
|
||||
assert_equal RDoc::Markup::Document.new, parse("\n")
|
||||
end
|
||||
|
||||
def test_strip_hashes
|
||||
text = <<-TEXT
|
||||
##
|
||||
# we don't worry too much.
|
||||
#
|
||||
# The comments associated with
|
||||
TEXT
|
||||
|
||||
expected = <<-EXPECTED
|
||||
|
||||
we don't worry too much.
|
||||
|
||||
The comments associated with
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, strip_hashes(text)
|
||||
end
|
||||
|
||||
def test_strip_newlines
|
||||
assert_equal ' ', strip_newlines("\n \n")
|
||||
|
||||
assert_equal 'hi', strip_newlines("\n\nhi")
|
||||
|
||||
assert_equal 'hi', strip_newlines( "hi\n\n")
|
||||
|
||||
assert_equal 'hi', strip_newlines("\n\nhi\n\n")
|
||||
end
|
||||
|
||||
def test_strip_stars
|
||||
text = <<-TEXT
|
||||
/*
|
||||
* * we don't worry too much.
|
||||
*
|
||||
* The comments associated with
|
||||
*/
|
||||
TEXT
|
||||
|
||||
expected = <<-EXPECTED
|
||||
|
||||
* we don't worry too much.
|
||||
|
||||
The comments associated with
|
||||
|
||||
EXPECTED
|
||||
|
||||
assert_equal expected, strip_stars(text)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
111
test/rdoc/test_rdoc_top_level.rb
Normal file
111
test/rdoc/test_rdoc_top_level.rb
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require File.expand_path '../xref_test_case', __FILE__
|
||||
|
||||
class TestRDocTopLevel < XrefTestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
|
||||
@top_level = RDoc::TopLevel.new 'path/top_level.rb'
|
||||
end
|
||||
|
||||
def test_class_all_classes_and_modules
|
||||
expected = %w[
|
||||
C1 C2 C2::C3 C2::C3::H1 C3 C3::H1 C3::H2 C4 C4::C4 C5 C5::C1 M1 M1::M2
|
||||
]
|
||||
|
||||
assert_equal expected,
|
||||
RDoc::TopLevel.all_classes_and_modules.map { |m| m.full_name }.sort
|
||||
end
|
||||
|
||||
def test_class_classes
|
||||
expected = %w[
|
||||
C1 C2 C2::C3 C2::C3::H1 C3 C3::H1 C3::H2 C4 C4::C4 C5 C5::C1
|
||||
]
|
||||
|
||||
assert_equal expected, RDoc::TopLevel.classes.map { |m| m.full_name }.sort
|
||||
end
|
||||
|
||||
def test_class_files
|
||||
assert_equal %w[path/top_level.rb xref_data.rb],
|
||||
RDoc::TopLevel.files.map { |m| m.full_name }.sort
|
||||
end
|
||||
|
||||
def test_class_find_class_named
|
||||
assert_equal @c1, RDoc::TopLevel.find_class_named('C1')
|
||||
|
||||
assert_equal @c2_c3, RDoc::TopLevel.find_class_named('C2::C3')
|
||||
end
|
||||
|
||||
def test_class_find_class_named_from
|
||||
assert_equal @c5_c1, RDoc::TopLevel.find_class_named_from('C1', 'C5')
|
||||
|
||||
assert_equal @c1, RDoc::TopLevel.find_class_named_from('C1', 'C4')
|
||||
end
|
||||
|
||||
def test_class_find_class_or_module
|
||||
assert_equal @m1, RDoc::TopLevel.find_class_or_module('M1')
|
||||
assert_equal @c1, RDoc::TopLevel.find_class_or_module('C1')
|
||||
|
||||
assert_equal @m1, RDoc::TopLevel.find_class_or_module('::M1')
|
||||
assert_equal @c1, RDoc::TopLevel.find_class_or_module('::C1')
|
||||
end
|
||||
|
||||
def test_class_find_file_named
|
||||
assert_equal @xref_data, RDoc::TopLevel.find_file_named(@file_name)
|
||||
end
|
||||
|
||||
def test_class_find_module_named
|
||||
assert_equal @m1, RDoc::TopLevel.find_module_named('M1')
|
||||
assert_equal @m1_m2, RDoc::TopLevel.find_module_named('M1::M2')
|
||||
end
|
||||
|
||||
def test_class_modules
|
||||
assert_equal %w[M1 M1::M2],
|
||||
RDoc::TopLevel.modules.map { |m| m.full_name }.sort
|
||||
end
|
||||
|
||||
def test_class_reset
|
||||
RDoc::TopLevel.reset
|
||||
|
||||
assert_empty RDoc::TopLevel.classes
|
||||
assert_empty RDoc::TopLevel.modules
|
||||
assert_empty RDoc::TopLevel.files
|
||||
end
|
||||
|
||||
def test_base_name
|
||||
assert_equal 'top_level.rb', @top_level.base_name
|
||||
end
|
||||
|
||||
def test_find_class_or_module
|
||||
assert_equal @c1, @xref_data.find_class_or_module('C1')
|
||||
assert_equal @c2_c3, @xref_data.find_class_or_module('C2::C3')
|
||||
assert_equal @c4, @xref_data.find_class_or_module('C4')
|
||||
assert_equal @m1_m2, @xref_data.find_class_or_module('M1::M2')
|
||||
end
|
||||
|
||||
def test_full_name
|
||||
assert_equal 'path/top_level.rb', @top_level.full_name
|
||||
end
|
||||
|
||||
def test_http_url
|
||||
assert_equal 'prefix/path/top_level_rb.html', @top_level.http_url('prefix')
|
||||
end
|
||||
|
||||
def test_last_modified
|
||||
assert_equal 'Unknown', @top_level.last_modified
|
||||
|
||||
stat = Object.new
|
||||
def stat.mtime() 0 end
|
||||
@top_level.file_stat = stat
|
||||
|
||||
assert_equal '0', @top_level.last_modified
|
||||
end
|
||||
|
||||
def test_name
|
||||
assert_equal 'top_level.rb', @top_level.name
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
54
test/rdoc/xref_data.rb
Normal file
54
test/rdoc/xref_data.rb
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
XREF_DATA = <<-XREF_DATA
|
||||
class C1
|
||||
|
||||
attr :attr
|
||||
attr_reader :attr_reader
|
||||
attr_writer :attr_writer
|
||||
attr_accessor :attr_accessor
|
||||
|
||||
CONST = :const
|
||||
|
||||
def self.m
|
||||
end
|
||||
|
||||
def m
|
||||
end
|
||||
end
|
||||
|
||||
class C2
|
||||
class C3
|
||||
def m
|
||||
end
|
||||
|
||||
class H1
|
||||
def m?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class C3
|
||||
class H1
|
||||
end
|
||||
|
||||
class H2 < H1
|
||||
end
|
||||
end
|
||||
|
||||
class C4
|
||||
class C4
|
||||
end
|
||||
end
|
||||
|
||||
class C5
|
||||
class C1
|
||||
end
|
||||
end
|
||||
|
||||
module M1
|
||||
end
|
||||
|
||||
module M1::M2
|
||||
end
|
||||
XREF_DATA
|
||||
|
||||
53
test/rdoc/xref_test_case.rb
Normal file
53
test/rdoc/xref_test_case.rb
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
ENV['RDOC_TEST'] = 'yes'
|
||||
|
||||
require 'rubygems'
|
||||
require 'minitest/autorun'
|
||||
require 'rdoc'
|
||||
require 'rdoc/stats'
|
||||
require 'rdoc/options'
|
||||
require 'rdoc/code_objects'
|
||||
require 'rdoc/parser/ruby'
|
||||
require File.expand_path '../xref_data', __FILE__
|
||||
|
||||
class XrefTestCase < MiniTest::Unit::TestCase
|
||||
|
||||
def setup
|
||||
RDoc::TopLevel.reset
|
||||
RDoc::AnyMethod.reset
|
||||
|
||||
@file_name = 'xref_data.rb'
|
||||
@xref_data = RDoc::TopLevel.new @file_name
|
||||
|
||||
@options = RDoc::Options.new
|
||||
@options.quiet = true
|
||||
|
||||
stats = RDoc::Stats.new 0
|
||||
|
||||
parser = RDoc::Parser::Ruby.new @xref_data, @file_name, XREF_DATA, @options,
|
||||
stats
|
||||
@top_levels = []
|
||||
@top_levels.push parser.scan
|
||||
|
||||
generator = Object.new
|
||||
def generator.class_dir() nil end
|
||||
def generator.file_dir() nil end
|
||||
rdoc = RDoc::RDoc.new
|
||||
RDoc::RDoc.current = rdoc
|
||||
rdoc.generator = generator
|
||||
|
||||
@c1 = @xref_data.find_module_named 'C1'
|
||||
@c2 = @xref_data.find_module_named 'C2'
|
||||
@c2_c3 = @xref_data.find_module_named 'C2::C3'
|
||||
@c3 = @xref_data.find_module_named 'C3'
|
||||
@c4 = @xref_data.find_module_named 'C4'
|
||||
@c4_c4 = @xref_data.find_module_named 'C4::C4'
|
||||
@c5_c1 = @xref_data.find_module_named 'C5::C1'
|
||||
@c3_h1 = @xref_data.find_module_named 'C3::H1'
|
||||
@c3_h2 = @xref_data.find_module_named 'C3::H2'
|
||||
|
||||
@m1 = @xref_data.find_module_named 'M1'
|
||||
@m1_m2 = @xref_data.find_module_named 'M1::M2'
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue