diff options
| author | Baptiste Lepilleur <gaiacrtn@free.fr> | 2002-06-14 19:21:01 +0000 |
|---|---|---|
| committer | Baptiste Lepilleur <gaiacrtn@free.fr> | 2002-06-14 19:21:01 +0000 |
| commit | 73a038f1eaa268cec330d971fb550befec6f7798 (patch) | |
| tree | c3eba5d793e37413889acad5b0b9f70caf89b0f6 /examples/ClockerPlugIn/ClockerModel.cpp | |
| parent | f39e160fba25476de7d41e2f19d756db7ee76dc7 (diff) | |
| download | cppunit-73a038f1eaa268cec330d971fb550befec6f7798.tar.gz | |
Include/cppunit/plugin/PlugInManager.
include/cppunit/plugin/PlugInManager.h:
* src/cppunit/PlugInManager.cpp: added two methods to use the plug-in
interface for Xml Outputter hooks.
* include/cppunit/plugin/TestPlugIn.h: added two methods to the plug-in
interface for Xml Outputter hooks.
* include/cppunit/plugin/TestPlugInAdapter.h:
* src/cppunit/plugin/TestPlugInAdapter.cpp: renamed TestPlugInDefaultImpl.
Added empty implementation for Xml outputter hook methods.
* include/cppunit/tools/StringTools.h:
* src/cppunit/tools/StringTools.cpp: added. Functions to manipulate string
(conversion, wrapping...)
* include/cppunit/tools/XmlElement.h:
* src/cppunit/XmlElement.cpp: renamed addNode() to addElement(). Added
methods to walk and modify XmlElement (for hook). Added documentation.
Use StringTools.
* include/cppunit/XmlOutputter.h:
* src/cppunit/XmlOutputter.cpp: added hook calls & management.
* include/cppunit/XmlOutputterHook.h:
* src/cppunit/XmlOutputterHook.cpp: added. Hook to customize XML output.
* src/DllPlugInTester/DllPlugInTester.cpp: call plug-in XmlOutputterHook
when writing XML output. Modified so that memory is freed before
unloading the test plug-in (caused crash when freeing the XmlDocument).
* examples/ReadMe.txt:
* examples/ClockerPlugIn/ReadMe.txt: added details about the plug-in
(usage, xml content...)
* examples/ClockerPlugIn/ClockerModel.h:
* examples/ClockerPlugIn/ClockerModel.cpp: extracted from ClockerListener.
Represents the test hierarchy and tracked time for each test.
* examples/ClockerPlugIn/ClockerListener.h:
* examples/ClockerPlugIn/ClockerListener.cpp: extracted test hierarchy
tracking to ClockerModel. Replaced the 'flat' view option with a 'text'
option to print the timed test tree to stdout.
* examples/ClockerPlugIn/ClockerPlugIn.cpp: updated to hook the XML
output and use the new classes.
* examples/ClockerPlugIn/ClockerXmlHook.h:
* examples/ClockerPlugIn/ClockerXmlHook.cpp: added. XmlOutputterHook to
includes the timed test hierarchy and test timing in the XML output.
* examples/cppunittest/XmlElementTest.h:
* examples/cppunittest/XmlElementTest.cpp: added new test cases.
* examples/cppunittest/XmlOutputterTest.h:
* examples/cppunittest/XmlOutputterTest.cpp: added tests for
XmlOutputterHook.
Diffstat (limited to 'examples/ClockerPlugIn/ClockerModel.cpp')
| -rw-r--r-- | examples/ClockerPlugIn/ClockerModel.cpp | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/examples/ClockerPlugIn/ClockerModel.cpp b/examples/ClockerPlugIn/ClockerModel.cpp new file mode 100644 index 0000000..60e87ad --- /dev/null +++ b/examples/ClockerPlugIn/ClockerModel.cpp @@ -0,0 +1,145 @@ +// ////////////////////////////////////////////////////////////////////////// +// Implementation file ClockerModel.cpp for class ClockerModel +// (c)Copyright 2000, Baptiste Lepilleur. +// Created: 2002/06/14 +// ////////////////////////////////////////////////////////////////////////// +#include "ClockerModel.h" + + +ClockerModel::ClockerModel() + : m_testCaseCount( 0 ) + , m_totalTestCaseTime( 0 ) +{ +} + + +ClockerModel::~ClockerModel() +{ +} + + +void +ClockerModel::setExpectedTestCount( int count ) +{ + m_tests.reserve( count ); +} + + +void +ClockerModel::enterTest( CppUnit::Test *test, + bool isSuite ) +{ + m_currentPath.add( test ); + + int testIndex = m_tests.size(); + if ( !m_testIndexes.empty() ) + m_tests[ m_testIndexes.top() ].m_childIndexes.push_back( testIndex ); + m_testIndexes.push( testIndex ); + m_testToIndexes.insert( TestToIndexes::value_type( test, testIndex ) ); + + TestInfo info; + info.m_timer.start(); + info.m_path = m_currentPath; + info.m_isSuite = isSuite; + + m_tests.push_back( info ); + + if ( !isSuite ) + ++m_testCaseCount; +} + + +void +ClockerModel::exitTest( CppUnit::Test *test, + bool isSuite ) +{ + m_tests[ m_testIndexes.top() ].m_timer.finish(); + if ( !isSuite ) + m_totalTestCaseTime += m_tests.back().m_timer.elapsedTime(); + + m_currentPath.up(); + m_testIndexes.pop(); +} + + +double +ClockerModel::totalElapsedTime() const +{ + return m_tests[0].m_timer.elapsedTime(); +} + + +double +ClockerModel::averageTestCaseTime() const +{ + double average = 0; + if ( m_testCaseCount > 0 ) + average = m_totalTestCaseTime / m_testCaseCount; + return average; +} + + +double +ClockerModel::testTimeFor( int testIndex ) const +{ + return m_tests[ testIndex ].m_timer.elapsedTime(); +} + + +std::string +ClockerModel::timeStringFor( double time ) +{ + char buffer[320]; + const char *format; + if ( time < 1 ) + format = "%2.3f"; + else if ( time < 10 ) + format = "%3.2f"; + else if (time < 100 ) + format = "%4.1f"; + else + format = "%6f"; + + ::sprintf( buffer, format, time ); + + return buffer; +} + + +bool +ClockerModel::isSuite( int testIndex ) const +{ + return m_tests[ testIndex ].m_isSuite; +} + + +const CppUnit::TestPath & +ClockerModel::testPathFor( int testIndex ) const +{ + return m_tests[ testIndex ].m_path; +} + + +int +ClockerModel::indexOf( CppUnit::Test *test ) const +{ + TestToIndexes::const_iterator itFound = m_testToIndexes.find( test ); + if ( itFound != m_testToIndexes.end() ) + return itFound->second; + return -1; +} + + +int +ClockerModel::childCountFor( int testIndex ) const +{ + return m_tests[ testIndex ].m_childIndexes.size(); +} + + +int +ClockerModel::childAtFor( int testIndex, + int chidIndex ) const +{ + return m_tests[ testIndex ].m_childIndexes[ chidIndex ]; +} |
