cppunit-cvs Mailing List for CppUnit - C++ port of JUnit (Page 22)
Brought to you by:
blep
You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(94) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
|
Feb
(114) |
Mar
(80) |
Apr
|
May
|
Jun
(36) |
Jul
(67) |
Aug
(37) |
Sep
(33) |
Oct
(28) |
Nov
(91) |
Dec
(16) |
2006 |
Jan
(1) |
Feb
(7) |
Mar
(45) |
Apr
|
May
|
Jun
(36) |
Jul
(7) |
Aug
|
Sep
(32) |
Oct
(3) |
Nov
|
Dec
|
2007 |
Jan
(29) |
Feb
(11) |
Mar
(5) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(35) |
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
(14) |
Mar
|
Apr
|
May
|
Jun
(5) |
Jul
(13) |
Aug
|
Sep
|
Oct
(3) |
Nov
|
Dec
(15) |
From: Baptiste L. <bl...@us...> - 2005-07-01 20:32:17
|
Update of /cvsroot/cppunit/cppunit2/src/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6317/src/cpput Modified Files: properties.cpp Log Message: * added more unit tests for serializer * fixed bugs * added strict operator == for Value and Properties. Index: properties.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/properties.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** properties.cpp 24 Jun 2005 19:45:49 -0000 1.11 --- properties.cpp 1 Jul 2005 20:32:04 -0000 1.12 *************** *** 461,464 **** --- 461,499 ---- + bool + Value::operator ==( const Value &other ) const + { + if ( type() != other.type() ) + return false; + switch ( type() ) + { + case vtNone: + return true; + case vtBoolean: + return asBool() == other.asBool(); + case vtSignedInteger: + return guts_.intValue_ == other.guts_.intValue_; + case vtUnsignedInteger: + return guts_.uintValue_ == other.guts_.uintValue_; + case vtReal: + return guts_.realValue_ == other.guts_.realValue_; + case vtString: + return asString() == other.asString(); + case vtProperties: + return asProperties() == other.asProperties(); + default: // unreachable + CPPTL_DEBUG_ASSERT_UNREACHABLE; + return false; + } + } + + + bool + Value::operator !=( const Value &other ) const + { + return !( *this == other ); + } + + // Inline implementation of Property *************** *** 494,497 **** --- 529,546 ---- + bool + Property::operator ==( const Property &other ) const + { + return name_ == other.name_ && value_ == other.value_; + } + + + bool + Property::operator !=( const Property &other ) const + { + return !( *this == other ); + } + + // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// *************** *** 1140,1142 **** --- 1189,1225 ---- } + + bool + Properties::operator ==( const Properties &other ) const + { + if ( properties_.size() != other.properties_.size() + || indexedProperties_.size() != other.indexedProperties_.size() ) + return false; + + PropertyList::const_iterator it = properties_.begin(); + PropertyList::const_iterator itOther = other.properties_.begin(); + for ( ; it != properties_.end(); ++it, ++itOther ) + { + if ( !(*it == *itOther) ) + return false; + } + + IndexedProperties::const_iterator itIndexed = indexedProperties_.begin(); + IndexedProperties::const_iterator itIndexedOther = other.indexedProperties_.begin(); + for ( ; itIndexed != indexedProperties_.end(); ++itIndexed, ++itIndexedOther ) + { + if ( !(*itIndexed == *itIndexedOther) ) + return false; + } + return true; + } + + + bool + Properties::operator !=( const Properties &other ) const + { + return !( *this == other ); + } + + } // namespace OpenTest |
From: Baptiste L. <bl...@us...> - 2005-07-01 20:32:17
|
Update of /cvsroot/cppunit/cppunit2/src/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6317/src/opentest Modified Files: serializer.cpp Log Message: * added more unit tests for serializer * fixed bugs * added strict operator == for Value and Properties. Index: serializer.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/opentest/serializer.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** serializer.cpp 1 Jul 2005 08:19:36 -0000 1.4 --- serializer.cpp 1 Jul 2005 20:32:04 -0000 1.5 *************** *** 41,45 **** ccNegativeReal = 0x2f, // '/' ccIntegerZero = 0x30, // integer shift for encoding ! ccIntegerBaseShift = 6 // power of 2 for encoding base (0x40 = 1 << 6) }; --- 41,47 ---- ccNegativeReal = 0x2f, // '/' ccIntegerZero = 0x30, // integer shift for encoding ! ccIntegerBaseShift = 6, // power of 2 for encoding base (0x40 = 1 << 6) ! ccRealWithinPlusSign = 0x5e, // '^' ! ccRealWithinMinusSign = 0x5f, // '_' }; *************** *** 428,438 **** char buffer[precision * 2 + 32]; int length = sprintf(buffer, "%.*g", precision, value); char *end = buffer + length; ! for ( char *current = &buffer[0]; current != end; ++current ) { if ( *current == ccPositiveInteger ) ! *current = ccPositiveReal; else if ( *current == ccNegativeInteger ) ! *current = ccNegativeReal; else if ( *current == ccRealDot ) { // do nothing --- 430,443 ---- char buffer[precision * 2 + 32]; int length = sprintf(buffer, "%.*g", precision, value); + if ( length == 0) + return setError( "Failed to serialize double value (empty string)" ); + char *current = &buffer[0]; char *end = buffer + length; ! for ( ; current != end; ++current ) { if ( *current == ccPositiveInteger ) ! *current = ccRealWithinPlusSign; else if ( *current == ccNegativeInteger ) ! *current = ccRealWithinMinusSign; else if ( *current == ccRealDot ) { // do nothing *************** *** 444,448 **** } } ! if ( buffer[0] == ccNegativeReal ) { write( ccNegativeReal ); --- 449,453 ---- } } ! if ( buffer[0] == ccRealWithinMinusSign ) { write( ccNegativeReal ); *************** *** 452,456 **** { write( ccPositiveReal ); ! write( buffer, length ); } return *this; --- 457,464 ---- { write( ccPositiveReal ); ! if ( buffer[0] == ccRealWithinPlusSign ) ! write( buffer + 1, length-1 ); ! else ! write( buffer, length ); } return *this; *************** *** 462,465 **** --- 470,474 ---- { doSerializeInteger( ccString, str.length() ); + write( ccString ); write( str.c_str(), str.length() ); return *this; *************** *** 594,600 **** { unsigned char digit = readNextByte(); ! if ( digit == ccPositiveReal ) buffer += "+"; ! else if ( digit == ccNegativeReal ) buffer += "-"; else if ( digit == ccRealDot || digit >= ccIntegerZero ) --- 603,609 ---- { unsigned char digit = readNextByte(); ! if ( digit == ccRealWithinPlusSign ) buffer += "+"; ! else if ( digit == ccRealWithinMinusSign ) buffer += "-"; else if ( digit == ccRealDot || digit >= ccIntegerZero ) *************** *** 660,664 **** LargestUnsignedInt length; doUnserializeInteger( length ); ! if ( length <= sizeof(stringBuffer_) ) { read( stringBuffer_, length ); --- 669,676 ---- LargestUnsignedInt length; doUnserializeInteger( length ); ! unsigned char control = readNextByte(); ! if ( control != ccString ) ! setError( "Expected string." ); ! else if ( length <= sizeof(stringBuffer_) ) { read( stringBuffer_, length ); |
From: Baptiste L. <bl...@us...> - 2005-07-01 08:19:49
|
Update of /cvsroot/cppunit/cppunit2/src/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6409/src/cpput Modified Files: cpput.vcproj Log Message: * started adding unit tests for opentest * added serializer unit test squeleton * fixed some bug in serializer * added opentesttest project to VS solution. Index: cpput.vcproj =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/cpput.vcproj,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** cpput.vcproj 24 Jun 2005 19:49:58 -0000 1.32 --- cpput.vcproj 1 Jul 2005 08:19:36 -0000 1.33 *************** *** 37,41 **** WarningLevel="3" SuppressStartupBanner="TRUE" ! CompileAs="0"/> <Tool Name="VCCustomBuildTool"/> --- 37,42 ---- WarningLevel="3" SuppressStartupBanner="TRUE" ! CompileAs="0" ! DisableSpecificWarnings="4244"/> <Tool Name="VCCustomBuildTool"/> *************** *** 95,98 **** --- 96,100 ---- DebugInformationFormat="4" CompileAs="0" + DisableSpecificWarnings="4244" ShowIncludes="FALSE"/> <Tool *************** *** 131,138 **** Filter=""> <File ! RelativePath="..\cpputtest\SConscript"> </File> <File ! RelativePath=".\SConscript"> </File> <File --- 133,140 ---- Filter=""> <File ! RelativePath=".\SConscript"> </File> <File ! RelativePath="..\cpputtest\SConscript"> </File> <File *************** *** 297,300 **** --- 299,322 ---- </File> <File + RelativePath="..\opentest\sharedmemorytransport.cpp"> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE" + ForceConformanceInForLoopScope="TRUE"/> + </FileConfiguration> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE" + ForceConformanceInForLoopScope="TRUE"/> + </FileConfiguration> + </File> + <File + RelativePath="..\..\include\opentest\sharedmemorytransport.h"> + </File> + <File RelativePath="..\..\include\opentest\testplan.h"> </File> |
From: Baptiste L. <bl...@us...> - 2005-07-01 08:19:46
|
Update of /cvsroot/cppunit/cppunit2/include/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6409/include/opentest Modified Files: config.h forwards.h remoteinterfaces.h serializer.h Log Message: * started adding unit tests for opentest * added serializer unit test squeleton * fixed some bug in serializer * added opentesttest project to VS solution. Index: config.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/opentest/config.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** config.h 15 Nov 2004 08:33:30 -0000 1.1 --- config.h 1 Jul 2005 08:19:37 -0000 1.2 *************** *** 7,10 **** --- 7,13 ---- # define OPENTEST_API + # if !defined(WIN32) && !defined(_WIN32) + # define OPENTEST_NO_SHAREDMEMORYTRANSPORT 1 + # endif #endif // OPENTEST_CONFIG_H_INCLUDED Index: serializer.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/opentest/serializer.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** serializer.h 30 Jun 2005 21:49:25 -0000 1.4 --- serializer.h 1 Jul 2005 08:19:37 -0000 1.5 *************** *** 33,37 **** // Returns the length actual written at dest unsigned int send( void *dest, Pos availableLength ); ! void endMessage(); bool hasPendingMessage() const; Pos getFirstMessageLength(); --- 33,38 ---- // Returns the length actual written at dest unsigned int send( void *dest, Pos availableLength ); ! void endSerializeMessage(); ! void endExternalMessage(); bool hasPendingMessage() const; Pos getFirstMessageLength(); *************** *** 43,47 **** bool serializationRead( void *buffer, Pos length ); void serializationWrite( const void *buffer, Pos length ); ! void serializationWrite( unsigned char byte ); private: --- 44,48 ---- bool serializationRead( void *buffer, Pos length ); void serializationWrite( const void *buffer, Pos length ); ! void serializationWrite( Byte byte ); private: *************** *** 56,61 **** , next_( 0 ) { ! next_ = previous_->next_; ! previous_->next_ = this; } --- 57,65 ---- , next_( 0 ) { ! if ( previous ) ! { ! next_ = previous_->next_; ! previous_->next_ = this; ! } } Index: forwards.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/opentest/forwards.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** forwards.h 24 Jun 2005 19:48:23 -0000 1.5 --- forwards.h 1 Jul 2005 08:19:37 -0000 1.6 *************** *** 20,23 **** --- 20,25 ---- class ValueBadCast; + class RemoteMessage; + class RemoteMessageServer; class ResultAssertion; class ResultInputOutput; *************** *** 33,36 **** --- 35,39 ---- typedef CppTL::ConstString String; + typedef CppTL::SharedPtr<RemoteMessage> RemoteMessagePtr; typedef CppTL::SharedPtr<TestPlanEntry> TestPlanEntryPtr; typedef CppTL::AnyEnumerator<TestPlanEntryPtr> TestPlanEntryPtrEnum; Index: remoteinterfaces.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/opentest/remoteinterfaces.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** remoteinterfaces.h 25 Jun 2005 11:08:05 -0000 1.2 --- remoteinterfaces.h 1 Jul 2005 08:19:37 -0000 1.3 *************** *** 44,49 **** - typedef CppTL::SharedPtr<RemoteMessage> RemoteMessagePtr; - Stream & OPENTEST_API operator <<( Stream &stream, const RemoteMessagePtr &message ); --- 44,47 ---- |
From: Baptiste L. <bl...@us...> - 2005-07-01 08:19:46
|
Update of /cvsroot/cppunit/cppunit2/src/opentesttest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6409/src/opentesttest Added Files: .cvsignore SConscript main.cpp opentest.vcproj serializertest.cpp serializertest.h Log Message: * started adding unit tests for opentest * added serializer unit test squeleton * fixed some bug in serializer * added opentesttest project to VS solution. --- NEW FILE: .cvsignore --- *.plg *.old *.WW *.old --- NEW FILE: main.cpp --- #include <cpput/test.h> #include <cpput/testsuite.h> #include <stdio.h> #include "serializertest.h" #include <cpput/testrunner.h> // cppunit2 testrunner for opentest #include <opentest/texttestdriver.h> static void displayConfiguration() { CppTL::StringBuffer config; // Thread API #if CPPTL_HAS_THREAD config += "Thread: Yes, API = "; # if CPPTL_USE_WIN32_THREAD config += "win32"; # elif CPPTL_USE_PTHREAD_THREAD config += "pthread"; # else config += "???"; # endif config += "\n"; #else config += "Thread: No\n"; #endif // Atomic counter implementation config += "Atomic counter API: "; #if CPPTL_HAS_THREAD_SAFE_ATOMIC_COUNTER # if CPPTL_USE_LINUX_ATOMIC config += "linux atomic operations (limited to 24 bits)"; # elif CPPTL_USE_WIN32_ATOMIC config += "win32"; # elif CPPTL_USE_PTHREAD_ATOMIC config += "pthread mutex"; # else config += "???"; # endif #else config += "none (not thread-safe)"; #endif config += "\n"; // Int64 config += "Int64: "; #ifndef CPPTL_NO_INT64 config += "Yes\n"; #else config += "No\n"; #endif // RTTI config += "RTTI: "; #ifndef CPPTL_NO_RTTI config += "Yes\n"; #else config += "No\n"; #endif printf( "=> CPPUT Configuration:\n%s\n", config.c_str() ); } int main( int argc, const char *argv[] ) { displayConfiguration(); printf( "All bootstrap tests passed successfuly...\n" ); CppUT::TestSuitePtr allSuite = CppUT::makeTestSuite( "All tests" ); allSuite->add( SerializerTest::suite() ); CppUT::TestRunner runner; CppUT::AbstractTestSuitePtr rootSuite = CppTL::staticPointerCast<CppUT::AbstractTestSuite>( allSuite ); runner.setRootSuite( rootSuite ); OpenTest::TextTestDriver driver( runner ); bool sucessful = driver.run(); return sucessful ? 0 : 1; } --- NEW FILE: opentest.vcproj --- <?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="7.10" Name="opentesttest" ProjectGUID="{BC6A1042-3AC9-44E7-BCEB-1B2DB7D17895}" SccProjectName="" SccLocalPath=""> <Platforms> <Platform Name="Win32"/> </Platforms> <Configurations> <Configuration Name="Release|Win32" OutputDirectory=".\..\..\build\opentesttest\release" IntermediateDirectory=".\..\..\build\opentesttest\release" ConfigurationType="1" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="FALSE" CharacterSet="2"> <Tool Name="VCCLCompilerTool" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\include" PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" StringPooling="TRUE" RuntimeLibrary="0" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" RuntimeTypeInfo="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\..\..\build\opentesttest\release/opentesttest.pch" AssemblerListingLocation=".\..\..\build\opentesttest\release/" ObjectFile=".\..\..\build\opentesttest\release/" ProgramDataBaseFileName=".\..\..\build\opentesttest\release/" WarningLevel="3" SuppressStartupBanner="TRUE" CompileAs="0"/> <Tool Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" AdditionalDependencies="odbc32.lib odbccp32.lib" OutputFile=".\..\..\build\opentesttest\release/opentesttest.exe" LinkIncremental="1" SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\..\build\cpput\release" ProgramDatabaseFile=".\..\..\build\opentesttest\release/opentesttest.pdb" SubSystem="1"/> <Tool Name="VCMIDLTool" TypeLibraryName=".\..\..\build\opentesttest\release/opentesttest.tlb"/> <Tool Name="VCPostBuildEventTool" Description="Testing cpput library..." CommandLine="$(TargetPath)"/> <Tool Name="VCPreBuildEventTool"/> <Tool Name="VCPreLinkEventTool"/> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1036"/> <Tool Name="VCWebServiceProxyGeneratorTool"/> <Tool Name="VCXMLDataGeneratorTool"/> <Tool Name="VCWebDeploymentTool"/> <Tool Name="VCManagedWrapperGeneratorTool"/> <Tool Name="VCAuxiliaryManagedWrapperGeneratorTool"/> </Configuration> <Configuration Name="Debug|Win32" OutputDirectory=".\..\..\build\opentesttest\debug" IntermediateDirectory=".\..\..\build\opentesttest\debug" ConfigurationType="1" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="FALSE" CharacterSet="2"> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\include" PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" StringPooling="TRUE" BasicRuntimeChecks="3" SmallerTypeCheck="TRUE" RuntimeLibrary="1" BufferSecurityCheck="TRUE" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" ForceConformanceInForLoopScope="TRUE" RuntimeTypeInfo="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\..\..\build\opentesttest\debug/opentesttest.pch" AssemblerListingLocation=".\..\..\build\opentesttest\debug/" ObjectFile=".\..\..\build\opentesttest\debug/" ProgramDataBaseFileName=".\..\..\build\opentesttest\debug/" BrowseInformation="1" WarningLevel="3" SuppressStartupBanner="TRUE" DebugInformationFormat="4" CompileAs="0"/> <Tool Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" AdditionalDependencies="odbc32.lib odbccp32.lib" OutputFile=".\..\..\build\opentesttest\debug/opentesttest.exe" LinkIncremental="2" SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\..\build\cpput\debug" GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\..\..\build\opentesttest\debug/opentesttest.pdb" SubSystem="1"/> <Tool Name="VCMIDLTool" TypeLibraryName=".\..\..\build\opentesttest\debug/opentesttest.tlb"/> <Tool Name="VCPostBuildEventTool" Description="Testing cpput library..." CommandLine="$(TargetPath)"/> <Tool Name="VCPreBuildEventTool"/> <Tool Name="VCPreLinkEventTool"/> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1036"/> <Tool Name="VCWebServiceProxyGeneratorTool"/> <Tool Name="VCXMLDataGeneratorTool"/> <Tool Name="VCWebDeploymentTool"/> <Tool Name="VCManagedWrapperGeneratorTool"/> <Tool Name="VCAuxiliaryManagedWrapperGeneratorTool"/> </Configuration> </Configurations> <References> </References> <Files> <File RelativePath=".\main.cpp"> </File> <File RelativePath=".\serializertest.cpp"> </File> <File RelativePath=".\serializertest.h"> </File> </Files> <Globals> </Globals> </VisualStudioProject> --- NEW FILE: serializertest.h --- #ifndef OPENTEST_SERIALIZERTEST_H # define OPENTEST_SERIALIZERTEST_H # include <cpput/testfixture.h> # include <opentest/serializer.h> class SerializerTest : public CppUT::TestFixture { CPPUT_TESTSUITE_BEGIN( SerializerTest ); CPPUT_TEST( testBasicInteger ); CPPUT_TEST( testMinMaxInteger ); CPPUT_TESTSUITE_END(); public: SerializerTest(); virtual ~SerializerTest(); void setUp(); void tearDown(); void testBasicInteger(); void testMinMaxInteger(); private: void prepareSerialize(); void prepareUnserialize(); OpenTest::Stream streamOut_; OpenTest::Stream streamIn_; }; #endif // OPENTEST_SERIALIZERTEST_H --- NEW FILE: serializertest.cpp --- #include "serializertest.h" #include <cpput/assert.h> SerializerTest::SerializerTest() { } SerializerTest::~SerializerTest() { } void SerializerTest::setUp() { prepareSerialize(); } void SerializerTest::tearDown() { } void SerializerTest::prepareSerialize() { streamOut_.packets().beginMessage(); } void SerializerTest::prepareUnserialize() { streamOut_.packets().endSerializeMessage(); int length = streamOut_.packets().getFirstMessageLength(); void *buffer = new char[length]; streamOut_.packets().send( buffer, length ); streamOut_.packets().discardFirstMessage(); streamIn_.packets().beginMessage(); streamIn_.packets().received( buffer, length ); streamIn_.packets().endExternalMessage(); delete [] buffer; } void SerializerTest::testBasicInteger() { streamOut_ << 1 << -2; prepareUnserialize(); int x, y; streamIn_ >> x >> y; CPPUT_ASSERT_EQUAL( 1, x ); CPPUT_ASSERT_EQUAL( -2, y ); } void SerializerTest::testMinMaxInteger() { const int minInt = 1 << (sizeof(int) * 8 - 1); // set sign bit const int maxInt = ~minInt; // all bits but sign bit streamOut_ << maxInt << minInt; prepareUnserialize(); int x, y; streamIn_ >> x >> y; CPPUT_ASSERT_EQUAL( maxInt, x ); CPPUT_ASSERT_EQUAL( minInt, y ); } --- NEW FILE: SConscript --- Import( 'env_testing buildLibraryUnitTest' ) buildLibraryUnitTest( env_testing, Split( """ assertenumtest.cpp assertstringtest.cpp enumeratortest.cpp main.cpp registrytest.cpp testbasicassertion.cpp testexceptionguard.cpp testfunctor.cpp testfixturetest.cpp testtestcase.cpp testtestsuite.cpp reflectiontest.cpp """ ), 'cpputtest' ) |
From: Baptiste L. <bl...@us...> - 2005-07-01 08:19:45
|
Update of /cvsroot/cppunit/cppunit2/src/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6409/src/opentest Modified Files: serializer.cpp sharedmemorytransport.cpp Log Message: * started adding unit tests for opentest * added serializer unit test squeleton * fixed some bug in serializer * added opentesttest project to VS solution. Index: serializer.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/opentest/serializer.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** serializer.cpp 30 Jun 2005 21:49:26 -0000 1.3 --- serializer.cpp 1 Jul 2005 08:19:36 -0000 1.4 *************** *** 95,99 **** void ! Packets::endMessage() { CPPTL_ASSERT_MESSAGE( !messages_.empty() && messages_.back().length_ == 0, --- 95,99 ---- void ! Packets::endExternalMessage() { CPPTL_ASSERT_MESSAGE( !messages_.empty() && messages_.back().length_ == 0, *************** *** 103,106 **** --- 103,115 ---- + void + Packets::endSerializeMessage() + { + CPPTL_ASSERT_MESSAGE( !messages_.empty() && messages_.back().length_ == 0, + "No message started." ); + messages_.back().length_ = distance( messages_.back().position_, serializePos_ ); + } + + bool Packets::hasPendingMessage() const *************** *** 176,181 **** void ! Packets::serializationWrite( unsigned char byte ) { } --- 185,194 ---- void ! Packets::serializationWrite( Byte byte ) { + if ( serializePos_ && serializePos_.currentData_ != serializePos_.packet_->end_ ) + *serializePos_.currentData_++ = byte; + else + write( serializePos_, &byte, 1 ); } *************** *** 388,392 **** LargestUnsignedInt value ) { ! unsigned char buffer[ (sizeof(value) + ccIntegerBaseShift - 1) / ccIntegerBaseShift ]; unsigned char *current = buffer + sizeof(buffer); do --- 401,405 ---- LargestUnsignedInt value ) { ! unsigned char buffer[ (sizeof(value)*8 + ccIntegerBaseShift - 1) / ccIntegerBaseShift ]; unsigned char *current = buffer + sizeof(buffer); do *************** *** 477,481 **** value = 0; unsigned char digit; ! while ( (digit = readNextByte()) < ccIntegerZero ) { // if ( value >= maxInt ) // should we detect overflow ? --- 490,494 ---- value = 0; unsigned char digit; ! while ( (digit = readNextByte()) >= ccIntegerZero ) { // if ( value >= maxInt ) // should we detect overflow ? *************** *** 504,508 **** } ! #ifdef CPPTL_NO_INT64 Stream & Stream::operator >>( int &value ) --- 517,521 ---- } ! #ifndef CPPTL_NO_INT64 Stream & Stream::operator >>( int &value ) Index: sharedmemorytransport.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/opentest/sharedmemorytransport.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** sharedmemorytransport.cpp 30 Jun 2005 21:48:09 -0000 1.2 --- sharedmemorytransport.cpp 1 Jul 2005 08:19:36 -0000 1.3 *************** *** 617,621 **** buffer.stream_.packets().beginMessage(); buffer.stream_ << messages.front(); ! buffer.stream_.packets().endMessage(); messages.pop_front(); } --- 617,621 ---- buffer.stream_.packets().beginMessage(); buffer.stream_ << messages.front(); ! buffer.stream_.packets().endSerializeMessage(); messages.pop_front(); } *************** *** 676,680 **** { log( "read: message completly received" ); ! buffer.stream_.packets().endMessage(); buffer.state_ = bsSize; buffer.processedLength_ = 0; --- 676,680 ---- { log( "read: message completly received" ); ! buffer.stream_.packets().endExternalMessage(); buffer.state_ = bsSize; buffer.processedLength_ = 0; |
From: Baptiste L. <bl...@us...> - 2005-07-01 08:19:45
|
Update of /cvsroot/cppunit/cppunit2/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6409/src Modified Files: cpput_lib.sln cpput_lib.suo Log Message: * started adding unit tests for opentest * added serializer unit test squeleton * fixed some bug in serializer * added opentesttest project to VS solution. Index: cpput_lib.sln =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput_lib.sln,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** cpput_lib.sln 28 Feb 2005 22:11:55 -0000 1.5 --- cpput_lib.sln 1 Jul 2005 08:19:35 -0000 1.6 *************** *** 14,17 **** --- 14,22 ---- EndProjectSection EndProject + Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opentesttest", "opentesttest\opentest.vcproj", "{BC6A1042-3AC9-44E7-BCEB-1B2DB7D17895}" + ProjectSection(ProjectDependencies) = postProject + {199257EE-17B2-4BC2-A3F7-D379217A86A0} = {199257EE-17B2-4BC2-A3F7-D379217A86A0} + EndProjectSection + EndProject Global GlobalSection(SolutionConfiguration) = preSolution *************** *** 32,35 **** --- 37,44 ---- {9EB5A164-9071-4E7E-90B3-094D35EA943C}.Release.ActiveCfg = Release|Win32 {9EB5A164-9071-4E7E-90B3-094D35EA943C}.Release.Build.0 = Release|Win32 + {BC6A1042-3AC9-44E7-BCEB-1B2DB7D17895}.Debug.ActiveCfg = Debug|Win32 + {BC6A1042-3AC9-44E7-BCEB-1B2DB7D17895}.Debug.Build.0 = Debug|Win32 + {BC6A1042-3AC9-44E7-BCEB-1B2DB7D17895}.Release.ActiveCfg = Release|Win32 + {BC6A1042-3AC9-44E7-BCEB-1B2DB7D17895}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution Index: cpput_lib.suo =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput_lib.suo,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 Binary files /tmp/cvseezkke and /tmp/cvsEFe1J8 differ |
From: Baptiste L. <bl...@us...> - 2005-07-01 08:16:17
|
Update of /cvsroot/cppunit/cppunit2/src/opentesttest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5391/opentesttest Log Message: Directory /cvsroot/cppunit/cppunit2/src/opentesttest added to the repository |
From: Baptiste L. <bl...@us...> - 2005-06-30 21:49:35
|
Update of /cvsroot/cppunit/cppunit2/src/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14791/src/opentest Modified Files: serializer.cpp Log Message: * RemoteMessage data are interleaved with Packets. Index: serializer.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/opentest/serializer.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** serializer.cpp 26 Jun 2005 19:41:15 -0000 1.2 --- serializer.cpp 30 Jun 2005 21:49:26 -0000 1.3 *************** *** 2,6 **** #include <float.h> // For struct assertion_traits<double> #include <stdio.h> ! namespace OpenTest { --- 2,9 ---- #include <float.h> // For struct assertion_traits<double> #include <stdio.h> ! ! // @todo Packets : should assumes packets end at the end of the current message when reading... ! ! namespace OpenTest { *************** *** 100,103 **** --- 103,138 ---- + bool + Packets::hasPendingMessage() const + { + return !messages_.empty(); + } + + + Packets::Pos + Packets::getFirstMessageLength() + { + CPPTL_ASSERT_MESSAGE( !messages_.empty(), "No message available" ); + CPPTL_ASSERT_MESSAGE( messages_.front().length_ != 0, "Message not completly serialized." ); + return messages_.front().length_; + } + + + void + Packets::discardFirstMessage() + { + Packet *current = packetsHead_; + while ( current != externalPos_.packet_ ) + { + Packet *toDelete = current; + current = current->next_; + CPPTL_ASSERT_MESSAGE( toDelete != serializePos_.packet_, + "Deleting packets used for serialization." ); + delete toDelete; + } + packetsHead_ = current; + } + + unsigned char Packets::serializationReadNextByte() |
From: Baptiste L. <bl...@us...> - 2005-06-30 21:49:34
|
Update of /cvsroot/cppunit/cppunit2/include/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14791/include/opentest Modified Files: serializer.h Log Message: * RemoteMessage data are interleaved with Packets. Index: serializer.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/opentest/serializer.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** serializer.h 26 Jun 2005 19:41:15 -0000 1.3 --- serializer.h 30 Jun 2005 21:49:25 -0000 1.4 *************** *** 34,37 **** --- 34,40 ---- unsigned int send( void *dest, Pos availableLength ); void endMessage(); + bool hasPendingMessage() const; + Pos getFirstMessageLength(); + void discardFirstMessage(); // for serialization *************** *** 156,160 **** Pos read( PacketPos &pos, Byte *data, Pos length ); ! private: std::deque<MessagePacket> messages_; Packet *packetsHead_; --- 159,163 ---- Pos read( PacketPos &pos, Byte *data, Pos length ); ! private: std::deque<MessagePacket> messages_; Packet *packetsHead_; |
From: Baptiste L. <bl...@us...> - 2005-06-30 21:48:22
|
Update of /cvsroot/cppunit/cppunit2/src/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14156/src/opentest Modified Files: sharedmemorytransport.cpp SConscript Log Message: * rough implementation of the overall logic, need heavy testing Index: SConscript =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/opentest/SConscript,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** SConscript 24 Jun 2005 20:13:07 -0000 1.4 --- SConscript 30 Jun 2005 21:48:09 -0000 1.5 *************** *** 5,8 **** --- 5,9 ---- remoteinterfaces.cpp serializer.cpp + sharedmemorytransport.cpp texttestdriver.cpp """ ), Index: sharedmemorytransport.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/opentest/sharedmemorytransport.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** sharedmemorytransport.cpp 26 Jun 2005 21:24:30 -0000 1.1 --- sharedmemorytransport.cpp 30 Jun 2005 21:48:09 -0000 1.2 *************** *** 1,13 **** #include <opentest/sharedmemorytransport.h> ! #include <opentest/remoteinterfaces.h> ! #include <cpptl/thread.h> ! #include <tchar.h> ! #define WIN32_LEAN_AND_MEAN ! #define NOGDI ! #define NOUSER ! #define NOKERNEL ! #define NOSOUND ! #include <windows.h> /* Importance notes: --- 1,15 ---- #include <opentest/sharedmemorytransport.h> ! #ifndef OPENTEST_NO_SHAREDMEMORYTRANSPORT ! # include <opentest/remoteinterfaces.h> ! # include <opentest/serializer.h> ! # include <cpptl/thread.h> ! # include <tchar.h> ! # define WIN32_LEAN_AND_MEAN ! # define NOGDI ! # define NOUSER ! # define NOKERNEL ! # define NOSOUND ! # include <windows.h> /* Importance notes: *************** *** 65,68 **** --- 67,71 ---- ::CloseHandle( handle_ ); handle_ = handle; + return *this; } *************** *** 73,76 **** --- 76,103 ---- // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// + // class ScopedMutexLock + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + class ScopedMutexLock + { + public: + ScopedMutexLock( HANDLE mutex ) + : mutex_( mutex ) + { + ::WaitForSingleObject( mutex, INFINITE ); + } + + ~ScopedMutexLock() + { + ::ReleaseMutex( mutex_ ); + } + + private: + HANDLE mutex_; + }; + + + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// // class BaseEvent // ////////////////////////////////////////////////////////////////// *************** *** 157,160 **** --- 184,188 ---- public: typedef DWORD Pos; + typedef unsigned char *Byte; SharedMemoryTransportImpl( const SharedMemoryConfig &config ); *************** *** 163,168 **** --- 191,200 ---- virtual ~SharedMemoryTransportImpl(); + // Called from 'main' thread void send( const RemoteMessagePtr &message ); + // Called from 'main' thread + void dispatchReceivedMessages( RemoteMessageServer &server ); + #pragma pack(push, 1) // The structure CircularBuffer & SharedData are *************** *** 174,180 **** struct CircularBuffer { Pos size_; Pos readPos_; // between 0 and size_ ! Pos writePos_; // between 0 and 2*size_ }; --- 206,244 ---- struct CircularBuffer { + Pos availableForReadingSequentially() const + { + return writePos_ <= size_ ? writePos_ - readPos_ + : size_ - readPos_; + } + + Pos availableForWritingSequentially() const + { + return writePos_ <= size_ ? size_ - writePos_ + : readPos_ - (writePos_ - size_); + } + + Pos normalizeWritePos() const + { + return writePos_ >= size_ ? writePos_ - size_ : writePos_; + } + + void read( Pos length ) + { + readPos_ += length; + if ( readPos_ == size_ ) + { + CPPTL_ASSERT_MESSAGE( writePos_ >= size_, "Invalid write position" ); + writePos_ -= size_; + } + } + + void wrote( Pos length ) + { + writePos_ += length; + } + Pos size_; Pos readPos_; // between 0 and size_ ! Pos writePos_; // between 0 and 2*size_. if > size_ then reading from read-> size + 0 -> write%size_ }; *************** *** 185,197 **** DWORD magic_; HANDLE mutex_; ! CircularBuffer writeBuffer_; ! CircularBuffer readBuffer_; }; #pragma pack(pop) private: void initializeCircularBuffer( CircularBuffer &buffer ); HANDLE autoManage( HANDLE handle ); ! void setUpReadWriteSystemEvent(); void checkManualEvents(); void log( const char *format, ... ) {} --- 249,294 ---- DWORD magic_; HANDLE mutex_; ! CircularBuffer circularBuffers_[2]; }; #pragma pack(pop) private: + enum BufferState + { + bsSize = 0, + bsMessage + }; + + struct BufferInfo + { + void read( const char *hint, Pos readLength ) + { + // log( "read: %s, read %d bytes at offset %d", hint, readLength, circular_->readPos_ ); + circular_->read( readLength ); + processedLength_ += readLength; + } + + void write( const char *hint, Pos writeLength ) + { + // log( "write: %s, wrote %d bytes at offset %d", hint, writeLength, circular_->normalizedWritePos() ); + circular_->wrote( writeLength ); + processedLength_ += writeLength; + } + + NamedEvent event_; + Stream stream_; + BufferState state_; + CircularBuffer *circular_; + Byte *data_; + DWORD messageLength_; + Pos processedLength_; + }; + + void createSharedMemoryRegion(); + void openSharedMemoryRegion(); + void setSharedMemoryRegion(); void initializeCircularBuffer( CircularBuffer &buffer ); HANDLE autoManage( HANDLE handle ); ! void setUpReadWriteBuffers(); void checkManualEvents(); void log( const char *format, ... ) {} *************** *** 201,223 **** void threadMain(); void prepareWaitObjects(); void readAndSendPendingData(); private: ! enum { ! readOperation = 0, ! writeOperation = 1 ! } ! ! typedef std::deque<RemoteMessagePtr> MessagesToSend; ! MessagesToSend messagesToSend_; ! CppTL::Mutex messagesToSendLock_ std::vector<AutoHandle> handles_; std::vector<HANDLE> waitObjects_; SharedMemoryConfig config_; ! NamedEvent readWriteEvents_[2]; ! Stream readWriteStreams_[2]; AnonymousManualEvent stopEvent_; AnonymousManualEvent sendMessageEvent_; AutoHandle hSharedMemory_; SharedData *shared_; unsigned int id_; --- 298,323 ---- void threadMain(); void prepareWaitObjects(); + void prepareMessageToSend(); void readAndSendPendingData(); + void pushReceivedMessages(); + void readPendingData(); + void writePendingData(); + BufferInfo &getReadBuffer(); + BufferInfo &getWriteBuffer(); private: ! typedef std::deque<RemoteMessagePtr> RemoteMessages; ! RemoteMessages messagesToSend_; ! RemoteMessages messagesToDispatch_; ! CppTL::Mutex messagesToSendLock_; ! CppTL::Mutex messagesToDispatchLock_; std::vector<AutoHandle> handles_; std::vector<HANDLE> waitObjects_; SharedMemoryConfig config_; ! BufferInfo buffers_[2]; AnonymousManualEvent stopEvent_; AnonymousManualEvent sendMessageEvent_; AutoHandle hSharedMemory_; + AutoHandle thread_; SharedData *shared_; unsigned int id_; *************** *** 236,245 **** } unsigned int pid = ::GetCurrentProcessId(); ! nameLength_ = _tprintf( nameBuffer_, _T("cpput_%08x_%08x"), pid, id ); CPPTL_ASSERT_MESSAGE( nameLength_ < sizeof(nameBuffer_)-1, "buffer overflow" ); createSharedMemoryRegion(); ! setUpReadWriteSystemEvent(); checkManualEvents(); } --- 336,345 ---- } unsigned int pid = ::GetCurrentProcessId(); ! nameLength_ = _tprintf( nameBuffer_, _T("cpput_%08x_%08x"), pid, id_ ); CPPTL_ASSERT_MESSAGE( nameLength_ < sizeof(nameBuffer_)-1, "buffer overflow" ); createSharedMemoryRegion(); ! setUpReadWriteBuffers(); checkManualEvents(); } *************** *** 259,262 **** --- 359,363 ---- #endif openSharedMemoryRegion(); + setUpReadWriteBuffers(); checkManualEvents(); } *************** *** 273,277 **** setChildProcessCanInheritSecurity( saAttr ); ! DWORD fileMappingSize = sizeof(SharedData) + 2*config.bufferSize_; hSharedMemory_ = ::CreateFileMapping( INVALID_HANDLE_VALUE, &saAttr, // inherits handle --- 374,378 ---- setChildProcessCanInheritSecurity( saAttr ); ! DWORD fileMappingSize = sizeof(SharedData) + 2*config_.bufferSize_; hSharedMemory_ = ::CreateFileMapping( INVALID_HANDLE_VALUE, &saAttr, // inherits handle *************** *** 289,294 **** shared_->mutex_ = autoManage( ::CreateMutex( &saAttr, FALSE, 0 ) ); shared_->magic_ = magicKey; ! initializeCircularBuffer( shared_->readBuffer_ ); ! initializeCircularBuffer( shared_->writeBuffer_ ); if ( !shared_->mutex_ ) --- 390,395 ---- shared_->mutex_ = autoManage( ::CreateMutex( &saAttr, FALSE, 0 ) ); shared_->magic_ = magicKey; ! initializeCircularBuffer( shared_->circularBuffers_[0] ); ! initializeCircularBuffer( shared_->circularBuffers_[1] ); if ( !shared_->mutex_ ) *************** *** 311,315 **** void ! SharedMemoryTransportImpl::setSharedMemoryRegion( HANDLE hMapFile ) { LPVOID lpMapAddress = ::MapViewOfFile( --- 412,416 ---- void ! SharedMemoryTransportImpl::setSharedMemoryRegion() { LPVOID lpMapAddress = ::MapViewOfFile( *************** *** 327,333 **** SharedMemoryTransportImpl::initializeCircularBuffer( CircularBuffer &buffer ) { ! buffer_.size_ = size; ! buffer_.readPos_ = 0; ! buffer_.writePos_ = 0; } --- 428,434 ---- SharedMemoryTransportImpl::initializeCircularBuffer( CircularBuffer &buffer ) { ! buffer.size_ = config_.bufferSize_; ! buffer.readPos_ = 0; ! buffer.writePos_ = 0; } *************** *** 336,340 **** SharedMemoryTransportImpl::autoManage( HANDLE handle ) { ! handlers_.push_back( handle ); return handle; } --- 437,441 ---- SharedMemoryTransportImpl::autoManage( HANDLE handle ) { ! handles_.push_back( handle ); return handle; } *************** *** 342,346 **** void ! SharedMemoryTransportImpl::setUpReadWriteSystemEvent() { for ( int index = 0; index < 2; ++index ) --- 443,447 ---- void ! SharedMemoryTransportImpl::setUpReadWriteBuffers() { for ( int index = 0; index < 2; ++index ) *************** *** 348,355 **** static const TCHAR suffixes[] = _T( "rw" ); // read/write event name suffix. nameBuffer_[nameLength_] = suffixes[index]; nameBuffer_[nameLength_+1] = 0; ! if ( readWriteEvents_[index].create( nameBuffer_ ) == 0 ) throw SharedMemoryError( "Failed to create named event." ); } nameBuffer_[nameLength_] = 0; --- 449,465 ---- static const TCHAR suffixes[] = _T( "rw" ); // read/write event name suffix. + int orientedIndex = isConnectionCreator_ ? index : 1 - index; + BufferInfo &buffer = buffers_[ orientedIndex ]; + nameBuffer_[nameLength_] = suffixes[index]; nameBuffer_[nameLength_+1] = 0; ! if ( buffer.event_.create( nameBuffer_ ) == 0 ) throw SharedMemoryError( "Failed to create named event." ); + buffer.state_ = bsSize; + buffer.circular_ = &shared_->circularBuffers_[ orientedIndex ]; + buffer.data_ = reinterpret_cast<Byte *>( shared_ ) + sizeof(SharedData); + if ( orientedIndex > 0 ) + buffer.data_ += shared_->circularBuffers_[ 0 ].size_; + buffer.processedLength_ = 0; } nameBuffer_[nameLength_] = 0; *************** *** 374,377 **** --- 484,504 ---- + void + SharedMemoryTransportImpl::dispatchReceivedMessages( RemoteMessageServer &server ) + { + RemoteMessages messages; + { + CppTL::Mutex::ScopedLockGuard guard( messagesToDispatchLock_ ); + messages.swap( messagesToDispatch_ ); + } + + while ( !messages.empty() ) + { + server.dispatchMessage( messages.front() ); + messages.pop_front(); + } + } + + DWORD WINAPI SharedMemoryTransportImpl::threadBootstrap( void *p ) *************** *** 389,393 **** DWORD threadId; thread_ = ::CreateThread( 0, 0, ! &SharedMemoryCommunicationManager::threadBootstrap, this, 0, &threadId ); if ( thread_ == 0 ) --- 516,520 ---- DWORD threadId; thread_ = ::CreateThread( 0, 0, ! &SharedMemoryTransportImpl::threadBootstrap, this, 0, &threadId ); if ( thread_ == 0 ) *************** *** 433,438 **** else if ( event + WAIT_OBJECT_0 == WAIT_FAILED ) { ! System::Win32SystemError error( "wait failed" ); ! log( "%s", error.what() ); } else --- 560,564 ---- else if ( event + WAIT_OBJECT_0 == WAIT_FAILED ) { ! log( "event wait failed" ); } else *************** *** 440,444 **** break; // timeout or abandonned event => child process died. } ! if ( waitObjects_[event] == stopEvent_ ) { log( "Stop event signaled !" ); --- 566,570 ---- break; // timeout or abandonned event => child process died. } ! if ( waitObjects_[event] == stopEvent_.get() ) { log( "Stop event signaled !" ); *************** *** 448,452 **** prepareMessageToSend(); readAndSendPendingData(); ! } log( "Thread stopped." ); --- 574,578 ---- prepareMessageToSend(); readAndSendPendingData(); ! pushReceivedMessages(); } log( "Thread stopped." ); *************** *** 469,474 **** waitObjects_.push_back( stopEvent_.get() ); waitObjects_.push_back( sendMessageEvent_.get() ); ! waitObjects_.push_back( readWriteEvents_[0].get() ); ! waitObjects_.push_back( readWriteEvents_[1].get() ); } --- 595,600 ---- waitObjects_.push_back( stopEvent_.get() ); waitObjects_.push_back( sendMessageEvent_.get() ); ! waitObjects_.push_back( buffers_[0].event_.get() ); ! waitObjects_.push_back( buffers_[1].event_.get() ); } *************** *** 480,495 **** return; ! MessagesToSend messages; { CppTL::Mutex::ScopedLockGuard guard( messagesToSendLock_ ); ! messagesToSend.swap( messages ); } while ( !messages.empty() ) { ! getWriteStream().packets().beginMessage(); ! getWriteStream() << messages.front(); ! getWriteStream().packets().endMessage(); ! messages.pop(); } } --- 606,622 ---- return; ! RemoteMessages messages; { CppTL::Mutex::ScopedLockGuard guard( messagesToSendLock_ ); ! messagesToSend_.swap( messages ); } + BufferInfo &buffer = getWriteBuffer(); while ( !messages.empty() ) { ! buffer.stream_.packets().beginMessage(); ! buffer.stream_ << messages.front(); ! buffer.stream_.packets().endMessage(); ! messages.pop_front(); } } *************** *** 499,506 **** SharedMemoryTransportImpl::readAndSendPendingData() { ! // if ( readEvent().isSignaled() || writeEvent().isSignaled() } // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// --- 626,788 ---- SharedMemoryTransportImpl::readAndSendPendingData() { ! if ( buffers_[0].event_.isSignaled() ! || buffers_[1].event_.isSignaled() ! || getWriteBuffer().stream_.packets().hasPendingMessage() ) ! { ! ScopedMutexLock guard( shared_->mutex_ ); ! readPendingData(); ! writePendingData(); ! } ! } ! ! ! void ! SharedMemoryTransportImpl::readPendingData() ! { ! BufferInfo &buffer = getReadBuffer(); ! buffer.event_.reset(); ! Pos oldReadPos = buffer.circular_->readPos_; ! while ( true ) ! { ! Pos available = buffer.circular_->availableForReadingSequentially(); ! if ( available == 0 ) ! break; ! switch ( buffer.state_ ) ! { ! case bsSize: ! { ! Pos toRead = CPPTL_MIN( available, ! sizeof(buffer.messageLength_) - buffer.processedLength_ ); ! memcpy( reinterpret_cast<Byte *>(&buffer.messageLength_) + buffer.processedLength_, ! buffer.data_ + buffer.processedLength_, ! toRead ); ! buffer.read( "Message size", toRead ); ! if ( buffer.processedLength_ == sizeof(buffer.messageLength_) ) ! { ! buffer.state_ = bsMessage; ! buffer.processedLength_ = 0; ! log( "read: message size is %d", buffer.messageLength_ ); ! buffer.stream_.packets().beginMessage(); ! } ! } ! break; ! case bsMessage: ! { ! Pos toRead = CPPTL_MIN( available, buffer.messageLength_ ); ! buffer.stream_.packets().received( buffer.data_ + buffer.circular_->readPos_, ! toRead ); ! buffer.read( "Message content", toRead ); ! if ( buffer.processedLength_ == buffer.messageLength_ ) ! { ! log( "read: message completly received" ); ! buffer.stream_.packets().endMessage(); ! buffer.state_ = bsSize; ! buffer.processedLength_ = 0; ! } ! } ! break; ! default: ! CPPTL_ASSERT_MESSAGE( false, "Invalid buffer state." ); ! break; ! } ! } ! ! if ( oldReadPos != buffer.circular_->readPos_ ) ! buffer.event_.signal(); ! } ! ! void ! SharedMemoryTransportImpl::writePendingData() ! { ! BufferInfo &buffer = getWriteBuffer(); ! buffer.event_.reset(); ! Pos oldWritePos = buffer.circular_->writePos_; ! while ( buffer.stream_.packets().hasPendingMessage() ) ! { ! Pos available = buffer.circular_->availableForWritingSequentially(); ! if ( available == 0 ) ! break; ! switch ( buffer.state_ ) ! { ! case bsSize: ! { ! if ( buffer.messageLength_ == 0 ) ! buffer.messageLength_ = buffer.stream_.packets().getFirstMessageLength(); ! ! Pos toWrite = CPPTL_MIN( available, ! sizeof(buffer.messageLength_) - buffer.processedLength_ ); ! memcpy( buffer.data_ + buffer.processedLength_, ! reinterpret_cast<Byte *>(&buffer.messageLength_) + buffer.processedLength_, ! toWrite ); ! buffer.write( "Message size", toWrite ); ! if ( buffer.processedLength_ == sizeof(buffer.messageLength_) ) ! { ! buffer.state_ = bsMessage; ! buffer.processedLength_ = 0; ! log( "write: message size is %d", buffer.messageLength_ ); ! } ! } ! break; ! case bsMessage: ! { ! Pos toWrite = CPPTL_MIN( available, buffer.messageLength_ ); ! Byte *target = buffer.data_ + buffer.circular_->normalizeWritePos(); ! Pos written = buffer.stream_.packets().send( target, toWrite ); ! buffer.write( "Message content", written ); ! if ( buffer.processedLength_ == buffer.messageLength_ ) ! { ! log( "write: message completly sent" ); ! buffer.state_ = bsSize; ! buffer.processedLength_ = 0; ! buffer.stream_.packets().discardFirstMessage(); ! } ! } ! break; ! default: ! CPPTL_ASSERT_MESSAGE( false, "Invalid buffer state." ); ! break; ! } ! } ! if ( oldWritePos != buffer.circular_->writePos_ ) ! buffer.event_.signal(); ! } ! ! ! void ! SharedMemoryTransportImpl::pushReceivedMessages() ! { ! RemoteMessages messages; ! BufferInfo &buffer = getReadBuffer(); ! while ( buffer.stream_.packets().hasPendingMessage() ) ! { ! RemoteMessagePtr message; ! buffer.stream_ >> message; ! if ( message ) ! messages.push_back( message ); ! buffer.stream_.packets().discardFirstMessage(); ! } ! ! CppTL::Mutex::ScopedLockGuard guard( messagesToDispatchLock_ ); ! messagesToDispatch_.insert( messagesToDispatch_.end(), ! messages.begin(), ! messages.end() ); } + SharedMemoryTransportImpl::BufferInfo & + SharedMemoryTransportImpl::getReadBuffer() + { + return buffers_[0]; + } + + + SharedMemoryTransportImpl::BufferInfo & + SharedMemoryTransportImpl::getWriteBuffer() + { + return buffers_[1]; + } + + + // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// *************** *** 533,535 **** --- 815,826 ---- + void + SharedMemoryTransport::dispatchReceivedMessages( RemoteMessageServer &server ) + { + impl_->dispatchReceivedMessages( server ); + } + + } // namespace OpenTest + + #endif // OPENTEST_NO_SHAREDMEMORYTRANSPORT |
From: Baptiste L. <bl...@us...> - 2005-06-30 21:48:21
|
Update of /cvsroot/cppunit/cppunit2/include/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14156/include/opentest Modified Files: sharedmemorytransport.h Log Message: * rough implementation of the overall logic, need heavy testing Index: sharedmemorytransport.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/opentest/sharedmemorytransport.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** sharedmemorytransport.h 26 Jun 2005 21:24:30 -0000 1.1 --- sharedmemorytransport.h 30 Jun 2005 21:48:09 -0000 1.2 *************** *** 4,12 **** # include <opentest/forwards.h> namespace OpenTest { ! class ShareMemoryError { public: }; --- 4,22 ---- # include <opentest/forwards.h> + #ifndef OPENTEST_NO_SHAREDMEMORYTRANSPORT + namespace OpenTest { ! class SharedMemoryError : public std::runtime_error { public: + SharedMemoryError( const char *message ) + : std::runtime_error( message ) + { + } + + ~SharedMemoryError() throw() + { + } }; *************** *** 37,40 **** --- 47,52 ---- void send( const RemoteMessagePtr &message ); + void dispatchReceivedMessages( RemoteMessageServer &server ); + private: SharedMemoryTransportImpl *impl_; *************** *** 43,46 **** --- 55,60 ---- } // namespace OpenTest + #endif // OPENTEST_NO_SHAREDMEMORYTRANSPORT + #endif // OPENTEST_SHAREDMEMORYTRANSPORT_H_INCLUDED |
From: Baptiste L. <bl...@us...> - 2005-06-26 21:24:39
|
Update of /cvsroot/cppunit/cppunit2/src/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16023/src/opentest Added Files: sharedmemorytransport.cpp Log Message: Intermediate comit (does not compile). Shared memory transport WIN32 implementation for TestDriver/TestRunner communication. Shared memory region has been setup. Still need to handle exchange of data using the circular buffers and related events. --- NEW FILE: sharedmemorytransport.cpp --- #include <opentest/sharedmemorytransport.h> #include <opentest/remoteinterfaces.h> #include <cpptl/thread.h> #include <tchar.h> #define WIN32_LEAN_AND_MEAN #define NOGDI #define NOUSER #define NOKERNEL #define NOSOUND #include <windows.h> /* Importance notes: * Be sure to use windows "macro" to access system access call. This ensure we can compile * the code as either unicode or ansi. Some Windows family OS only have 'unicode' system call. */ namespace OpenTest { static const DWORD magicKey = 0x43555431; static volatile unsigned int serial = 1; static CppTL::Mutex serialLock; static LPSECURITY_ATTRIBUTES setChildProcessCanInheritSecurity( SECURITY_ATTRIBUTES &saAttr ) { saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; // inherit handle saAttr.lpSecurityDescriptor = NULL; return &saAttr; } // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class AutoHandle // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// class AutoHandle : public CppTL::NonCopyable { public: AutoHandle( HANDLE handle = 0 ) : handle_( handle ) { } ~AutoHandle() { if ( handle_ ) ::CloseHandle( handle_ ); } operator HANDLE () const { return handle_; } AutoHandle &operator =( HANDLE handle ) { if ( handle_ ) ::CloseHandle( handle_ ); handle_ = handle; } private: HANDLE handle_; }; // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class BaseEvent // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// class BaseEvent { public: void signal() { ::SetEvent( hEvent_ ); } void reset() { ::ResetEvent( hEvent_ ); } bool isSignaled() const { return ::WaitForSingleObject( hEvent_, 0 ) == WAIT_OBJECT_0; } HANDLE get() const { return hEvent_; } protected: AutoHandle hEvent_; }; // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class NamedEvent // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// class NamedEvent : public BaseEvent { public: HANDLE create( const TCHAR *name ) { SECURITY_ATTRIBUTES sa; hEvent_ = ::CreateEvent( setChildProcessCanInheritSecurity(sa), FALSE, FALSE, name ); return get(); } }; // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class AnonymousManualEvent // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// class AnonymousManualEvent : public BaseEvent { public: AnonymousManualEvent() { SECURITY_ATTRIBUTES sa; hEvent_ = ::CreateEvent( setChildProcessCanInheritSecurity(sa), TRUE, FALSE, 0 ); } }; // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class SharedMemoryTransportImpl // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// class SharedMemoryTransportImpl { public: typedef DWORD Pos; SharedMemoryTransportImpl( const SharedMemoryConfig &config ); SharedMemoryTransportImpl( const String &transportName, const SharedMemoryConfig &config ); virtual ~SharedMemoryTransportImpl(); void send( const RemoteMessagePtr &message ); #pragma pack(push, 1) // The structure CircularBuffer & SharedData are // directly mapped to shared memory. // They should contains no C++ object (memory organization can depend on compilation options). // Name are declared from the server side point of view. // Pragma directive must be used to ensure they have the same binary // representation regarless of compilation option. struct CircularBuffer { Pos size_; Pos readPos_; // between 0 and size_ Pos writePos_; // between 0 and 2*size_ }; struct SharedData { DWORD structSize_; /// size of the SharedData struct (to detect incompatible struct due to compilation settings) DWORD magic_; HANDLE mutex_; CircularBuffer writeBuffer_; CircularBuffer readBuffer_; }; #pragma pack(pop) private: void initializeCircularBuffer( CircularBuffer &buffer ); HANDLE autoManage( HANDLE handle ); void setUpReadWriteSystemEvent(); void checkManualEvents(); void log( const char *format, ... ) {} static DWORD WINAPI threadBootstrap( void *p ); void startThread(); void stopThread(); void threadMain(); void prepareWaitObjects(); void readAndSendPendingData(); private: enum { readOperation = 0, writeOperation = 1 } typedef std::deque<RemoteMessagePtr> MessagesToSend; MessagesToSend messagesToSend_; CppTL::Mutex messagesToSendLock_ std::vector<AutoHandle> handles_; std::vector<HANDLE> waitObjects_; SharedMemoryConfig config_; NamedEvent readWriteEvents_[2]; Stream readWriteStreams_[2]; AnonymousManualEvent stopEvent_; AnonymousManualEvent sendMessageEvent_; AutoHandle hSharedMemory_; SharedData *shared_; unsigned int id_; TCHAR nameBuffer_[32]; unsigned int nameLength_; bool isConnectionCreator_; }; SharedMemoryTransportImpl::SharedMemoryTransportImpl( const SharedMemoryConfig &config ) : config_( config ) , isConnectionCreator_( true ) { { CppTL::Mutex::ScopedLockGuard guard( serialLock ); id_ = serial++; } unsigned int pid = ::GetCurrentProcessId(); nameLength_ = _tprintf( nameBuffer_, _T("cpput_%08x_%08x"), pid, id ); CPPTL_ASSERT_MESSAGE( nameLength_ < sizeof(nameBuffer_)-1, "buffer overflow" ); createSharedMemoryRegion(); setUpReadWriteSystemEvent(); checkManualEvents(); } SharedMemoryTransportImpl::SharedMemoryTransportImpl( const String &transportName, const SharedMemoryConfig &config ) : config_( config ) , isConnectionCreator_( false ) { if ( transportName.length() > sizeof(nameBuffer_)/sizeof(TCHAR)-4 ) throw SharedMemoryError( "Shared memory transport name too long." ); #ifdef _UNICODE // Use VC++ CRT extension to handle ansi->unicode conversion. nameLength_ = wprintf( nameBuffer_, L"%S", transportName.c_str() ); #else nameLength_ = sprintf( nameBuffer_, "%s", transportName.c_str() ); #endif openSharedMemoryRegion(); checkManualEvents(); } SharedMemoryTransportImpl::~SharedMemoryTransportImpl() { } void SharedMemoryTransportImpl::createSharedMemoryRegion() { SECURITY_ATTRIBUTES saAttr; setChildProcessCanInheritSecurity( saAttr ); DWORD fileMappingSize = sizeof(SharedData) + 2*config.bufferSize_; hSharedMemory_ = ::CreateFileMapping( INVALID_HANDLE_VALUE, &saAttr, // inherits handle PAGE_READWRITE, 0, // max size (hi-order) fileMappingSize, // max size (low-order) nameBuffer_ ); // name if ( hSharedMemory_ == 0 ) throw SharedMemoryError( "Failed to create shared memory region." ); setSharedMemoryRegion(); // Initialize shared memory region shared_->structSize_ = sizeof(SharedData); shared_->mutex_ = autoManage( ::CreateMutex( &saAttr, FALSE, 0 ) ); shared_->magic_ = magicKey; initializeCircularBuffer( shared_->readBuffer_ ); initializeCircularBuffer( shared_->writeBuffer_ ); if ( !shared_->mutex_ ) throw SharedMemoryError( "Failed to initialize shared memory structure (mutex creation failed)." ); } void SharedMemoryTransportImpl::openSharedMemoryRegion() { hSharedMemory_ = ::OpenFileMapping( FILE_MAP_ALL_ACCESS, TRUE, nameBuffer_ ); if ( hSharedMemory_ == 0 ) throw SharedMemoryError( "Failed to open specified shared memory region." ); setSharedMemoryRegion(); } void SharedMemoryTransportImpl::setSharedMemoryRegion( HANDLE hMapFile ) { LPVOID lpMapAddress = ::MapViewOfFile( hSharedMemory_, // handle to mapping object FILE_MAP_ALL_ACCESS, // read/write permission 0, // max. object size 0, // size of hFile 0 ); // map entire file shared_ = static_cast<SharedData *>( lpMapAddress ); } void SharedMemoryTransportImpl::initializeCircularBuffer( CircularBuffer &buffer ) { buffer_.size_ = size; buffer_.readPos_ = 0; buffer_.writePos_ = 0; } HANDLE SharedMemoryTransportImpl::autoManage( HANDLE handle ) { handlers_.push_back( handle ); return handle; } void SharedMemoryTransportImpl::setUpReadWriteSystemEvent() { for ( int index = 0; index < 2; ++index ) { static const TCHAR suffixes[] = _T( "rw" ); // read/write event name suffix. nameBuffer_[nameLength_] = suffixes[index]; nameBuffer_[nameLength_+1] = 0; if ( readWriteEvents_[index].create( nameBuffer_ ) == 0 ) throw SharedMemoryError( "Failed to create named event." ); } nameBuffer_[nameLength_] = 0; } void SharedMemoryTransportImpl::checkManualEvents() { if ( stopEvent_.get() == 0 || sendMessageEvent_.get() == 0 ) throw SharedMemoryError( "Failed to creae manual events." ); } // Call to this method may come from another thread. void SharedMemoryTransportImpl::send( const RemoteMessagePtr &message ) { CppTL::Mutex::ScopedLockGuard guard( messagesToSendLock_ ); messagesToSend_.push_back( message ); } DWORD WINAPI SharedMemoryTransportImpl::threadBootstrap( void *p ) { static_cast<SharedMemoryTransportImpl *>( p )->threadMain(); return 0; } void SharedMemoryTransportImpl::startThread() { if ( !thread_ ) { DWORD threadId; thread_ = ::CreateThread( 0, 0, &SharedMemoryCommunicationManager::threadBootstrap, this, 0, &threadId ); if ( thread_ == 0 ) throw SharedMemoryError( "Failed to create thread." ); } } void SharedMemoryTransportImpl::stopThread() { if ( thread_ ) { log( "Stopping thread..." ); stopEvent_.signal(); WaitForSingleObject( thread_, INFINITE ); // join thread stopEvent_.reset(); log( "Thread stopped." ); } } void SharedMemoryTransportImpl::threadMain() { try { log( "Thread started." ); prepareWaitObjects(); while ( true ) { log( "Waiting event"); DWORD event = WaitForMultipleObjects( waitObjects_.size(), &waitObjects_[0], FALSE, INFINITE ); event -= WAIT_OBJECT_0; log( "Event signaled: %d", event ); if ( event <0 || event > waitObjects_.size() ) { if ( event + WAIT_OBJECT_0 == WAIT_TIMEOUT ) log( "timeout event !" ); else if ( event + WAIT_OBJECT_0 == WAIT_FAILED ) { System::Win32SystemError error( "wait failed" ); log( "%s", error.what() ); } else log ("abandonned event: %d!", event ); break; // timeout or abandonned event => child process died. } if ( waitObjects_[event] == stopEvent_ ) { log( "Stop event signaled !" ); break; } prepareMessageToSend(); readAndSendPendingData(); } log( "Thread stopped." ); } catch ( const std::exception &e ) { log( "thread aborted: %s", e.what() ); } catch ( ... ) { log( "thread aborted with an unspecified exception." ); } } void SharedMemoryTransportImpl::prepareWaitObjects() { waitObjects_.clear(); waitObjects_.push_back( stopEvent_.get() ); waitObjects_.push_back( sendMessageEvent_.get() ); waitObjects_.push_back( readWriteEvents_[0].get() ); waitObjects_.push_back( readWriteEvents_[1].get() ); } void SharedMemoryTransportImpl::prepareMessageToSend() { if ( !sendMessageEvent_.isSignaled() ) return; MessagesToSend messages; { CppTL::Mutex::ScopedLockGuard guard( messagesToSendLock_ ); messagesToSend.swap( messages ); } while ( !messages.empty() ) { getWriteStream().packets().beginMessage(); getWriteStream() << messages.front(); getWriteStream().packets().endMessage(); messages.pop(); } } void SharedMemoryTransportImpl::readAndSendPendingData() { // if ( readEvent().isSignaled() || writeEvent().isSignaled() } // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class SharedMemoryTransport // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// SharedMemoryTransport::SharedMemoryTransport( const SharedMemoryConfig &config ) : impl_( new SharedMemoryTransportImpl( config ) ) { } SharedMemoryTransport::SharedMemoryTransport( const String &transportName, const SharedMemoryConfig &config ) : impl_( new SharedMemoryTransportImpl( transportName, config ) ) { } SharedMemoryTransport::~SharedMemoryTransport() { delete impl_; } void SharedMemoryTransport::send( const RemoteMessagePtr &message ) { impl_->send( message ); } } // namespace OpenTest |
From: Baptiste L. <bl...@us...> - 2005-06-26 21:24:39
|
Update of /cvsroot/cppunit/cppunit2/include/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16023/include/opentest Added Files: sharedmemorytransport.h Log Message: Intermediate comit (does not compile). Shared memory transport WIN32 implementation for TestDriver/TestRunner communication. Shared memory region has been setup. Still need to handle exchange of data using the circular buffers and related events. --- NEW FILE: sharedmemorytransport.h --- #ifndef OPENTEST_SHAREDMEMORYTRANSPORT_H_INCLUDED # define OPENTEST_SHAREDMEMORYTRANSPORT_H_INCLUDED # include <opentest/forwards.h> namespace OpenTest { class ShareMemoryError { public: }; class SharedMemoryTransportImpl; struct SharedMemoryConfig { SharedMemoryConfig() : bufferSize_( 512 * 1024 ) // 512k { } unsigned int bufferSize_; }; class SharedMemoryTransport { public: /// Initiate a shared memory connection SharedMemoryTransport( const SharedMemoryConfig &config = SharedMemoryConfig() ); /// Attempts to connect to an existing shared memory connection SharedMemoryTransport( const String &transportName, const SharedMemoryConfig &config = SharedMemoryConfig() ); virtual ~SharedMemoryTransport(); void send( const RemoteMessagePtr &message ); private: SharedMemoryTransportImpl *impl_; }; } // namespace OpenTest #endif // OPENTEST_SHAREDMEMORYTRANSPORT_H_INCLUDED |
From: Baptiste L. <bl...@us...> - 2005-06-26 19:41:25
|
Update of /cvsroot/cppunit/cppunit2/src/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25409/src/opentest Modified Files: serializer.cpp Log Message: Extracted packet management to handle the dual packet cursor cleanly (cursor for serialization and transport). Index: serializer.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/opentest/serializer.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** serializer.cpp 24 Jun 2005 08:23:50 -0000 1.1 --- serializer.cpp 26 Jun 2005 19:41:15 -0000 1.2 *************** *** 4,7 **** --- 4,8 ---- namespace OpenTest { + /* 0x20: 0x21:! 0x22:" 0x23:# 0x24:$ 0x25:% 0x26:& 0x27:' 0x28:( 0x29:) 0x2a:* 0x2b:+ 0x2c:, 0x2d:- 0x2e:. 0x2f:/ *************** *** 40,108 **** }; ! ! Stream::Stream() ! : current_( buffers_.begin() ) ! , currentData_( 0 ) ! , endData_( 0 ) ! , writeBufferSize_( 16384 ) ! , error_( 0 ) { } ! Stream::~Stream() { ! while ( !buffers_.empty() ) { ! delete[] (unsigned char *)buffers_.back().data_; ! buffers_.pop_back(); } } ! bool ! Stream::inError() const { ! return error_ != 0; } ! Stream & ! Stream::setError( const char *errorMessage ) { ! if ( !error_ ) ! error_ = errorMessage; ! return *this; } ! void ! Stream::addBuffer( unsigned int length, ! const void *data ) { ! write( data, length ); ! current_ = buffers_.begin(); ! currentData_ = current_->data_; ! endData_ = currentData_ + length; } unsigned char ! Stream::readNextByte() { ! if ( currentData_ != endData_ ) ! return *currentData_++; ! ! if ( current_ != buffers_.end() ) { ! ++current_; ! if ( current_ != buffers_.end() ) { ! currentData_ = current_->data_; ! endData_ = currentData_ + current_->length_; ! CPPTL_ASSERT_MESSAGE( currentData_ != endData_, ! "invariant violation: 0 length data buffer" ); ! return *currentData_++; } } return ccEndBuffer; --- 41,115 ---- }; + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + // class Packets + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// ! Packets::Packets() ! : packetsHead_( 0 ) ! , defaultPacketSize_( 16384 ) { } ! Packets::~Packets() { ! Packet *current = packetsHead_; ! while ( current ) { ! Packet *toDelete = current; ! current = current->next_; ! delete toDelete; } } ! void ! Packets::beginMessage() { ! appendPacketIfFull( externalPos_ ); ! MessagePacket message; ! message.position_ = externalPos_; ! message.length_ = 0; ! messages_.push_back( message ); } ! ! void ! Packets::received( void *data, Pos length ) { ! write( externalPos_, static_cast<Byte *>( data ), length ); } ! unsigned int ! Packets::send( void *dest, ! Pos availableLength ) { ! return read( externalPos_, static_cast<Byte *>( dest ), availableLength ); ! } ! ! void ! Packets::endMessage() ! { ! CPPTL_ASSERT_MESSAGE( !messages_.empty() && messages_.back().length_ == 0, ! "No message started." ); ! messages_.back().length_ = distance( messages_.back().position_, externalPos_ ); } unsigned char ! Packets::serializationReadNextByte() { ! if ( serializePos_ ) { ! if ( serializePos_.currentData_ == serializePos_.packet_->endInitialized_ ) { ! if ( serializePos_.packet_->next_ == 0 ) ! return ccEndBuffer; ! serializePos_.seekToNextPacket(); } + return *(serializePos_.currentData_++); } return ccEndBuffer; *************** *** 110,202 **** void ! Stream::ungetLastByte() { ! if ( current_ != buffers_.end() ) ! { ! if ( current_->data_ != currentData_ ) ! { ! --currentData_; ! return; ! } ! CPPTL_ASSERT_MESSAGE( current_ != buffers_.begin(), ! "No byte to 'unput'" ); ! --current_; ! endData_ = current_->data_ + current_->length_; ! currentData_ = endData_ - 1; ! } } void ! Stream::read( void *buffer, unsigned int length ) { ! unsigned char *target = static_cast<unsigned char *>( buffer ); ! unsigned int lengthToCopy = CPPTL_MIN( length, endData_ - currentData_ ); ! memcpy( target, currentData_, lengthToCopy ); ! length -= lengthToCopy; ! currentData_ += lengthToCopy; ! if ( length != 0 ) // there was not enough data, use next buffers { ! target += lengthToCopy; ! ++current_; ! while ( current_ != buffers_.end() ) ! { ! lengthToCopy = CPPTL_MIN( length, current_->length_ ); ! memcpy( target, current_->data_, lengthToCopy ); ! target += lengthToCopy; ! length -= lengthToCopy; ! if ( length == 0 ) ! { ! currentData_ = current_->data_ + lengthToCopy; ! endData_ = current_->data_ + current_->length_; ! break; ! } ! ++current_; ! } ! if ( length != 0 ) ! { ! setError( "Attempted to read beyond buffer end." ); ! currentData_ = endData_; ! } } } ! void ! Stream::write( unsigned char byte ) { ! if ( currentData_ != endData_ ) ! *currentData_++ = byte; else ! write( &byte, 1 ); } void ! Stream::write( const void *buffer, unsigned int length ) { if ( length == 0 ) return; ! const unsigned char *source = static_cast<const unsigned char *>( buffer ); ! unsigned int availableLength = endData_ - currentData_; ! if ( availableLength < length ) { ! memcpy( currentData_, source, availableLength ); ! source += availableLength; ! length -= availableLength; } - unsigned int newBufferLength = length + writeBufferSize_; - BufferData dataBuffer; - dataBuffer.length_ = newBufferLength; - typedef unsigned char BufferElementType; - unsigned char *newData = new BufferElementType[ newBufferLength ]; - memcpy( newData, source, length ); - dataBuffer.data_ = newData; - buffers_.push_back( dataBuffer ); ! current_ = buffers_.end() - 1; ! currentData_ = newData + length; ! endData_ = newData + newBufferLength; } --- 117,308 ---- void ! Packets::serializationUngetLastByte() { ! CPPTL_ASSERT_MESSAGE( serializePos_, "No byte to unget" ); ! if ( serializePos_.currentData_ > serializePos_.packet_->begin_ ) ! --serializePos_.currentData_; ! else ! serializePos_.seekBeforeEndOfPreviousPacket(); ! } ! ! bool ! Packets::serializationRead( void *buffer, ! Pos length ) ! { ! return read( serializePos_, static_cast<Byte *>( buffer ), length ) == length; } void ! Packets::serializationWrite( const void *buffer, ! Pos length ) { ! write( serializePos_, static_cast<const Byte *>( buffer ), length ); ! } ! ! void ! Packets::serializationWrite( unsigned char byte ) ! { ! } ! ! ! void ! Packets::appendPacketIfFull( PacketPos &pos ) ! { ! if ( !pos || pos.currentData_ == pos.packet_->end_ ) { ! Packet *packet = new Packet( defaultPacketSize_, pos.packet_ ); ! if ( !packetsHead_ ) ! packetsHead_ = packet; ! pos = PacketPos( packet ); ! if ( !serializePos_ ) ! serializePos_ = pos; ! if ( !externalPos_ ) ! externalPos_ = pos; } } ! Packets::Pos ! Packets::distance( const PacketPos &begin, ! const PacketPos &end ) const { ! Pos dist = 0; ! for ( Packet *current = begin.packet_; current != end.packet_; current = current->next_ ) ! dist += current->length(); ! if ( begin.packet_ != end.packet_ ) ! { ! dist += begin.packet_->end_ - begin.currentData_; ! dist += end.offset(); ! } else ! dist += end.currentData_ - begin.currentData_; ! return dist; } void ! Packets::write( PacketPos &pos, const Byte *data, Pos length ) { if ( length == 0 ) return; ! if ( !pos ) ! appendPacketIfFull( pos ); ! ! Pos writeLength = CPPTL_MIN( pos.availableForWriting(), length ); ! memcpy( pos.currentData_, data, writeLength ); ! length -= writeLength; ! pos.currentData_ += writeLength; ! pos.packet_->endInitialized_ += writeLength; ! while ( length > 0 ) { ! data += writeLength; ! CPPTL_ASSERT_MESSAGE( pos.currenData_ == pos.packet_->end_, ! "Should be at the end of the current packet" ); ! appendPacketIfFull( pos ); ! writeLength = CPPTL_MIN( pos.packet_->length(), length ); ! memcpy( pos.packet_->begin_, data, writeLength ); ! length -= writeLength; ! pos.packet_->endInitialized_ += writeLength; ! pos.currentData_ = pos.packet_->offset( writeLength ); } + } ! Packets::Pos ! Packets::read( PacketPos &pos, Byte *data, Pos length ) ! { ! if ( !pos ) ! return 0; ! ! Pos initialLength = length; ! while ( length > 0 ) ! { ! pos.seekToNextPacketIfAtEnd(); ! Pos readLength = CPPTL_MIN( length, pos.availableForReading() ); ! if ( readLength == 0 ) ! break; ! memcpy( data, pos.currentData_, readLength ); ! length -= readLength; ! pos.currentData_ += readLength; ! data += readLength; ! } ! return initialLength - length; ! } ! ! ! ! ! // ////////////////////////////////////////////////////////////////// ! // ////////////////////////////////////////////////////////////////// ! // class Stream ! // ////////////////////////////////////////////////////////////////// ! // ////////////////////////////////////////////////////////////////// ! ! ! ! Stream::Stream() ! : error_( 0 ) ! { ! } ! ! Stream::~Stream() ! { ! } ! ! ! Packets & ! Stream::packets() ! { ! return packets_; ! } ! ! ! bool ! Stream::inError() const ! { ! return error_ != 0; ! } ! ! Stream & ! Stream::setError( const char *errorMessage ) ! { ! if ( !error_ ) ! error_ = errorMessage; ! return *this; ! } ! ! ! unsigned char ! Stream::readNextByte() ! { ! return packets_.serializationReadNextByte(); ! } ! ! void ! Stream::ungetLastByte() ! { ! packets_.serializationUngetLastByte(); ! } ! ! void ! Stream::read( void *buffer, unsigned int length ) ! { ! if ( !packets_.serializationRead( buffer, length ) ) ! setError( "Attempted to read beyond buffer end." ); ! } ! ! ! void ! Stream::write( unsigned char byte ) ! { ! packets_.serializationWrite( byte ); ! } ! ! ! void ! Stream::write( const void *buffer, unsigned int length ) ! { ! packets_.serializationWrite( buffer, length ); } |
From: Baptiste L. <bl...@us...> - 2005-06-26 19:41:24
|
Update of /cvsroot/cppunit/cppunit2/include/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25409/include/opentest Modified Files: serializer.h Log Message: Extracted packet management to handle the dual packet cursor cleanly (cursor for serialization and transport). Index: serializer.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/opentest/serializer.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** serializer.h 24 Jun 2005 19:41:50 -0000 1.2 --- serializer.h 26 Jun 2005 19:41:15 -0000 1.3 *************** *** 19,22 **** --- 19,169 ---- + class Packets + { + public: + typedef unsigned char Byte; + typedef unsigned int Pos; + + Packets(); + virtual ~Packets(); + + // for transport communication + void beginMessage(); + void received( void *data, Pos length ); + // Returns the length actual written at dest + unsigned int send( void *dest, Pos availableLength ); + void endMessage(); + + // for serialization + unsigned char serializationReadNextByte(); + void serializationUngetLastByte(); + bool serializationRead( void *buffer, Pos length ); + void serializationWrite( const void *buffer, Pos length ); + void serializationWrite( unsigned char byte ); + + private: + // Binary packet with intrusive double linked list. + struct Packet + { + Packet( Pos size, Packet *previous ) + : begin_( new Byte[size] ) + , endInitialized_( begin_ ) + , end_( begin_ + size ) + , previous_( previous ) + , next_( 0 ) + { + next_ = previous_->next_; + previous_->next_ = this; + } + + ~Packet() + { + if ( previous_ ) + previous_->next_ = next_; + if ( next_ ) + next_->previous_ = previous_; + delete[] begin_; + } + + Pos length() const + { + return end_ - begin_; + } + + Byte *offset( Pos offsetInByte ) + { + return begin_ + offsetInByte; + } + + Packet *previous_; + Packet *next_; + Byte *begin_; + Byte *end_; + Byte *endInitialized_; + }; + + struct PacketPos + { + PacketPos( Packet *packet = 0, Pos offsetPos = 0 ) + : packet_( packet ) + , currentData_( packet ? packet->offset(offsetPos) : 0 ) + { + } + + operator bool() const + { + return packet_ != 0; + } + + bool operator !() const + { + return packet_ == 0; + } + + Pos offset() const + { + CPPTL_ASSERT_MESSAGE( packet_ != 0, "No packet to get the offset of." ); + return currentData_ - packet_->begin_; + } + + Pos availableForWriting() const + { + CPPTL_ASSERT_MESSAGE( packet_ != 0, "No packet available" ); + return packet_->end_ - currentData_; + } + + Pos availableForReading() const + { + CPPTL_ASSERT_MESSAGE( packet_ != 0, "No packet available" ); + return packet_->endInitialized_ - packet_->begin_; + } + + void seekToNextPacketIfAtEnd() + { + if ( packet_ && currentData_ == packet_->end_ && packet_->next_ ) + seekToNextPacket(); + } + + void seekBeforeEndOfPreviousPacket() + { + CPPTL_ASSERT_MESSAGE( packet_ && packet_->previous_, "No previous packet." ); + packet_ = packet_->previous_; + currentData_ = packet_->end_ - 1; + } + + void seekToNextPacket() + { + packet_ = packet_->next_; + currentData_ = packet_->begin_; + } + + Packet *packet_; + Byte *currentData_; + }; + + // Describes data for a RemoteMessage + struct MessagePacket + { + PacketPos position_; // Position where the RemoteMessage can be found + Pos length_; // Length of the RemoteMessage in bytes. + }; + + void appendPacketIfFull( PacketPos &pos ); + Pos distance( const PacketPos &begin, + const PacketPos &end ) const; + void write( PacketPos &pos, const Byte *data, Pos length ); + /// Returns the length actually read + Pos read( PacketPos &pos, Byte *data, Pos length ); + + private: + std::deque<MessagePacket> messages_; + Packet *packetsHead_; + PacketPos serializePos_; // Position from where data are read or write for serialization + PacketPos externalPos_; // Position where data are read/write on transport medium + Pos defaultPacketSize_; + }; + + + class Stream { *************** *** 25,32 **** virtual ~Stream(); ! // Call this to add buffer to be "read". Reset read cursor on the first buffer. ! void addBuffer( unsigned int length, const void *data ); ! ! void startsWriteNewMessage(); Stream &operator <<( bool value ); --- 172,176 ---- virtual ~Stream(); ! Packets &packets(); Stream &operator <<( bool value ); *************** *** 80,89 **** }; ! typedef std::vector<BufferData> Buffers; ! Buffers buffers_; ! Buffers::iterator current_; ! unsigned char *currentData_; ! unsigned char *endData_; ! unsigned int writeBufferSize_; typedef std::map<String,unsigned int> IndexesByString; typedef std::deque<String> StringsByIndex; --- 224,228 ---- }; ! Packets packets_; typedef std::map<String,unsigned int> IndexesByString; typedef std::deque<String> StringsByIndex; |
From: Baptiste L. <bl...@us...> - 2005-06-25 11:08:17
|
Update of /cvsroot/cppunit/cppunit2/src/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15239/src/opentest Modified Files: remoteinterfaces.cpp Log Message: Separated serialization process from call dispatching. This allows the serialization to be done by the transport layer (in a single thread). RemoteMessage can be exchanged between thread safely. Index: remoteinterfaces.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/opentest/remoteinterfaces.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** remoteinterfaces.cpp 24 Jun 2005 20:12:04 -0000 1.1 --- remoteinterfaces.cpp 25 Jun 2005 11:08:05 -0000 1.2 *************** *** 21,32 **** // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class MessageSender // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// ! void MessageSender::beginMessage( MessageId message ) { - stream().startsWriteNewMessage(); - stream() << message; } --- 21,275 ---- // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// + // class RemoteMessage + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + RemoteMessage::RemoteMessage() + { + } + + RemoteMessage::RemoteMessage( MessageId id ) + { + } + + RemoteMessage::~RemoteMessage() + { + } + + + void + RemoteMessage::serialize( Stream &stream ) + { + stream << messageId_; + doSerialize( stream ); + } + + inline RemoteMessagePtr makeRemoteMessage( MessageId id ) + { + return RemoteMessagePtr( new RemoteMessage( id ) ); + } + + inline void unserializeRemoteMessage( RemoteMessagePtr &outMessage, + MessageId id ) + { + outMessage.reset( new RemoteMessage( id ) ); + } + + + template<class TargetType> + void dispatchRemoteCall( const RemoteMessagePtr &inMessage, + TargetType *target, + void (TargetType::*method)() ) + { + (target->*method)(); + } + + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + // template class SimpleRemoteMessage + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + + template<class DataType> + class OPENTEST_API SimpleRemoteMessage : public RemoteMessage + { + public: + SimpleRemoteMessage() + { + } + + SimpleRemoteMessage( MessageId id, const DataType &data ) + : RemoteMessage( id ) + , data_( data ) + { + } + + DataType data_; + + private: // overridden from RemoteMessage + virtual void doSerialize( Stream &stream ) + { + stream << data_; + } + }; + + template<class DataType> + RemoteMessagePtr makeSimpleRemoteMessage( MessageId id, const DataType &data ) + { + return RemoteMessagePtr( new SimpleRemoteMessage<DataType>( id, data ) ); + } + + template<class DataType> + void unserializeSimpleRemoteMessage( Stream &stream, + RemoteMessagePtr &outMessage, + MessageId id, + CppTL::Type<DataType> ) + { + typedef SimpleRemoteMessage<DataType> MessageType; + MessageType *message = new MessageType(); + outMessage.reset( message ); + stream >> message->messageId_; + stream >> message->data_; + } + + + template<class TargetType + ,class DataType + > + void dispatchSimpleRemoteCall( const RemoteMessagePtr &inMessage, + TargetType *target, + void (TargetType::*method)( const DataType & ) ) + { + typedef SimpleRemoteMessage<DataType> MessageType; + const MessageType *message = static_cast<const MessageType *>( inMessage.get() ); + (target->*method)( message->data_ ); + } + + + template<class TargetType + ,class DataType + > + void dispatchSimpleRemoteCallNoRef( const RemoteMessagePtr &inMessage, + TargetType *target, + void (TargetType::*method)( DataType ) ) + { + typedef SimpleRemoteMessage<DataType> MessageType; + const MessageType *message = static_cast<const MessageType *>( inMessage.get() ); + (target->*method)( message->data_ ); + } + + + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + // template class TestIdRemoteMessage + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + + template<class DataType> + class OPENTEST_API TestIdRemoteMessage : public RemoteMessage + { + public: + TestIdRemoteMessage() + { + } + + TestIdRemoteMessage( MessageId id, TestId testId, const DataType &data ) + : RemoteMessage( id ) + , testId_( testId ) + , data_( data ) + { + } + + DataType data_; + TestId testId_; + + private: // overridden from RemoteMessage + virtual void doSerialize( Stream &stream ) + { + stream << testId_ << data_; + } + }; + + template<class DataType> + RemoteMessagePtr makeTestIdRemoteMessage( MessageId id, TestId test, const DataType &data ) + { + return RemoteMessagePtr( new TestIdRemoteMessage<DataType>( id, test, data ) ); + } + + template<class DataType> + void unserializeTestIdRemoteMessage( Stream &stream, + RemoteMessagePtr &outMessage, + MessageId id, + CppTL::Type<DataType> ) + { + typedef TestIdRemoteMessage<DataType> MessageType; + MessageType *message = new MessageType(); + outMessage.reset( message ); + stream >> message->messageId_; + stream >> message->testId_; + stream >> message->data_; + } + + template<class TargetType + ,class DataType + > + void dispatchTestIdRemoteCall( const RemoteMessagePtr &inMessage, + TargetType *target, + void (TargetType::*method)( TestId, const DataType & ) ) + { + typedef TestIdRemoteMessage<DataType> MessageType; + const MessageType *message = static_cast<const MessageType *>( inMessage.get() ); + (target->*method)( message->testId_, message->data_ ); + } + + + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + // RemoteMessagePtr serialization + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + + + Stream & operator <<( Stream &stream, const RemoteMessagePtr &message ) + { + message->serialize( stream ); + return stream; + } + + Stream & OPENTEST_API operator >>( Stream &stream, RemoteMessagePtr &message ) + { + message.reset(); + MessageId id; + stream >> id; + switch ( id ) + { + case driverMessageSetTestDescriptions: + unserializeSimpleRemoteMessage( stream, message, id, CppTL::Type<TestDescriptions>() ); + break; + case driverMessageSetDefaultTestPlan: + unserializeSimpleRemoteMessage( stream, message, id, CppTL::Type<TestPlan>() ); + break; + case driverMessageStartTesting: + unserializeSimpleRemoteMessage( stream, message, id, CppTL::Type<TestId>() ); + break; + case driverMessageAddResultLog: + unserializeTestIdRemoteMessage( stream, message, id, CppTL::Type<ResultLog>() ); + break; + case driverMessageAddResultAssertion: + unserializeTestIdRemoteMessage( stream, message, id, CppTL::Type<ResultAssertion>() ); + break; + case driverMessageSetResultInputActualOutput: + unserializeTestIdRemoteMessage( stream, message, id, CppTL::Type<ResultInputOutput>() ); + break; + case driverMessageSetTestResult: + unserializeTestIdRemoteMessage( stream, message, id, CppTL::Type<ResultStatus>() ); + break; + case driverMessageTestPlanDone: + unserializeSimpleRemoteMessage( stream, message, id, CppTL::Type<TestId>() ); + break; + case runnerMessageRunTests: + unserializeSimpleRemoteMessage( stream, message, id, CppTL::Type<TestPlan>() ); + break; + case runnerMessageGetTestDescriptions: + case runnerMessageGetTestPlans: + case runnerMessageStopTest: + unserializeRemoteMessage( message, id ); + break; + default: + stream.setError( "Bad message type." ); + break; + } + return stream; + } + + + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// // class MessageSender // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// ! void ! MessageSender::sendMessage( const RemoteMessagePtr &message ) { } *************** *** 38,46 **** // ////////////////////////////////////////////////////////////////// void ! TestDriverProxy::setTestDescriptions( TestDescriptions &tests ) { ! beginMessage( driverMessageSetTestDescriptions ); ! stream() << tests; ! sendMessage(); } --- 281,288 ---- // ////////////////////////////////////////////////////////////////// void ! TestDriverProxy::setTestDescriptions( const TestDescriptions &tests ) { ! sendMessage( makeSimpleRemoteMessage( driverMessageSetTestDescriptions, ! tests ) ); } *************** *** 48,54 **** TestDriverProxy::setDefaultTestPlan( const TestPlan &plan ) { ! beginMessage( driverMessageSetDefaultTestPlan ); ! stream() << plan; ! sendMessage(); } --- 290,295 ---- TestDriverProxy::setDefaultTestPlan( const TestPlan &plan ) { ! sendMessage( makeSimpleRemoteMessage( driverMessageSetDefaultTestPlan, ! plan ) ); } *************** *** 56,62 **** TestDriverProxy::startTesting( TestId testPlan ) { ! beginMessage( driverMessageStartTesting ); ! stream() << testPlan; ! sendMessage(); } --- 297,302 ---- TestDriverProxy::startTesting( TestId testPlan ) { ! sendMessage( makeSimpleRemoteMessage( driverMessageStartTesting, ! testPlan ) ); } *************** *** 66,72 **** const ResultLog &log ) { ! beginMessage( driverMessageAddResultLog ); ! stream() << testPlan << log; ! sendMessage(); } --- 306,312 ---- const ResultLog &log ) { ! sendMessage( makeTestIdRemoteMessage( driverMessageAddResultLog, ! testPlan, ! log ) ); } *************** *** 75,81 **** const ResultAssertion &assertion ) { ! beginMessage( driverMessageAddResultAssertion ); ! stream() << testPlan << assertion; ! sendMessage(); } --- 315,321 ---- const ResultAssertion &assertion ) { ! sendMessage( makeTestIdRemoteMessage( driverMessageAddResultAssertion, ! testPlan, ! assertion ) ); } *************** *** 84,99 **** const ResultInputOutput &output ) { ! beginMessage( driverMessageSetResultInputActualOutput ); ! stream() << testPlan << output; ! sendMessage(); } void TestDriverProxy::setTestResult( TestId testPlan, ! ResultStatus &status ) { ! beginMessage( driverMessageSetTestResult ); ! stream() << testPlan << status; ! sendMessage(); } --- 324,339 ---- const ResultInputOutput &output ) { ! sendMessage( makeTestIdRemoteMessage( driverMessageSetResultInputActualOutput, ! testPlan, ! output ) ); } void TestDriverProxy::setTestResult( TestId testPlan, ! const ResultStatus &status ) { ! sendMessage( makeTestIdRemoteMessage( driverMessageSetTestResult, ! testPlan, ! status ) ); } *************** *** 101,107 **** TestDriverProxy::testPlanDone( TestPlanId id ) { ! beginMessage( driverMessageTestPlanDone ); ! stream() << id; ! sendMessage(); } --- 341,346 ---- TestDriverProxy::testPlanDone( TestPlanId id ) { ! sendMessage( makeSimpleRemoteMessage( driverMessageTestPlanDone, ! id ) ); } *************** *** 114,185 **** void ! TestDriverServer::processMessageStream() { ! MessageId message; ! stream() >> message; ! switch ( message ) { case driverMessageSetTestDescriptions: ! { ! TestDescriptions tests; ! stream() >> tests; ! impl_->setTestDescriptions( tests ); ! } break; case driverMessageSetDefaultTestPlan: ! { ! TestPlan plan; ! stream() >> plan; ! impl_->setDefaultTestPlan( plan ); ! } break; case driverMessageStartTesting: ! { ! TestId testPlan; ! stream() >> testPlan; ! impl_->startTesting( testPlan ); ! } break; case driverMessageAddResultLog: ! { ! TestId testPlan; ! ResultLog log; ! stream() >> testPlan >> log; ! impl_->addResultLog( testPlan, log ); ! } break; case driverMessageAddResultAssertion: ! { ! TestId testPlan; ! ResultAssertion assertion; ! stream() >> testPlan >> assertion; ! impl_->addResultAssertion( testPlan, assertion ); ! } break; case driverMessageSetResultInputActualOutput: ! { ! TestId testPlan; ! ResultInputOutput output; ! stream() >> testPlan >> output; ! impl_->setResultInputActualOutput( testPlan, output ); ! } break; case driverMessageSetTestResult: ! { ! TestId testPlan; ! ResultStatus status; ! stream() >> testPlan >> status; ! impl_->setTestResult( testPlan, status ); ! } break; case driverMessageTestPlanDone: ! { ! TestId testPlan; ! stream() >> testPlan; ! impl_->testPlanDone( testPlan ); ! } break; default: ! stream().setError( "Bad message type." ); break; } --- 353,386 ---- void ! TestDriverServer::dispatchMessage( const RemoteMessagePtr &message ) { ! switch ( message->messageId_ ) { case driverMessageSetTestDescriptions: ! dispatchSimpleRemoteCall( message, impl_, &TestDriverInterface::setTestDescriptions ); break; case driverMessageSetDefaultTestPlan: ! dispatchSimpleRemoteCall( message, impl_, &TestDriverInterface::setDefaultTestPlan ); break; case driverMessageStartTesting: ! dispatchSimpleRemoteCallNoRef( message, impl_, &TestDriverInterface::startTesting ); break; case driverMessageAddResultLog: ! dispatchTestIdRemoteCall( message, impl_, &TestDriverInterface::addResultLog ); break; case driverMessageAddResultAssertion: ! dispatchTestIdRemoteCall( message, impl_, &TestDriverInterface::addResultAssertion ); break; case driverMessageSetResultInputActualOutput: ! dispatchTestIdRemoteCall( message, impl_, &TestDriverInterface::setResultInputActualOutput ); break; case driverMessageSetTestResult: ! dispatchTestIdRemoteCall( message, impl_, &TestDriverInterface::setTestResult ); break; case driverMessageTestPlanDone: ! dispatchSimpleRemoteCallNoRef( message, impl_, &TestDriverInterface::testPlanDone ); break; default: ! // ignore message => @todo add some error handling break; } *************** *** 195,206 **** TestRunnerProxy::getTestDescriptions() { ! beginMessage( runnerMessageGetTestDescriptions ); ! sendMessage(); } void TestRunnerProxy::getTestPlans() { ! beginMessage( runnerMessageGetTestPlans ); ! sendMessage(); } --- 396,406 ---- TestRunnerProxy::getTestDescriptions() { ! sendMessage( makeRemoteMessage( runnerMessageGetTestDescriptions ) ); } + void TestRunnerProxy::getTestPlans() { ! sendMessage( makeRemoteMessage( runnerMessageGetTestPlans ) ); } *************** *** 208,221 **** TestRunnerProxy::runTests( const TestPlan &plan ) { ! beginMessage( runnerMessageRunTests ); ! stream() << plan; ! sendMessage(); } void ! TestRunnerProxy::stopTest() { ! beginMessage( runnerMessageStopTest ); ! sendMessage(); } --- 408,447 ---- TestRunnerProxy::runTests( const TestPlan &plan ) { ! sendMessage( makeSimpleRemoteMessage( runnerMessageRunTests, plan ) ); } void ! TestRunnerProxy::stopTests() { ! sendMessage( makeRemoteMessage( runnerMessageStopTest ) ); ! } ! ! ! // ////////////////////////////////////////////////////////////////// ! // ////////////////////////////////////////////////////////////////// ! // class TestRunnerServer ! // ////////////////////////////////////////////////////////////////// ! // ////////////////////////////////////////////////////////////////// ! void ! TestRunnerServer::dispatchMessage( const RemoteMessagePtr &message ) ! { ! switch ( message->messageId_ ) ! { ! case runnerMessageGetTestDescriptions: ! dispatchRemoteCall( message, impl_, &TestRunnerInterface::getTestDescriptions ); ! break; ! case runnerMessageGetTestPlans: ! dispatchRemoteCall( message, impl_, &TestRunnerInterface::getTestPlans ); ! break; ! case runnerMessageRunTests: ! dispatchSimpleRemoteCall( message, impl_, &TestRunnerInterface::runTests ); ! break; ! case runnerMessageStopTest: ! dispatchRemoteCall( message, impl_, &TestRunnerInterface::stopTests ); ! break; ! default: ! // ignore message => @todo add some error handling ! break; ! } } |
From: Baptiste L. <bl...@us...> - 2005-06-25 11:08:14
|
Update of /cvsroot/cppunit/cppunit2/include/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15239/include/opentest Modified Files: remoteinterfaces.h Log Message: Separated serialization process from call dispatching. This allows the serialization to be done by the transport layer (in a single thread). RemoteMessage can be exchanged between thread safely. Index: remoteinterfaces.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/opentest/remoteinterfaces.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** remoteinterfaces.h 24 Jun 2005 20:12:02 -0000 1.1 --- remoteinterfaces.h 25 Jun 2005 11:08:05 -0000 1.2 *************** *** 3,6 **** --- 3,7 ---- # include <opentest/interfaces.h> + # include <cpptl/sharedptr.h> *************** *** 27,66 **** ! Stream & OPENTEST_API operator <<( Stream &stream, MessageId id ); ! Stream & OPENTEST_API operator >>( Stream &stream, MessageId &id ); - class MessageSender - { - public: - virtual ~MessageSender() - { - } ! Stream &stream() ! { ! CPPTL_ASSERT_MESSAGE( stream_ != 0, "No stream attached to remote proxy." ); ! return *stream_; ! } ! void beginMessage( MessageId message ); ! void sendMessage() { - // @todo } ! private: ! Stream *stream_; }; ! class TestDriverProxy : public TestDriverInterface ! , public MessageSender { public: // overridden from TestDriverInterface ! void setTestDescriptions( TestDescriptions &tests ); void setDefaultTestPlan( const TestPlan &plan ); --- 28,70 ---- ! class OPENTEST_API RemoteMessage ! { ! public: ! RemoteMessage(); ! RemoteMessage( MessageId id ); ! virtual ~RemoteMessage(); ! void serialize( Stream &stream ); + MessageId messageId_; + private: + virtual void doSerialize( Stream &stream ) {} + }; ! typedef CppTL::SharedPtr<RemoteMessage> RemoteMessagePtr; ! Stream & OPENTEST_API operator <<( Stream &stream, const RemoteMessagePtr &message ); ! Stream & OPENTEST_API operator >>( Stream &stream, RemoteMessagePtr &message ); ! ! ! class OPENTEST_API MessageSender ! { ! public: ! virtual ~MessageSender() { } ! void sendMessage( const RemoteMessagePtr &message ); }; ! class OPENTEST_API TestDriverProxy : public TestDriverInterface ! , public MessageSender { public: // overridden from TestDriverInterface ! void setTestDescriptions( const TestDescriptions &tests ); void setDefaultTestPlan( const TestPlan &plan ); *************** *** 75,107 **** void setResultInputActualOutput( TestId testPlan, ! const ResultInputOutput &output ); void setTestResult( TestId testPlan, ! ResultStatus &status ); ! void testPlanDone( TestPlanId id ); }; ! class MessageServer { public: ! virtual ~MessageServer() { } ! Stream &stream() ! { ! CPPTL_ASSERT_MESSAGE( stream_ != 0, "No stream attached to message sender." ); ! return *stream_; ! } private: - virtual void processMessageStream() = 0; - Stream *stream_; }; ! class TestDriverServer : public MessageServer { public: --- 79,105 ---- void setResultInputActualOutput( TestId testPlan, ! const ResultInputOutput &output ); void setTestResult( TestId testPlan, ! const ResultStatus &status ); ! void testPlanDone( TestId id ); }; ! class OPENTEST_API RemoteMessageServer { public: ! virtual ~RemoteMessageServer() { } ! virtual void dispatchMessage( const RemoteMessagePtr &message ) = 0; private: }; ! class OPENTEST_API TestDriverServer : public RemoteMessageServer { public: *************** *** 111,116 **** } ! public: // overridden from MessageServer ! void processMessageStream(); private: --- 109,114 ---- } ! public: // overridden from RemoteMessageServer ! void dispatchMessage( const RemoteMessagePtr &message ); private: *************** *** 119,124 **** ! class TestRunnerProxy : public TestRunnerInterface ! , public MessageSender { public: // overridden from TestRunnerInterface --- 117,122 ---- ! class OPENTEST_API TestRunnerProxy : public TestRunnerInterface ! , public MessageSender { public: // overridden from TestRunnerInterface *************** *** 129,133 **** void runTests( const TestPlan &plan ); ! void stopTest(); }; --- 127,147 ---- void runTests( const TestPlan &plan ); ! void stopTests(); ! }; ! ! ! class OPENTEST_API TestRunnerServer : public RemoteMessageServer ! { ! public: ! TestRunnerServer( TestRunnerInterface &impl ) ! : impl_( &impl ) ! { ! } ! ! public: // overridden from RemoteMessageServer ! void dispatchMessage( const RemoteMessagePtr &message ); ! ! private: ! TestRunnerInterface *impl_; }; |
From: Baptiste L. <bl...@us...> - 2005-06-25 11:06:06
|
Update of /cvsroot/cppunit/cppunit2/include/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14899/include/opentest Modified Files: interfaces.h Log Message: Fixed some missing pass by const ref methods. Index: interfaces.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/opentest/interfaces.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** interfaces.h 24 Jun 2005 19:43:22 -0000 1.1 --- interfaces.h 25 Jun 2005 11:05:55 -0000 1.2 *************** *** 31,35 **** virtual ~TestDriverInterface() {} ! virtual void setTestDescriptions( TestDescriptions &tests ) = 0; virtual void setDefaultTestPlan( const TestPlan &plan ) = 0; --- 31,35 ---- virtual ~TestDriverInterface() {} ! virtual void setTestDescriptions( const TestDescriptions &tests ) = 0; virtual void setDefaultTestPlan( const TestPlan &plan ) = 0; *************** *** 47,51 **** virtual void setTestResult( TestId testPlan, ! ResultStatus &status ) = 0; virtual void testPlanDone( TestPlanId id ) = 0; --- 47,51 ---- virtual void setTestResult( TestId testPlan, ! const ResultStatus &status ) = 0; virtual void testPlanDone( TestPlanId id ) = 0; |
From: Baptiste L. <bl...@us...> - 2005-06-24 20:13:18
|
Update of /cvsroot/cppunit/cppunit2/src/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30330/src/opentest Modified Files: SConscript Log Message: Updated Index: SConscript =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/opentest/SConscript,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** SConscript 5 Mar 2005 11:02:26 -0000 1.3 --- SConscript 24 Jun 2005 20:13:07 -0000 1.4 *************** *** 2,5 **** --- 2,8 ---- buildLibary( env, Split( """ + interfaces.cpp + remoteinterfaces.cpp + serializer.cpp texttestdriver.cpp """ ), |
From: Baptiste L. <bl...@us...> - 2005-06-24 20:12:14
|
Update of /cvsroot/cppunit/cppunit2/src/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29713/src/opentest Added Files: remoteinterfaces.cpp Log Message: Remote interface for TestRunner / TestDriver connection (serialize message) --- NEW FILE: remoteinterfaces.cpp --- #include <opentest/remoteinterfaces.h> #include <opentest/serializer.h> namespace OpenTest { Stream &operator <<( Stream &stream, MessageId id ) { return stream << (unsigned int)id; } Stream &operator >>( Stream &stream, MessageId &id ) { unsigned int mid; stream >> mid; id = MessageId(mid); return stream; } // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class MessageSender // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// void MessageSender::beginMessage( MessageId message ) { stream().startsWriteNewMessage(); stream() << message; } // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class TestDriverProxy // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// void TestDriverProxy::setTestDescriptions( TestDescriptions &tests ) { beginMessage( driverMessageSetTestDescriptions ); stream() << tests; sendMessage(); } void TestDriverProxy::setDefaultTestPlan( const TestPlan &plan ) { beginMessage( driverMessageSetDefaultTestPlan ); stream() << plan; sendMessage(); } void TestDriverProxy::startTesting( TestId testPlan ) { beginMessage( driverMessageStartTesting ); stream() << testPlan; sendMessage(); } void TestDriverProxy::addResultLog( TestId testPlan, const ResultLog &log ) { beginMessage( driverMessageAddResultLog ); stream() << testPlan << log; sendMessage(); } void TestDriverProxy::addResultAssertion( TestId testPlan, const ResultAssertion &assertion ) { beginMessage( driverMessageAddResultAssertion ); stream() << testPlan << assertion; sendMessage(); } void TestDriverProxy::setResultInputActualOutput( TestId testPlan, const ResultInputOutput &output ) { beginMessage( driverMessageSetResultInputActualOutput ); stream() << testPlan << output; sendMessage(); } void TestDriverProxy::setTestResult( TestId testPlan, ResultStatus &status ) { beginMessage( driverMessageSetTestResult ); stream() << testPlan << status; sendMessage(); } void TestDriverProxy::testPlanDone( TestPlanId id ) { beginMessage( driverMessageTestPlanDone ); stream() << id; sendMessage(); } // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class TestDriverServer // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// void TestDriverServer::processMessageStream() { MessageId message; stream() >> message; switch ( message ) { case driverMessageSetTestDescriptions: { TestDescriptions tests; stream() >> tests; impl_->setTestDescriptions( tests ); } break; case driverMessageSetDefaultTestPlan: { TestPlan plan; stream() >> plan; impl_->setDefaultTestPlan( plan ); } break; case driverMessageStartTesting: { TestId testPlan; stream() >> testPlan; impl_->startTesting( testPlan ); } break; case driverMessageAddResultLog: { TestId testPlan; ResultLog log; stream() >> testPlan >> log; impl_->addResultLog( testPlan, log ); } break; case driverMessageAddResultAssertion: { TestId testPlan; ResultAssertion assertion; stream() >> testPlan >> assertion; impl_->addResultAssertion( testPlan, assertion ); } break; case driverMessageSetResultInputActualOutput: { TestId testPlan; ResultInputOutput output; stream() >> testPlan >> output; impl_->setResultInputActualOutput( testPlan, output ); } break; case driverMessageSetTestResult: { TestId testPlan; ResultStatus status; stream() >> testPlan >> status; impl_->setTestResult( testPlan, status ); } break; case driverMessageTestPlanDone: { TestId testPlan; stream() >> testPlan; impl_->testPlanDone( testPlan ); } break; default: stream().setError( "Bad message type." ); break; } } // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class TestRunnerProxy // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// void TestRunnerProxy::getTestDescriptions() { beginMessage( runnerMessageGetTestDescriptions ); sendMessage(); } void TestRunnerProxy::getTestPlans() { beginMessage( runnerMessageGetTestPlans ); sendMessage(); } void TestRunnerProxy::runTests( const TestPlan &plan ) { beginMessage( runnerMessageRunTests ); stream() << plan; sendMessage(); } void TestRunnerProxy::stopTest() { beginMessage( runnerMessageStopTest ); sendMessage(); } } // namespace OpenTest |
From: Baptiste L. <bl...@us...> - 2005-06-24 20:12:10
|
Update of /cvsroot/cppunit/cppunit2/include/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29713/include/opentest Added Files: remoteinterfaces.h Log Message: Remote interface for TestRunner / TestDriver connection (serialize message) --- NEW FILE: remoteinterfaces.h --- #ifndef OPENTEST_REMOTEINTERFACES_H_INCLUDED # define OPENTEST_REMOTEINTERFACES_H_INCLUDED # include <opentest/interfaces.h> namespace OpenTest { enum MessageId { driverMessageSetTestDescriptions = 1, minMessageId = driverMessageSetTestDescriptions, driverMessageSetDefaultTestPlan, driverMessageStartTesting, driverMessageAddResultLog, driverMessageAddResultAssertion, driverMessageSetResultInputActualOutput, driverMessageSetTestResult, driverMessageTestPlanDone, runnerMessageGetTestDescriptions, runnerMessageGetTestPlans, runnerMessageRunTests, runnerMessageStopTest, maxMessageId = runnerMessageStopTest }; Stream & OPENTEST_API operator <<( Stream &stream, MessageId id ); Stream & OPENTEST_API operator >>( Stream &stream, MessageId &id ); class MessageSender { public: virtual ~MessageSender() { } Stream &stream() { CPPTL_ASSERT_MESSAGE( stream_ != 0, "No stream attached to remote proxy." ); return *stream_; } void beginMessage( MessageId message ); void sendMessage() { // @todo } private: Stream *stream_; }; class TestDriverProxy : public TestDriverInterface , public MessageSender { public: // overridden from TestDriverInterface void setTestDescriptions( TestDescriptions &tests ); void setDefaultTestPlan( const TestPlan &plan ); void startTesting( TestId testPlan ); void addResultLog( TestId testPlan, const ResultLog &log ); void addResultAssertion( TestId testPlan, const ResultAssertion &assertion ); void setResultInputActualOutput( TestId testPlan, const ResultInputOutput &output ); void setTestResult( TestId testPlan, ResultStatus &status ); void testPlanDone( TestPlanId id ); }; class MessageServer { public: virtual ~MessageServer() { } Stream &stream() { CPPTL_ASSERT_MESSAGE( stream_ != 0, "No stream attached to message sender." ); return *stream_; } private: virtual void processMessageStream() = 0; Stream *stream_; }; class TestDriverServer : public MessageServer { public: TestDriverServer( TestDriverInterface &impl ) : impl_( &impl ) { } public: // overridden from MessageServer void processMessageStream(); private: TestDriverInterface *impl_; }; class TestRunnerProxy : public TestRunnerInterface , public MessageSender { public: // overridden from TestRunnerInterface void getTestDescriptions(); void getTestPlans(); void runTests( const TestPlan &plan ); void stopTest(); }; } // namespace OpenTest #endif // OPENTEST_REMOTEINTERFACES_H_INCLUDED |
From: Baptiste L. <bl...@us...> - 2005-06-24 19:51:37
|
Update of /cvsroot/cppunit/cppunit2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20584 Modified Files: sconstruct Log Message: added rough support to build qt 4.0 application. Index: sconstruct =================================================================== RCS file: /cvsroot/cppunit/cppunit2/sconstruct,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** sconstruct 6 Mar 2005 21:44:18 -0000 1.12 --- sconstruct 24 Jun 2005 19:51:28 -0000 1.13 *************** *** 53,67 **** for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: env.Tool( tool ) ! env['CXXFLAGS']='-GR -GX' elif platform == 'msvc70': env['MSVS_VERSION']='7.0' for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: env.Tool( tool ) ! env['CXXFLAGS']='-GR -GX' elif platform == 'msvc71': env['MSVS_VERSION']='7.1' for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: env.Tool( tool ) ! env['CXXFLAGS']='-GR -GX' elif platform == 'mingw': env.Tool( 'mingw' ) --- 53,67 ---- for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: env.Tool( tool ) ! env['CXXFLAGS']='-GR -GX /nologo' elif platform == 'msvc70': env['MSVS_VERSION']='7.0' for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: env.Tool( tool ) ! env['CXXFLAGS']='-GR -GX /nologo' elif platform == 'msvc71': env['MSVS_VERSION']='7.1' for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: env.Tool( tool ) ! env['CXXFLAGS']='-GR -GX /nologo' elif platform == 'mingw': env.Tool( 'mingw' ) *************** *** 95,99 **** buildCppUnitExample( env, target_sources, target_name ) ! Export( 'env env_testing buildCppUnitExample buildLibary buildLibraryUnitTest' ) def buildProjectInDirectory( target_directory ): --- 95,116 ---- buildCppUnitExample( env, target_sources, target_name ) ! def buildQTApplication( env, ui_sources, target_sources, target_name ): ! env = env.Copy() ! env.Replace( QT_MOCCXXSUFFIX = 'cpp' ) # doesn't work ! qt_tool = Tool('qt') ! qt_tool( env ) ! extra_include_dir = [] ! for ui_source in ui_sources: ! ui_target = "ui_" + os.path.splitext( ui_source)[0] + ".h" ! env.Uic( target = ui_target, source = ui_source ) ! if not extra_include_dir: ! extra_include_dir = [ os.path.split( env.File( ui_target ).abspath ) [0] ] ! env.Append( CPPPATH = extra_include_dir ) ! exe = env.Program( target=target_name, ! source=target_sources ) ! global bin_dir ! env.Install( bin_dir, exe ) ! ! Export( 'env env_testing buildCppUnitExample buildLibary buildLibraryUnitTest buildQTApplication' ) def buildProjectInDirectory( target_directory ): *************** *** 110,111 **** --- 127,129 ---- buildProjectInDirectory( 'examples/parametrized_test' ) buildProjectInDirectory( 'examples/checking_assertions' ) + #buildProjectInDirectory( 'src/qttestdriver' ) |
From: Baptiste L. <bl...@us...> - 2005-06-24 19:50:06
|
Update of /cvsroot/cppunit/cppunit2/src/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19750/src/cpput Modified Files: cpput.vcproj Log Message: Updated. Index: cpput.vcproj =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/cpput.vcproj,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** cpput.vcproj 6 Mar 2005 18:48:23 -0000 1.31 --- cpput.vcproj 24 Jun 2005 19:49:58 -0000 1.32 *************** *** 235,238 **** --- 235,244 ---- RelativePath="..\cpptl\thread.cpp"> <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> + <FileConfiguration Name="Debug|Win32"> <Tool *************** *** 264,267 **** --- 270,279 ---- </File> <File + RelativePath="..\opentest\interfaces.cpp"> + </File> + <File + RelativePath="..\..\include\opentest\interfaces.h"> + </File> + <File RelativePath=".\properties.cpp"> </File> *************** *** 270,276 **** --- 282,300 ---- </File> <File + RelativePath="..\opentest\remoteinterfaces.cpp"> + </File> + <File + RelativePath="..\..\include\opentest\remoteinterfaces.h"> + </File> + <File RelativePath="..\..\include\opentest\resourcelist.h"> </File> <File + RelativePath="..\opentest\serializer.cpp"> + </File> + <File + RelativePath="..\..\include\opentest\serializer.h"> + </File> + <File RelativePath="..\..\include\opentest\testplan.h"> </File> |
From: Baptiste L. <bl...@us...> - 2005-06-24 19:48:31
|
Update of /cvsroot/cppunit/cppunit2/include/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18965/opentest Modified Files: forwards.h Log Message: updated, added TestId and TestPlanId. Index: forwards.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/opentest/forwards.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** forwards.h 28 Feb 2005 20:51:25 -0000 1.4 --- forwards.h 24 Jun 2005 19:48:23 -0000 1.5 *************** *** 20,23 **** --- 20,34 ---- class ValueBadCast; + class ResultAssertion; + class ResultInputOutput; + class ResultLog; + class ResultStatus; + class Stream; + class TestDescriptions; + class TestPlan; + + typedef unsigned int TestId; + typedef unsigned int TestPlanId; + typedef CppTL::ConstString String; |