1# -*- coding: us-ascii -*- 2 3require 'rdoc/test_case' 4 5class TestRDocParser < RDoc::TestCase 6 7 def setup 8 super 9 10 @RP = RDoc::Parser 11 @binary_dat = File.expand_path '../binary.dat', __FILE__ 12 13 @fn = 'file.rb' 14 @top_level = RDoc::TopLevel.new @fn 15 @options = RDoc::Options.new 16 end 17 18 def test_class_binary_eh_marshal 19 marshal = File.join Dir.tmpdir, "test_rdoc_parser_#{$$}.marshal" 20 open marshal, 'wb' do |io| 21 io.write Marshal.dump('') 22 io.write 'lots of text ' * 500 23 end 24 25 assert @RP.binary?(marshal) 26 ensure 27 File.unlink marshal 28 end 29 30 def test_class_binary_japanese_text 31 file_name = File.expand_path '../test.ja.txt', __FILE__ 32 refute @RP.binary?(file_name) 33 end 34 35 def test_class_binary_large_japanese_rdoc 36 skip "Encoding not implemented" unless Object.const_defined? :Encoding 37 38 capture_io do 39 begin 40 extenc, Encoding.default_external = 41 Encoding.default_external, Encoding::US_ASCII 42 file_name = File.expand_path '../test.ja.largedoc', __FILE__ 43 assert !@RP.binary?(file_name) 44 ensure 45 Encoding.default_external = extenc 46 end 47 end 48 end 49 50 def test_class_binary_japanese_rdoc 51 skip "Encoding not implemented" unless Object.const_defined? :Encoding 52 53 file_name = File.expand_path '../test.ja.rdoc', __FILE__ 54 refute @RP.binary?(file_name) 55 end 56 57 def test_class_can_parse 58 assert_equal @RP.can_parse(__FILE__), @RP::Ruby 59 60 readme_file_name = File.expand_path '../test.txt', __FILE__ 61 62 assert_equal @RP::Simple, @RP.can_parse(readme_file_name) 63 64 assert_equal @RP::Simple, @RP.can_parse(@binary_dat) 65 66 jtest_file_name = File.expand_path '../test.ja.txt', __FILE__ 67 assert_equal @RP::Simple, @RP.can_parse(jtest_file_name) 68 69 jtest_rdoc_file_name = File.expand_path '../test.ja.rdoc', __FILE__ 70 assert_equal @RP::Simple, @RP.can_parse(jtest_rdoc_file_name) 71 72 readme_file_name = File.expand_path '../README', __FILE__ 73 assert_equal @RP::Simple, @RP.can_parse(readme_file_name) 74 75 jtest_largerdoc_file_name = File.expand_path '../test.ja.largedoc', __FILE__ 76 assert_equal @RP::Simple, @RP.can_parse(jtest_largerdoc_file_name) 77 78 @RP.alias_extension 'rdoc', 'largedoc' 79 assert_equal @RP::Simple, @RP.can_parse(jtest_largerdoc_file_name) 80 end 81 82 def test_class_for_executable 83 temp_dir do 84 content = "#!/usr/bin/env ruby -w\n" 85 open 'app', 'w' do |io| io.write content end 86 app = @store.add_file 'app' 87 88 parser = @RP.for app, 'app', content, @options, :stats 89 90 assert_kind_of RDoc::Parser::Ruby, parser 91 92 assert_equal 'app', parser.file_name 93 end 94 end 95 96 def test_class_for_forbidden 97 skip 'chmod not supported' if Gem.win_platform? 98 99 Tempfile.open 'forbidden' do |io| 100 begin 101 File.chmod 0000, io.path 102 forbidden = @store.add_file io.path 103 104 parser = @RP.for forbidden, 'forbidden', '', @options, :stats 105 106 assert_nil parser 107 ensure 108 File.chmod 0400, io.path 109 end 110 end 111 end 112 113 def test_can_parse_modeline 114 readme_ext = File.join Dir.tmpdir, "README.EXT.#{$$}" 115 116 open readme_ext, 'w' do |io| 117 io.puts "# README.EXT - -*- rdoc -*- created at: Mon Aug 7 16:45:54 JST 1995" 118 io.puts 119 io.puts "This document explains how to make extension libraries for Ruby." 120 end 121 122 assert_equal RDoc::Parser::Simple, @RP.can_parse(readme_ext) 123 ensure 124 File.unlink readme_ext 125 end 126 127 ## 128 # Selenium hides a .jar file using a .txt extension. 129 130 def test_class_can_parse_zip 131 hidden_zip = File.expand_path '../hidden.zip.txt', __FILE__ 132 assert_nil @RP.can_parse(hidden_zip) 133 end 134 135 def test_check_modeline 136 readme_ext = File.join Dir.tmpdir, "README.EXT.#{$$}" 137 138 open readme_ext, 'w' do |io| 139 io.puts "# README.EXT - -*- RDoc -*- created at: Mon Aug 7 16:45:54 JST 1995" 140 io.puts 141 io.puts "This document explains how to make extension libraries for Ruby." 142 end 143 144 assert_equal 'rdoc', @RP.check_modeline(readme_ext) 145 ensure 146 File.unlink readme_ext 147 end 148 149 def test_check_modeline_coding 150 readme_ext = File.join Dir.tmpdir, "README.EXT.#{$$}" 151 152 open readme_ext, 'w' do |io| 153 io.puts "# -*- coding: utf-8 -*-" 154 end 155 156 assert_nil @RP.check_modeline readme_ext 157 ensure 158 File.unlink readme_ext 159 end 160 161 def test_check_modeline_with_other 162 readme_ext = File.join Dir.tmpdir, "README.EXT.#{$$}" 163 164 open readme_ext, 'w' do |io| 165 io.puts "# README.EXT - -*- mode: RDoc; indent-tabs-mode: nil -*-" 166 io.puts 167 io.puts "This document explains how to make extension libraries for Ruby." 168 end 169 170 assert_equal 'rdoc', @RP.check_modeline(readme_ext) 171 ensure 172 File.unlink readme_ext 173 end 174 175 def test_check_modeline_no_modeline 176 readme_ext = File.join Dir.tmpdir, "README.EXT.#{$$}" 177 178 open readme_ext, 'w' do |io| 179 io.puts "This document explains how to make extension libraries for Ruby." 180 end 181 182 assert_nil @RP.check_modeline(readme_ext) 183 ensure 184 File.unlink readme_ext 185 end 186 187 def test_class_for_binary 188 rp = @RP.dup 189 190 class << rp 191 alias old_can_parse can_parse 192 end 193 194 def rp.can_parse(*args) nil end 195 196 assert_nil @RP.for(nil, @binary_dat, nil, nil, nil) 197 end 198 199 def test_class_for_markup 200 content = <<-CONTENT 201# coding: utf-8 markup: rd 202 CONTENT 203 204 parser = @RP.for @top_level, __FILE__, content, @options, nil 205 206 assert_kind_of @RP::RD, parser 207 end 208 209 def test_class_use_markup 210 content = <<-CONTENT 211# coding: utf-8 markup: rd 212 CONTENT 213 214 parser = @RP.use_markup content 215 216 assert_equal @RP::RD, parser 217 end 218 219 def test_class_use_markup_markdown 220 content = <<-CONTENT 221# coding: utf-8 markup: markdown 222 CONTENT 223 224 parser = @RP.use_markup content 225 226 assert_equal @RP::Ruby, parser 227 end 228 229 def test_class_use_markup_modeline 230 content = <<-CONTENT 231# -*- coding: utf-8 -*- 232# markup: rd 233 CONTENT 234 235 parser = @RP.use_markup content 236 237 assert_equal @RP::RD, parser 238 end 239 240 def test_class_use_markup_modeline_shebang 241 content = <<-CONTENT 242#!/bin/sh 243/* -*- coding: utf-8 -*- 244 * markup: rd 245 */ 246 CONTENT 247 248 parser = @RP.use_markup content 249 250 assert_equal @RP::RD, parser 251 end 252 253 def test_class_use_markup_shebang 254 content = <<-CONTENT 255#!/usr/bin/env ruby 256# coding: utf-8 markup: rd 257 CONTENT 258 259 parser = @RP.use_markup content 260 261 assert_equal @RP::RD, parser 262 end 263 264 def test_class_use_markup_tomdoc 265 content = <<-CONTENT 266# coding: utf-8 markup: tomdoc 267 CONTENT 268 269 parser = @RP.use_markup content 270 271 assert_equal @RP::Ruby, parser 272 end 273 274 def test_class_use_markup_none 275 parser = @RP.use_markup '' 276 277 assert_nil parser 278 end 279 280 def test_initialize 281 @RP.new @top_level, @fn, '', @options, nil 282 283 assert_equal @RP, @top_level.parser 284 end 285 286end 287 288