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 2010/03/12 22:02:26 UTC

svn commit: r922426 - in /activemq/activemq-cpp/trunk/activemq-cpp/src: main/ main/activemq/commands/ main/activemq/util/ main/activemq/wireformat/openwire/marshal/ main/activemq/wireformat/openwire/utils/ test-benchmarks/ test-benchmarks/activemq/wire...

Author: tabish
Date: Fri Mar 12 21:02:25 2010
New Revision: 922426

URL: http://svn.apache.org/viewvc?rev=922426&view=rev
Log:
Fix for: https://issues.apache.org/activemq/browse/AMQCPP-261

Added:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.cpp   (with props)
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.h   (with props)
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.cpp   (with props)
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.h   (with props)
Removed:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/openwire/utils/OpenwireStringSupport.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/openwire/utils/OpenwireStringSupport.h
    activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/activemq/wireformat/
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/wireformat/openwire/utils/OpenwireStringSupportTest.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/wireformat/openwire/utils/OpenwireStringSupportTest.h
Modified:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/Makefile.am
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQStreamMessage.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQTextMessage.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/openwire/marshal/PrimitiveTypesMarshaller.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/Makefile.am
    activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/testRegistry.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/Makefile.am
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/testRegistry.cpp

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/Makefile.am
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/Makefile.am?rev=922426&r1=922425&r2=922426&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/Makefile.am (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/Makefile.am Fri Mar 12 21:02:25 2010
@@ -133,6 +133,7 @@ cc_sources = \
     activemq/util/CMSExceptionSupport.cpp \
     activemq/util/CompositeData.cpp \
     activemq/util/LongSequenceGenerator.cpp \
+    activemq/util/MarshallingSupport.cpp \
     activemq/util/MemoryUsage.cpp \
     activemq/util/PrimitiveList.cpp \
     activemq/util/PrimitiveMap.cpp \
@@ -459,7 +460,6 @@ cc_sources = \
     activemq/wireformat/openwire/utils/BooleanStream.cpp \
     activemq/wireformat/openwire/utils/HexTable.cpp \
     activemq/wireformat/openwire/utils/MessagePropertyInterceptor.cpp \
-    activemq/wireformat/openwire/utils/OpenwireStringSupport.cpp \
     activemq/wireformat/stomp/StompCommandConstants.cpp \
     activemq/wireformat/stomp/StompFrame.cpp \
     activemq/wireformat/stomp/StompHelper.cpp \
@@ -750,6 +750,7 @@ h_sources = \
     activemq/util/CompositeData.h \
     activemq/util/Config.h \
     activemq/util/LongSequenceGenerator.h \
+    activemq/util/MarshallingSupport.h \
     activemq/util/MemoryUsage.h \
     activemq/util/PrimitiveList.h \
     activemq/util/PrimitiveMap.h \
@@ -1082,7 +1083,6 @@ h_sources = \
     activemq/wireformat/openwire/utils/BooleanStream.h \
     activemq/wireformat/openwire/utils/HexTable.h \
     activemq/wireformat/openwire/utils/MessagePropertyInterceptor.h \
-    activemq/wireformat/openwire/utils/OpenwireStringSupport.h \
     activemq/wireformat/stomp/StompCommandConstants.h \
     activemq/wireformat/stomp/StompFrame.h \
     activemq/wireformat/stomp/StompHelper.h \
@@ -1322,6 +1322,7 @@ h_sources = \
     decaf/util/concurrent/TimeoutException.h \
     decaf/util/concurrent/atomic/AtomicBoolean.h \
     decaf/util/concurrent/atomic/AtomicInteger.h \
+    decaf/util/concurrent/atomic/AtomicRefCounter.h \
     decaf/util/concurrent/atomic/AtomicReference.h \
     decaf/util/concurrent/locks/Condition.h \
     decaf/util/concurrent/locks/Lock.h \

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQStreamMessage.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQStreamMessage.cpp?rev=922426&r1=922425&r2=922426&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQStreamMessage.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQStreamMessage.cpp Fri Mar 12 21:02:25 2010
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 #include <activemq/commands/ActiveMQStreamMessage.h>
-#include <activemq/wireformat/openwire/utils/OpenwireStringSupport.h>
 #include <activemq/util/PrimitiveValueNode.h>
 #include <activemq/util/CMSExceptionSupport.h>
+#include <activemq/util/MarshallingSupport.h>
 
 #include <cms/MessageEOFException.h>
 #include <cms/MessageFormatException.h>
@@ -49,7 +49,6 @@ using namespace activemq::commands;
 using namespace activemq::exceptions;
 using namespace activemq::wireformat;
 using namespace activemq::wireformat::openwire;
-using namespace activemq::wireformat::openwire::utils;
 using namespace decaf;
 using namespace decaf::io;
 using namespace decaf::lang;
@@ -828,10 +827,10 @@ std::string ActiveMQStreamMessage::readS
             return "";
         }
         if( type == PrimitiveValueNode::BIG_STRING_TYPE ) {
-            return OpenwireStringSupport::readString( *dataIn );
+            return MarshallingSupport::readString32( *this->dataIn );
         }
         if( type == PrimitiveValueNode::STRING_TYPE ) {
-            return this->dataIn->readUTF();
+            return MarshallingSupport::readString16( *this->dataIn );
         }
         if( type == PrimitiveValueNode::LONG_TYPE ) {
             return Long( this->dataIn->readLong() ).toString();
@@ -887,13 +886,7 @@ void ActiveMQStreamMessage::writeString(
 
     initializeWriting();
     try{
-        if( value.size() <= Short::MAX_VALUE / 4 ) {
-            this->dataOut->write( PrimitiveValueNode::STRING_TYPE );
-            this->dataOut->writeUTF( value );
-        } else {
-            this->dataOut->write( PrimitiveValueNode::BIG_STRING_TYPE );
-            OpenwireStringSupport::writeString( *(this->dataOut), &value );
-        }
+        MarshallingSupport::writeString( *this->dataOut, value );
     }
     AMQ_CATCH_ALL_THROW_CMSEXCEPTION()
 }

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQTextMessage.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQTextMessage.cpp?rev=922426&r1=922425&r2=922426&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQTextMessage.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQTextMessage.cpp Fri Mar 12 21:02:25 2010
@@ -23,7 +23,7 @@
 #include <decaf/util/zip/DeflaterOutputStream.h>
 #include <decaf/util/zip/InflaterInputStream.h>
 
-#include <activemq/wireformat/openwire/utils/OpenwireStringSupport.h>
+#include <activemq/util/MarshallingSupport.h>
 #include <activemq/util/CMSExceptionSupport.h>
 #include <cms/CMSException.h>
 
@@ -34,7 +34,6 @@ using namespace activemq::commands;
 using namespace activemq::util;
 using namespace activemq::wireformat;
 using namespace activemq::wireformat::openwire;
-using namespace activemq::wireformat::openwire::utils;
 using namespace decaf::io;
 using namespace decaf::lang;
 using namespace decaf::util;
@@ -131,7 +130,11 @@ void ActiveMQTextMessage::beforeMarshal(
 
         DataOutputStream dataOut( os, true );
 
-        OpenwireStringSupport::writeString( dataOut, this->text.get() );
+        if( this->text.get() == NULL ) {
+            dataOut.writeInt( -1 );
+        } else {
+            MarshallingSupport::writeString32( dataOut, *( this->text ) );
+        }
 
         dataOut.close();
 
@@ -178,7 +181,7 @@ std::string ActiveMQTextMessage::getText
 
                 DataInputStream dataIn( is, true );
 
-                this->text.reset( new std::string( OpenwireStringSupport::readString( dataIn ) ) );
+                this->text.reset( new std::string( MarshallingSupport::readString32( dataIn ) ) );
 
                 dataIn.close();
 

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.cpp?rev=922426&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.cpp (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.cpp Fri Mar 12 21:02:25 2010
@@ -0,0 +1,282 @@
+/*
+ * 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 "MarshallingSupport.h"
+
+#include <activemq/util/PrimitiveValueNode.h>
+#include <activemq/exceptions/ExceptionDefines.h>
+#include <decaf/lang/Short.h>
+#include <decaf/lang/Integer.h>
+
+using namespace activemq;
+using namespace activemq::util;
+using namespace decaf;
+using namespace decaf::io;
+using namespace decaf::lang;
+using namespace std;
+
+////////////////////////////////////////////////////////////////////////////////
+MarshallingSupport::MarshallingSupport() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+MarshallingSupport::~MarshallingSupport() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupport::writeString( decaf::io::DataOutputStream& dataOut, const std::string& value )
+    throw( decaf::io::IOException ) {
+
+    try{
+
+        if( value.length() <= Short::MAX_VALUE / 4 ) {
+            dataOut.write( PrimitiveValueNode::STRING_TYPE );
+            MarshallingSupport::writeString16( dataOut, value );
+        } else {
+            dataOut.write( PrimitiveValueNode::BIG_STRING_TYPE );
+            MarshallingSupport::writeString32( dataOut, value );
+        }
+    }
+    AMQ_CATCH_RETHROW( decaf::io::IOException )
+    AMQ_CATCH_EXCEPTION_CONVERT( Exception, decaf::io::IOException )
+    AMQ_CATCHALL_THROW( decaf::io::IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupport::writeString16( decaf::io::DataOutputStream& dataOut, const std::string& value )
+    throw( decaf::io::IOException ) {
+
+    try{
+
+        std::size_t strSize = value.length();
+        dataOut.writeShort( (short)strSize );
+        if( strSize > 0 ) {
+            dataOut.write( (unsigned char*)value.c_str(), strSize, 0, strSize );
+        }
+    }
+    AMQ_CATCH_RETHROW( decaf::io::IOException )
+    AMQ_CATCH_EXCEPTION_CONVERT( Exception, decaf::io::IOException )
+    AMQ_CATCHALL_THROW( decaf::io::IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupport::writeString32( decaf::io::DataOutputStream& dataOut, const std::string& value )
+    throw( decaf::io::IOException ) {
+
+    try{
+        std::size_t strSize = value.length();
+        dataOut.writeInt( (int)strSize );
+        if( strSize > 0 ) {
+            dataOut.write( (unsigned char*)value.c_str(), strSize, 0, strSize );
+        }
+    }
+    AMQ_CATCH_RETHROW( decaf::io::IOException )
+    AMQ_CATCH_EXCEPTION_CONVERT( Exception, decaf::io::IOException )
+    AMQ_CATCHALL_THROW( decaf::io::IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string MarshallingSupport::readString16( decaf::io::DataInputStream& dataIn )
+    throw( decaf::io::IOException ) {
+
+    try{
+        int utfLength = dataIn.readShort();
+        if( utfLength > 0 ) {
+
+            std::vector<unsigned char> buffer( utfLength );
+            dataIn.readFully( &buffer[0], utfLength );
+            return std::string( (char*)( &buffer[0] ), utfLength );
+        }
+        return "";
+    }
+    AMQ_CATCH_RETHROW( decaf::io::IOException )
+    AMQ_CATCH_EXCEPTION_CONVERT( Exception, decaf::io::IOException )
+    AMQ_CATCHALL_THROW( decaf::io::IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string MarshallingSupport::readString32( decaf::io::DataInputStream& dataIn )
+    throw( decaf::io::IOException ) {
+
+    try{
+        int utfLength = dataIn.readInt();
+        if( utfLength > 0 ) {
+
+            std::vector<unsigned char> buffer( utfLength );
+            dataIn.readFully( &buffer[0], utfLength );
+            return std::string( (char*)( &buffer[0] ), utfLength );
+        }
+        return "";
+    }
+    AMQ_CATCH_RETHROW( decaf::io::IOException )
+    AMQ_CATCH_EXCEPTION_CONVERT( Exception, decaf::io::IOException )
+    AMQ_CATCHALL_THROW( decaf::io::IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string MarshallingSupport::asciiToModifiedUtf8( const std::string& asciiString )
+    throw( decaf::io::UTFDataFormatException ) {
+
+    try {
+
+        if( asciiString.length() > 0 ) {
+
+            int utfLength = 0;
+            std::size_t length = asciiString.length();
+
+            for( std::size_t i = 0; i < length; ++i ) {
+
+                unsigned int charValue = (unsigned char)asciiString.at( i );
+
+                // Written to allow for expansion to wide character strings at some
+                // point, as it stands now the value can never be > 255 since the
+                // string class returns a single byte char.
+                if( charValue > 0 && charValue <= 127 ) {
+                    utfLength++;
+                } else if( charValue <= 2047 ) {
+                    utfLength += 2;
+                } else {
+                    utfLength += 3;
+                }
+            }
+
+            if( utfLength > Integer::MAX_VALUE ) {
+                throw UTFDataFormatException(
+                    __FILE__, __LINE__,
+                    ( std::string( "MarshallingSupport::asciiToModifiedUtf8 - Cannot marshall " ) +
+                    "string utf8 encoding longer than: 2^31 bytes, supplied string utf8 encoding was: " +
+                    Integer::toString( (int)utfLength ) + " bytes long." ).c_str() );
+            }
+
+            std::string utfBytes( (std::size_t)utfLength, '\0' );
+            unsigned int utfIndex = 0;
+
+            for( std::size_t i = 0; i < length; i++ ) {
+
+                unsigned int charValue = (unsigned char)asciiString.at( i );
+
+                // Written to allow for expansion to wide character strings at some
+                // point, as it stands now the value can never be > 255 since the
+                // string class returns a single byte char.
+                if( charValue > 0 && charValue <= 127 ) {
+                    utfBytes[utfIndex++] = (char)charValue;
+                } else if( charValue <= 2047 ) {
+                    utfBytes[utfIndex++] = (char)(0xc0 | (0x1f & (charValue >> 6)));
+                    utfBytes[utfIndex++] = (char)(0x80 | (0x3f & charValue));
+                } else {
+                    utfBytes[utfIndex++] = (char)(0xe0 | (0x0f & (charValue >> 12)));
+                    utfBytes[utfIndex++] = (char)(0x80 | (0x3f & (charValue >> 6)));
+                    utfBytes[utfIndex++] = (char)(0x80 | (0x3f & charValue));
+                }
+            }
+
+            return utfBytes;
+        } else {
+            return "";
+        }
+    }
+    AMQ_CATCH_RETHROW( decaf::io::UTFDataFormatException )
+    AMQ_CATCH_EXCEPTION_CONVERT( Exception, decaf::io::UTFDataFormatException )
+    AMQ_CATCHALL_THROW( decaf::io::UTFDataFormatException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string MarshallingSupport::modifiedUtf8ToAscii( const std::string modifiedUtf8String )
+    throw( decaf::io::UTFDataFormatException ) {
+
+    try {
+
+        std::size_t utfLength = modifiedUtf8String.length();
+
+        if( utfLength == 0 ) {
+            return "";
+        }
+
+        std::vector<unsigned char> result( utfLength );
+
+        std::size_t count = 0;
+        std::size_t index = 0;
+        unsigned char a = 0;
+
+        while( count < utfLength ) {
+            if( ( result[index] = modifiedUtf8String[count++] ) < 0x80 ) {
+                index++;
+            } else if( ( ( a = result[index] ) & 0xE0 ) == 0xC0 ) {
+                if( count >= utfLength ) {
+                    throw UTFDataFormatException(
+                        __FILE__, __LINE__,
+                        "Invalid UTF-8 encoding found, start of two byte char found at end.");
+                }
+
+                unsigned char b = modifiedUtf8String[count++];
+                if( ( b & 0xC0 ) != 0x80 ) {
+                    throw UTFDataFormatException(
+                        __FILE__, __LINE__,
+                        "Invalid UTF-8 encoding found, byte two does not start with 0x80." );
+                }
+
+                // 2-byte UTF8 encoding: 110X XXxx 10xx xxxx
+                // Bits set at 'X' means we have encountered a UTF8 encoded value
+                // greater than 255, which is not supported.
+                if( a & 0x1C ) {
+                    throw UTFDataFormatException(
+                        __FILE__, __LINE__,
+                        "Invalid 2 byte UTF-8 encoding found, "
+                        "This method only supports encoded ASCII values of (0-255)." );
+                }
+
+                result[index++] = (unsigned char)( ( ( a & 0x1F ) << 6 ) | ( b & 0x3F ) );
+
+            } else if( ( a & 0xF0 ) == 0xE0 ) {
+
+                if( count + 1 >= utfLength ) {
+                    throw UTFDataFormatException(
+                        __FILE__, __LINE__,
+                        "Invalid UTF-8 encoding found, start of three byte char found at end.");
+                } else {
+                    throw UTFDataFormatException(
+                        __FILE__, __LINE__,
+                        "Invalid 3 byte UTF-8 encoding found, "
+                        "This method only supports encoded ASCII values of (0-255)." );
+                }
+
+                // If we were to support multibyte strings in the future this would be
+                // the remainder of this method decoding logic.
+                //
+                //int b = modifiedUtf8String[count++];
+                //int c = modifiedUtf8String[count++];
+                //if( ( ( b & 0xC0 ) != 0x80 ) || ( ( c & 0xC0 ) != 0x80 ) ) {
+                //    throw UTFDataFormatException(
+                //        __FILE__, __LINE__,
+                //        "Invalid UTF-8 encoding found, byte two does not start with 0x80." );
+                //}
+                //
+                //result[inde++] = ( ( a & 0x0F ) << 12 ) |
+                //                 ( ( b & 0x3F ) << 6 ) | ( c & 0x3F );
+
+            } else {
+                throw UTFDataFormatException(
+                    __FILE__, __LINE__, "Invalid UTF-8 encoding found, aborting.");
+            }
+        }
+
+        return std::string( (char*)( &result[0] ), index );
+    }
+    AMQ_CATCH_RETHROW( decaf::io::UTFDataFormatException )
+    AMQ_CATCH_EXCEPTION_CONVERT( Exception, decaf::io::UTFDataFormatException )
+    AMQ_CATCHALL_THROW( decaf::io::UTFDataFormatException )
+}

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.h?rev=922426&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.h (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.h Fri Mar 12 21:02:25 2010
@@ -0,0 +1,166 @@
+/*
+ * 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 _ACTIVENQ_UTIL_MARSHALLINGSUPPORT_H_
+#define _ACTIVENQ_UTIL_MARSHALLINGSUPPORT_H_
+
+#include <activemq/util/Config.h>
+
+#include <decaf/io/IOException.h>
+#include <decaf/io/UTFDataFormatException.h>
+
+#include <decaf/io/DataOutputStream.h>
+#include <decaf/io/DataInputStream.h>
+
+#include <string>
+
+namespace activemq {
+namespace util {
+
+    class AMQCPP_API MarshallingSupport {
+    public:
+
+        MarshallingSupport();
+        virtual ~MarshallingSupport();
+
+    public:  // Openwire Type Marshalling methods
+
+        /**
+         * Write the string object to the given DataOutputStream as Raw bytes, no string
+         * encoding is done on this char values in the string.  User must encode to Modified
+         * UTF-8 as needed.
+         *
+         * @param dataOut
+         *      The DataOutputStream to write the String data to.
+         * @param value
+         *      Thre String value to write in Openwire form.
+         *
+         * @throws IOException if an I/O error occurs while writing the string.
+         */
+        static void writeString( decaf::io::DataOutputStream& dataOut, const std::string& value )
+            throw( decaf::io::IOException );
+
+        /**
+         * Write the string object to the given DataOutputStream as Raw bytes, no string
+         * encoding is done on this char values in the string.  User must encode to Modified
+         * UTF-8 as needed.  This method write out only the size as a short and the string data
+         * no Openwire Type tag is appended.
+         *
+         * @param dataOut
+         *      The DataOutputStream to write the String data to.
+         * @param value
+         *      Thre String value to write in Openwire form.
+         *
+         * @throws IOException if an I/O error occurs while writing the string.
+         */
+        static void writeString16( decaf::io::DataOutputStream& dataOut, const std::string& value )
+            throw( decaf::io::IOException );
+
+        /**
+         * Write the string object to the given DataOutputStream as Raw bytes, no string
+         * encoding is done on this char values in the string.  User must encode to Modified
+         * UTF-8 as needed.  This method write out only the size as a int and the string data
+         * no Openwire Type tag is appended.
+         *
+         * @param dataOut
+         *      The DataOutputStream to write the String data to.
+         * @param value
+         *      Thre String value to write in Openwire form.
+         *
+         * @throws IOException if an I/O error occurs while writing the string.
+         */
+        static void writeString32( decaf::io::DataOutputStream& dataOut, const std::string& value )
+            throw( decaf::io::IOException );
+
+        /**
+         * Reads an Openwire encoded string from the provided DataInputStream.  No string
+         * processing is performed by this method, clients that know the data contains UTF-8
+         * encoded content must use one of the utility methods of this class to decode the UTF-8
+         * data.
+         *
+         * This version assumes a size prefix of 16bits.
+         *
+         * @param dataIn
+         *      The DataInputStream to read the String data from.
+         *
+         * @returns the String value.
+         *
+         * @throws IOException if an I/O error occurs while writing the string.
+         */
+        static std::string readString16( decaf::io::DataInputStream& dataIn )
+            throw( decaf::io::IOException );
+
+        /**
+         * Reads an Openwire encoded string from the provided DataInputStream.  No string
+         * processing is performed by this method, clients that know the data contains UTF-8
+         * encoded content must use one of the utility methods of this class to decode the UTF-8
+         * data.
+         *
+         * This version assumes a size prefix of 32bits.
+         *
+         * @param dataIn
+         *      The DataInputStream to read the String data from.
+         *
+         * @returns the String value.
+         *
+         * @throws IOException if an I/O error occurs while writing the string.
+         */
+        static std::string readString32( decaf::io::DataInputStream& dataIn )
+            throw( decaf::io::IOException );
+
+    public:  // Static Utility Methods.
+
+        /**
+         * Given an ASCII String with byte values [0..255] convert the string to a
+         * string containing the modified UTF-8 form of that same string.  This allows
+         * an ASCII string containing values greater than 127 as well as embedded NULLs
+         * to be sent to a Java client.
+         *
+         * @param asciiString
+         *      The ASCII string to encode as Modified UTF-8
+         *
+         * @return a string containing the Modified UTF-8 encoded form of the provided string.
+         *
+         * @throws UTFDataFormatException if the length of the encoded string would exceed the
+         *         size of an signed integer.
+         */
+        static std::string asciiToModifiedUtf8( const std::string& asciiString )
+            throw( decaf::io::UTFDataFormatException );
+
+        /**
+         * Given a string that contains bytes in the Java Modified UTF-8 format convert
+         * that string back into ASCII values from [0..255].  This will handle any string
+         * sent from a Java client which contains values within the [0..255] range or has
+         * embedded Nulls.  Strings that have encoded values greater than 255 will cause
+         * an exception to be thrown.
+         *
+         * @param modifiedUtf8String
+         *      The string to convert from Modified UTF-8 to ASCII.
+         *
+         * @return the ASCII encoded version of the provided string.
+         *
+         * @throws UTFDataFormatException if the provided string contains invalid data or the
+         *         character values encoded in the string exceed ASCII value 255.
+         */
+        static std::string modifiedUtf8ToAscii( const std::string modifiedUtf8String )
+            throw( decaf::io::UTFDataFormatException );
+
+    };
+
+}}
+
+#endif /* _ACTIVENQ_UTIL_MARSHALLINGSUPPORT_H_ */

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/MarshallingSupport.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/openwire/marshal/PrimitiveTypesMarshaller.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/openwire/marshal/PrimitiveTypesMarshaller.cpp?rev=922426&r1=922425&r2=922426&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/openwire/marshal/PrimitiveTypesMarshaller.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/openwire/marshal/PrimitiveTypesMarshaller.cpp Fri Mar 12 21:02:25 2010
@@ -21,7 +21,6 @@
 #include <decaf/io/ByteArrayOutputStream.h>
 #include <decaf/io/DataInputStream.h>
 #include <decaf/io/DataOutputStream.h>
-#include <activemq/wireformat/openwire/utils/OpenwireStringSupport.h>
 #include <activemq/exceptions/ActiveMQException.h>
 #include <decaf/lang/Short.h>
 
@@ -33,7 +32,6 @@ using namespace activemq::util;
 using namespace activemq::exceptions;
 using namespace activemq::wireformat;
 using namespace activemq::wireformat::openwire;
-using namespace activemq::wireformat::openwire::utils;
 using namespace activemq::wireformat::openwire::marshal;
 using namespace decaf;
 using namespace decaf::io;
@@ -283,12 +281,17 @@ void PrimitiveTypesMarshaller::marshalPr
             std::string data = value.getString();
 
             // is the string big??
-            if( data.size() > Short::MAX_VALUE / 4 ) {
+            if( data.size() == 0 ) {
+                dataOut.writeByte( PrimitiveValueNode::STRING_TYPE );
+                dataOut.writeShort( (short)data.size() );
+            } else if( data.size() > Short::MAX_VALUE / 4 ) {
                 dataOut.writeByte( PrimitiveValueNode::BIG_STRING_TYPE );
-                OpenwireStringSupport::writeString( dataOut, &data );
+                dataOut.writeInt( (int)data.size() );
+                dataOut.write( (unsigned char*)data.c_str(), data.length(), 0, data.length() );
             } else {
                 dataOut.writeByte( PrimitiveValueNode::STRING_TYPE );
-                dataOut.writeUTF( data );
+                dataOut.writeShort( (short)data.size() );
+                dataOut.write( (unsigned char*)data.c_str(), data.length(), 0, data.length() );
             }
 
         } else if( value.getType() == PrimitiveValueNode::LIST_TYPE ) {
@@ -401,11 +404,27 @@ PrimitiveValueNode PrimitiveTypesMarshal
                 break;
             }
             case PrimitiveValueNode::STRING_TYPE:
-                value.setString( dataIn.readUTF() );
+            {
+                int utfLength = dataIn.readShort();
+                if( utfLength > 0 ) {
+
+                    std::vector<unsigned char> buffer( utfLength );
+                    dataIn.readFully( &buffer[0], utfLength );
+                    value.setString( std::string( (char*)( &buffer[0] ), utfLength ) );
+                }
                 break;
+            }
             case PrimitiveValueNode::BIG_STRING_TYPE:
-                value.setString( OpenwireStringSupport::readString( dataIn ) );
+            {
+                int utfLength = dataIn.readInt();
+                if( utfLength > 0 ) {
+
+                    std::vector<unsigned char> buffer( utfLength );
+                    dataIn.readFully( &buffer[0], utfLength );
+                    value.setString( std::string( (char*)( &buffer[0] ), utfLength ) );
+                }
                 break;
+            }
             case PrimitiveValueNode::LIST_TYPE:
             {
                 PrimitiveList list;

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/Makefile.am
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/Makefile.am?rev=922426&r1=922425&r2=922426&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/Makefile.am (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/Makefile.am Fri Mar 12 21:02:25 2010
@@ -17,7 +17,6 @@
 
 cc_sources = \
     activemq/util/PrimitiveMapBenchmark.cpp \
-    activemq/wireformat/openwire/utils/OpenWireStringSupportBenchmark.cpp \
     benchmark/PerformanceTimer.cpp \
     decaf/io/ByteArrayInputStreamBenchmark.cpp \
     decaf/io/ByteArrayOutputStreamBenchmark.cpp \
@@ -35,7 +34,6 @@ cc_sources = \
 
 h_sources = \
     activemq/util/PrimitiveMapBenchmark.h \
-    activemq/wireformat/openwire/utils/OpenWireStringSupportBenchmark.h \
     benchmark/BenchmarkBase.h \
     benchmark/PerformanceTimer.h \
     decaf/io/ByteArrayInputStreamBenchmark.h \

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/testRegistry.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/testRegistry.cpp?rev=922426&r1=922425&r2=922426&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/testRegistry.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test-benchmarks/testRegistry.cpp Fri Mar 12 21:02:25 2010
@@ -15,9 +15,6 @@
  * limitations under the License.
  */
 
-#include <activemq/wireformat/openwire/utils/OpenWireStringSupportBenchmark.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::utils::OpenWireStringSupportBenchmark );
-
 #include <activemq/util/PrimitiveMapBenchmark.h>
 CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::PrimitiveMapBenchmark );
 

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test/Makefile.am
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/Makefile.am?rev=922426&r1=922425&r2=922426&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/Makefile.am (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/Makefile.am Fri Mar 12 21:02:25 2010
@@ -53,6 +53,7 @@ cc_sources = \
     activemq/transport/inactivity/InactivityMonitorTest.cpp \
     activemq/transport/mock/MockTransportFactoryTest.cpp \
     activemq/util/LongSequenceGeneratorTest.cpp \
+    activemq/util/MarshallingSupportTest.cpp \
     activemq/util/MemoryUsageTest.cpp \
     activemq/util/PrimitiveListTest.cpp \
     activemq/util/PrimitiveMapTest.cpp \
@@ -66,7 +67,6 @@ cc_sources = \
     activemq/wireformat/openwire/utils/BooleanStreamTest.cpp \
     activemq/wireformat/openwire/utils/HexTableTest.cpp \
     activemq/wireformat/openwire/utils/MessagePropertyInterceptorTest.cpp \
-    activemq/wireformat/openwire/utils/OpenwireStringSupportTest.cpp \
     decaf/internal/net/URIEncoderDecoderTest.cpp \
     decaf/internal/net/URIHelperTest.cpp \
     decaf/internal/nio/BufferFactoryTest.cpp \
@@ -200,6 +200,7 @@ h_sources = \
     activemq/transport/inactivity/InactivityMonitorTest.h \
     activemq/transport/mock/MockTransportFactoryTest.h \
     activemq/util/LongSequenceGeneratorTest.h \
+    activemq/util/MarshallingSupportTest.h \
     activemq/util/MemoryUsageTest.h \
     activemq/util/PrimitiveListTest.h \
     activemq/util/PrimitiveMapTest.h \
@@ -213,7 +214,6 @@ h_sources = \
     activemq/wireformat/openwire/utils/BooleanStreamTest.h \
     activemq/wireformat/openwire/utils/HexTableTest.h \
     activemq/wireformat/openwire/utils/MessagePropertyInterceptorTest.h \
-    activemq/wireformat/openwire/utils/OpenwireStringSupportTest.h \
     decaf/internal/net/URIEncoderDecoderTest.h \
     decaf/internal/net/URIHelperTest.h \
     decaf/internal/nio/BufferFactoryTest.h \

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.cpp?rev=922426&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.cpp (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.cpp Fri Mar 12 21:02:25 2010
@@ -0,0 +1,315 @@
+/*
+ * 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 "MarshallingSupportTest.h"
+
+#include <activemq/util/MarshallingSupport.h>
+#include <activemq/util/PrimitiveValueNode.h>
+
+#include <decaf/io/ByteArrayInputStream.h>
+#include <decaf/io/ByteArrayOutputStream.h>
+#include <decaf/io/DataInputStream.h>
+#include <decaf/io/DataOutputStream.h>
+#include <decaf/lang/Integer.h>
+#include <decaf/lang/Short.h>
+
+using namespace std;
+using namespace decaf;
+using namespace decaf::io;
+using namespace decaf::lang;
+using namespace activemq;
+using namespace activemq::util;
+
+////////////////////////////////////////////////////////////////////////////////
+MarshallingSupportTest::MarshallingSupportTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+MarshallingSupportTest::~MarshallingSupportTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupportTest::writeTestHelper( unsigned char* input, int inputLength,
+                                              unsigned char* expect, int expectLength ) {
+
+    std::string testStr( (char*)input, inputLength );
+    std::string result = MarshallingSupport::asciiToModifiedUtf8( testStr );
+
+    for( int i = 0; i < expectLength; ++i ) {
+        CPPUNIT_ASSERT( (unsigned char)result[i] == expect[i] );
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupportTest::testAsciiToModifiedUtf8() {
+
+    // Test data with 1-byte UTF8 encoding.
+    {
+        unsigned char input[] = {0x00, 0x0B, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64};
+        unsigned char expect[] = {0xC0, 0x80, 0x0B, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64};
+
+        writeTestHelper( input, sizeof(input)/sizeof(unsigned char),
+                         expect, sizeof(expect)/sizeof(unsigned char) );
+    }
+
+    // Test data with 2-byte UT8 encoding.
+    {
+        unsigned char input[] = {0x00, 0xC2, 0xA9, 0xC3, 0xA6 };
+        unsigned char expect[] = {0xC0, 0x80, 0xC3, 0x82, 0xC2, 0xA9, 0xC3, 0x83, 0xC2, 0xA6 };
+        writeTestHelper( input, sizeof(input)/sizeof(unsigned char),
+                         expect, sizeof(expect)/sizeof(unsigned char)  );
+    }
+
+    // Test data with 1-byte and 2-byte encoding with embedded NULL's.
+    {
+        unsigned char input[] = {0x00, 0x04, 0xC2, 0xA9, 0xC3, 0x00, 0xA6 };
+        unsigned char expect[] = {0xC0, 0x80, 0x04, 0xC3, 0x82, 0xC2, 0xA9, 0xC3, 0x83, 0xC0, 0x80, 0xC2, 0xA6 };
+
+        writeTestHelper( input, sizeof(input)/sizeof(unsigned char),
+                         expect, sizeof(expect)/sizeof(unsigned char) );
+    }
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupportTest::readTestHelper( unsigned char* input, int inputLength,
+                                             unsigned char* expect, int expectLength ) {
+
+    std::string inputString( (char*)input, inputLength );
+    std::string result = MarshallingSupport::modifiedUtf8ToAscii( inputString );
+
+    for( std::size_t i = 0; i < result.length(); ++i ) {
+        CPPUNIT_ASSERT( (unsigned char)result[i] == expect[i] );
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupportTest::testModifiedUtf8ToAscii() {
+
+    // Test data with 1-byte UTF8 encoding.
+    {
+        unsigned char expect[] = { 0x00, 0x0B, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64 };
+        unsigned char input[] = { 0xC0, 0x80, 0x0B, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64 };
+
+        readTestHelper( input, sizeof(input)/sizeof(unsigned char),
+                        expect, sizeof(expect)/sizeof(unsigned char) );
+    }
+
+    // Test data with 2-byte UT8 encoding.
+    {
+        unsigned char expect[] = { 0x00, 0xC2, 0xA9, 0xC3, 0xA6 };
+        unsigned char input[] = { 0xC0, 0x80, 0xC3, 0x82, 0xC2, 0xA9, 0xC3, 0x83, 0xC2, 0xA6 };
+        readTestHelper( input, sizeof(input)/sizeof(unsigned char),
+                        expect, sizeof(expect)/sizeof(unsigned char)  );
+    }
+
+    // Test data with 1-byte and 2-byte encoding with embedded NULL's.
+    {
+        unsigned char expect[] = { 0x00, 0x04, 0xC2, 0xA9, 0xC3, 0x00, 0xA6 };
+        unsigned char input[] = { 0xC0, 0x80, 0x04, 0xC3, 0x82, 0xC2, 0xA9, 0xC3, 0x83, 0xC0, 0x80, 0xC2, 0xA6 };
+
+        readTestHelper( input, sizeof(input)/sizeof(unsigned char),
+                        expect, sizeof(expect)/sizeof(unsigned char) );
+    }
+
+    // Test with bad UTF-8 encoding, missing 2nd byte of two byte value
+    {
+        unsigned char input[] = { 0xC0, 0x80, 0x04, 0xC3, 0x82, 0xC2, 0xC2, 0xC3, 0x83, 0xC0, 0x80, 0xC2, 0xA6 };
+        std::string inputString( (char*)input, sizeof(input)/sizeof(unsigned char) );
+
+        CPPUNIT_ASSERT_THROW_MESSAGE(
+            "Should throw a UTFDataFormatException",
+            MarshallingSupport::modifiedUtf8ToAscii( inputString ),
+            UTFDataFormatException );
+    }
+
+    // Test with bad UTF-8 encoding, encoded value greater than 255
+    {
+        unsigned char input[] = { 0xC0, 0x80, 0x04, 0xC3, 0x82, 0xC2, 0xC2, 0xC3, 0x83, 0xC0, 0x80, 0xC2, 0xA6 };
+        std::string inputString( (char*)input, sizeof(input)/sizeof(unsigned char) );
+
+        CPPUNIT_ASSERT_THROW_MESSAGE(
+            "Should throw a UTFDataFormatException",
+            MarshallingSupport::modifiedUtf8ToAscii( inputString ),
+            UTFDataFormatException );
+    }
+
+    // Test data with value greater than 255 in 2-byte encoding.
+    {
+        unsigned char input[] = { 0xC8, 0xA9, 0xC3, 0xA6};
+        std::string inputString( (char*)input, sizeof(input)/sizeof(unsigned char) );
+
+        CPPUNIT_ASSERT_THROW_MESSAGE(
+            "Should throw a UTFDataFormatException",
+            MarshallingSupport::modifiedUtf8ToAscii( inputString ),
+            UTFDataFormatException );
+    }
+
+    // Test data with value greater than 255 in 3-byte encoding.
+    {
+        unsigned char input[] = { 0xE8, 0xA8, 0xA9, 0xC3, 0xA6};
+        std::string inputString( (char*)input, sizeof(input)/sizeof(unsigned char) );
+
+        CPPUNIT_ASSERT_THROW_MESSAGE(
+            "Should throw a UTFDataFormatException",
+            MarshallingSupport::modifiedUtf8ToAscii( inputString ),
+            UTFDataFormatException );
+    }
+
+    // Test with three byte encode that's missing a last byte.
+    {
+        unsigned char input[] = { 0x00, 0x00, 0x00, 0x02, 0xE8, 0xA8};
+        std::string inputString( (char*)input, sizeof(input)/sizeof(unsigned char) );
+
+        CPPUNIT_ASSERT_THROW_MESSAGE(
+            "Should throw a UTFDataFormatException",
+            MarshallingSupport::modifiedUtf8ToAscii( inputString ),
+            UTFDataFormatException );
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupportTest::testWriteString() {
+
+    {
+        ByteArrayOutputStream baos;
+        ByteArrayInputStream bais;
+        DataOutputStream writer( &baos );
+        DataInputStream dataIn( &bais );
+
+        MarshallingSupport::writeString( writer, "" );
+
+        bais.setByteArray( baos.toByteArray(), baos.size() );
+
+        CPPUNIT_ASSERT( dataIn.read() == PrimitiveValueNode::STRING_TYPE );
+        CPPUNIT_ASSERT( dataIn.readShort() == 0 );
+    }
+    {
+        ByteArrayOutputStream baos;
+        ByteArrayInputStream bais;
+        DataOutputStream writer( &baos );
+        DataInputStream dataIn( &bais );
+
+        MarshallingSupport::writeString( writer, "Hello World" );
+
+        bais.setByteArray( baos.toByteArray(), baos.size() );
+
+        CPPUNIT_ASSERT( dataIn.read() == PrimitiveValueNode::STRING_TYPE );
+        CPPUNIT_ASSERT( dataIn.readShort() == 11 );
+    }
+    {
+        ByteArrayOutputStream baos;
+        ByteArrayInputStream bais;
+        DataOutputStream writer( &baos );
+        DataInputStream dataIn( &bais );
+
+        MarshallingSupport::writeString( writer, std::string( Short::MAX_VALUE, 'A' ) );
+
+        bais.setByteArray( baos.toByteArray(), baos.size() );
+
+        CPPUNIT_ASSERT( dataIn.read() == PrimitiveValueNode::BIG_STRING_TYPE );
+        CPPUNIT_ASSERT( dataIn.readInt() == Short::MAX_VALUE );
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupportTest::testWriteString16() {
+
+    {
+        ByteArrayOutputStream baos;
+        ByteArrayInputStream bais;
+        DataOutputStream writer( &baos );
+        DataInputStream dataIn( &bais );
+
+        MarshallingSupport::writeString16( writer, "Hello World" );
+        bais.setByteArray( baos.toByteArray(), baos.size() );
+
+        CPPUNIT_ASSERT( dataIn.readShort() == 11 );
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupportTest::testWriteString32() {
+
+    {
+        ByteArrayOutputStream baos;
+        ByteArrayInputStream bais;
+        DataOutputStream writer( &baos );
+        DataInputStream dataIn( &bais );
+
+        MarshallingSupport::writeString32( writer, "Hello World" );
+        bais.setByteArray( baos.toByteArray(), baos.size() );
+
+        CPPUNIT_ASSERT( dataIn.readInt() == 11 );
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupportTest::testReadString16() {
+
+    ByteArrayInputStream bytesIn;
+    ByteArrayOutputStream bytesOut;
+
+    DataInputStream dataIn( &bytesIn );
+    DataOutputStream dataOut( &bytesOut );
+
+    string testStr = "This is a test string for Openwire";
+
+    MarshallingSupport::writeString( dataOut, testStr );
+
+    // Move the output back to the input.
+    bytesIn.setByteArray( bytesOut.toByteArray(), bytesOut.size() );
+
+    string resultStr = "";
+    int type = dataIn.read();
+
+    CPPUNIT_ASSERT( type == PrimitiveValueNode::STRING_TYPE );
+
+    CPPUNIT_ASSERT_NO_THROW_MESSAGE(
+        "Should not have thrown a message for valid String type",
+        resultStr = MarshallingSupport::readString16( dataIn ) );
+
+    CPPUNIT_ASSERT( testStr == resultStr );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void MarshallingSupportTest::testReadString32() {
+
+    ByteArrayInputStream bytesIn;
+    ByteArrayOutputStream bytesOut;
+
+    DataInputStream dataIn( &bytesIn );
+    DataOutputStream dataOut( &bytesOut );
+
+    string testStr( (std::size_t)Short::MAX_VALUE, 'a' );
+
+    MarshallingSupport::writeString( dataOut, testStr );
+
+    // Move the output back to the input.
+    bytesIn.setByteArray( bytesOut.toByteArray(), bytesOut.size() );
+
+    string resultStr = "";
+    int type = dataIn.read();
+
+    CPPUNIT_ASSERT( type == PrimitiveValueNode::BIG_STRING_TYPE );
+
+    CPPUNIT_ASSERT_NO_THROW_MESSAGE(
+        "Should not have thrown a message for valid Big String type",
+        resultStr = MarshallingSupport::readString32( dataIn ) );
+
+    CPPUNIT_ASSERT( testStr == resultStr );
+}

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.h?rev=922426&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.h (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.h Fri Mar 12 21:02:25 2010
@@ -0,0 +1,63 @@
+/*
+ * 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 _ACTIVEMQ_UTIL_MARSHALLINGSUPPORTTEST_H_
+#define _ACTIVEMQ_UTIL_MARSHALLINGSUPPORTTEST_H_
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace activemq {
+namespace util {
+
+    class MarshallingSupportTest : public CppUnit::TestFixture {
+
+        CPPUNIT_TEST_SUITE( MarshallingSupportTest );
+        CPPUNIT_TEST( testWriteString );
+        CPPUNIT_TEST( testWriteString16 );
+        CPPUNIT_TEST( testWriteString32 );
+        CPPUNIT_TEST( testReadString16 );
+        CPPUNIT_TEST( testReadString32 );
+        CPPUNIT_TEST( testAsciiToModifiedUtf8 );
+        CPPUNIT_TEST( testModifiedUtf8ToAscii );
+        CPPUNIT_TEST_SUITE_END();
+
+    public:
+
+        MarshallingSupportTest();
+        virtual ~MarshallingSupportTest();
+
+        void testWriteString();
+        void testWriteString16();
+        void testWriteString32();
+        void testReadString16();
+        void testReadString32();
+        void testAsciiToModifiedUtf8();
+        void testModifiedUtf8ToAscii();
+
+    private:
+
+        void readTestHelper( unsigned char* input, int inputLength,
+                             unsigned char* expect, int expectLength );
+
+        void writeTestHelper( unsigned char* input, int inputLength,
+                              unsigned char* expect, int expectLength );
+    };
+
+}}
+
+#endif /* _ACTIVEMQ_UTIL_MARSHALLINGSUPPORTTEST_H_ */

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/MarshallingSupportTest.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test/testRegistry.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/testRegistry.cpp?rev=922426&r1=922425&r2=922426&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/testRegistry.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/testRegistry.cpp Fri Mar 12 21:02:25 2010
@@ -18,211 +18,211 @@
 // All CPP Unit tests are registered in here so we can disable them and
 // enable them easily in one place.
 
-//#include <activemq/commands/BrokerInfoTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::BrokerInfoTest );
-//#include <activemq/commands/BrokerIdTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::BrokerIdTest );
-//#include <activemq/commands/ActiveMQTopicTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQTopicTest );
-//#include <activemq/commands/ActiveMQTextMessageTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQTextMessageTest );
-//#include <activemq/commands/ActiveMQTempTopicTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQTempTopicTest );
-//#include <activemq/commands/ActiveMQTempQueueTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQTempQueueTest );
-//#include <activemq/commands/ActiveMQQueueTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQQueueTest );
-//#include <activemq/commands/ActiveMQMessageTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQMessageTest );
-//#include <activemq/commands/ActiveMQMapMessageTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQMapMessageTest );
-//#include <activemq/commands/ActiveMQDestinationTest2.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQDestinationTest );
-//#include <activemq/commands/ActiveMQBytesMessageTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQBytesMessageTest );
-//#include <activemq/commands/ActiveMQStreamMessageTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQStreamMessageTest );
-//
-//#include <activemq/wireformat/openwire/marshal/BaseDataStreamMarshallerTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::marshal::BaseDataStreamMarshallerTest );
-//#include <activemq/wireformat/openwire/marshal/PrimitiveTypesMarshallerTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::marshal::PrimitiveTypesMarshallerTest );
-//
-//#include <activemq/wireformat/openwire/utils/BooleanStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::utils::BooleanStreamTest );
-//#include <activemq/wireformat/openwire/utils/HexTableTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::utils::HexTableTest );
-//#include <activemq/wireformat/openwire/utils/OpenwireStringSupportTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::utils::OpenwireStringSupportTest );
-//#include <activemq/wireformat/openwire/utils/MessagePropertyInterceptorTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::utils::MessagePropertyInterceptorTest );
-//
-//#include <activemq/wireformat/openwire/OpenWireFormatTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::OpenWireFormatTest );
-//
-//#include <activemq/cmsutil/CmsAccessorTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::CmsAccessorTest );
-//#include <activemq/cmsutil/CmsDestinationAccessorTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::CmsDestinationAccessorTest );
-//#include <activemq/cmsutil/CmsTemplateTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::CmsTemplateTest );
-//#include <activemq/cmsutil/DynamicDestinationResolverTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::DynamicDestinationResolverTest );
-//#include <activemq/cmsutil/SessionPoolTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::SessionPoolTest );
-//
-//#include <activemq/core/ActiveMQConnectionFactoryTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQConnectionFactoryTest );
-//#include <activemq/core/ActiveMQConnectionTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQConnectionTest );
-//#include <activemq/core/ActiveMQSessionTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQSessionTest );
-//#include <activemq/core/MessageDispatchChannelTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::MessageDispatchChannelTest );
-//
-//#include <activemq/state/ConnectionStateTrackerTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConnectionStateTrackerTest );
-//#include <activemq/state/ConnectionStateTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConnectionStateTest );
-//#include <activemq/state/ConsumerStateTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConsumerStateTest );
-//#include <activemq/state/ProducerStateTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ProducerStateTest );
-//#include <activemq/state/SessionStateTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::SessionStateTest );
-//#include <activemq/state/TransactionStateTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::TransactionStateTest );
-//
-//#include <activemq/transport/failover/FailoverTransportTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::failover::FailoverTransportTest );
-//
-//#include <activemq/transport/correlator/ResponseCorrelatorTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::correlator::ResponseCorrelatorTest );
-//
-//#include <activemq/transport/mock/MockTransportFactoryTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::mock::MockTransportFactoryTest );
-//
-//#include <activemq/transport/inactivity/InactivityMonitorTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::inactivity::InactivityMonitorTest );
-//
-//#include <activemq/transport/TransportRegistryTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::TransportRegistryTest );
-//#include <activemq/transport/IOTransportTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::IOTransportTest );
-//
-//#include <activemq/exceptions/ActiveMQExceptionTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::exceptions::ActiveMQExceptionTest );
-//
-//#include <activemq/util/LongSequenceGeneratorTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::LongSequenceGeneratorTest );
-//#include <activemq/util/PrimitiveValueNodeTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::PrimitiveValueNodeTest );
-//#include <activemq/util/PrimitiveListTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::PrimitiveListTest );
-//#include <activemq/util/PrimitiveMapTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::PrimitiveMapTest );
-//#include <activemq/util/PrimitiveValueConverterTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::PrimitiveValueConverterTest );
-//#include <activemq/util/URISupportTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::URISupportTest );
-//#include <activemq/util/MemoryUsageTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::MemoryUsageTest );
-//
-//#include <activemq/threads/DedicatedTaskRunnerTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::threads::DedicatedTaskRunnerTest );
-//#include <activemq/threads/CompositeTaskRunnerTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::threads::CompositeTaskRunnerTest );
-//
-//#include <activemq/wireformat/WireFormatRegistryTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::WireFormatRegistryTest );
-//
-//#include <decaf/internal/util/ByteArrayAdapterTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::util::ByteArrayAdapterTest );
-//#include <decaf/internal/util/TimerTaskHeapTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::util::TimerTaskHeapTest );
-//
-//#include <decaf/internal/nio/ByteArrayPerspectiveTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::ByteArrayPerspectiveTest );
-//#include <decaf/internal/nio/ByteArrayBufferTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::ByteArrayBufferTest );
-//#include <decaf/internal/nio/BufferFactoryTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::BufferFactoryTest );
-//#include <decaf/internal/nio/CharArrayBufferTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::CharArrayBufferTest );
-//#include <decaf/internal/nio/DoubleArrayBufferTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::DoubleArrayBufferTest );
-//#include <decaf/internal/nio/FloatArrayBufferTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::FloatArrayBufferTest );
-//#include <decaf/internal/nio/LongArrayBufferTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::LongArrayBufferTest );
-//#include <decaf/internal/nio/IntArrayBufferTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::IntArrayBufferTest );
-//#include <decaf/internal/nio/ShortArrayBufferTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::ShortArrayBufferTest );
-//
-//#include <decaf/internal/net/URIEncoderDecoderTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::net::URIEncoderDecoderTest );
-//#include <decaf/internal/net/URIHelperTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::net::URIHelperTest );
-//
-//#include <decaf/nio/BufferTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::nio::BufferTest );
-//
-//#include <decaf/io/InputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::InputStreamTest );
-//#include <decaf/io/OutputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::OutputStreamTest );
-//#include <decaf/io/FilterInputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::FilterInputStreamTest );
-//#include <decaf/io/FilterOutputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::FilterOutputStreamTest );
-//#include <decaf/io/BufferedInputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::BufferedInputStreamTest );
-//#include <decaf/io/BufferedOutputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::BufferedOutputStreamTest );
-//#include <decaf/io/ByteArrayInputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::ByteArrayInputStreamTest );
-//#include <decaf/io/ByteArrayOutputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::ByteArrayOutputStreamTest );
-//#include <decaf/io/PushbackInputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::PushbackInputStreamTest );
-//#include <decaf/io/DataInputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::DataInputStreamTest );
-//#include <decaf/io/DataOutputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::DataOutputStreamTest );
-//#include <decaf/io/WriterTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::WriterTest );
-//#include <decaf/io/ReaderTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::ReaderTest );
-//#include <decaf/io/OutputStreamWriterTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::OutputStreamWriterTest );
-//#include <decaf/io/InputStreamReaderTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::InputStreamReaderTest );
-//
-//#include <decaf/lang/MathTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::MathTest );
-//#include <decaf/lang/ByteTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::ByteTest );
-//#include <decaf/lang/CharacterTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::CharacterTest );
-//#include <decaf/lang/BooleanTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::BooleanTest );
-//#include <decaf/lang/ShortTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::ShortTest );
-//#include <decaf/lang/IntegerTest.h>
-//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/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 <activemq/commands/BrokerInfoTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::BrokerInfoTest );
+#include <activemq/commands/BrokerIdTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::BrokerIdTest );
+#include <activemq/commands/ActiveMQTopicTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQTopicTest );
+#include <activemq/commands/ActiveMQTextMessageTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQTextMessageTest );
+#include <activemq/commands/ActiveMQTempTopicTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQTempTopicTest );
+#include <activemq/commands/ActiveMQTempQueueTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQTempQueueTest );
+#include <activemq/commands/ActiveMQQueueTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQQueueTest );
+#include <activemq/commands/ActiveMQMessageTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQMessageTest );
+#include <activemq/commands/ActiveMQMapMessageTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQMapMessageTest );
+#include <activemq/commands/ActiveMQDestinationTest2.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQDestinationTest );
+#include <activemq/commands/ActiveMQBytesMessageTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQBytesMessageTest );
+#include <activemq/commands/ActiveMQStreamMessageTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::commands::ActiveMQStreamMessageTest );
+
+#include <activemq/wireformat/openwire/marshal/BaseDataStreamMarshallerTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::marshal::BaseDataStreamMarshallerTest );
+#include <activemq/wireformat/openwire/marshal/PrimitiveTypesMarshallerTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::marshal::PrimitiveTypesMarshallerTest );
+
+#include <activemq/wireformat/openwire/utils/BooleanStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::utils::BooleanStreamTest );
+#include <activemq/wireformat/openwire/utils/HexTableTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::utils::HexTableTest );
+#include <activemq/wireformat/openwire/utils/MessagePropertyInterceptorTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::utils::MessagePropertyInterceptorTest );
+
+#include <activemq/wireformat/openwire/OpenWireFormatTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::openwire::OpenWireFormatTest );
+
+#include <activemq/cmsutil/CmsAccessorTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::CmsAccessorTest );
+#include <activemq/cmsutil/CmsDestinationAccessorTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::CmsDestinationAccessorTest );
+#include <activemq/cmsutil/CmsTemplateTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::CmsTemplateTest );
+#include <activemq/cmsutil/DynamicDestinationResolverTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::DynamicDestinationResolverTest );
+#include <activemq/cmsutil/SessionPoolTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::SessionPoolTest );
+
+#include <activemq/core/ActiveMQConnectionFactoryTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQConnectionFactoryTest );
+#include <activemq/core/ActiveMQConnectionTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQConnectionTest );
+#include <activemq/core/ActiveMQSessionTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQSessionTest );
+#include <activemq/core/MessageDispatchChannelTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::MessageDispatchChannelTest );
+
+#include <activemq/state/ConnectionStateTrackerTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConnectionStateTrackerTest );
+#include <activemq/state/ConnectionStateTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConnectionStateTest );
+#include <activemq/state/ConsumerStateTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConsumerStateTest );
+#include <activemq/state/ProducerStateTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ProducerStateTest );
+#include <activemq/state/SessionStateTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::SessionStateTest );
+#include <activemq/state/TransactionStateTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::TransactionStateTest );
+
+#include <activemq/transport/failover/FailoverTransportTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::failover::FailoverTransportTest );
+
+#include <activemq/transport/correlator/ResponseCorrelatorTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::correlator::ResponseCorrelatorTest );
+
+#include <activemq/transport/mock/MockTransportFactoryTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::mock::MockTransportFactoryTest );
+
+#include <activemq/transport/inactivity/InactivityMonitorTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::inactivity::InactivityMonitorTest );
+
+#include <activemq/transport/TransportRegistryTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::TransportRegistryTest );
+#include <activemq/transport/IOTransportTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::IOTransportTest );
+
+#include <activemq/exceptions/ActiveMQExceptionTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::exceptions::ActiveMQExceptionTest );
+
+#include <activemq/util/LongSequenceGeneratorTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::LongSequenceGeneratorTest );
+#include <activemq/util/PrimitiveValueNodeTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::PrimitiveValueNodeTest );
+#include <activemq/util/PrimitiveListTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::PrimitiveListTest );
+#include <activemq/util/PrimitiveMapTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::PrimitiveMapTest );
+#include <activemq/util/PrimitiveValueConverterTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::PrimitiveValueConverterTest );
+#include <activemq/util/URISupportTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::URISupportTest );
+#include <activemq/util/MemoryUsageTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::MemoryUsageTest );
+#include <activemq/util/MarshallingSupportTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::MarshallingSupportTest );
+
+#include <activemq/threads/DedicatedTaskRunnerTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::threads::DedicatedTaskRunnerTest );
+#include <activemq/threads/CompositeTaskRunnerTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::threads::CompositeTaskRunnerTest );
+
+#include <activemq/wireformat/WireFormatRegistryTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::wireformat::WireFormatRegistryTest );
+
+#include <decaf/internal/util/ByteArrayAdapterTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::util::ByteArrayAdapterTest );
+#include <decaf/internal/util/TimerTaskHeapTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::util::TimerTaskHeapTest );
+
+#include <decaf/internal/nio/ByteArrayPerspectiveTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::ByteArrayPerspectiveTest );
+#include <decaf/internal/nio/ByteArrayBufferTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::ByteArrayBufferTest );
+#include <decaf/internal/nio/BufferFactoryTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::BufferFactoryTest );
+#include <decaf/internal/nio/CharArrayBufferTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::CharArrayBufferTest );
+#include <decaf/internal/nio/DoubleArrayBufferTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::DoubleArrayBufferTest );
+#include <decaf/internal/nio/FloatArrayBufferTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::FloatArrayBufferTest );
+#include <decaf/internal/nio/LongArrayBufferTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::LongArrayBufferTest );
+#include <decaf/internal/nio/IntArrayBufferTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::IntArrayBufferTest );
+#include <decaf/internal/nio/ShortArrayBufferTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::nio::ShortArrayBufferTest );
+
+#include <decaf/internal/net/URIEncoderDecoderTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::net::URIEncoderDecoderTest );
+#include <decaf/internal/net/URIHelperTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::internal::net::URIHelperTest );
+
+#include <decaf/nio/BufferTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::nio::BufferTest );
+
+#include <decaf/io/InputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::InputStreamTest );
+#include <decaf/io/OutputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::OutputStreamTest );
+#include <decaf/io/FilterInputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::FilterInputStreamTest );
+#include <decaf/io/FilterOutputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::FilterOutputStreamTest );
+#include <decaf/io/BufferedInputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::BufferedInputStreamTest );
+#include <decaf/io/BufferedOutputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::BufferedOutputStreamTest );
+#include <decaf/io/ByteArrayInputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::ByteArrayInputStreamTest );
+#include <decaf/io/ByteArrayOutputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::ByteArrayOutputStreamTest );
+#include <decaf/io/PushbackInputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::PushbackInputStreamTest );
+#include <decaf/io/DataInputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::DataInputStreamTest );
+#include <decaf/io/DataOutputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::DataOutputStreamTest );
+#include <decaf/io/WriterTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::WriterTest );
+#include <decaf/io/ReaderTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::ReaderTest );
+#include <decaf/io/OutputStreamWriterTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::OutputStreamWriterTest );
+#include <decaf/io/InputStreamReaderTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::io::InputStreamReaderTest );
+
+#include <decaf/lang/MathTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::MathTest );
+#include <decaf/lang/ByteTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::ByteTest );
+#include <decaf/lang/CharacterTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::CharacterTest );
+#include <decaf/lang/BooleanTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::BooleanTest );
+#include <decaf/lang/ShortTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::ShortTest );
+#include <decaf/lang/IntegerTest.h>
+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/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/lang/PointerTest.h>
 CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::PointerTest );
 #include <decaf/lang/ArrayPointerTest.h>
@@ -230,79 +230,79 @@ CPPUNIT_TEST_SUITE_REGISTRATION( decaf::
 #include <decaf/lang/StringTest.h>
 CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::StringTest );
 
-//#include <decaf/net/SocketFactoryTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::SocketFactoryTest );
-//#include <decaf/net/SocketTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::SocketTest );
-//#include <decaf/net/URITest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::URITest );
-//#include <decaf/net/URISyntaxExceptionTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::URISyntaxExceptionTest );
-//#include <decaf/net/URLEncoderTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::URLEncoderTest );
-//#include <decaf/net/URLDecoderTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::URLDecoderTest );
-//
-//#include <decaf/util/concurrent/ConcurrentStlMapTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::ConcurrentStlMapTest );
-//#include <decaf/util/concurrent/CountDownLatchTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::CountDownLatchTest );
-//#include <decaf/util/concurrent/MutexTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::MutexTest );
-//#include <decaf/util/concurrent/ThreadPoolTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::ThreadPoolTest );
-//#include <decaf/util/concurrent/TimeUnitTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::TimeUnitTest );
-//
-//#include <decaf/util/concurrent/atomic/AtomicBooleanTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::atomic::AtomicBooleanTest );
-//#include <decaf/util/concurrent/atomic/AtomicIntegerTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::atomic::AtomicIntegerTest );
-//#include <decaf/util/concurrent/atomic/AtomicReferenceTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::atomic::AtomicReferenceTest );
-//
-//#include <decaf/util/concurrent/locks/LockSupportTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::locks::LockSupportTest );
-//
-//#include <decaf/util/DateTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::DateTest );
-//#include <decaf/util/UUIDTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::UUIDTest );
-//#include <decaf/util/ListTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::ListTest );
-//#include <decaf/util/StlMapTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::StlMapTest );
-//#include <decaf/util/PropertiesTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::PropertiesTest );
-//#include <decaf/util/QueueTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::QueueTest );
-//#include <decaf/util/RandomTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::RandomTest );
-//#include <decaf/util/SetTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::SetTest );
-//#include <decaf/util/StringTokenizerTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::StringTokenizerTest );
-//#include <decaf/util/TimerTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::TimerTest );
-//#include <decaf/util/PriorityQueueTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::PriorityQueueTest );
-//
-//#include <decaf/util/zip/DeflaterTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::DeflaterTest );
-//#include <decaf/util/zip/InflaterTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::InflaterTest );
-//#include <decaf/util/zip/Adler32Test.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::Adler32Test );
-//#include <decaf/util/zip/CRC32Test.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::CRC32Test );
-//#include <decaf/util/zip/CheckedInputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::CheckedInputStreamTest );
-//#include <decaf/util/zip/CheckedOutputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::CheckedOutputStreamTest );
-//#include <decaf/util/zip/DeflaterOutputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::DeflaterOutputStreamTest );
-//#include <decaf/util/zip/InflaterInputStreamTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::InflaterInputStreamTest );
+#include <decaf/net/SocketFactoryTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::SocketFactoryTest );
+#include <decaf/net/SocketTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::SocketTest );
+#include <decaf/net/URITest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::URITest );
+#include <decaf/net/URISyntaxExceptionTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::URISyntaxExceptionTest );
+#include <decaf/net/URLEncoderTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::URLEncoderTest );
+#include <decaf/net/URLDecoderTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::URLDecoderTest );
+
+#include <decaf/util/concurrent/ConcurrentStlMapTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::ConcurrentStlMapTest );
+#include <decaf/util/concurrent/CountDownLatchTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::CountDownLatchTest );
+#include <decaf/util/concurrent/MutexTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::MutexTest );
+#include <decaf/util/concurrent/ThreadPoolTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::ThreadPoolTest );
+#include <decaf/util/concurrent/TimeUnitTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::TimeUnitTest );
+
+#include <decaf/util/concurrent/atomic/AtomicBooleanTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::atomic::AtomicBooleanTest );
+#include <decaf/util/concurrent/atomic/AtomicIntegerTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::atomic::AtomicIntegerTest );
+#include <decaf/util/concurrent/atomic/AtomicReferenceTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::atomic::AtomicReferenceTest );
+
+#include <decaf/util/concurrent/locks/LockSupportTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::concurrent::locks::LockSupportTest );
+
+#include <decaf/util/DateTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::DateTest );
+#include <decaf/util/UUIDTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::UUIDTest );
+#include <decaf/util/ListTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::ListTest );
+#include <decaf/util/StlMapTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::StlMapTest );
+#include <decaf/util/PropertiesTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::PropertiesTest );
+#include <decaf/util/QueueTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::QueueTest );
+#include <decaf/util/RandomTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::RandomTest );
+#include <decaf/util/SetTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::SetTest );
+#include <decaf/util/StringTokenizerTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::StringTokenizerTest );
+#include <decaf/util/TimerTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::TimerTest );
+#include <decaf/util/PriorityQueueTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::PriorityQueueTest );
+
+#include <decaf/util/zip/DeflaterTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::DeflaterTest );
+#include <decaf/util/zip/InflaterTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::InflaterTest );
+#include <decaf/util/zip/Adler32Test.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::Adler32Test );
+#include <decaf/util/zip/CRC32Test.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::CRC32Test );
+#include <decaf/util/zip/CheckedInputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::CheckedInputStreamTest );
+#include <decaf/util/zip/CheckedOutputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::CheckedOutputStreamTest );
+#include <decaf/util/zip/DeflaterOutputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::DeflaterOutputStreamTest );
+#include <decaf/util/zip/InflaterInputStreamTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::util::zip::InflaterInputStreamTest );
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // Marshaler Tests