From fc54903fd0dcb01b4ef69dbac992fbfc7100713a Mon Sep 17 00:00:00 2001
From: Ryan Stecker <voidedweasel@gmail.com>
Date: Sat, 5 Jul 2014 12:01:17 -0500
Subject: [PATCH] Add test.

---
 plugins/testsuite/keyvalues.sp | 58 ++++++++++++++++++++++++++++++++++
 tools/buildbot/PackageScript   |  1 +
 2 files changed, 59 insertions(+)
 create mode 100644 plugins/testsuite/keyvalues.sp

diff --git a/plugins/testsuite/keyvalues.sp b/plugins/testsuite/keyvalues.sp
new file mode 100644
index 00000000..bef02fe7
--- /dev/null
+++ b/plugins/testsuite/keyvalues.sp
@@ -0,0 +1,58 @@
+
+#include <sourcemod>
+
+public Plugin:myinfo =
+{
+	name		= "KeyValues test",
+	author		= "AlliedModders LLC",
+	description	= "KeyValues test",
+	version		= SOURCEMOD_VERSION,
+	url			= "http://www.sourcemod.net/"
+};
+
+
+public OnPluginStart()
+{
+	RegServerCmd("test_keyvalues", RunTests);
+}
+
+public Action:RunTests(argc)
+{
+	new String:validKv[] =
+		"\"root\" \
+		{ \
+			\"child\" \"value\" \
+			\"subkey\" { \
+				subchild subvalue \
+				subfloat 1.0 \
+			} \
+		}";
+
+	new Handle:kv = CreateKeyValues("");
+
+	if (!StringToKeyValues(kv, validKv))
+		ThrowError("Valid kv not read correctly!");
+
+	decl String:value[128];
+	KvGetString(kv, "child", value, sizeof(value));
+
+	if (!StrEqual(value, "value"))
+		ThrowError("Child kv should have 'value' but has: '%s'", value);
+
+	if (!KvJumpToKey(kv, "subkey"))
+		ThrowError("No sub kv subkey exists!");
+
+	KvGetString(kv, "subchild", value, sizeof(value));
+
+	if (!StrEqual(value, "subvalue"))
+		ThrowError("Subkv subvalue should have 'subvalue' but has: '%s'", value);
+
+	new Float:subfloat = KvGetFloat(kv, "subfloat");
+
+	if (subfloat != 1.0)
+		ThrowError( "Subkv subfloat should have 1.0 but has: %f", subfloat)
+
+	CloseHandle(kv);
+
+	PrintToServer("KeyValue tests passed!");
+}
diff --git a/tools/buildbot/PackageScript b/tools/buildbot/PackageScript
index a24529aa..0729bfd9 100644
--- a/tools/buildbot/PackageScript
+++ b/tools/buildbot/PackageScript
@@ -411,6 +411,7 @@ CopyFiles('plugins/testsuite', 'addons/sourcemod/scripting/testsuite',
     'structtest.sp',
     'tf2-test.sp',
     'tries.sp',
+    'keyvalues.sp',
   ]
 )
 CopyFiles('plugins/basecommands', 'addons/sourcemod/scripting/basecommands',