require 'tempfile'
require 'rubygems'
require 'minitest/autorun'
require 'rdoc/markup/preprocess'
require 'rdoc/code_objects'
class TestRDocMarkupPreProcess < MiniTest::Unit::TestCase
def setup
RDoc::Markup::PreProcess.registered.clear
@tempfile = Tempfile.new 'test_rdoc_markup_pre_process'
@tempfile.binmode
@name = File.basename @tempfile.path
@dir = File.dirname @tempfile.path
@pp = RDoc::Markup::PreProcess.new __FILE__, [@dir]
end
def teardown
@tempfile.close
end
def test_include_file
@tempfile.write <<-INCLUDE
# -*- mode: rdoc; coding: utf-8; fill-column: 74; -*-
Regular expressions (regexps) are patterns which describe the
contents of a string.
INCLUDE
@tempfile.flush
@tempfile.rewind
content = @pp.include_file @name, ''
expected = <<-EXPECTED
Regular expressions (regexps) are patterns which describe the
contents of a string.
EXPECTED
assert_equal expected, content
end
def test_handle
text = "# :x: y\n"
out = @pp.handle text
assert_same out, text
assert_equal "# :x: y\n", text
end
def test_handle_block
text = "# :x: y\n"
@pp.handle text do |directive, param|
false
end
assert_equal "# :x: y\n", text
@pp.handle text do |directive, param|
''
end
assert_equal "", text
end
def test_handle_code_object
cd = RDoc::CodeObject.new
text = "# :x: y\n"
@pp.handle text, cd
assert_equal "# :x: y\n", text
assert_equal 'y', cd.metadata['x']
cd.metadata.clear
text = "# :x:\n"
@pp.handle text, cd
assert_equal "# :x: \n", text
assert_includes cd.metadata, 'x'
end
def test_handle_code_object_block
cd = RDoc::CodeObject.new
text = "# :x: y\n"
@pp.handle text, cd do
false
end
assert_equal "# :x: y\n", text
assert_empty cd.metadata
@pp.handle text, cd do
nil
end
assert_equal "# :x: y\n", text
assert_equal 'y', cd.metadata['x']
cd.metadata.clear
@pp.handle text, cd do
''
end
assert_equal '', text
assert_empty cd.metadata
end
def test_handle_registered
RDoc::Markup::PreProcess.register 'x'
text = "# :x: y\n"
@pp.handle text
assert_equal '', text
text = "# :x: y\n"
@pp.handle text do |directive, param|
false
end
assert_equal "# :x: y\n", text
text = "# :x: y\n"
@pp.handle text do |directive, param|
''
end
assert_equal "", text
end
def test_handle_registered_block
called = nil
RDoc::Markup::PreProcess.register 'x' do |directive, param|
called = [directive, param]
'blah'
end
text = "# :x: y\n"
@pp.handle text
assert_equal 'blah', text
assert_equal %w[x y], called
end
def test_handle_registered_code_object
RDoc::Markup::PreProcess.register 'x'
cd = RDoc::CodeObject.new
text = "# :x: y\n"
@pp.handle text, cd
assert_equal '', text
assert_equal 'y', cd.metadata['x']
cd.metadata.clear
text = "# :x: y\n"
@pp.handle text do |directive, param|
false
end
assert_equal "# :x: y\n", text
assert_empty cd.metadata
text = "# :x: y\n"
@pp.handle text do |directive, param|
''
end
assert_equal "", text
assert_empty cd.metadata
end
end