summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--lib/rdoc/options.rb6
-rw-r--r--lib/rdoc/parser.rb5
-rw-r--r--lib/rdoc/parser/ruby.rb6
-rw-r--r--test/rdoc/test_rdoc_info_sections.rb99
5 files changed, 86 insertions, 34 deletions
diff --git a/ChangeLog b/ChangeLog
index d21bdda97c..2bcf64da62 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/lib/rdoc/options.rb b/lib/rdoc/options.rb
index 4fedb40b9c..886d9f77cd 100644
--- a/lib/rdoc/options.rb
+++ b/lib/rdoc/options.rb
@@ -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
diff --git a/lib/rdoc/parser.rb b/lib/rdoc/parser.rb
index ea4676c626..4472a8bb7c 100644
--- a/lib/rdoc/parser.rb
+++ b/lib/rdoc/parser.rb
@@ -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
diff --git a/lib/rdoc/parser/ruby.rb b/lib/rdoc/parser/ruby.rb
index e00d727f9e..26757256ad 100644
--- a/lib/rdoc/parser/ruby.rb
+++ b/lib/rdoc/parser/ruby.rb
@@ -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
diff --git a/test/rdoc/test_rdoc_info_sections.rb b/test/rdoc/test_rdoc_info_sections.rb
index 2b6ff6adcb..4cc982613e 100644
--- a/test/rdoc/test_rdoc_info_sections.rb
+++ b/test/rdoc/test_rdoc_info_sections.rb
@@ -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