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

Import RDoc r104. Various test fixes.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18131 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2008-07-18 21:10:47 +00:00
parent dbd68031e0
commit 71b4ecb3d3
5 changed files with 86 additions and 34 deletions

View file

@ -1,3 +1,7 @@
Sat Jul 19 06:08:43 2008 Eric Hodel <drbrain@segment7.net>
* lib/rdoc*: Import RDoc r104. Various make test-all fixes.
Sat Jul 19 00:27:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
* numeric.c (check_uint, rb_num2uint, rb_fix2uint): fixed wrong check

View file

@ -154,7 +154,7 @@ class RDoc::Options
attr_reader :webcvs
def initialize(generators) # :nodoc:
def initialize(generators = {}) # :nodoc:
@op_dir = "doc"
@op_name = nil
@show_all = false
@ -613,8 +613,8 @@ Usage: #{opt.program_name} [options] [names...]
def check_files
@files.each do |f|
stat = File.stat f rescue abort("File not found: #{f}")
abort("File '#{f}' not readable") unless stat.readable?
stat = File.stat f
raise RDoc::Error, "file '#{f}' not readable" unless stat.readable?
end
end

View file

@ -53,10 +53,13 @@ class RDoc::Parser
# "new_ext" will be parsed using the same parser as "old_ext"
def self.alias_extension(old_ext, new_ext)
old_ext = old_ext.sub(/^\.(.*)/, '\1')
new_ext = new_ext.sub(/^\.(.*)/, '\1')
parser = can_parse "xxx.#{old_ext}"
return false unless parser
RDoc::Parser.parsers.unshift [/\.#{new_ext}$/, parser.last]
RDoc::Parser.parsers.unshift [/\.#{new_ext}$/, parser]
true
end

View file

@ -540,8 +540,10 @@ class RDoc::RubyLex
begin
tk = @OP.match(self)
@space_seen = TkSPACE === tk
rescue SyntaxError
abort if @exception_on_syntax_error
rescue SyntaxError => e
raise RDoc::Error, "syntax error: #{e.message}" if
@exception_on_syntax_error
tk = TkError.new(line_no, char_no)
end
end while @skip_space and TkSPACE === tk

View file

@ -1,33 +1,38 @@
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib/'
require 'fileutils'
require 'tempfile'
require 'test/unit'
require 'tmpdir'
require 'rdoc/generator/texinfo'
require 'yaml'
# 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 < Test::Unit::TestCase
OUTPUT_DIR = "/tmp/rdoc-#{$$}"
def setup
# supress stdout
$stdout = File.new('/dev/null','w')
$stderr = File.new('/dev/null','w')
@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',
File.expand_path(File.dirname(__FILE__) + '/../lib/rdoc/generator/texinfo.rb'),
File.expand_path(File.dirname(__FILE__) + '/../README.txt'),
"--op=#{OUTPUT_DIR}"])
@text = File.read(OUTPUT_DIR + '/rdoc.texinfo')
@rdoc.document(['--fmt=texinfo', '--quiet', @input_file.path,
"--op=#{@output_dir}"])
@text = File.read @output_file
end
def teardown
$stdout = STDOUT
$stderr = STDERR
FileUtils.rm_rf OUTPUT_DIR
@input_file.close
FileUtils.rm_rf @output_dir
end
def test_output_exists
@ -35,34 +40,37 @@ class TestRdocInfoSections < Test::Unit::TestCase
end
def test_each_class_has_a_chapter
assert_section "Class RDoc::Generator::Texinfo", '@chapter'
assert_section "Class RDoc::Generator::TexinfoTemplate", '@chapter'
assert_section "Class MyClass", '@chapter'
end
def test_class_descriptions_are_given
assert_match(/This generates .*Texinfo.* files for viewing with GNU Info or Emacs from .*RDoc.* extracted from Ruby source files/, @text.gsub("\n", ' '))
assert_match(/Documentation for my class/, @text.gsub("\n", ' '))
end
def test_included_modules_are_given
assert_match(/Includes.* Generator::MarkUp/m, @text)
assert_match(/Includes.* MyModule/m, @text)
end
def test_class_methods_are_given
assert_match(/new\(options\)/, @text)
assert_match(/my_class_method\(my_first_argument\)/, @text)
end
def test_classes_instance_methods_are_given
assert_section 'Class RDoc::Generator::Texinfo#generate'
assert_match(/generate\(toplevels\)/, @text)
assert_section 'Class MyClass#my_method'
assert_match(/my_method\(my_first_argument\)/, @text)
end
def test_each_module_has_a_chapter
assert_section "RDoc", '@chapter'
assert_section "Generator", '@chapter'
assert_section 'MyModule', '@chapter'
end
def test_methods_are_shown_only_once
methods = @rdoc.gen.classes.map { |c| c.methods.map{ |m| c.name + '#' + m.name } }.flatten
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
@ -82,12 +90,47 @@ class TestRdocInfoSections < Test::Unit::TestCase
# def test_oh_yeah_dont_forget_files
# end
private
def assert_section(name, command = '@section')
assert_match Regexp.new("^#{command}.*#{Regexp.escape name}"), @text, "Could not find a #{command} #{name}"
end
# def puts(*args)
# @real_stdout.puts(*args)
# 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