Froze rails gems
[depot.git] / vendor / rails / actionpack / test / active_record_unit.rb
diff --git a/vendor/rails/actionpack/test/active_record_unit.rb b/vendor/rails/actionpack/test/active_record_unit.rb
new file mode 100644 (file)
index 0000000..a377cca
--- /dev/null
@@ -0,0 +1,103 @@
+require 'abstract_unit'
+
+# Define the essentials
+class ActiveRecordTestConnector
+  cattr_accessor :able_to_connect
+  cattr_accessor :connected
+
+  # Set our defaults
+  self.connected = false
+  self.able_to_connect = true
+end
+
+# Try to grab AR
+if defined?(ActiveRecord) && defined?(Fixtures)
+  $stderr.puts 'Active Record is already loaded, running tests'
+else
+  $stderr.print 'Attempting to load Active Record... '
+  begin
+    PATH_TO_AR = "#{File.dirname(__FILE__)}/../../activerecord/lib"
+    raise LoadError, "#{PATH_TO_AR} doesn't exist" unless File.directory?(PATH_TO_AR)
+    $LOAD_PATH.unshift PATH_TO_AR
+    require 'active_record'
+    require 'active_record/fixtures'
+    $stderr.puts 'success'
+  rescue LoadError => e
+    $stderr.print "failed. Skipping Active Record assertion tests: #{e}"
+    ActiveRecordTestConnector.able_to_connect = false
+  end
+end
+$stderr.flush
+
+
+# Define the rest of the connector
+class ActiveRecordTestConnector
+  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/db_definitions/sqlite.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
+
+class ActiveRecordTestCase < ActiveSupport::TestCase
+  # Set our fixture path
+  if ActiveRecordTestConnector.able_to_connect
+    self.fixture_path = [FIXTURE_LOAD_PATH]
+    self.use_transactional_fixtures = false
+  end
+
+  def self.fixtures(*args)
+    super if ActiveRecordTestConnector.connected
+  end
+
+  def run(*args)
+    super if ActiveRecordTestConnector.connected
+  end
+
+  def default_test; end
+end
+
+ActiveRecordTestConnector.setup