michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: // This file tests the functions of mozIStorageStatement michael@0: michael@0: function setup() michael@0: { michael@0: getOpenedDatabase().createTable("test", "id INTEGER PRIMARY KEY, name TEXT"); michael@0: } michael@0: michael@0: function test_parameterCount_none() michael@0: { michael@0: var stmt = createStatement("SELECT * FROM test"); michael@0: do_check_eq(0, stmt.parameterCount); michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_parameterCount_one() michael@0: { michael@0: var stmt = createStatement("SELECT * FROM test WHERE id = ?1"); michael@0: do_check_eq(1, stmt.parameterCount); michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_getParameterName() michael@0: { michael@0: var stmt = createStatement("SELECT * FROM test WHERE id = :id"); michael@0: do_check_eq(":id", stmt.getParameterName(0)); michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_getParameterIndex_different() michael@0: { michael@0: var stmt = createStatement("SELECT * FROM test WHERE id = :id OR name = :name"); michael@0: do_check_eq(0, stmt.getParameterIndex("id")); michael@0: do_check_eq(1, stmt.getParameterIndex("name")); michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_getParameterIndex_same() michael@0: { michael@0: var stmt = createStatement("SELECT * FROM test WHERE id = :test OR name = :test"); michael@0: do_check_eq(0, stmt.getParameterIndex("test")); michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_columnCount() michael@0: { michael@0: var stmt = createStatement("SELECT * FROM test WHERE id = ?1 OR name = ?2"); michael@0: do_check_eq(2, stmt.columnCount); michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_getColumnName() michael@0: { michael@0: var stmt = createStatement("SELECT name, id FROM test"); michael@0: do_check_eq("id", stmt.getColumnName(1)); michael@0: do_check_eq("name", stmt.getColumnName(0)); michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_getColumnIndex_same_case() michael@0: { michael@0: var stmt = createStatement("SELECT name, id FROM test"); michael@0: do_check_eq(0, stmt.getColumnIndex("name")); michael@0: do_check_eq(1, stmt.getColumnIndex("id")); michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_getColumnIndex_different_case() michael@0: { michael@0: var stmt = createStatement("SELECT name, id FROM test"); michael@0: try { michael@0: do_check_eq(0, stmt.getColumnIndex("NaMe")); michael@0: do_throw("should not get here"); michael@0: } catch (e) { michael@0: do_check_eq(Cr.NS_ERROR_INVALID_ARG, e.result); michael@0: } michael@0: try { michael@0: do_check_eq(1, stmt.getColumnIndex("Id")); michael@0: do_throw("should not get here"); michael@0: } catch (e) { michael@0: do_check_eq(Cr.NS_ERROR_INVALID_ARG, e.result); michael@0: } michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_state_ready() michael@0: { michael@0: var stmt = createStatement("SELECT name, id FROM test"); michael@0: do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state); michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_state_executing() michael@0: { michael@0: var stmt = createStatement("INSERT INTO test (name) VALUES ('foo')"); michael@0: stmt.execute(); michael@0: stmt.execute(); michael@0: stmt.finalize(); michael@0: michael@0: stmt = createStatement("SELECT name, id FROM test"); michael@0: stmt.executeStep(); michael@0: do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_EXECUTING, michael@0: stmt.state); michael@0: stmt.executeStep(); michael@0: do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_EXECUTING, michael@0: stmt.state); michael@0: stmt.reset(); michael@0: do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_state_after_finalize() michael@0: { michael@0: var stmt = createStatement("SELECT name, id FROM test"); michael@0: stmt.executeStep(); michael@0: stmt.finalize(); michael@0: do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_INVALID, stmt.state); michael@0: } michael@0: michael@0: function test_getColumnDecltype() michael@0: { michael@0: var stmt = createStatement("SELECT name, id FROM test"); michael@0: do_check_eq("TEXT", stmt.getColumnDecltype(0)); michael@0: do_check_eq("INTEGER", stmt.getColumnDecltype(1)); michael@0: try { michael@0: do_check_eq("GARBAGE", stmt.getColumnDecltype(2)); michael@0: do_throw("should not get here"); michael@0: } catch (e) { michael@0: do_check_eq(Cr.NS_ERROR_ILLEGAL_VALUE, e.result); michael@0: } michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_failed_execute() michael@0: { michael@0: var stmt = createStatement("INSERT INTO test (name) VALUES ('foo')"); michael@0: stmt.execute(); michael@0: stmt.finalize(); michael@0: var id = getOpenedDatabase().lastInsertRowID; michael@0: stmt = createStatement("INSERT INTO test(id, name) VALUES(:id, 'bar')"); michael@0: stmt.params.id = id; michael@0: try { michael@0: // Should throw a constraint error michael@0: stmt.execute(); michael@0: do_throw("Should have seen a constraint error"); michael@0: } michael@0: catch (e) { michael@0: do_check_eq(getOpenedDatabase().lastError, Ci.mozIStorageError.CONSTRAINT); michael@0: } michael@0: do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state); michael@0: // Should succeed without needing to reset the statement manually michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: var tests = [test_parameterCount_none, test_parameterCount_one, michael@0: test_getParameterName, test_getParameterIndex_different, michael@0: test_getParameterIndex_same, test_columnCount, michael@0: test_getColumnName, test_getColumnIndex_same_case, michael@0: test_getColumnIndex_different_case, test_state_ready, michael@0: test_state_executing, test_state_after_finalize, michael@0: test_getColumnDecltype, michael@0: test_failed_execute, michael@0: ]; michael@0: michael@0: function run_test() michael@0: { michael@0: setup(); michael@0: michael@0: for (var i = 0; i < tests.length; i++) michael@0: tests[i](); michael@0: michael@0: cleanup(); michael@0: } michael@0: