]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/plugins/classic_pagination/test/helper.rb
Adding the classic_pagination to svn as the svn external is no longer working
[rails.git] / vendor / plugins / classic_pagination / test / helper.rb
diff --git a/vendor/plugins/classic_pagination/test/helper.rb b/vendor/plugins/classic_pagination/test/helper.rb
new file mode 100644 (file)
index 0000000..3f76d5a
--- /dev/null
@@ -0,0 +1,117 @@
+require 'test/unit'
+
+unless defined?(ActiveRecord)
+  plugin_root = File.join(File.dirname(__FILE__), '..')
+
+  # first look for a symlink to a copy of the framework
+  if framework_root = ["#{plugin_root}/rails", "#{plugin_root}/../../rails"].find { |p| File.directory? p }
+    puts "found framework root: #{framework_root}"
+    # this allows for a plugin to be tested outside an app
+    $:.unshift "#{framework_root}/activesupport/lib", "#{framework_root}/activerecord/lib", "#{framework_root}/actionpack/lib"
+  else
+    # is the plugin installed in an application?
+    app_root = plugin_root + '/../../..'
+
+    if File.directory? app_root + '/config'
+      puts 'using config/boot.rb'
+      ENV['RAILS_ENV'] = 'test'
+      require File.expand_path(app_root + '/config/boot')
+    else
+      # simply use installed gems if available
+      puts 'using rubygems'
+      require 'rubygems'
+      gem 'actionpack'; gem 'activerecord'
+    end
+  end
+
+  %w(action_pack active_record action_controller active_record/fixtures action_controller/test_process).each {|f| require f}
+
+  Dependencies.load_paths.unshift "#{plugin_root}/lib"
+end
+
+# Define the connector
+class ActiveRecordTestConnector
+  cattr_accessor :able_to_connect
+  cattr_accessor :connected
+
+  # Set our defaults
+  self.connected = false
+  self.able_to_connect = true
+
+  class << self
+    def setup
+      unless self.connected || !self.able_to_connect
+        setup_connection
+        load_schema
+        require_fixture_models
+        self.connected = true
+      end
+    rescue Exception => e  # errors from ActiveRecord setup
+      $stderr.puts "\nSkipping ActiveRecord assertion tests: #{e}"
+      #$stderr.puts "  #{e.backtrace.join("\n  ")}\n"
+      self.able_to_connect = false
+    end
+
+    private
+
+    def setup_connection
+      if Object.const_defined?(:ActiveRecord)
+        defaults = { :database => ':memory:' }
+        begin
+          options = defaults.merge :adapter => 'sqlite3', :timeout => 500
+          ActiveRecord::Base.establish_connection(options)
+          ActiveRecord::Base.configurations = { 'sqlite3_ar_integration' => options }
+          ActiveRecord::Base.connection
+        rescue Exception  # errors from establishing a connection
+          $stderr.puts 'SQLite 3 unavailable; trying SQLite 2.'
+          options = defaults.merge :adapter => 'sqlite'
+          ActiveRecord::Base.establish_connection(options)
+          ActiveRecord::Base.configurations = { 'sqlite2_ar_integration' => options }
+          ActiveRecord::Base.connection
+        end
+
+        Object.send(:const_set, :QUOTED_TYPE, ActiveRecord::Base.connection.quote_column_name('type')) unless Object.const_defined?(:QUOTED_TYPE)
+      else
+        raise "Can't setup connection since ActiveRecord isn't loaded."
+      end
+    end
+
+    # Load actionpack sqlite tables
+    def load_schema
+      File.read(File.dirname(__FILE__) + "/fixtures/schema.sql").split(';').each do |sql|
+        ActiveRecord::Base.connection.execute(sql) unless sql.blank?
+      end
+    end
+
+    def require_fixture_models
+      Dir.glob(File.dirname(__FILE__) + "/fixtures/*.rb").each {|f| require f}
+    end
+  end
+end
+
+# Test case for inheritance
+class ActiveRecordTestCase < Test::Unit::TestCase
+  # Set our fixture path
+  if ActiveRecordTestConnector.able_to_connect
+    self.fixture_path = "#{File.dirname(__FILE__)}/fixtures/"
+    self.use_transactional_fixtures = false
+  end
+
+  def self.fixtures(*args)
+    super if ActiveRecordTestConnector.connected
+  end
+
+  def run(*args)
+    super if ActiveRecordTestConnector.connected
+  end
+
+  # Default so Test::Unit::TestCase doesn't complain
+  def test_truth
+  end
+end
+
+ActiveRecordTestConnector.setup
+ActionController::Routing::Routes.reload rescue nil
+ActionController::Routing::Routes.draw do |map|
+  map.connect ':controller/:action/:id'
+end