diff --git a/tests/testutils.cpp b/tests/testutils.cpp index 30e2c82..1cb429c 100644 --- a/tests/testutils.cpp +++ b/tests/testutils.cpp @@ -165,7 +165,7 @@ string TestApplication::testFilePath(const string &name) const * \brief Returns the full path to a working copy of the test file with the specified \a name. * \remarks Currently only available under UNIX. */ -string TestApplication::workingCopyPath(const string &name) const +string TestApplication::workingCopyPathMode(const string &name, WorkingCopyMode mode) const { // create file streams fstream origFile, workingCopy; @@ -200,19 +200,28 @@ string TestApplication::workingCopyPath(const string &name) const } // copy file - try { - origFile.open(testFilePath(name), ios_base::in | ios_base::binary); - const string path = m_workingDir + name; - workingCopy.open(path, ios_base::out | ios_base::binary | ios_base::trunc); - workingCopy << origFile.rdbuf(); - return path; - } catch(...) { - catchIoFailure(); - cerr << "Unable to create working copy for \"" << name << "\": an IO error occured." << endl; + if(mode != WorkingCopyMode::NoCopy) { + try { + origFile.open(testFilePath(name), ios_base::in | ios_base::binary); + const string path = m_workingDir + name; + workingCopy.open(path, ios_base::out | ios_base::binary | ios_base::trunc); + workingCopy << origFile.rdbuf(); + return path; + } catch(...) { + catchIoFailure(); + cerr << "Unable to create working copy for \"" << name << "\": an IO error occured." << endl; + } + } else { + return m_workingDir + name; } return string(); } +string TestApplication::workingCopyPath(const string &name) const +{ + return workingCopyPathMode(name, WorkingCopyMode::CreateCopy); +} + /*! * \brief Executes the application to be tested with the specified \a args and stores the standard output and * errors in \a stdout and \a stderr. diff --git a/tests/testutils.h b/tests/testutils.h index 2d958bf..5637824 100644 --- a/tests/testutils.h +++ b/tests/testutils.h @@ -8,6 +8,15 @@ namespace TestUtilities { +/*! + * \brief The WorkingCopyMode enum specifies additional options to influence behavior of TestApplication::workingCopyPathMode(). + */ +enum class WorkingCopyMode +{ + CreateCopy, /**< a working copy of the test file is created */ + NoCopy /**< only the directory for the working copy is created but not the test file itself */ +}; + class CPP_UTILITIES_EXPORT TestApplication { public: @@ -17,6 +26,7 @@ public: operator bool() const; std::string testFilePath(const std::string &name) const; #ifdef PLATFORM_UNIX + std::string workingCopyPathMode(const std::string &name, WorkingCopyMode mode) const; std::string workingCopyPath(const std::string &name) const; int execApp(const char *const *args, std::string &output, std::string &errors, bool suppressLogging = false, int timeout = -1) const; #endif @@ -95,6 +105,16 @@ inline CPP_UTILITIES_EXPORT std::string workingCopyPath(const std::string &name) return TestApplication::instance()->workingCopyPath(name); } +/*! + * \brief Convenience function which returns the full path to a working copy of the test file with the specified \a name. + * \remarks A TestApplication must be present. + * \sa TestApplication::workingCopyPathEx() + */ +inline CPP_UTILITIES_EXPORT std::string workingCopyPathMode(const std::string &name, WorkingCopyMode mode) +{ + return TestApplication::instance()->workingCopyPathMode(name, mode); +} + /*! * \brief Convenience function which executes the application to be tested with the specified \a args. * \remarks A TestApplication must be present.