1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/rdoc.rb: Import RDoc 3.7 release candidate

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32115 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2011-06-16 04:59:24 +00:00
parent 97ac172d58
commit b7528b5edb
58 changed files with 2637 additions and 277 deletions

View file

@ -46,7 +46,7 @@ assert call-seq correct
=end
class RDoc::Parser::C
attr_accessor :classes, :singleton_classes
attr_accessor :classes
public :do_classes, :do_constants
end
@ -70,6 +70,22 @@ class TestRDocParserC < MiniTest::Unit::TestCase
@tempfile.close
end
def test_class_can_parse
c_parser = RDoc::Parser::C
assert_equal c_parser, c_parser.can_parse('file.C')
assert_equal c_parser, c_parser.can_parse('file.CC')
assert_equal c_parser, c_parser.can_parse('file.H')
assert_equal c_parser, c_parser.can_parse('file.HH')
assert_equal c_parser, c_parser.can_parse('file.c')
assert_equal c_parser, c_parser.can_parse('file.cc')
assert_equal c_parser, c_parser.can_parse('file.cpp')
assert_equal c_parser, c_parser.can_parse('file.cxx')
assert_equal c_parser, c_parser.can_parse('file.h')
assert_equal c_parser, c_parser.can_parse('file.hh')
assert_equal c_parser, c_parser.can_parse('file.y')
end
def test_do_attr_rb_attr
content = <<-EOF
void Init_Blah(void) {
@ -224,6 +240,21 @@ VALUE cFoo = boot_defclass("Foo", 0);
assert_equal nil, klass.superclass
end
def test_do_aliases_missing_class
content = <<-EOF
void Init_Blah(void) {
rb_define_alias(cDate, "b", "a");
}
EOF
_, err = capture_io do
refute util_get_class(content, 'cDate')
end
assert_equal "Enclosing class/module \"cDate\" for alias b a not known\n",
err
end
def test_do_classes_class
content = <<-EOF
/* Document-class: Foo
@ -398,6 +429,140 @@ Multiline comment goes here because this comment spans multiple lines.
assert constants.empty?, constants.inspect
end
def test_do_constants_curses
content = <<-EOF
void Init_curses(){
mCurses = rb_define_module("Curses");
/*
* Document-const: Curses::COLOR_BLACK
*
* Value of the color black
*/
rb_curses_define_const(COLOR_BLACK);
}
EOF
@parser = util_parser content
@parser.do_classes
@parser.do_constants
klass = @parser.classes['mCurses']
constants = klass.constants
refute_empty klass.constants
assert_equal 'COLOR_BLACK', constants.first.name
assert_equal 'UINT2NUM(COLOR_BLACK)', constants.first.value
assert_equal 'Value of the color black', constants.first.comment
end
def test_do_includes
content = <<-EOF
Init_foo() {
VALUE cFoo = rb_define_class("Foo", rb_cObject);
VALUE mInc = rb_define_module("Inc");
rb_include_module(cFoo, mInc);
}
EOF
klass = util_get_class content, 'cFoo'
incl = klass.includes.first
assert_equal 'Inc', incl.name
assert_equal '', incl.comment
assert_equal @top_level, incl.file
end
# HACK parsing warning instead of setting up in file
def test_do_methods_in_c
content = <<-EOF
VALUE blah(VALUE klass, VALUE year) {
}
void Init_Blah(void) {
cDate = rb_define_class("Date", rb_cObject);
rb_define_method(cDate, "blah", blah, 1); /* in blah.c */
}
EOF
klass = nil
_, err = capture_io do
klass = util_get_class content, 'cDate'
end
assert_match ' blah.c ', err
end
# HACK parsing warning instead of setting up in file
def test_do_methods_in_cpp
content = <<-EOF
VALUE blah(VALUE klass, VALUE year) {
}
void Init_Blah(void) {
cDate = rb_define_class("Date", rb_cObject);
rb_define_method(cDate, "blah", blah, 1); /* in blah.cpp */
}
EOF
klass = nil
_, err = capture_io do
klass = util_get_class content, 'cDate'
end
assert_match ' blah.cpp ', err
end
# HACK parsing warning instead of setting up in file
def test_do_methods_in_y
content = <<-EOF
VALUE blah(VALUE klass, VALUE year) {
}
void Init_Blah(void) {
cDate = rb_define_class("Date", rb_cObject);
rb_define_method(cDate, "blah", blah, 1); /* in blah.y */
}
EOF
klass = nil
_, err = capture_io do
klass = util_get_class content, 'cDate'
end
assert_match ' blah.y ', err
end
def test_do_methods_singleton_class
content = <<-EOF
VALUE blah(VALUE klass, VALUE year) {
}
void Init_Blah(void) {
cDate = rb_define_class("Date", rb_cObject);
sDate = rb_singleton_class(cDate);
rb_define_method(sDate, "blah", blah, 1);
}
EOF
klass = util_get_class content, 'cDate'
methods = klass.method_list
assert_equal 1, methods.length
assert_equal 'blah', methods.first.name
assert methods.first.singleton
end
def test_find_alias_comment
parser = util_parser ''
@ -525,6 +690,53 @@ Init_Foo(void) {
assert_equal '', klass.comment
end
def test_find_const_comment_rb_define
content = <<-EOF
/*
* A comment
*/
rb_define_const(cFoo, "CONST", value);
EOF
parser = util_parser content
comment = parser.find_const_comment 'const', 'CONST'
assert_equal "/*\n * A comment\n */\n", comment
end
def test_find_const_comment_document_const
content = <<-EOF
/*
* Document-const: CONST
*
* A comment
*/
EOF
parser = util_parser content
comment = parser.find_const_comment nil, 'CONST'
assert_equal " *\n * A comment\n */", comment
end
def test_find_const_comment_document_const_full_name
content = <<-EOF
/*
* Document-const: Foo::CONST
*
* A comment
*/
EOF
parser = util_parser content
comment = parser.find_const_comment nil, 'CONST', 'Foo'
assert_equal " *\n * A comment\n */", comment
end
def test_find_body
content = <<-EOF
/*
@ -699,6 +911,81 @@ Init_Foo(void) {
assert_equal "a comment for bar", baz.comment
end
def test_find_body_document_method_equals
content = <<-EOF
/*
* Document-method: Zlib::GzipFile#mtime=
*
* A comment
*/
static VALUE
rb_gzfile_set_mtime(VALUE obj, VALUE mtime)
{
void
Init_zlib() {
mZlib = rb_define_module("Zlib");
cGzipFile = rb_define_class_under(mZlib, "GzipFile", rb_cObject);
cGzipWriter = rb_define_class_under(mZlib, "GzipWriter", cGzipFile);
rb_define_method(cGzipWriter, "mtime=", rb_gzfile_set_mtime, 1);
}
EOF
klass = util_get_class content, 'cGzipWriter'
assert_equal 1, klass.method_list.length
methods = klass.method_list.sort
bar = methods.first
assert_equal 'Zlib::GzipWriter#mtime=', bar.full_name
assert_equal 'A comment', bar.comment
end
def test_find_body_document_method_same
content = <<-EOF
VALUE
s_bar() {
}
VALUE
bar() {
}
/*
* Document-method: Foo::bar
*
* a comment for Foo::bar
*/
/*
* Document-method: Foo#bar
*
* a comment for Foo#bar
*/
void
Init_Foo(void) {
VALUE foo = rb_define_class("Foo", rb_cObject);
rb_define_singleton_method(foo, "bar", s_bar, 0);
rb_define_method(foo, "bar", bar, 0);
}
EOF
klass = util_get_class content, 'foo'
assert_equal 2, klass.method_list.length
methods = klass.method_list.sort
s_bar = methods.first
assert_equal 'Foo::bar', s_bar.full_name
assert_equal "a comment for Foo::bar", s_bar.comment
bar = methods.last
assert_equal 'Foo#bar', bar.full_name
assert_equal "a comment for Foo#bar", bar.comment
end
def test_find_modifiers_call_seq
comment = <<-COMMENT
/* call-seq:
@ -830,7 +1117,6 @@ rb_m(int argc, VALUE *argv, VALUE obj) {
assert_equal '(p1)', m.params
end
def test_handle_method_args_0
parser = util_parser "Document-method: BasicObject#==\n blah */"
@ -905,6 +1191,20 @@ rb_m(int argc, VALUE *argv, VALUE obj) {
assert_equal :public, new.visibility
end
def test_handle_singleton
parser = util_parser <<-SINGLE
void Init_Blah(void) {
cDate = rb_define_class("Date", rb_cObject);
sDate = rb_singleton_class(cDate);
}
SINGLE
parser.scan
assert_equal 'Date', parser.known_classes['sDate']
assert_equal 'Date', parser.singleton_classes['sDate']
end
def test_look_for_directives_in
parser = util_parser ''