diff options
author | Kazuhiro NISHIYAMA <zn@mbf.nifty.com> | 2020-06-22 17:31:07 +0900 |
---|---|---|
committer | Kazuhiro NISHIYAMA <zn@mbf.nifty.com> | 2020-06-22 17:31:07 +0900 |
commit | 61743f0c830498cba3c098a3d9e38644b159c563 (patch) | |
tree | 1989802c31d63d9a6cf273dcafdfaf28decd8078 /test | |
parent | d231b8f95b35d8a344cec4f62d7bbdf360a70e1c (diff) |
Add tests of nested multibyte path and DirectoryIndex
Diffstat (limited to 'test')
-rw-r--r-- | test/webrick/test_filehandler.rb | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/test/webrick/test_filehandler.rb b/test/webrick/test_filehandler.rb index fca073d08f..1114af32ac 100644 --- a/test/webrick/test_filehandler.rb +++ b/test/webrick/test_filehandler.rb @@ -289,23 +289,33 @@ class WEBrick::TestFileHandler < Test::Unit::TestCase end def test_multibyte_char_in_path - Dir.mktmpdir("\u00a7") do |dir| - File.write("#{dir}/\u00a7.txt", "test_multibyte_char_in_path") - begin - dir = dir.encode('filesystem') - rescue EncodingError - dir = dir.b - end - config = { :DocumentRoot => dir } + c = "\u00a7" + begin + c = c.encode('filesystem') + rescue EncodingError + c = c.b + end + Dir.mktmpdir(c) do |dir| + basename = "#{c}.txt" + File.write("#{dir}/#{basename}", "test_multibyte_char_in_path") + Dir.mkdir("#{dir}/#{c}") + File.write("#{dir}/#{c}/#{basename}", "nested") + config = { + :DocumentRoot => dir, + :DirectoryIndex => [basename], + } TestWEBrick.start_httpserver(config) do |server, addr, port, log| http = Net::HTTP.new(addr, port) - begin - path = "/\u00a7.txt".encode('filesystem') - rescue EncodingError - path = "/\u00a7.txt".force_encoding(Encoding::ASCII_8BIT) - end + path = "/#{basename}" req = Net::HTTP::Get.new(WEBrick::HTTPUtils::escape(path)) http.request(req){|res| assert_equal("200", res.code, log.call + "\nFilesystem encoding is #{Encoding.find('filesystem')}") } + path = "/#{c}/#{basename}" + req = Net::HTTP::Get.new(WEBrick::HTTPUtils::escape(path)) + http.request(req){|res| assert_equal("200", res.code, log.call) } + req = Net::HTTP::Get.new('/') + http.request(req){|res| + assert_equal("test_multibyte_char_in_path", res.body, log.call) + } end end end |