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 custom functions michael@0: michael@0: var testNums = [1, 2, 3, 4]; michael@0: michael@0: function setup() michael@0: { michael@0: getOpenedDatabase().createTable("function_tests", "id INTEGER PRIMARY KEY"); michael@0: michael@0: var stmt = createStatement("INSERT INTO function_tests (id) VALUES(?1)"); michael@0: for(var i = 0; i < testNums.length; ++i) { michael@0: stmt.bindByIndex(0, testNums[i]); michael@0: stmt.execute(); michael@0: } michael@0: stmt.reset(); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: var testSquareFunction = { michael@0: calls: 0, michael@0: michael@0: onFunctionCall: function(val) { michael@0: ++this.calls; michael@0: return val.getInt32(0) * val.getInt32(0); michael@0: } michael@0: }; michael@0: michael@0: function test_function_registration() michael@0: { michael@0: var msc = getOpenedDatabase(); michael@0: msc.createFunction("test_square", 1, testSquareFunction); michael@0: } michael@0: michael@0: function test_function_no_double_registration() michael@0: { michael@0: var msc = getOpenedDatabase(); michael@0: try { michael@0: msc.createFunction("test_square", 2, testSquareFunction); michael@0: do_throw("We shouldn't get here!"); michael@0: } catch (e) { michael@0: do_check_eq(Cr.NS_ERROR_FAILURE, e.result); michael@0: } michael@0: } michael@0: michael@0: function test_function_removal() michael@0: { michael@0: var msc = getOpenedDatabase(); michael@0: msc.removeFunction("test_square"); michael@0: // Should be Ok now michael@0: msc.createFunction("test_square", 1, testSquareFunction); michael@0: } michael@0: michael@0: function test_function_aliases() michael@0: { michael@0: var msc = getOpenedDatabase(); michael@0: msc.createFunction("test_square2", 1, testSquareFunction); michael@0: } michael@0: michael@0: function test_function_call() michael@0: { michael@0: var stmt = createStatement("SELECT test_square(id) FROM function_tests"); michael@0: while(stmt.executeStep()); michael@0: do_check_eq(testNums.length, testSquareFunction.calls); michael@0: testSquareFunction.calls = 0; michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function test_function_result() michael@0: { michael@0: var stmt = createStatement("SELECT test_square(42) FROM function_tests"); michael@0: stmt.executeStep(); michael@0: do_check_eq(42*42, stmt.getInt32(0)); michael@0: testSquareFunction.calls = 0; michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: var tests = [test_function_registration, test_function_no_double_registration, michael@0: test_function_removal, test_function_aliases, test_function_call, michael@0: test_function_result]; 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: michael@0: cleanup(); michael@0: }