summaryrefslogtreecommitdiff
path: root/ACE/tests/Env_Value_Test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/tests/Env_Value_Test.cpp')
-rw-r--r--ACE/tests/Env_Value_Test.cpp124
1 files changed, 124 insertions, 0 deletions
diff --git a/ACE/tests/Env_Value_Test.cpp b/ACE/tests/Env_Value_Test.cpp
new file mode 100644
index 00000000000..0411b8387cf
--- /dev/null
+++ b/ACE/tests/Env_Value_Test.cpp
@@ -0,0 +1,124 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// tests
+//
+// = DESCRIPTION
+// This is a simple test to make sure the Env_Value template is
+// working correctly.
+//
+// = AUTHOR
+// Chris Cleeland <cleeland@cs.wustl.edu>
+//
+// ============================================================================
+
+#include "test_config.h"
+#include "ace/OS_NS_stdlib.h"
+#include "ace/OS_NS_string.h"
+#include "ace/Process.h"
+#include "ace/Env_Value_T.h"
+
+#define TEST_THIS(type, varname, defval, expval) \
+do { \
+ ACE_Env_Value<type> val (varname, (defval)); \
+ if (val != (expval)) { \
+ ACE_ERROR ((LM_ERROR, \
+ ACE_TEXT ("val %d does not match expected value of %d\n"), \
+ (int) (type) val, (int) (expval))); \
+ } \
+} while (0)
+
+int
+// This has been unconditionally turned on for the time being since I can't
+// figure out an easy way to enable it and still keep ACE_TMAIN in a seperate
+// cpp.
+#if 1 || defined (ACE_HAS_NONSTATIC_OBJECT_MANAGER) || defined (ACE_LACKS_FORK)
+// ACE_HAS_NONSTATIC_OBJECT_MANAGER only allows main to have two
+// arguments. And on platforms that lack fork (), we can't use spawn.
+run_main (int argc, ACE_TCHAR* [])
+{
+ ACE_UNUSED_ARG (argc);
+
+ // Only Win32 can set wide-char environment strings. So, for all
+ // others, use char string literals regardless of ACE_USES_WCHAR.
+# if defined (ACE_WIN32)
+ ACE_OS::putenv (ACE_TEXT ("TEST_VALUE_POSITIVE=10.2"));
+ ACE_OS::putenv (ACE_TEXT ("TEST_VALUE_NEGATIVE=-10.2"));
+# else
+ ACE_OS::putenv ("TEST_VALUE_POSITIVE=10.2");
+ ACE_OS::putenv ("TEST_VALUE_NEGATIVE=-10.2");
+# endif /* ACE_WIN32 */
+#else /* ! ACE_HAS_NONSTATIC_OBJECT_MANAGER && ! ACE_LACKS_FORK */
+run_main (int argc, ACE_TCHAR * [], ACE_TCHAR *envp[])
+{
+ if (argc == 1)
+ {
+ int status;
+
+ // No arguments means we're the initial test.
+ ACE_Process_Options options (1);
+ status = options.setenv (envp);
+ if (status != 0)
+ ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("setenv(envp)")));
+
+ options.command_line (ACE_TEXT (".") ACE_DIRECTORY_SEPARATOR_STR
+ ACE_TEXT ("Env_Value_Test run_as_test"));
+
+ status = options.setenv (ACE_TEXT ("TEST_VALUE_POSITIVE"),
+ ACE_TEXT ("%s"),
+ ACE_TEXT ("10.2"));
+ if (status != 0)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("setenv(TEST_VALUE_POSITIVE)")));
+
+ status = options.setenv (ACE_TEXT ("TEST_VALUE_NEGATIVE"),
+ ACE_TEXT ("%s"),
+ ACE_TEXT ("-10.2"));
+ if (status != 0)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("setenv(TEST_VALUE_NEGATIVE)")));
+
+ ACE_Process p;
+ pid_t result = p.spawn (options);
+ if (result == -1)
+ ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("spawn")));
+ else
+ p.wait ();
+ }
+ else
+#endif /* ! ACE_HAS_NONSTATIC_OBJECT_MANAGER && ! ACE_LACKS_FORK */
+ {
+ // In this case we're the child
+
+ ACE_START_TEST (ACE_TEXT ("Env_Value_Test"));
+
+ TEST_THIS (int, ACE_TEXT ("TEST_VALUE_POSITIVE"), 4, 10);
+ TEST_THIS (double, ACE_TEXT ("TEST_VALUE_POSITIVE"), -1.0, 10.2);
+ TEST_THIS (long, ACE_TEXT ("TEST_VALUE_POSITIVE"), 0, 10);
+ TEST_THIS (unsigned long, ACE_TEXT ("TEST_VALUE_POSITIVE"), 0, 10);
+ TEST_THIS (short, ACE_TEXT ("TEST_VALUE_POSITIVE"), 0, 10);
+ TEST_THIS (unsigned short, ACE_TEXT ("TEST_VALUE_POSITIVE"), 0, 10);
+
+ TEST_THIS (int, ACE_TEXT ("TEST_VALUE_NEGATIVE"), 4, -10);
+ TEST_THIS (double, ACE_TEXT ("TEST_VALUE_NEGATIVE"), -1.0, -10.2);
+ TEST_THIS (long, ACE_TEXT ("TEST_VALUE_NEGATIVE"), 0, -10L);
+ TEST_THIS (unsigned long, ACE_TEXT ("TEST_VALUE_NEGATIVE"), 0, (unsigned long) -10);
+ TEST_THIS (short, ACE_TEXT ("TEST_VALUE_NEGATIVE"), 0, -10);
+ TEST_THIS (unsigned short, ACE_TEXT ("TEST_VALUE_NEGATIVE"), 0, (unsigned short) -10);
+
+ const ACE_TCHAR *defstr = ACE_TEXT ("Sarah Cleeland is Two!");
+ ACE_Env_Value<const ACE_TCHAR *> sval (ACE_TEXT ("This_Shouldnt_Be_Set_Hopefully"),
+ defstr);
+ if (ACE_OS::strcmp (sval, defstr) != 0)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("Mismatch: %s should be %s\n"),
+ (const ACE_TCHAR *)sval, defstr));
+ ACE_END_TEST;
+ }
+ return 0;
+}
+