## ## $Release: 2.7.0 $ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved. ## require "#{File.dirname(__FILE__)}/test.rb" require 'stringio' load "#{File.dirname(__FILE__)}/../public_html/index.cgi" def spec(desc) yield end def dummy_env(request_method='GET', request_uri='/', opts={}) if request_method.is_a?(Hash) opts = request_method request_method = 'GET' request_uri = '/' elsif request_uri.is_a?(Hash) opts = request_uri request_uri = '/' end env = { 'REQUEST_METHOD' => request_method.to_s, 'REQUEST_URI' => request_uri.to_s, 'DOCUMENT_ROOT' => Dir.pwd, } opts.each {|k, v| env[k.to_s.upcase] = v } env.update(opts) return env end def dummy_template(filename, content) begin File.open(filename, 'wb') {|f| f.write(content) } return yield ensure [filename, filename + '.cache'].each do |fname| File.unlink(fname) if File.exist?(fname) end end end class ErubisHandlerTest < Test::Unit::TestCase def test_initialize spec "sets @encoding and @layout" do encoding_bkup = $ENCODING layout_bkup = $LAYOUT begin $ENCODING = 'cp932' $LAYOUT = 'site.rhtml' obj = ErubisHandler.new assert_equal 'cp932', obj.encoding assert_equal 'site.rhtml', obj.layout ensure $ENCODING = encoding_bkup $LAYOUT = layout_bkup end end end def test_handle spec "renders requested template file." do base = "_test_handle" env = dummy_env('GET', "/#{base}.html") handler = ErubisHandler.new input = <<'END'

<%= 'SOS' %>

END expected = <<'END'

SOS

END out = dummy_template("#{base}.rhtml", input) do handler.handle(env) end assert_equal expected, out end spec "raises 404 error when requested file not found." do req_url = "/_test_handle.html" env = dummy_env('GET', req_url) handler = ErubisHandler.new ex = assert_raise HttpError do handler.handle(env) end assert_equal 404, ex.status assert_equal "#{req_url}: not found.", ex.message end end end class ErubisApplicationTest < Test::Unit::TestCase def test_handle_request spec "handles request by handler object and returns response data." do app = ErubisApplication.new() def app.get_handler return Class.new { def handle(env); "

Hello SOS

"; end def encoding; "euc_jp"; end }.new end expected = [ 200, [["Content-Type", "text/html;charset=euc_jp"]], ["

Hello SOS

"], ] env = dummy_env('GET', '/') ret = app.call(env) assert_equal expected, ret end end def test_handle_http_error spec "renders error page." do req_path = '/HaruhiSuzumiya.html' app = ErubisApplication.new() env = dummy_env('GET', req_path) expected = [ 404, [["Content-Type", "text/html"]], ["

404 Not Found

\n

#{req_path}: not found.

\n"], ] ret = app.call(env) assert_equal expected, ret end end def test_run spec "prints to $stdout" do input = "

Hello SOS

" app = ErubisApplication.new base = "SOS" env = dummy_env("GET", "/#{base}.html") sio = StringIO.new output = dummy_template("#{base}.rhtml", input) do app.run(env, sio) sio.string end expected = "" expected << "Content-Type: text/html\r\n" expected << "\r\n" expected << "

Hello SOS

" assert_equal expected, output end spec "prints 'Status:' header if status code is not 200." do req_path = "/SOS.html" env = dummy_env("GET", req_path) app = ErubisApplication.new sio = StringIO.new app.run(env, sio) expected = "Status: 404 Not Found\r\n" expected << "Content-Type: text/html\r\n" expected << "\r\n" expected << "

404 Not Found

\n" expected << "

#{req_path}: not found.

\n" assert_equal expected, sio.string end end end