diff --git a/plugins/include/dbi.inc b/plugins/include/dbi.inc
index 9c1f494b..897b251c 100644
--- a/plugins/include/dbi.inc
+++ b/plugins/include/dbi.inc
@@ -712,7 +712,7 @@ native Handle:SQL_CreateTransaction();
* @return The index of the query in the transaction's query list.
* @error Invalid transaction handle.
*/
-native Handle:SQL_AddQuery(Handle:txn, const String:query[], any:data=0);
+native SQL_AddQuery(Handle:txn, const String:query[], any:data=0);
/**
* Callback for a successful transaction.
diff --git a/plugins/include/testing.inc b/plugins/include/testing.inc
new file mode 100644
index 00000000..28b50e8e
--- /dev/null
+++ b/plugins/include/testing.inc
@@ -0,0 +1,72 @@
+/**
+ * vim: set ts=4 sw=4 tw=99 noet :
+ * =============================================================================
+ * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+static TestNumber = 0;
+static String:TestContext[255];
+
+SetTestContext(const String:context[])
+{
+ strcopy(TestContext, sizeof(TestContext), context);
+}
+
+AssertEq(const String:text[], cell1, cell2)
+{
+ TestNumber++;
+ if (cell1 == cell2) {
+ PrintToServer("[%d] %s: %s == %d OK", TestNumber, TestContext, text, cell2);
+ } else {
+ PrintToServer("[%d] %s FAIL: %s should be %d, got %d", TestNumber, TestContext, text, cell2, cell1);
+ ThrowError("test %d (%s in %s) failed", TestNumber, text, TestContext);
+ }
+}
+
+AssertFalse(const String:text[], bool:value)
+{
+ TestNumber++;
+ if (!value) {
+ PrintToServer("[%d] %s: %s == false OK", TestNumber, TestContext, text, value);
+ } else {
+ PrintToServer("[%d] %s FAIL: %s should be false, got true", TestNumber, TestContext, text);
+ ThrowError("test %d (%s in %s) failed", TestNumber, text, TestContext);
+ }
+}
+
+AssertTrue(const String:text[], bool:value)
+{
+ TestNumber++;
+ if (value) {
+ PrintToServer("[%d] %s: %s == true OK", TestNumber, TestContext, text, value);
+ } else {
+ PrintToServer("[%d] %s FAIL: %s should be true, got false", TestNumber, TestContext, text);
+ ThrowError("test %d (%s in %s) failed", TestNumber, text, TestContext);
+ }
+}