1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/storage/test/unit/test_storage_statement.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,187 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +// This file tests the functions of mozIStorageStatement 1.9 + 1.10 +function setup() 1.11 +{ 1.12 + getOpenedDatabase().createTable("test", "id INTEGER PRIMARY KEY, name TEXT"); 1.13 +} 1.14 + 1.15 +function test_parameterCount_none() 1.16 +{ 1.17 + var stmt = createStatement("SELECT * FROM test"); 1.18 + do_check_eq(0, stmt.parameterCount); 1.19 + stmt.reset(); 1.20 + stmt.finalize(); 1.21 +} 1.22 + 1.23 +function test_parameterCount_one() 1.24 +{ 1.25 + var stmt = createStatement("SELECT * FROM test WHERE id = ?1"); 1.26 + do_check_eq(1, stmt.parameterCount); 1.27 + stmt.reset(); 1.28 + stmt.finalize(); 1.29 +} 1.30 + 1.31 +function test_getParameterName() 1.32 +{ 1.33 + var stmt = createStatement("SELECT * FROM test WHERE id = :id"); 1.34 + do_check_eq(":id", stmt.getParameterName(0)); 1.35 + stmt.reset(); 1.36 + stmt.finalize(); 1.37 +} 1.38 + 1.39 +function test_getParameterIndex_different() 1.40 +{ 1.41 + var stmt = createStatement("SELECT * FROM test WHERE id = :id OR name = :name"); 1.42 + do_check_eq(0, stmt.getParameterIndex("id")); 1.43 + do_check_eq(1, stmt.getParameterIndex("name")); 1.44 + stmt.reset(); 1.45 + stmt.finalize(); 1.46 +} 1.47 + 1.48 +function test_getParameterIndex_same() 1.49 +{ 1.50 + var stmt = createStatement("SELECT * FROM test WHERE id = :test OR name = :test"); 1.51 + do_check_eq(0, stmt.getParameterIndex("test")); 1.52 + stmt.reset(); 1.53 + stmt.finalize(); 1.54 +} 1.55 + 1.56 +function test_columnCount() 1.57 +{ 1.58 + var stmt = createStatement("SELECT * FROM test WHERE id = ?1 OR name = ?2"); 1.59 + do_check_eq(2, stmt.columnCount); 1.60 + stmt.reset(); 1.61 + stmt.finalize(); 1.62 +} 1.63 + 1.64 +function test_getColumnName() 1.65 +{ 1.66 + var stmt = createStatement("SELECT name, id FROM test"); 1.67 + do_check_eq("id", stmt.getColumnName(1)); 1.68 + do_check_eq("name", stmt.getColumnName(0)); 1.69 + stmt.reset(); 1.70 + stmt.finalize(); 1.71 +} 1.72 + 1.73 +function test_getColumnIndex_same_case() 1.74 +{ 1.75 + var stmt = createStatement("SELECT name, id FROM test"); 1.76 + do_check_eq(0, stmt.getColumnIndex("name")); 1.77 + do_check_eq(1, stmt.getColumnIndex("id")); 1.78 + stmt.reset(); 1.79 + stmt.finalize(); 1.80 +} 1.81 + 1.82 +function test_getColumnIndex_different_case() 1.83 +{ 1.84 + var stmt = createStatement("SELECT name, id FROM test"); 1.85 + try { 1.86 + do_check_eq(0, stmt.getColumnIndex("NaMe")); 1.87 + do_throw("should not get here"); 1.88 + } catch (e) { 1.89 + do_check_eq(Cr.NS_ERROR_INVALID_ARG, e.result); 1.90 + } 1.91 + try { 1.92 + do_check_eq(1, stmt.getColumnIndex("Id")); 1.93 + do_throw("should not get here"); 1.94 + } catch (e) { 1.95 + do_check_eq(Cr.NS_ERROR_INVALID_ARG, e.result); 1.96 + } 1.97 + stmt.reset(); 1.98 + stmt.finalize(); 1.99 +} 1.100 + 1.101 +function test_state_ready() 1.102 +{ 1.103 + var stmt = createStatement("SELECT name, id FROM test"); 1.104 + do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state); 1.105 + stmt.reset(); 1.106 + stmt.finalize(); 1.107 +} 1.108 + 1.109 +function test_state_executing() 1.110 +{ 1.111 + var stmt = createStatement("INSERT INTO test (name) VALUES ('foo')"); 1.112 + stmt.execute(); 1.113 + stmt.execute(); 1.114 + stmt.finalize(); 1.115 + 1.116 + stmt = createStatement("SELECT name, id FROM test"); 1.117 + stmt.executeStep(); 1.118 + do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_EXECUTING, 1.119 + stmt.state); 1.120 + stmt.executeStep(); 1.121 + do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_EXECUTING, 1.122 + stmt.state); 1.123 + stmt.reset(); 1.124 + do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state); 1.125 + stmt.finalize(); 1.126 +} 1.127 + 1.128 +function test_state_after_finalize() 1.129 +{ 1.130 + var stmt = createStatement("SELECT name, id FROM test"); 1.131 + stmt.executeStep(); 1.132 + stmt.finalize(); 1.133 + do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_INVALID, stmt.state); 1.134 +} 1.135 + 1.136 +function test_getColumnDecltype() 1.137 +{ 1.138 + var stmt = createStatement("SELECT name, id FROM test"); 1.139 + do_check_eq("TEXT", stmt.getColumnDecltype(0)); 1.140 + do_check_eq("INTEGER", stmt.getColumnDecltype(1)); 1.141 + try { 1.142 + do_check_eq("GARBAGE", stmt.getColumnDecltype(2)); 1.143 + do_throw("should not get here"); 1.144 + } catch (e) { 1.145 + do_check_eq(Cr.NS_ERROR_ILLEGAL_VALUE, e.result); 1.146 + } 1.147 + stmt.finalize(); 1.148 +} 1.149 + 1.150 +function test_failed_execute() 1.151 +{ 1.152 + var stmt = createStatement("INSERT INTO test (name) VALUES ('foo')"); 1.153 + stmt.execute(); 1.154 + stmt.finalize(); 1.155 + var id = getOpenedDatabase().lastInsertRowID; 1.156 + stmt = createStatement("INSERT INTO test(id, name) VALUES(:id, 'bar')"); 1.157 + stmt.params.id = id; 1.158 + try { 1.159 + // Should throw a constraint error 1.160 + stmt.execute(); 1.161 + do_throw("Should have seen a constraint error"); 1.162 + } 1.163 + catch (e) { 1.164 + do_check_eq(getOpenedDatabase().lastError, Ci.mozIStorageError.CONSTRAINT); 1.165 + } 1.166 + do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state); 1.167 + // Should succeed without needing to reset the statement manually 1.168 + stmt.finalize(); 1.169 +} 1.170 + 1.171 +var tests = [test_parameterCount_none, test_parameterCount_one, 1.172 + test_getParameterName, test_getParameterIndex_different, 1.173 + test_getParameterIndex_same, test_columnCount, 1.174 + test_getColumnName, test_getColumnIndex_same_case, 1.175 + test_getColumnIndex_different_case, test_state_ready, 1.176 + test_state_executing, test_state_after_finalize, 1.177 + test_getColumnDecltype, 1.178 + test_failed_execute, 1.179 +]; 1.180 + 1.181 +function run_test() 1.182 +{ 1.183 + setup(); 1.184 + 1.185 + for (var i = 0; i < tests.length; i++) 1.186 + tests[i](); 1.187 + 1.188 + cleanup(); 1.189 +} 1.190 +