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
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email