summaryrefslogtreecommitdiff
path: root/test/rdoc/test_rdoc_info_formatting.rb
blob: 110c84b2d192bb6712d89eaf98ec36bd65869e44 (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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
require 'fileutils'
require 'tmpdir'
require 'rubygems'
require 'minitest/unit'

require 'rdoc/generator/texinfo'

# From chapter 18 of the Pickaxe 3rd ed. and the TexInfo manual.
class TestRDocInfoFormatting < MiniTest::Unit::TestCase
  def setup
    @output_dir = File.join Dir.mktmpdir("test_rdoc_"), "info_formatting"
    @output_file = File.join @output_dir, 'rdoc.texinfo'

    RDoc::RDoc.new.document(['--fmt=texinfo', '--quiet',
                             File.expand_path(__FILE__),
                             "--op=#{@output_dir}"])
    @text = File.read @output_file

    # File.open('rdoc.texinfo', 'w') { |f| f.puts @text }
  end

  def teardown
    FileUtils.rm_rf File.dirname(@output_dir)
  end

  # Make sure tags like *this* do not make HTML
  def test_descriptions_are_not_html
    refute_match Regexp.new("\<b\>this\<\/b\>"), @text,
                 "We had some HTML; icky!"
  end

  # Ensure we get a reasonable amount
  #
  # of space in between paragraphs.
  def test_paragraphs_are_spaced
    assert_match(/amount\n\n\nof space/, @text)
  end

  # @ and {} should be at-sign-prefixed
  def test_escaping
    assert_match(/@@ and @\{@\} should be at-sign-prefixed/)
  end

  # This tests that *bold* and <b>bold me</b> become @strong{bolded}
  def test_bold
    # Seems like a limitation of the Info format: @strong{bold}
    # becomes *bold* when read in Info or M-x info. highly lame!
    assert_match(/@strong\{bold\}/)
    assert_match(/@strong\{bold me\}/)
  end

  # Test that _italics_ and <em>italicize me</em> becomes @emph{italicized}
  def test_italics
    assert_match(/@emph\{italics\}/)
    assert_match(/@emph\{italicize me\}/)
  end

  # And that typewriter +text+ and <tt>typewriter me</tt> becomes @code{typewriter}
  def test_tt
    assert_match(/@code\{text\}/)
    assert_match(/@code\{typewriter me\}/)
  end

  # Check that
  #   anything indented is
  #   verbatim @verb{|foo bar baz|}
  def test_literal_code
    assert_match("@verb{|  anything indented is
  verbatim @@verb@{|foo bar baz|@}
|}")
  end

  # = Huge heading should be a @majorheading
  # == There is also @chapheading
  # === Everything deeper becomes a regular @heading
  # ====== Regardless of its nesting level
  def test_headings
    assert_match(/@majorheading Huge heading should be a @@majorheading/)
    assert_match(/@chapheading There is also @@chapheading/)
    assert_match(/@heading Everything deeper becomes a regular @@heading/)
    assert_match(/@heading Regardless of its nesting level/)
  end

  # * list item
  # * list item2
  #
  # with a paragraph in between
  #
  # - hyphen lists
  # - are also allowed
  #   and items may flow over lines
  def test_bullet_lists
    assert_match("@itemize @bullet
@item
list item
@item
list item2
@end itemize")
    assert_match("@itemize @bullet
@item
hyphen lists
@item
are also allowed and items may flow over lines
@end itemize")
  end

  # 2. numbered lists
  # 8. are made by
  # 9. a digit followed by a period
  def test_numbered_lists
  end

  # a. alpha lists
  # b. should be parsed too
  def test_alpha_lists
  end

  # [cat]   small domestic animal
  # [+cat+] command to copy standard input
  #         to standard output
  def test_labelled_lists
  end

  # * First item.
  #   * Inner item.
  #   * Second inner item.
  # * Second outer item.
  def test_nested_lists
    assert_match("@itemize @bullet
@item
First item.
@itemize @bullet
@item
Inner item.
@item
Second inner item.
@end itemize
@item
Second outer item.
@end itemize")
  end

  def test_internal_hyperlinks
    # be sure to test multi-word hyperlinks as well.
  end

  def test_hyperlink_targets
  end

  def test_web_links
    # An example of the two-argument form: The official
    # @uref{ftp://ftp.gnu.org/gnu, GNU ftp site} holds programs and texts.

    # produces:
    #      The official GNU ftp site (ftp://ftp.gnu.org/gnu)
    #      holds programs and texts.
    # and the HTML output is this:
    #      The official <a href="ftp://ftp.gnu.org/gnu">GNU ftp site</a>
    #      holds programs and texts.
  end

  # three or more hyphens
  # ----
  # should produce a horizontal rule
  def test_horizontal_rule
    # gah; not sure texinfo supports horizontal rules
  end

  private

  # We don't want the whole string inspected if we pass our own
  # message in.
  def assert_match(regex, string = @text,
                   message = "Didn't find #{regex.inspect} in #{string}.")
    assert string[regex] #, message
  end
end

MiniTest::Unit.autorun