Merged updates from trunk into stable branch
[feedcatcher.git] / vendor / rails / activerecord / lib / active_record / test_case.rb
1 require "active_support/test_case"
2
3 module ActiveRecord
4 class TestCase < ActiveSupport::TestCase #:nodoc:
5 def assert_date_from_db(expected, actual, message = nil)
6 # SybaseAdapter doesn't have a separate column type just for dates,
7 # so the time is in the string and incorrectly formatted
8 if current_adapter?(:SybaseAdapter)
9 assert_equal expected.to_s, actual.to_date.to_s, message
10 else
11 assert_equal expected.to_s, actual.to_s, message
12 end
13 end
14
15 def assert_sql(*patterns_to_match)
16 $queries_executed = []
17 yield
18 ensure
19 failed_patterns = []
20 patterns_to_match.each do |pattern|
21 failed_patterns << pattern unless $queries_executed.any?{ |sql| pattern === sql }
22 end
23 assert failed_patterns.empty?, "Query pattern(s) #{failed_patterns.map(&:inspect).join(', ')} not found."
24 end
25
26 def assert_queries(num = 1)
27 $queries_executed = []
28 yield
29 ensure
30 %w{ BEGIN COMMIT }.each { |x| $queries_executed.delete(x) }
31 assert_equal num, $queries_executed.size, "#{$queries_executed.size} instead of #{num} queries were executed.#{$queries_executed.size == 0 ? '' : "\nQueries:\n#{$queries_executed.join("\n")}"}"
32 end
33
34 def assert_no_queries(&block)
35 assert_queries(0, &block)
36 end
37
38 def self.use_concurrent_connections
39 setup :connection_allow_concurrency_setup
40 teardown :connection_allow_concurrency_teardown
41 end
42
43 def connection_allow_concurrency_setup
44 @connection = ActiveRecord::Base.remove_connection
45 ActiveRecord::Base.establish_connection(@connection.merge({:allow_concurrency => true}))
46 end
47
48 def connection_allow_concurrency_teardown
49 ActiveRecord::Base.clear_all_connections!
50 ActiveRecord::Base.establish_connection(@connection)
51 end
52
53 def with_kcode(kcode)
54 if RUBY_VERSION < '1.9'
55 orig_kcode, $KCODE = $KCODE, kcode
56 begin
57 yield
58 ensure
59 $KCODE = orig_kcode
60 end
61 else
62 yield
63 end
64 end
65 end
66 end