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/12/08 18:19:07 UTC
svn commit: r602514 - in /activemq/activemq-cpp/decaf/trunk/src:
main/decaf/nio/CharBuffer.cpp test/decaf/internal/nio/CharArrayBufferTest.cpp
test/decaf/internal/nio/CharArrayBufferTest.h
Author: tabish
Date: Sat Dec 8 09:19:06 2007
New Revision: 602514
URL: http://svn.apache.org/viewvc?rev=602514&view=rev
Log:
http://issues.apache.org/activemq/browse/AMQCPP-153
Working on implementing the NIO package
Modified:
activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/CharBuffer.cpp
activemq/activemq-cpp/decaf/trunk/src/test/decaf/internal/nio/CharArrayBufferTest.cpp
activemq/activemq-cpp/decaf/trunk/src/test/decaf/internal/nio/CharArrayBufferTest.h
Modified: activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/CharBuffer.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/CharBuffer.cpp?rev=602514&r1=602513&r2=602514&view=diff
==============================================================================
--- activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/CharBuffer.cpp (original)
+++ activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/CharBuffer.cpp Sat Dec 8 09:19:06 2007
@@ -142,8 +142,9 @@
return *this;
}
- return this->put( "null" );
+ return this->put( "null", start, end );
}
+ DECAF_CATCH_RETHROW( IndexOutOfBoundsException )
DECAF_CATCH_RETHROW( BufferOverflowException )
DECAF_CATCH_RETHROW( ReadOnlyBufferException )
DECAF_CATCH_EXCEPTION_CONVERT( Exception, BufferOverflowException )
@@ -327,10 +328,18 @@
start, end );
}
+ if( start > src.size() || end > src.size() ) {
+ throw IndexOutOfBoundsException(
+ __FILE__, __LINE__,
+ "CharBuffer::put - invalid start and end pos; start = %d, end = %d",
+ start, end );
+ }
+
this->put( src.substr( start, end-start ) );
return *this;
}
+ DECAF_CATCH_RETHROW( IndexOutOfBoundsException )
DECAF_CATCH_RETHROW( BufferOverflowException )
DECAF_CATCH_RETHROW( ReadOnlyBufferException )
DECAF_CATCH_EXCEPTION_CONVERT( Exception, BufferOverflowException )
Modified: activemq/activemq-cpp/decaf/trunk/src/test/decaf/internal/nio/CharArrayBufferTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/decaf/trunk/src/test/decaf/internal/nio/CharArrayBufferTest.cpp?rev=602514&r1=602513&r2=602514&view=diff
==============================================================================
--- activemq/activemq-cpp/decaf/trunk/src/test/decaf/internal/nio/CharArrayBufferTest.cpp (original)
+++ activemq/activemq-cpp/decaf/trunk/src/test/decaf/internal/nio/CharArrayBufferTest.cpp Sat Dec 8 09:19:06 2007
@@ -742,22 +742,22 @@
cb->clear();
CPPUNIT_ASSERT( cb2->equals( *cb ) );
- cb->put("abc");
+ cb->put( "abc" );
cb2 = cb->duplicate();
cb->append( cb );
CPPUNIT_ASSERT( 10 == cb->position() );
cb->clear();
cb2->clear();
- CPPUNIT_ASSERT( cb2 == cb );
+ CPPUNIT_ASSERT( cb2->equals( *cb ) );
- cb->put("edfg");
+ cb->put( "edfg" );
cb->clear();
cb2 = cb->duplicate();
cb->append( cb );
- CPPUNIT_ASSERT(10 == cb->position());
+ CPPUNIT_ASSERT( 10 == cb->position() );
cb->clear();
cb2->clear();
- CPPUNIT_ASSERT( cb == cb2 );
+ CPPUNIT_ASSERT( cb->equals( *cb2 ) );
delete cb;
delete cb2;
@@ -793,8 +793,8 @@
////////////////////////////////////////////////////////////////////////////////
void CharArrayBufferTest::testReadOnlyMap() {
- CharBuffer cb = CharBuffer::wrap("ABCDE").asReadOnlyBuffer();
- CharSequence cs = "String";
+ CharBuffer* cb = testBuffer1->asReadOnlyBuffer();
+ MyCharSequence cs( "String" );
CPPUNIT_ASSERT_THROW_MESSAGE(
"Should throw a ReadOnlyBufferException",
@@ -803,15 +803,15 @@
CPPUNIT_ASSERT_THROW_MESSAGE(
"Should throw a ReadOnlyBufferException",
- cb->append( cs ),
+ cb->append( &cs ),
ReadOnlyBufferException );
CPPUNIT_ASSERT_THROW_MESSAGE(
"Should throw a ReadOnlyBufferException",
- cb->append( cs, 1, 2 ),
+ cb->append( &cs, 1, 2 ),
ReadOnlyBufferException );
- cb->append( cs, 1, 1 );
+ delete cb;
}
////////////////////////////////////////////////////////////////////////////////
@@ -820,6 +820,7 @@
cb->put('A');
CPPUNIT_ASSERT( cb == &( cb->append('B') ) );
CPPUNIT_ASSERT( 'B' == cb->get( 1 ) );
+ delete cb;
}
////////////////////////////////////////////////////////////////////////////////
@@ -827,75 +828,98 @@
CharBuffer* cb = CharBuffer::allocate(10);
cb->put('A');
- CPPUNIT_ASSERT( cb == &( cb->append( "String" ) ) );
- CPPUNIT_ASSERT( "AString" == cb->flip().toString());
+ MyCharSequence cs( "String" );
+
+ CPPUNIT_ASSERT( cb == &( cb->append( &cs ) ) );
+ cb->flip();
+ CPPUNIT_ASSERT( MyCharSequence("AString").toString() == cb->toString() );
cb->append( (const lang::CharSequence*)NULL );
- CPPUNIT_ASSERT( cb->flip().toString() == "null" );
+ cb->flip();
+ CPPUNIT_ASSERT( cb->toString() == "null" );
+
+ delete cb;
}
////////////////////////////////////////////////////////////////////////////////
void CharArrayBufferTest::testAppendCharSequenceIINormal() {
- CharBuffer* cb = CharBuffer::allocate(10);
- cb->put('A');
- CPPUNIT_ASSERT( cb, cb->append("String", 1, 3) );
- CPPUNIT_ASSERT( "Atr" == cb->flip().toString() );
+ CharBuffer* cb = CharBuffer::allocate( 10 );
+ cb->put( 'A' );
+ MyCharSequence cs( "String" );
+
+ CPPUNIT_ASSERT( cb == &( cb->append( &cs, 1, 3 ) ) );
+ cb->flip();
+ CPPUNIT_ASSERT( "Atr" == cb->toString() );
cb->append( (const lang::CharSequence*)NULL, 0, 1 );
- CPPUNIT_ASSERT( "n" == cb->flip().toString() );
+ cb->flip();
+ CPPUNIT_ASSERT( "n" == cb->toString() );
+ delete cb;
}
////////////////////////////////////////////////////////////////////////////////
void CharArrayBufferTest::testAppendCharSequenceII_IllegalArgument() {
- CharBuffer* cb = CharBuffer::allocate(10);
- cb->append( "String", 0, 0 );
- cb->append( "String", 2, 2 );
+ CharBuffer* cb = CharBuffer::allocate( 10 );
+ MyCharSequence cs( "String" );
- try {
- cb->append("String", 3, 2);
- fail("should throw IndexOutOfBoundsException.");
- } catch (IndexOutOfBoundsException ex) {
- // expected;
- }
- try {
- cb->append("String", 3, 0);
- fail("should throw IndexOutOfBoundsException.");
- } catch (IndexOutOfBoundsException ex) {
- // expected;
- }
- try {
- cb->append("String", 3, 110);
- fail("should throw IndexOutOfBoundsException.");
- } catch (IndexOutOfBoundsException ex) {
- // expected;
- }
+ cb->append( &cs, 0, 0 );
+ cb->append( &cs, 2, 2 );
+
+ CPPUNIT_ASSERT_THROW_MESSAGE(
+ "Should throw a IndexOutOfBoundsException",
+ cb->append( &cs, 3, 2 ),
+ IndexOutOfBoundsException );
+
+ CPPUNIT_ASSERT_THROW_MESSAGE(
+ "Should throw a IndexOutOfBoundsException",
+ cb->append( &cs, 3, 0 ),
+ IndexOutOfBoundsException );
+
+ CPPUNIT_ASSERT_THROW_MESSAGE(
+ "Should throw a IndexOutOfBoundsException",
+ cb->append( &cs, 3, 110 ),
+ IndexOutOfBoundsException );
+
+ delete cb;
}
////////////////////////////////////////////////////////////////////////////////
void CharArrayBufferTest::testReadCharBuffer() {
- CharBuffer* source = CharBuffer::wrap("String");
+ std::vector<char> buffer;
+ buffer.push_back('S');
+ buffer.push_back('t');
+ buffer.push_back('r');
+ buffer.push_back('i');
+ buffer.push_back('n');
+ buffer.push_back('g');
+
+ CharBuffer* source = CharBuffer::wrap( buffer );
CharBuffer* target = CharBuffer::allocate(10);
- CPPUNIT_ASSERT( 6 == source.read( target ) );
- CPPUNIT_ASSERT( "String" == target.flip().toString() );
+ CPPUNIT_ASSERT( 6 == source->read( target ) );
+ target->flip();
+ CPPUNIT_ASSERT( "String" == target->toString() );
// return -1 when nothing to read
- CPPUNIT_ASSERT( string::npos == source.read(target) );
+ CPPUNIT_ASSERT( string::npos == source->read( target ) );
// NullPointerException
CPPUNIT_ASSERT_THROW_MESSAGE(
"Should throw a NullPointerException",
source->read( NULL ),
NullPointerException );
+
+ delete source;
+ delete target;
}
////////////////////////////////////////////////////////////////////////////////
void CharArrayBufferTest::testReadReadOnly() {
- CharBuffer* source = CharBuffer::wrap("String");
- CharBuffer* target = CharBuffer::allocate(10).asReadOnlyBuffer();
+ CharBuffer* source = CharBuffer::wrap( testData1, 0, testData1Size );
+ CharBuffer* target = testBuffer1->asReadOnlyBuffer();
// NullPointerException
CPPUNIT_ASSERT_THROW_MESSAGE(
@@ -904,28 +928,39 @@
ReadOnlyBufferException );
// if target has no remaining, needn't to check the isReadOnly
- target.flip();
+ target->flip();
CPPUNIT_ASSERT( 0 == source->read( target ) );
+
+ delete source;
+ delete target;
}
////////////////////////////////////////////////////////////////////////////////
void CharArrayBufferTest::testReadOverflow() {
- CharBuffer* source = CharBuffer::wrap("String");
+ std::vector<char> buffer;
+ buffer.push_back('S');
+ CharBuffer* source = CharBuffer::wrap( buffer );
CharBuffer* target = CharBuffer::allocate( 1 );
CPPUNIT_ASSERT( 1 == source->read(target) );
- CPPUNIT_ASSERT( "S" == target->flip().toString() );
+ target->flip();
+ CPPUNIT_ASSERT( "S" == target->toString() );
CPPUNIT_ASSERT( 1 == source->position() );
+
+ delete source;
+ delete target;
}
////////////////////////////////////////////////////////////////////////////////
void CharArrayBufferTest::testReadSelf() {
- CharBuffer* source = CharBuffer::wrap("abuffer");
+ CharBuffer* source = CharBuffer::wrap( testData1, 0, testData1Size );
CPPUNIT_ASSERT_THROW_MESSAGE(
"Should throw a IllegalArgumentException",
source->read( source ),
IllegalArgumentException );
+
+ delete source;
}
Modified: activemq/activemq-cpp/decaf/trunk/src/test/decaf/internal/nio/CharArrayBufferTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/decaf/trunk/src/test/decaf/internal/nio/CharArrayBufferTest.h?rev=602514&r1=602513&r2=602514&view=diff
==============================================================================
--- activemq/activemq-cpp/decaf/trunk/src/test/decaf/internal/nio/CharArrayBufferTest.h (original)
+++ activemq/activemq-cpp/decaf/trunk/src/test/decaf/internal/nio/CharArrayBufferTest.h Sat Dec 8 09:19:06 2007
@@ -56,6 +56,17 @@
CPPUNIT_TEST( testSubSequence );
CPPUNIT_TEST( testPutString );
CPPUNIT_TEST( testPutStringWithArgs );
+ CPPUNIT_TEST( testAppendSelf );
+ CPPUNIT_TEST( testAppendOverFlow );
+ CPPUNIT_TEST( testReadOnlyMap );
+ CPPUNIT_TEST( testAppendCNormal );
+ CPPUNIT_TEST( testAppendCharSequenceNormal );
+ CPPUNIT_TEST( testAppendCharSequenceIINormal );
+ CPPUNIT_TEST( testAppendCharSequenceII_IllegalArgument );
+ CPPUNIT_TEST( testReadCharBuffer );
+ CPPUNIT_TEST( testReadReadOnly );
+ CPPUNIT_TEST( testReadOverflow );
+ CPPUNIT_TEST( testReadSelf );
CPPUNIT_TEST_SUITE_END();
decaf::nio::CharBuffer* testBuffer1;
@@ -65,6 +76,58 @@
static const std::size_t SMALL_TEST_LENGTH = 5;
static const std::size_t BUFFER_LENGTH = 250;
+ class MyCharSequence : public lang::CharSequence {
+ private:
+
+ std::string value;
+
+ public:
+
+ MyCharSequence( std::string value ) {
+ this->value = value;
+ }
+
+ virtual ~MyCharSequence() {}
+
+ virtual std::size_t length() const {
+ return this->value.length();
+ }
+
+ virtual char charAt( std::size_t index ) const
+ throw( lang::exceptions::IndexOutOfBoundsException ) {
+
+ if( index > this->value.length() ) {
+ throw decaf::lang::exceptions::IndexOutOfBoundsException(
+ __FILE__, __LINE__,
+ "MyCharSequence::charAt - index is to big: %d", index );
+ }
+
+ return this->value.at( index );
+ }
+
+ virtual CharSequence* subSequence( std::size_t start, std::size_t end ) const
+ throw( lang::exceptions::IndexOutOfBoundsException ) {
+
+ if( start > end ) {
+ throw decaf::lang::exceptions::IndexOutOfBoundsException(
+ __FILE__, __LINE__,
+ "CharArrayBuffer::subSequence - start > end" );
+ }
+
+ if( start > this->length() || end > this->length() ) {
+ throw decaf::lang::exceptions::IndexOutOfBoundsException(
+ __FILE__, __LINE__,
+ "CharArrayBuffer::subSequence - Sequence exceed limit" );
+ }
+
+ return new MyCharSequence( this->value.substr( start, end - start ) );
+ }
+
+ virtual std::string toString() const {
+ return this->value;
+ }
+ };
+
public:
CharArrayBufferTest() {}
@@ -110,7 +173,6 @@
void testSubSequence();
void testPutString();
void testPutStringWithArgs();
-
void testAppendSelf();
void testAppendOverFlow();
void testReadOnlyMap();