⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testpath.cpp

📁 这是国外的resip协议栈
💻 CPP
字号:
#include <cppunit/Portability.h>#include <cppunit/Test.h>#include <cppunit/TestPath.h>#include <stdexcept>CPPUNIT_NS_BEGINTestPath::TestPath(){}TestPath::TestPath( Test *root ){  add( root );}TestPath::TestPath( const TestPath &other,                     int indexFirst,                     int count ){  int countAdjustment = 0;  if ( indexFirst < 0 )  {    countAdjustment = indexFirst;    indexFirst = 0;  }  if ( count < 0 )    count = other.getTestCount();  else    count += countAdjustment;  int index = indexFirst;  while ( count-- > 0  &&  index < other.getTestCount() )    add( other.getTestAt( index++ ) );}TestPath::TestPath( Test *searchRoot,                     const std::string &pathAsString ){  PathTestNames testNames;  Test *parentTest = findActualRoot( searchRoot, pathAsString, testNames );  add( parentTest );  for ( unsigned int index = 1; index < testNames.size(); ++index )  {    bool childFound = false;    for ( int childIndex =0; childIndex < parentTest->getChildTestCount(); ++childIndex )    {      if ( parentTest->getChildTestAt( childIndex )->getName() == testNames[index] )      {        childFound = true;        parentTest = parentTest->getChildTestAt( childIndex );        break;      }    }    if ( !childFound )      throw std::invalid_argument( "TestPath::TestPath(): failed to resolve test name <"+                                   testNames[index] + "> of path <" + pathAsString + ">" );    add( parentTest );  }}TestPath::TestPath( const TestPath &other )  : m_tests( other.m_tests ){}TestPath::~TestPath(){}TestPath &TestPath::operator =( const TestPath &other ){  if ( &other != this )    m_tests = other.m_tests;  return *this;}bool TestPath::isValid() const{  return getTestCount() > 0;}void TestPath::add( Test *test ){  m_tests.push_back( test );}void TestPath::add( const TestPath &path ){  for ( int index =0; index < path.getTestCount(); ++index )    add( path.getTestAt( index ) );}void TestPath::insert( Test *test,                   int index ){  if ( index < 0  ||  index > getTestCount() )    throw std::out_of_range( "TestPath::insert(): index out of range" );  m_tests.insert( m_tests.begin() + index, test );}void TestPath::insert( const TestPath &path,                   int index ){  int itemIndex = path.getTestCount() -1;  while ( itemIndex >= 0 )    insert( path.getTestAt( itemIndex-- ), index );}void TestPath::removeTests(){  while ( isValid() )    removeTest( 0 );}void TestPath::removeTest( int index ){  checkIndexValid( index );  m_tests.erase( m_tests.begin() + index );}void TestPath::up(){  checkIndexValid( 0 );  removeTest( getTestCount() -1 );}int TestPath::getTestCount() const{  return m_tests.size();}Test *TestPath::getTestAt( int index ) const{  checkIndexValid( index );  return m_tests[index];}Test *TestPath::getChildTest() const{  return getTestAt( getTestCount() -1 );}void TestPath::checkIndexValid( int index ) const{  if ( index < 0  ||  index >= getTestCount() )    throw std::out_of_range( "TestPath::checkIndexValid(): index out of range" );}std::string TestPath::toString() const{  std::string asString( "/" );  for ( int index =0; index < getTestCount(); ++index )  {    if ( index > 0 )      asString += '/';    asString += getTestAt(index)->getName();  }  return asString;}Test *TestPath::findActualRoot( Test *searchRoot,                          const std::string &pathAsString,                          PathTestNames &testNames ){  bool isRelative = splitPathString( pathAsString, testNames );  if ( isRelative  &&  pathAsString.empty() )    return searchRoot;  if ( testNames.empty() )    throw std::invalid_argument( "TestPath::TestPath(): invalid root or root name in absolute path" );  Test *root = isRelative ? searchRoot->findTest( testNames[0] )  // throw if bad test name                          : searchRoot;  if ( root->getName() != testNames[0] )    throw std::invalid_argument( "TestPath::TestPath(): searchRoot does not match path root name" );  return root;}boolTestPath::splitPathString( const std::string &pathAsString,                           PathTestNames &testNames ){  if ( pathAsString.empty() )    return true;  bool isRelative = pathAsString[0] != '/';  int index = (isRelative ? 0 : 1);  while ( true )  {    int separatorIndex = pathAsString.find( '/', index );    if ( separatorIndex >= 0 )    {      testNames.push_back( pathAsString.substr( index, separatorIndex - index ) );      index = separatorIndex + 1;    }    else    {      testNames.push_back( pathAsString.substr( index ) );      break;    }  }  return isRelative;}  CPPUNIT_NS_END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -