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
