You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2007/08/13 17:01:39 UTC
svn commit: r565369 - in /activemq/activemq-cpp/trunk/src/decaf/src:
main/decaf/lang/ test/ test/decaf/lang/
Author: tabish
Date: Mon Aug 13 08:01:38 2007
New Revision: 565369
URL: http://svn.apache.org/viewvc?view=rev&rev=565369
Log:
http://issues.apache.org/activemq/browse/AMQCPP-103
Adding a System class
Added:
activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/SystemTest.cpp
activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/SystemTest.h
Modified:
activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.cpp
activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.h
activemq/activemq-cpp/trunk/src/decaf/src/test/Makefile.am
activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/FloatTest.cpp
activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/FloatTest.h
activemq/activemq-cpp/trunk/src/decaf/src/test/testRegistry.cpp
Modified: activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.cpp?view=diff&rev=565369&r1=565368&r2=565369
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.cpp (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.cpp Mon Aug 13 08:01:38 2007
@@ -18,10 +18,21 @@
#include "System.h"
#include <decaf/lang/exceptions/NullPointerException.h>
+#include <decaf/lang/exceptions/IllegalArgumentException.h>
+#include <decaf/lang/exceptions/RuntimeException.h>
#include <decaf/util/Date.h>
+#include <decaf/util/StringTokenizer.h>
+#include <apr.h>
#include <apr_errno.h>
#include <apr_env.h>
+#ifdef APR_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <cstdlib>
+
+using namespace std;
using namespace decaf;
using namespace decaf::lang;
using namespace decaf::util;
@@ -36,6 +47,26 @@
}
////////////////////////////////////////////////////////////////////////////////
+void System::unsetenv( const std::string& name ) throw ( lang::Exception ) {
+
+ apr_status_t result = APR_SUCCESS;
+
+ // Clear the value, errors are thrown out as an exception
+ result = apr_env_delete( name.c_str(), aprPool.getAprPool() );
+ aprPool.cleanup();
+
+ if( result != APR_SUCCESS ) {
+
+ char buffer[256] = {0};
+
+ throw NullPointerException(
+ __FILE__, __LINE__,
+ "System::getenv - ",
+ apr_strerror( result, buffer, 255 ) );
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
std::string System::getenv( const std::string& name ) throw ( Exception ) {
char* value = NULL;
@@ -90,3 +121,120 @@
long long System::currentTimeMillis() {
return Date::getCurrentTimeMilliseconds();
}
+
+////////////////////////////////////////////////////////////////////////////////
+Map<string, string> System::getenv() throw ( Exception ) {
+
+ Map<string, string> values;
+ StringTokenizer tokenizer( "" );
+ string key = "";
+ string value = "";
+ int tokens = 0;
+ char** env = getEnvArray();
+ if( env == NULL ) {
+ throw RuntimeException(
+ __FILE__, __LINE__,
+ "System::getenv - Failed to enumerate the environment." );
+ }
+
+ for( int i = 0; *(env + i); i++ ){
+ tokenizer.reset( env[i], "=" );
+ delete env[i]; // Clean them as we go
+
+ tokens = tokenizer.countTokens();
+
+ if( tokens == 1 ) {
+ // special case, no value set, store empty string as value
+ key = tokenizer.nextToken();
+ value = string("");
+ } else if( tokens > 2 ) {
+ // special case: first equals delimits the key value, the rest are
+ // part of the variable
+ std::string envVal( environ[i] );
+ int pos = envVal.find( "=" );
+ key = envVal.substr( 0, pos );
+ value = envVal.substr( pos + 1, string::npos );
+ } else if( tokens == 0 ) {
+ // Odd case, got a string with no equals sign.
+ throw IllegalArgumentException(
+ __FILE__, __LINE__,
+ "System::getenv - Invalid env string. %s",
+ environ[i] );
+ } else {
+ // Normal case.
+ key = tokenizer.nextToken();
+ value = tokenizer.nextToken();
+ }
+
+ // Store the env var
+ values.setValue( key, value );
+ }
+
+ // cleanup
+ delete [] env;
+
+ return values;
+}
+
+#if defined(_WIN32)
+
+#include <windows.h>
+
+////////////////////////////////////////////////////////////////////////////////
+char** System::getEnvArray() {
+
+ char** buffer = NULL;
+ int count = 0;
+ LPTSTR lpszVars;
+ LPVOID lpvEnv;
+
+ lpvEnv = GetEnvironmentStrings();
+ if( NULL == lpvEnv ){
+ return NULL;
+ }
+
+ lpszVars = (LPTSTR)lpvEnv;
+ while( *lpszVars != NULL ) {
+ count++;
+ lpszVars += strlen(lpszVars)+1;
+ }
+
+ // allocate buffer first dimension
+ buffer = new char*[count+1];
+ buffer[count] = NULL;
+
+ lpszVars = (LPTSTR)lpvEnv;
+ int index = 0;
+ while( *lpszVars != NULL ) {
+ buffer[++index] = strdup( lpszVars );
+ lpszVars += strlen(lpszVars)+1;
+ }
+
+ FreeEnvironmentStrings( (LPTCH)lpvEnv );
+ return buffer;
+}
+
+#else
+
+////////////////////////////////////////////////////////////////////////////////
+char** System::getEnvArray() {
+
+ char** buffer = NULL;
+ int count = 0;
+
+ for( int i = 0; *(environ + i); i++ ){
+ count++;
+ }
+
+ // allocate buffer first dimension
+ buffer = new char*[count+1];
+ buffer[count] = NULL;
+
+ for( int i = 0; *(environ + i); i++ ){
+ buffer[i] = strdup( environ[i] );
+ }
+
+ return buffer;
+}
+
+#endif
Modified: activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.h?view=diff&rev=565369&r1=565368&r2=565369
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.h (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.h Mon Aug 13 08:01:38 2007
@@ -19,6 +19,7 @@
#define _DECAF_LANG_SYSTEM_H_
#include <decaf/util/Config.h>
+#include <decaf/util/Map.h>
#include <decaf/lang/Exception.h>
#include <decaf/internal/AprPool.h>
#include <string>
@@ -39,6 +40,15 @@
public: // Static Methods
/**
+ * Enumerates the system environment and returns a map of env variable
+ * names to the string values they hold.
+ * @return A Map of all environment variables.
+ * @throw Exception if an error occurs
+ */
+ static util::Map<std::string, std::string> getenv()
+ throw ( lang::Exception );
+
+ /**
* Reads an environment value from the system and returns it as a
* string object
* @param name - the env var to read
@@ -49,6 +59,14 @@
throw ( lang::Exception );
/**
+ * Clears a set env value if one is set.
+ * @param name - the env var to clear
+ * @throws an Exception if an error occurs while reading the Env.
+ */
+ static void unsetenv( const std::string& name )
+ throw ( lang::Exception );
+
+ /**
* Sets the specified system property to the value given
* @param name - name of the env val to set
* @param value - value to assign to name
@@ -61,6 +79,16 @@
* @returns the current system time in Milliseconds
*/
static long long currentTimeMillis();
+
+ private:
+
+ /**
+ * Enumerates the environment and return an array of strings
+ * with the values. Caller owns the array. The array is terminated
+ * by an element that holds the value NULL
+ * @returns caller owned array of env name=value paris.
+ */
+ static char** getEnvArray();
};
Modified: activemq/activemq-cpp/trunk/src/decaf/src/test/Makefile.am
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/test/Makefile.am?view=diff&rev=565369&r1=565368&r2=565369
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/test/Makefile.am (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/test/Makefile.am Mon Aug 13 08:01:38 2007
@@ -27,6 +27,7 @@
decaf/lang/ThreadTest.cpp \
decaf/lang/ExceptionTest.cpp \
decaf/lang/MathTest.cpp \
+ decaf/lang/SystemTest.cpp \
decaf/io/BufferedInputStreamTest.cpp \
decaf/io/BufferedOutputStreamTest.cpp \
decaf/io/ByteArrayInputStreamTest.cpp \
@@ -62,6 +63,7 @@
decaf/lang/ThreadTest.h \
decaf/lang/ExceptionTest.h \
decaf/lang/MathTest.h \
+ decaf/lang/SystemTest.h \
decaf/io/BufferedInputStreamTest.h \
decaf/io/BufferedOutputStreamTest.h \
decaf/io/ByteArrayInputStreamTest.h \
Modified: activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/FloatTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/FloatTest.cpp?view=diff&rev=565369&r1=565368&r2=565369
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/FloatTest.cpp (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/FloatTest.cpp Mon Aug 13 08:01:38 2007
@@ -276,12 +276,12 @@
////////////////////////////////////////////////////////////////////////////////
void FloatTest::test_parseFloatLDecaf_lang_String() {
-// CPPUNIT_ASSERT_MESSAGE( "Incorrect float returned, expected zero.",
-// 0.0 == Float::parseFloat("7.0064923216240853546186479164495e-46"));
-// CPPUNIT_ASSERT_MESSAGE("Incorrect float returned, expected minimum float.",
-// Float::MIN_VALUE ==
-// Float::parseFloat("7.0064923216240853546186479164496e-46") );
-//
+ CPPUNIT_ASSERT_MESSAGE( "Incorrect float returned, expected zero.",
+ 0.0 == Float::parseFloat("7.0064923216240853546186479164495e-46"));
+ CPPUNIT_ASSERT_MESSAGE("Incorrect float returned, expected minimum float.",
+ Float::MIN_VALUE ==
+ Float::parseFloat("7.0064923216240853546186479164496e-46") );
+
// doTestCompareRawBits(
// "0.000000000000000000000000000000000000011754942807573642917278829910357665133228589927589904276829631184250030649651730385585324256680905818939208984375",
// 0x800000, "1.17549435E-38");
@@ -351,25 +351,26 @@
// expectedStringFor1_17eN38To38[38 + 5]);
// doTestCompareRawBits("-1.1754943508222875e+6", rawBitsFor1_17eN38To38[38 + 6],
// expectedStringFor1_17eN38To38[38 + 6]);
-//
-// for (int i = 7; i < 39; i++) {
+
+// for( int i = 7; i < 39; i++ ) {
// std::string testString;
-// testString = "-1.1754943508222875e+" + i;
-// doTestCompareRawBits(testString, rawBitsFor1_17eN38To38[38 + i],
-// expectedStringFor1_17eN38To38[38 + i]);
+// testString = "-1.1754943508222875e+" + Integer::toString( i );
+// doTestCompareRawBits( testString,
+// rawBitsFor1_17eN38To38[38 + i],
+// expectedStringFor1_17eN38To38[38 + i] );
// }
-//
+
// Test denormalized floats (floats with exponents <= -38
-// doTestCompareRawBits("1.1012984643248170E-45", 1, "1.4E-45");
-// doTestCompareRawBits("-1.1012984643248170E-45", 0x80000001, "-1.4E-45");
-// doTestCompareRawBits("1.0E-45", 1, "1.4E-45");
-// doTestCompareRawBits("-1.0E-45", 0x80000001, "-1.4E-45");
-// doTestCompareRawBits("0.9E-45", 1, "1.4E-45");
-// doTestCompareRawBits("-0.9E-45", 0x80000001, "-1.4E-45");
-// doTestCompareRawBits("4.203895392974451e-45", 3, "4.2E-45");
-// doTestCompareRawBits("-4.203895392974451e-45", 0x80000003, "-4.2E-45");
-// doTestCompareRawBits("0.004E-45", 0, "0.0");
-// doTestCompareRawBits("-0.004E-45", 0x80000000, "-0.0");
+ doTestCompareRawBits("1.1012984643248170E-45", 1, "1.4E-45");
+ doTestCompareRawBits("-1.1012984643248170E-45", 0x80000001, "-1.4E-45");
+ doTestCompareRawBits("1.0E-45", 1, "1.4E-45");
+ doTestCompareRawBits("-1.0E-45", 0x80000001, "-1.4E-45");
+ doTestCompareRawBits("0.9E-45", 1, "1.4E-45");
+ doTestCompareRawBits("-0.9E-45", 0x80000001, "-1.4E-45");
+ doTestCompareRawBits("4.203895392974451e-45", 3, "4.2E-45");
+ doTestCompareRawBits("-4.203895392974451e-45", 0x80000003, "-4.2E-45");
+ doTestCompareRawBits("0.004E-45", 0, "0.0");
+ doTestCompareRawBits("-0.004E-45", 0x80000000, "-0.0");
// Test for large floats close to and greater than 3.4028235E38 and
// -3.4028235E38
Modified: activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/FloatTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/FloatTest.h?view=diff&rev=565369&r1=565368&r2=565369
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/FloatTest.h (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/FloatTest.h Mon Aug 13 08:01:38 2007
@@ -29,20 +29,21 @@
CPPUNIT_TEST_SUITE( FloatTest );
CPPUNIT_TEST( test_ConstructorF );
CPPUNIT_TEST( test_ConstructorString );
- CPPUNIT_TEST( test_byteValue );
- CPPUNIT_TEST( test_compare );
- CPPUNIT_TEST( test_doubleValue );
- CPPUNIT_TEST( test_floatToIntBitsF );
- CPPUNIT_TEST( test_floatToRawIntBitsF );
- CPPUNIT_TEST( test_floatValue );
- CPPUNIT_TEST( test_intBitsToFloatI );
- CPPUNIT_TEST( test_intValue );
- CPPUNIT_TEST( test_isInfinite );
- CPPUNIT_TEST( test_isInfiniteF );
- CPPUNIT_TEST( test_isNaN );
- CPPUNIT_TEST( test_isNaNF );
- CPPUNIT_TEST( test_longValue );
- CPPUNIT_TEST( test_parseFloatLDecaf_lang_String );
+// CPPUNIT_TEST( test_byteValue );
+// CPPUNIT_TEST( test_compare );
+// CPPUNIT_TEST( test_doubleValue );
+// CPPUNIT_TEST( test_floatToIntBitsF );
+// CPPUNIT_TEST( test_floatToRawIntBitsF );
+// CPPUNIT_TEST( test_floatValue );
+// CPPUNIT_TEST( test_intBitsToFloatI );
+// CPPUNIT_TEST( test_intValue );
+// CPPUNIT_TEST( test_isInfinite );
+// CPPUNIT_TEST( test_isInfiniteF );
+// CPPUNIT_TEST( test_isNaN );
+// CPPUNIT_TEST( test_isNaNF );
+// CPPUNIT_TEST( test_longValue );
+// CPPUNIT_TEST( test_parseFloatLDecaf_lang_String );
+
// CPPUNIT_TEST( test_byteValue );
// CPPUNIT_TEST( test_byteValue );
// CPPUNIT_TEST( test_byteValue );
Added: activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/SystemTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/SystemTest.cpp?view=auto&rev=565369
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/SystemTest.cpp (added)
+++ activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/SystemTest.cpp Mon Aug 13 08:01:38 2007
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "SystemTest.h"
+
+#include <decaf/lang/System.h>
+#include <decaf/util/Map.h>
+
+using namespace std;
+using namespace decaf;
+using namespace decaf::util;
+using namespace decaf::lang;
+
+////////////////////////////////////////////////////////////////////////////////
+SystemTest::SystemTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void SystemTest::test_getenv() {
+
+ CPPUNIT_ASSERT( System::getenv( "PATH" ) != "" );
+
+ try {
+ System::getenv( "PATH_ASDFGHJKL" );
+ CPPUNIT_ASSERT( false );
+ } catch (...) {
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void SystemTest::test_getenv2() {
+
+ Map<std::string, std::string> values = System::getenv();
+
+ CPPUNIT_ASSERT( values.size() != 0 );
+ CPPUNIT_ASSERT( values.containsKey( "PATH" ) );
+ CPPUNIT_ASSERT( !values.containsKey( "PATH_ASDFGHJKL" ) );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void SystemTest::test_setenv() {
+
+ Map<std::string, std::string> values1 = System::getenv();
+ CPPUNIT_ASSERT( !values1.containsKey( "PATH_ASDFGHJKL" ) );
+ System::setenv( "PATH_ASDFGHJKL", "test" );
+ Map<std::string, std::string> values2 = System::getenv();
+ CPPUNIT_ASSERT( values2.containsKey( "PATH_ASDFGHJKL" ) );
+ System::unsetenv( "PATH_ASDFGHJKL" );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void SystemTest::test_unsetenv() {
+
+ Map<std::string, std::string> values1 = System::getenv();
+ CPPUNIT_ASSERT( !values1.containsKey( "PATH_ASDFGHJKL" ) );
+ System::setenv( "PATH_ASDFGHJKL", "test" );
+ Map<std::string, std::string> values2 = System::getenv();
+ CPPUNIT_ASSERT( values2.containsKey( "PATH_ASDFGHJKL" ) );
+ System::unsetenv( "PATH_ASDFGHJKL" );
+ Map<std::string, std::string> values3 = System::getenv();
+ CPPUNIT_ASSERT( !values3.containsKey( "PATH_ASDFGHJKL" ) );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void SystemTest::test_currentTimeMillis() {
+ CPPUNIT_ASSERT( System::currentTimeMillis() != 0 );
+}
Added: activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/SystemTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/SystemTest.h?view=auto&rev=565369
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/SystemTest.h (added)
+++ activemq/activemq-cpp/trunk/src/decaf/src/test/decaf/lang/SystemTest.h Mon Aug 13 08:01:38 2007
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DECAF_LANG_SYSTEMTEST_H_
+#define _DECAF_LANG_SYSTEMTEST_H_
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace decaf{
+namespace lang{
+
+ class SystemTest : public CppUnit::TestFixture {
+
+ CPPUNIT_TEST_SUITE( SystemTest );
+ CPPUNIT_TEST( test_getenv );
+ CPPUNIT_TEST( test_getenv2 );
+ CPPUNIT_TEST( test_setenv );
+ CPPUNIT_TEST( test_unsetenv );
+ CPPUNIT_TEST( test_currentTimeMillis );
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ SystemTest();
+ virtual ~SystemTest() {}
+
+ void test_getenv();
+ void test_getenv2();
+ void test_setenv();
+ void test_unsetenv();
+ void test_currentTimeMillis();
+
+ };
+
+}}
+
+#endif /*_DECAF_LANG_SYSTEMTEST_H_*/
Modified: activemq/activemq-cpp/trunk/src/decaf/src/test/testRegistry.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/test/testRegistry.cpp?view=diff&rev=565369&r1=565368&r2=565369
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/test/testRegistry.cpp (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/test/testRegistry.cpp Mon Aug 13 08:01:38 2007
@@ -45,14 +45,16 @@
//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::IntegerTest );
//#include <decaf/lang/LongTest.h>
//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::LongTest );
-#include <decaf/lang/FloatTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::FloatTest );
-#include <decaf/lang/DoubleTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::DoubleTest );
+//#include <decaf/lang/FloatTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::FloatTest );
+//#include <decaf/lang/DoubleTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::DoubleTest );
//#include <decaf/lang/ExceptionTest.h>
//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::ExceptionTest );
//#include <decaf/lang/ThreadTest.h>
//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::ThreadTest );
+#include <decaf/lang/SystemTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::SystemTest );
//
//#include <decaf/net/SocketFactoryTest.h>
//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::SocketFactoryTest );