From dc58b5207b3ed92dfcf7ecf16c7844453faac18f Mon Sep 17 00:00:00 2001
From: Logan Dethrow <log@lindenlab.com>
Date: Fri, 9 Sep 2011 17:22:37 -0400
Subject: [PATCH] Re-enabled llapp_tut.cpp test for testing. Copied
 llapp_tut.cpp from server directory.

The commented line indicates threading breakage in the LLApp test, but I have not seen evidence of this so far while testing on linux.
---
 indra/test/CMakeLists.txt |   4 +-
 indra/test/llapp_tut.cpp  | 162 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 164 insertions(+), 2 deletions(-)
 create mode 100644 indra/test/llapp_tut.cpp

diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt
index 003f27ed7a1..6f01a1336f8 100644
--- a/indra/test/CMakeLists.txt
+++ b/indra/test/CMakeLists.txt
@@ -32,7 +32,7 @@ include_directories(
 
 set(test_SOURCE_FILES
     io.cpp
-#    llapp_tut.cpp                      # Temporarily removed until thread issues can be solved
+    llapp_tut.cpp
     llblowfish_tut.cpp
     llbuffer_tut.cpp
     lldoubledispatch_tut.cpp
@@ -48,7 +48,7 @@ set(test_SOURCE_FILES
     llscriptresource_tut.cpp
     llsdmessagebuilder_tut.cpp
     llsdmessagereader_tut.cpp
-    llsd_new_tut.cpp			# Fails [LLSD(new), 4] fail: 'NaN to string: expected 'nan' actual '-nan''
+    llsd_new_tut.cpp
     llsdutil_tut.cpp
     llservicebuilder_tut.cpp
     llstreamtools_tut.cpp
diff --git a/indra/test/llapp_tut.cpp b/indra/test/llapp_tut.cpp
new file mode 100644
index 00000000000..aa5c0672e69
--- /dev/null
+++ b/indra/test/llapp_tut.cpp
@@ -0,0 +1,162 @@
+/** 
+ * @file llapp_tut.cpp
+ * @author Phoenix
+ * @date 2006-09-12
+ *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2006-2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include <tut/tut.hpp>
+
+#include "linden_common.h"
+#include "llapp.h"
+#include "lltut.h"
+
+
+namespace tut
+{
+	struct application
+	{
+		class LLTestApp : public LLApp
+		{
+		public:
+			virtual bool init() { return true; }
+			virtual bool cleanup() { return true; }
+			virtual bool mainLoop() { return true; }
+		};
+		LLTestApp* mApp;
+		application()
+		{
+			mApp = new LLTestApp;
+		}
+		~application()
+		{
+			delete mApp;
+		}
+	};
+
+	typedef test_group<application> application_t;
+	typedef application_t::object application_object_t;
+	tut::application_t tut_application("application");
+
+	template<> template<>
+	void application_object_t::test<1>()
+	{
+		LLSD defaults;
+		defaults["template"] = "../../../scripts/messages/message_template.msg";
+		defaults["configdir"] = ".";
+		defaults["datadir"] = "data";
+		mApp->setOptionData(LLApp::PRIORITY_DEFAULT, defaults);
+
+		LLSD datadir_sd = mApp->getOption("datadir");
+		ensure_equals("data type", datadir_sd.type(), LLSD::TypeString);
+		ensure_equals(
+			"data value", datadir_sd.asString(), std::string("data"));
+	}
+
+	template<> template<>
+	void application_object_t::test<2>()
+	{
+		const int ARGC = 13;
+		const char* ARGV[ARGC] =
+		{
+			"", // argv[0] is usually the application name
+			"-crashcount",
+			"2",
+			"-space",
+			"spaceserver.grid.lindenlab.com",
+			"-db_host",
+			"localhost",
+			"--allowlslhttprequests",
+			"-asset-uri",
+			"http://test.lindenlab.com/assets",
+			"-data",
+			"127.0.0.1",
+			"--smtp"
+		};
+		bool ok = mApp->parseCommandOptions(ARGC, const_cast<char**>(ARGV));
+		ensure("command line parsed", ok);
+		ensure_equals(
+			"crashcount", mApp->getOption("crashcount").asInteger(), 2);
+		ensure_equals(
+			"space",
+			mApp->getOption("space").asString(),
+			std::string("spaceserver.grid.lindenlab.com"));
+		ensure_equals(
+			"db_host",
+			mApp->getOption("db_host").asString(),
+			std::string("localhost"));
+		ensure("allowlshlttprequests", mApp->getOption("smtp"));
+		ensure_equals(
+			"asset-uri",
+			mApp->getOption("asset-uri").asString(),
+			std::string("http://test.lindenlab.com/assets"));
+		ensure_equals(
+			"data",
+			mApp->getOption("data").asString(),
+			std::string("127.0.0.1"));
+		ensure("smtp", mApp->getOption("smtp"));
+	}
+
+	template<> template<>
+	void application_object_t::test<3>()
+	{
+		const int ARGC = 4;
+		const char* ARGV[ARGC] =
+		{
+			"", // argv[0] is usually the application name
+			"crashcount",
+			"2",
+			"--space"
+		};
+		bool ok = mApp->parseCommandOptions(ARGC, const_cast<char**>(ARGV));
+		ensure("command line parse failure", !ok);
+	}
+
+	template<> template<>
+	void application_object_t::test<4>()
+	{
+		const int ARGC = 4;
+		const char* ARGV[ARGC] =
+		{
+			"", // argv[0] is usually the application name
+			"--crashcount",
+			"2",
+			"space"
+		};
+		bool ok = mApp->parseCommandOptions(ARGC, const_cast<char**>(ARGV));
+		ensure("command line parse failure", !ok);
+	}
+
+
+	template<> template<>
+	void application_object_t::test<5>()
+	{
+		LLSD options;
+		options["boolean-test"] = true;
+		mApp->setOptionData(LLApp::PRIORITY_GENERAL_CONFIGURATION, options);
+		ensure("bool set", mApp->getOption("boolean-test").asBoolean());
+		options["boolean-test"] = false;
+		mApp->setOptionData(LLApp::PRIORITY_RUNTIME_OVERRIDE, options);
+		ensure("bool unset", !mApp->getOption("boolean-test").asBoolean());
+	}
+}
-- 
GitLab