*/
std::string findDataFile(const std::string& relative_path, bool required = true);
+/*! @brief Try to find requested data directory
+@sa findDataFile
+ */
+std::string findDataDirectory(const std::string& relative_path, bool required = true);
+
#ifndef __CV_TEST_EXEC_ARGS
#if defined(_MSC_VER) && (_MSC_VER <= 1400)
TS::ptr()->data_search_subdir.push_back(subdir);
}
-std::string findDataFile(const std::string& relative_path, bool required)
+static std::string findData(const std::string& relative_path, bool required, bool findDirectory)
{
#define TEST_TRY_FILE_WITH_PREFIX(prefix) \
{ \
std::string path = path_join(prefix, relative_path); \
/*printf("Trying %s\n", path.c_str());*/ \
- FILE* f = fopen(path.c_str(), "rb"); \
- if(f) { \
- fclose(f); \
- return path; \
+ if (findDirectory) \
+ { \
+ if (isDirectory(path)) \
+ return path; \
+ } \
+ else \
+ { \
+ FILE* f = fopen(path.c_str(), "rb"); \
+ if(f) { \
+ fclose(f); \
+ return path; \
+ } \
} \
}
}
#endif
#endif
+ const char* type = findDirectory ? "directory" : "data file";
if (required)
- CV_Error(cv::Error::StsError, cv::format("OpenCV tests: Can't find required data file: %s", relative_path.c_str()));
- throw SkipTestException(cv::format("OpenCV tests: Can't find data file: %s", relative_path.c_str()));
+ CV_Error(cv::Error::StsError, cv::format("OpenCV tests: Can't find required %s: %s", type, relative_path.c_str()));
+ throw SkipTestException(cv::format("OpenCV tests: Can't find %s: %s", type, relative_path.c_str()));
+}
+
+std::string findDataFile(const std::string& relative_path, bool required)
+{
+ return findData(relative_path, required, false);
}
+std::string findDataDirectory(const std::string& relative_path, bool required)
+{
+ return findData(relative_path, required, true);
+}
} //namespace cvtest