| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 | 
							- require 'pp'
 
- require 'tmpdir'
 
- require 'stringio'
 
- [STDOUT, STDERR].each { |io| io.sync = true }
 
- begin
 
-   require 'bacon'
 
- rescue LoadError => boom
 
-   require 'rubygems' rescue nil
 
-   require 'bacon'
 
- end
 
- # Set the MEMCACHED environment variable as follows to enable testing
 
- # of the MemCached meta and entity stores.
 
- ENV['MEMCACHED'] ||= 'localhost:11211'
 
- $memcached = nil
 
- $dalli = nil
 
- def have_memcached?(server=ENV['MEMCACHED'])
 
-   return $memcached unless $memcached.nil?
 
-   # silence warnings from memcached
 
-   begin
 
-     v, $VERBOSE = $VERBOSE, nil
 
-     require 'memcached'
 
-   ensure
 
-     $VERBOSE = v
 
-   end
 
-   $memcached = Memcached.new(server)
 
-   $memcached.set('ping', '')
 
-   true
 
- rescue LoadError => boom
 
-   warn "memcached library not available. related tests will be skipped."
 
-   $memcached = false
 
-   false
 
- rescue => boom
 
-   warn "memcached not working. related tests will be skipped."
 
-   $memcached = false
 
-   false
 
- end
 
- have_memcached?
 
- def have_dalli?(server=ENV['MEMCACHED'])
 
-   return $dalli unless $dalli.nil?
 
-   require 'dalli'
 
-   $dalli = Dalli::Client.new(server)
 
-   $dalli.set('ping', '')
 
-   true
 
- rescue LoadError => boom
 
-   warn "dalli library not available. related tests will be skipped."
 
-   $dalli = false
 
-   false
 
- rescue => boom
 
-   warn "dalli not working. related tests will be skipped."
 
-   $dalli = false
 
-   false
 
- end
 
- have_dalli?
 
- def need_dalli(forwhat)
 
-   yield if have_dalli?
 
- end
 
- def need_memcached(forwhat)
 
-   yield if have_memcached?
 
- end
 
- def need_java(forwhat)
 
-   yield if RUBY_PLATFORM =~ /java/
 
- end
 
- # Setup the load path ..
 
- $LOAD_PATH.unshift File.dirname(File.dirname(__FILE__)) + '/lib'
 
- $LOAD_PATH.unshift File.dirname(__FILE__)
 
- require 'rack/cache'
 
- # Methods for constructing downstream applications / response
 
- # generators.
 
- module CacheContextHelpers
 
-   # The Rack::Cache::Context instance used for the most recent
 
-   # request.
 
-   attr_reader :cache
 
-   # An Array of Rack::Cache::Context instances used for each request, in
 
-   # request order.
 
-   attr_reader :caches
 
-   # The Rack::Response instance result of the most recent request.
 
-   attr_reader :response
 
-   # An Array of Rack::Response instances for each request, in request order.
 
-   attr_reader :responses
 
-   # The backend application object.
 
-   attr_reader :app
 
-   def setup_cache_context
 
-     # holds each Rack::Cache::Context
 
-     @app = nil
 
-     # each time a request is made, a clone of @cache_template is used
 
-     # and appended to @caches.
 
-     @cache_template = nil
 
-     @cache = nil
 
-     @caches = []
 
-     @errors = StringIO.new
 
-     @cache_config = nil
 
-     @called = false
 
-     @request = nil
 
-     @response = nil
 
-     @responses = []
 
-     @storage = Rack::Cache::Storage.new
 
-   end
 
-   def teardown_cache_context
 
-     @app, @cache_template, @cache, @caches, @called,
 
-     @request, @response, @responses, @cache_config, @cache_prototype = nil
 
-   end
 
-   # A basic response with 200 status code and a tiny body.
 
-   def respond_with(status=200, headers={}, body=['Hello World'], &bk)
 
-     called = false
 
-     @app =
 
-       lambda do |env|
 
-         called = true
 
-         response = Rack::Response.new(body, status, headers)
 
-         request = Rack::Request.new(env)
 
-         bk.call(request, response) if bk
 
-         response.finish
 
-       end
 
-     @app.meta_def(:called?) { called }
 
-     @app.meta_def(:reset!) { called = false }
 
-     @app
 
-   end
 
-   def cache_config(&block)
 
-     @cache_config = block
 
-   end
 
-   def request(method, uri='/', opts={})
 
-     opts = {
 
-       'rack.run_once' => true,
 
-       'rack.errors' => @errors,
 
-       'rack-cache.storage' => @storage
 
-     }.merge(opts)
 
-     fail 'response not specified (use respond_with)' if @app.nil?
 
-     @app.reset! if @app.respond_to?(:reset!)
 
-     @cache_prototype ||= Rack::Cache::Context.new(@app, &@cache_config)
 
-     @cache = @cache_prototype.clone
 
-     @caches << @cache
 
-     @request = Rack::MockRequest.new(@cache)
 
-     yield @cache if block_given?
 
-     @response = @request.request(method.to_s.upcase, uri, opts)
 
-     @responses << @response
 
-     @response
 
-   end
 
-   def get(stem, env={}, &b)
 
-     request(:get, stem, env, &b)
 
-   end
 
-   def head(stem, env={}, &b)
 
-     request(:head, stem, env, &b)
 
-   end
 
-   def post(*args, &b)
 
-     request(:post, *args, &b)
 
-   end
 
- end
 
- module TestHelpers
 
-   include FileUtils
 
-   F = File
 
-   @@temp_dir_count = 0
 
-   def create_temp_directory
 
-     @@temp_dir_count += 1
 
-     path = F.join(Dir.tmpdir, "rack-cache-#{$$}-#{@@temp_dir_count}")
 
-     mkdir_p path
 
-     if block_given?
 
-       yield path
 
-       remove_entry_secure path
 
-     end
 
-     path
 
-   end
 
-   def create_temp_file(root, file, data='')
 
-     path = F.join(root, file)
 
-     mkdir_p F.dirname(path)
 
-     F.open(path, 'w') { |io| io.write(data) }
 
-   end
 
- end
 
- class Bacon::Context
 
-   include TestHelpers
 
-   include CacheContextHelpers
 
- end
 
- # Metaid == a few simple metaclass helper
 
- # (See http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html.)
 
- class Object
 
-   # The hidden singleton lurks behind everyone
 
-   def metaclass; class << self; self; end; end
 
-   def meta_eval(&blk); metaclass.instance_eval(&blk); end
 
-   # Adds methods to a metaclass
 
-   def meta_def name, &blk
 
-     meta_eval { define_method name, &blk }
 
-   end
 
-   # Defines an instance method within a class
 
-   def class_def name, &blk
 
-     class_eval { define_method name, &blk }
 
-   end
 
-   # True when the Object is neither false or nil.
 
-   def truthy?
 
-     !!self
 
-   end
 
- end
 
 
  |