module Sinatra::Test

def test_request(verb, path, *args)

def test_request(verb, path, *args)
  @app = Sinatra::Application if @app.nil? && defined?(Sinatra::Application)
  fail "@app not set - cannot make request" if @app.nil?
  @request = Rack::MockRequest.new(@app)
  opts, input =
    case args.size
    when 2 # input, env
      input, env = args
      if input.kind_of?(Hash) # params, env
        [env, param_string(input)]
      else
        [env, input]
      end
    when 1 # params
      if (data = args.first).kind_of?(Hash)
        env = (data.delete(:env) || {})
        [env, param_string(data)]
      else
        [{}, data]
      end
    when 0
      [{}, '']
    else
      raise ArgumentError, "zero, one, or two arguments expected"
    end
  opts = rack_opts(opts)
  opts[:input] ||= input
  yield @request if block_given?
  @response = @request.request(verb, path, opts)
end