#!/usr/local/bin/ruby
$:.unshift(".")
require 'rubyunit'
require 'webrick/httpservlet.rb'
require 'webrick/httpservlet/abstract.rb'
require 'TestServer'
require 'webrick/log.rb'
require 'net/http'
module RUNIT
	class HttpTestCase < RUNIT::TestCase
		class TestServer
			def mount(path,handler, *options)
				@s.mount(path,handler,options)
			end
			def start(inTheBackground=false, options={:Port=>8888})
				@s = HTTPServer.new ( options )
				## mount subdirectories
				mount("/", HTTPServlet::FileHandler, 'staticFiles', true)
				trap("INT"){ @s.shutdown }
				if (inTheBackground)
					@mainThread = Thread.start(@s) { |server| server.start }
				else
					@mainThread = nil
					@s.start
				end
			end
			def stop
				if (@mainThread)
					@mainThread.kill
				end
				@s.shutdown
			end
		end
		def setup
			@server = TestServer.new()
			@server.start(true,{:Port=>8888,:Logger=>Log.new(nil,2)})
			sleep .35
		end
		def teardown
			@server.stop() if @server;
		end
		def assertGet(url,respCode)
			session = Net::HTTP.new('localhost',8888)
			session.start
			begin
				resp, respData = session.get(url,nil)
			rescue Net::ProtoRetriableError, Net::ProtoFatalError => detail
				resp = detail.data
				respData = nil
			end
			assert_equals(respCode,resp.code.to_i);
			yield(respData) if block_given?
		end
	end
end