diff options
| author | Jamis Buck <jamis@37signals.com> | 2005-01-09 15:04:16 +0000 |
|---|---|---|
| committer | Jamis Buck <jamis@37signals.com> | 2005-01-09 15:04:16 +0000 |
| commit | c51fa9fc3d7c0ec6f59bcaf3d352fae9325857e2 (patch) | |
| tree | fa6c5fdee64da937145d594348100b03225a4207 /test/tc_database.rb | |
| download | third_party-sqlite3-ruby-c51fa9fc3d7c0ec6f59bcaf3d352fae9325857e2.tar.gz third_party-sqlite3-ruby-c51fa9fc3d7c0ec6f59bcaf3d352fae9325857e2.tar.xz third_party-sqlite3-ruby-c51fa9fc3d7c0ec6f59bcaf3d352fae9325857e2.zip | |
Changed layout to support tagging and branching
Diffstat (limited to 'test/tc_database.rb')
| -rw-r--r-- | test/tc_database.rb | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/test/tc_database.rb b/test/tc_database.rb new file mode 100644 index 0000000..1aa2400 --- /dev/null +++ b/test/tc_database.rb @@ -0,0 +1,216 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +$:.unshift "../lib" + +require 'sqlite3/database' +require 'test/unit' + +require 'mocks' + +class TC_Database_Init < Test::Unit::TestCase + def test_new + db = SQLite3::Database.new( "foo.db", :driver => Driver ) + assert_equal 1, Driver.instance.mock_count(:open) + assert !db.closed? + assert_equal [["foo.db",false]], Driver.instance.mock_args[:open] + assert !db.results_as_hash + assert !db.type_translation + end + + def test_open + db = SQLite3::Database.open( "foo.db", :driver => Driver ) + assert_equal 1, Driver.instance.mock_count(:open) + assert !db.closed? + assert_equal [["foo.db",false]], Driver.instance.mock_args[:open] + assert !db.results_as_hash + assert !db.type_translation + end + + def test_with_type_translation + db = SQLite3::Database.open( "foo.db", :driver => Driver, + :type_translation => true ) + assert db.type_translation + end + + def test_with_results_as_hash + db = SQLite3::Database.open( "foo.db", :driver => Driver, + :results_as_hash => true ) + assert db.results_as_hash + end + + def test_with_type_translation_and_results_as_hash + db = SQLite3::Database.open( "foo.db", :driver => Driver, + :results_as_hash => true, + :type_translation => true ) + assert db.results_as_hash + assert db.type_translation + end +end + +class TC_Database < Test::Unit::TestCase + def setup + @db = SQLite3::Database.open( "foo.db", + :driver => Driver, :statement_factory => Statement ) + end + + def test_quote + assert_equal "''one''two''three''", SQLite3::Database.quote( + "'one'two'three'" ) + end + + def test_complete + @db.complete? "foo" + assert_equal 1, Driver.instance.mock_count( :complete? ) + end + + def test_errmsg + @db.errmsg + assert_equal 1, Driver.instance.mock_count( :errmsg ) + end + + def test_errcode + @db.errcode + assert_equal 1, Driver.instance.mock_count( :errcode ) + end + + def test_translator + translator = @db.translator + assert_instance_of SQLite3::Translator, translator + end + + def test_close + @db.close + assert_equal 1, Driver.instance.mock_count( :close ) + assert @db.closed? + @db.close + assert_equal 1, Driver.instance.mock_count( :close ) + end + + def test_trace + @db.trace( 15 ) { "foo" } + driver = Driver.instance + assert_equal 1, driver.mock_count( :trace ) + assert_equal [[ "cookie", 15 ]], driver.mock_args[:trace] + assert_equal 1, driver.mock_blocks[:trace].length + end + + def test_authorizer + @db.authorizer( 15 ) { "foo" } + driver = Driver.instance + assert_equal 1, driver.mock_count( :set_authorizer ) + assert_equal [[ "cookie", 15 ]], driver.mock_args[:set_authorizer] + assert_equal 1, driver.mock_blocks[:set_authorizer].length + end + + def test_prepare_no_block + assert_nothing_raised { @db.prepare( "foo" ) } + assert_equal 0, Statement.instance.mock_count( :close ) + end + + def test_prepare_with_block + called = false + @db.prepare( "foo" ) { |stmt| called = true } + assert called + assert_equal 1, Statement.instance.mock_count( :close ) + end + + def test_execute_no_block + result = @db.execute( "foo", "bar", "baz" ) + stmt = Statement.instance + assert_equal [["foo"]], result + assert_equal [["bar", "baz"]], stmt.mock_args[:execute] + end + + def test_execute_with_block + called = false + @db.execute( "foo", "bar", "baz" ) do |row| + called = true + assert_equal ["foo"], row + end + + stmt = Statement.instance + assert called + assert_equal [["bar", "baz"]], stmt.mock_args[:execute] + end + + def test_execute2_no_block + result = @db.execute2( "foo", "bar", "baz" ) + stmt = Statement.instance + assert_equal [["name"],["foo"]], result + assert_equal [["bar", "baz"]], stmt.mock_args[:execute] + end + + def test_execute2_with_block + called = false + parts = [ ["name"],["foo"] ] + @db.execute2( "foo", "bar", "baz" ) do |row| + called = true + assert_equal parts.shift, row + end + + stmt = Statement.instance + assert called + assert_equal [["bar", "baz"]], stmt.mock_args[:execute] + end + + def test_execute_batch + @db.execute_batch( "foo", "bar", "baz" ) + stmt = Statement.instance + assert_equal [["bar", "baz"]], stmt.mock_args[:execute] + end + + def test_get_first_row + result = @db.get_first_row( "foo", "bar", "baz" ) + assert_equal ["foo"], result + end + + def test_get_first_value + result = @db.get_first_value( "foo", "bar", "baz" ) + assert_equal "foo", result + end + + def test_changes + assert_equal 14, @db.changes + assert_equal 1, Driver.instance.mock_count(:changes) + end + + def test_total_changes + assert_equal 28, @db.total_changes + assert_equal 1, Driver.instance.mock_count(:total_changes) + end + + def test_interrupt + @db.interrupt + assert_equal 1, Driver.instance.mock_count(:interrupt) + end +end |
