зеркало из https://github.com/github/ruby.git
302 строки
6.8 KiB
Ruby
302 строки
6.8 KiB
Ruby
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
|