summaryrefslogtreecommitdiff
path: root/test/rdoc/test_rdoc_info_sections.rb
blob: 2b6ff6adcb3a16a1df2eae454ce2d7623e3f55e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib/'
require 'fileutils'
require 'test/unit'
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')

    @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')
  end

  def teardown
    $stdout = STDOUT
    $stderr = STDERR
    FileUtils.rm_rf OUTPUT_DIR
  end

  def test_output_exists
    assert ! @text.empty?
  end

  def test_each_class_has_a_chapter
    assert_section "Class RDoc::Generator::Texinfo", '@chapter'
    assert_section "Class RDoc::Generator::TexinfoTemplate", '@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", ' '))
  end

  def test_included_modules_are_given
    assert_match(/Includes.* Generator::MarkUp/m, @text)
  end

  def test_class_methods_are_given
    assert_match(/new\(options\)/, @text)
  end

  def test_classes_instance_methods_are_given
    assert_section 'Class RDoc::Generator::Texinfo#generate'
    assert_match(/generate\(toplevels\)/, @text)
  end

  def test_each_module_has_a_chapter
    assert_section "RDoc", '@chapter'
    assert_section "Generator", '@chapter'
  end

  def test_methods_are_shown_only_once
    methods = @rdoc.gen.classes.map { |c| c.methods.map{ |m| c.name + '#' + m.name } }.flatten
    assert_equal methods, methods.uniq
  end

#   if system "makeinfo --version > /dev/null"
#     def test_compiles_to_info
#       makeinfo_output = `cd #{OUTPUT_DIR} && makeinfo rdoc.texinfo`
#       assert(File.exist?(File.join(OUTPUT_DIR, 'rdoc.info')),
#              "Info file was not compiled: #{makeinfo_output}")
#     end
#   end

#   def test_constants_are_documented_somehow
#     assert_section 'DEFAULT_FILENAME' # what kind of section?
#     assert_section 'DEFAULT_INFO_FILENAME'
#   end

#   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
end