This AR test patch worth posting to Rails trac? I'll +1 it if you do.

/Nick

On 9/26/07, Ola Bini <[EMAIL PROTECTED]> wrote:
> Hi guys,
>
> After two grueling days I've made Oracle pass ALL ActiveRecord tests.
> (For stable)
>
> As you may know, this involves some changes to the tests to make them
> more friendly for AR-JDBC. The patch attached will let you achieve the
> same thing. It's attuned for MySQL and Oracle specifically.
>
> In most cases the changes are to handle hash-order-dependent tests. In a
> few cases I've changed the logic to check for our versions of the
> adapters instead of the AR standard adapters. This can mostly be found
> in the current_adapter? method in abstract_test.rb
>
>
> No changes in logic have been needed. You will notice that the binary
> fixtures tests is commented out for Oracle. This is because it's
> actually broken with MRI too on stable.
>
> Cheers
>
> --
>  Ola Bini (http://ola-bini.blogspot.com)
>  JRuby Core Developer
>  Developer, ThoughtWorks Studios (http://studios.thoughtworks.com)
>  Practical JRuby on Rails (http://apress.com/book/view/9781590598818)
>
>  "Yields falsehood when quined" yields falsehood when quined.
>
>
>
> Index: test/associations_test.rb
> ===================================================================
> --- test/associations_test.rb   (revision 7628)
> +++ test/associations_test.rb   (working copy)
> @@ -1154,7 +1154,7 @@
>      assert_nil c.firm_with_basic_id
>
>      c.firm_id = 1
> -    assert_equal Firm.find(:first), c.firm_with_basic_id
> +    assert_equal Firm.find(1), c.firm_with_basic_id
>    end
>
>    def test_field_name_same_as_foreign_key
> @@ -1487,6 +1487,7 @@
>      assert_equal 2, ken.projects(true).size
>
>      kenReloaded = Developer.find_by_name 'Ken'
> +
>      kenReloaded.projects.each {|prj| assert_date_from_db(now, prj.joined_on)}
>    end
>
> Index: test/fixtures_test.rb
> ===================================================================
> --- test/fixtures_test.rb       (revision 7628)
> +++ test/fixtures_test.rb       (working copy)
> @@ -1,4 +1,5 @@
>  require 'abstract_unit'
> +require 'fixtures/binary'
>  require 'fixtures/topic'
>  require 'fixtures/developer'
>  require 'fixtures/company'
> @@ -185,10 +186,12 @@
>      assert_equal(categories(:sub_special_3).class, SpecialCategory)
>    end
>
> -  def test_binary_in_fixtures
> -    assert_equal 1, @binaries.size
> -    data = File.read(BINARY_FIXTURE_PATH).freeze
> -    assert_equal data, @flowers.data
> +  unless current_adapter? :OracleAdapter
> +    def test_binary_in_fixtures
> +      assert_equal 1, @binaries.size
> +      data = File.read(BINARY_FIXTURE_PATH).freeze
> +      assert_equal data, @flowers.data
> +    end
>    end
>  end
>
> Index: test/base_test.rb
> ===================================================================
> --- test/base_test.rb   (revision 7628)
> +++ test/base_test.rb   (working copy)
> @@ -1455,7 +1455,7 @@
>      assert xml.include?(%(<content>Have a nice day</content>))
>      assert xml.include?(%(<author-email-address>[EMAIL 
> PROTECTED]</author-email-address>))
>      assert xml.match(%(<parent-id type="integer"></parent-id>))
> -    if current_adapter?(:SybaseAdapter, :SQLServerAdapter, :OracleAdapter)
> +    if current_adapter?(:SybaseAdapter, :SQLServerAdapter, :OracleAdapter)
>        assert xml.include?(%(<last-read 
> type="datetime">#{last_read_in_current_timezone}</last-read>))
>      else
>        assert xml.include?(%(<last-read type="date">2004-04-15</last-read>))
> @@ -1543,19 +1543,19 @@
>
>    def test_except_attributes
>      assert_equal(
> -      %w( author_name type id approved replies_count bonus_time written_on 
> content author_email_address parent_id last_read),
> -      topics(:first).attributes(:except => :title).keys
> +      %w(author_name type id approved replies_count bonus_time written_on 
> content author_email_address parent_id last_read).sort,
> +      topics(:first).attributes(:except => :title).keys.sort
>      )
>
>      assert_equal(
> -      %w( replies_count bonus_time written_on content author_email_address 
> parent_id last_read),
> -      topics(:first).attributes(:except => [ :title, :id, :type, :approved, 
> :author_name ]).keys
> +      %w( replies_count bonus_time written_on content author_email_address 
> parent_id last_read).sort,
> +      topics(:first).attributes(:except => [ :title, :id, :type, :approved, 
> :author_name ]).keys.sort
>      )
>    end
>
>    def test_include_attributes
>      assert_equal(%w( title ), topics(:first).attributes(:only => 
> :title).keys)
> -    assert_equal(%w( title author_name type id approved ), 
> topics(:first).attributes(:only => [ :title, :id, :type, :approved, 
> :author_name ]).keys)
> +    assert_equal(%w( title author_name type id approved ).sort, 
> topics(:first).attributes(:only => [ :title, :id, :type, :approved, 
> :author_name ]).keys.sort)
>    end
>
>    def test_type_name_with_module_should_handle_beginning
> Index: test/active_schema_test_mysql.rb
> ===================================================================
> --- test/active_schema_test_mysql.rb    (revision 7628)
> +++ test/active_schema_test_mysql.rb    (working copy)
> @@ -2,14 +2,14 @@
>
>  class ActiveSchemaTest < Test::Unit::TestCase
>    def setup
> -    ActiveRecord::ConnectionAdapters::MysqlAdapter.class_eval do
> +    ActiveRecord::Base.connection.class.class_eval do
>        alias_method :real_execute, :execute
>        def execute(sql, name = nil) return sql end
>      end
>    end
>
>    def teardown
> -    ActiveRecord::ConnectionAdapters::MysqlAdapter.send(:alias_method, 
> :execute, :real_execute)
> +    ActiveRecord::Base.connection.class.send(:alias_method, :execute, 
> :real_execute)
>    end
>
>    def test_drop_table
> @@ -28,4 +28,4 @@
>      def method_missing(method_symbol, *arguments)
>        ActiveRecord::Base.connection.send(method_symbol, *arguments)
>      end
> -end
> \ No newline at end of file
> +end
> Index: test/abstract_unit.rb
> ===================================================================
> --- test/abstract_unit.rb       (revision 7628)
> +++ test/abstract_unit.rb       (working copy)
> @@ -55,8 +55,15 @@
>
>  def current_adapter?(*types)
>    types.any? do |type|
> -    ActiveRecord::ConnectionAdapters.const_defined?(type) &&
> -      
> ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters.const_get(type))
> +    if defined?(JRUBY_VERSION)
> +      case type
> +      when :OracleAdapter: 
> ActiveRecord::Base.connection.is_a?(JdbcSpec::Oracle)
> +      when :MysqlAdapter: 
> ActiveRecord::Base.connection.is_a?(JdbcSpec::MySQL)
> +      end
> +    else
> +      ActiveRecord::ConnectionAdapters.const_defined?(type) &&
> +        
> ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters.const_get(type))
> +    end
>    end
>  end
>
> @@ -65,7 +72,7 @@
>
>    # Array of regexes of queries that are not counted against query_count
>    @@ignore_list = [/^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/]
> -
> +
>    alias_method :execute_without_query_counting, :execute
>    def execute_with_query_counting(sql, name = nil, &block)
>      self.query_count += 1 unless @@ignore_list.any? { |r| sql =~ r }
> Index: test/finder_test.rb
> ===================================================================
> --- test/finder_test.rb (revision 7628)
> +++ test/finder_test.rb (working copy)
> @@ -1,4 +1,5 @@
>  require 'abstract_unit'
> +require 'fixtures/comment'
>  require 'fixtures/company'
>  require 'fixtures/topic'
>  require 'fixtures/reply'
> @@ -232,18 +233,18 @@
>    end
>
>    def test_bind_enumerable
> -    assert_equal '1,2,3', bind('?', [1, 2, 3])
> -    assert_equal %('a','b','c'), bind('?', %w(a b c))
> +    assert_equal '1,2,3', bind('?', [1, 2, 3]).split(',').sort.join(',')
> +    assert_equal %('a','b','c'), bind('?', %w(a b 
> c)).split(',').sort.join(',')
>
> -    assert_equal '1,2,3', bind(':a', :a => [1, 2, 3])
> -    assert_equal %('a','b','c'), bind(':a', :a => %w(a b c)) # '
> +    assert_equal '1,2,3', bind(':a', :a => [1, 2, 
> 3]).split(',').sort.join(',')
> +    assert_equal %('a','b','c'), bind(':a', :a => %w(a b 
> c)).split(',').sort.join(',') # '
>
>      require 'set'
> -    assert_equal '1,2,3', bind('?', Set.new([1, 2, 3]))
> -    assert_equal %('a','b','c'), bind('?', Set.new(%w(a b c)))
> +    assert_equal '1,2,3', bind('?', Set.new([1, 2, 
> 3])).split(',').sort.join(',')
> +    assert_equal %('a','b','c'), bind('?', Set.new(%w(a b 
> c))).split(',').sort.join(',')
>
> -    assert_equal '1,2,3', bind(':a', :a => Set.new([1, 2, 3]))
> -    assert_equal %('a','b','c'), bind(':a', :a => Set.new(%w(a b c))) # '
> +    assert_equal '1,2,3', bind(':a', :a => Set.new([1, 2, 
> 3])).split(',').sort.join(',')
> +    assert_equal %('a','b','c'), bind(':a', :a => Set.new(%w(a b 
> c))).split(',').sort.join(',')
>    end
>
>    def test_bind_empty_enumerable
> Index: Rakefile
> ===================================================================
> --- Rakefile    (revision 7628)
> +++ Rakefile    (working copy)
> @@ -27,7 +27,7 @@
>
>  # Run the unit tests
>
> -for adapter in %w( mysql postgresql sqlite sqlite3 firebird sqlserver 
> sqlserver_odbc db2 oracle sybase openbase frontbase )
> +for adapter in %w( mysql postgresql sqlite sqlite3 firebird sqlserver 
> sqlserver_odbc db2 oracle sybase openbase frontbase derby_jdbc 
> postgresql_jdbc oracle_jdbc sqlserver_jdbc)
>    Rake::TestTask.new("test_#{adapter}") { |t|
>      t.libs << "test" << "test/connections/native_#{adapter}"
>      if adapter =~ /^sqlserver/
> @@ -39,6 +39,15 @@
>    }
>  end
>
> +task "setup_oracle_jdbc" do
> +  rm_f "test/fixtures/db_definitions/jdbc*.sql"
> +  puts Dir.pwd
> +  Dir.chdir("test/fixtures/db_definitions") do
> +    %w(.sql .drop.sql 2.sql 2.drop.sql).each {|x| cp "oracle_jdbc#{x}", 
> "jdbc#{x}"}
> +  end
> +end
> +
> +
>  SCHEMA_PATH = File.join(File.dirname(__FILE__), *%w(test fixtures 
> db_definitions))
>
>  desc 'Build the MySQL test databases'
> @@ -223,4 +232,4 @@
>    rubyforge = RubyForge.new
>    rubyforge.login
>    rubyforge.add_release(PKG_NAME, PKG_NAME, "REL #{PKG_VERSION}", *packages)
> -end
> \ No newline at end of file
> +end
>
> _______________________________________________
> Jruby-extras-devel mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/jruby-extras-devel
>
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to