Merge pull request #15998 from alalek:ts_count_skip_exception
This commit is contained in:
commit
873250f5de
@ -180,12 +180,21 @@ using testing::tuple_size;
|
|||||||
using testing::tuple_element;
|
using testing::tuple_element;
|
||||||
|
|
||||||
|
|
||||||
class SkipTestException: public cv::Exception
|
namespace details {
|
||||||
|
class SkipTestExceptionBase: public cv::Exception
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SkipTestExceptionBase(bool handlingTags);
|
||||||
|
SkipTestExceptionBase(const cv::String& message, bool handlingTags);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class SkipTestException: public details::SkipTestExceptionBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int dummy; // workaround for MacOSX Xcode 7.3 bug (don't make class "empty")
|
int dummy; // workaround for MacOSX Xcode 7.3 bug (don't make class "empty")
|
||||||
SkipTestException() : dummy(0) {}
|
SkipTestException() : details::SkipTestExceptionBase(false), dummy(0) {}
|
||||||
SkipTestException(const cv::String& message) : dummy(0) { this->msg = message; }
|
SkipTestException(const cv::String& message) : details::SkipTestExceptionBase(message, false), dummy(0) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Apply tag to the current test
|
/** Apply tag to the current test
|
||||||
|
|||||||
@ -16,6 +16,9 @@ extern int testThreads;
|
|||||||
|
|
||||||
void testSetUp();
|
void testSetUp();
|
||||||
void testTearDown();
|
void testTearDown();
|
||||||
|
|
||||||
|
bool checkBigDataTests();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for required "opencv_test" namespace
|
// check for required "opencv_test" namespace
|
||||||
@ -37,7 +40,7 @@ void testTearDown();
|
|||||||
Body(); \
|
Body(); \
|
||||||
CV__TEST_CLEANUP \
|
CV__TEST_CLEANUP \
|
||||||
} \
|
} \
|
||||||
catch (const cvtest::SkipTestException& e) \
|
catch (const cvtest::details::SkipTestExceptionBase& e) \
|
||||||
{ \
|
{ \
|
||||||
printf("[ SKIP ] %s\n", e.what()); \
|
printf("[ SKIP ] %s\n", e.what()); \
|
||||||
} \
|
} \
|
||||||
@ -74,9 +77,8 @@ void testTearDown();
|
|||||||
|
|
||||||
#define CV__TEST_BIGDATA_BODY_IMPL(name) \
|
#define CV__TEST_BIGDATA_BODY_IMPL(name) \
|
||||||
{ \
|
{ \
|
||||||
if (!cvtest::runBigDataTests) \
|
if (!cvtest::checkBigDataTests()) \
|
||||||
{ \
|
{ \
|
||||||
printf("[ SKIP ] BigData tests are disabled\n"); \
|
|
||||||
return; \
|
return; \
|
||||||
} \
|
} \
|
||||||
CV__TRACE_APP_FUNCTION_NAME(name); \
|
CV__TRACE_APP_FUNCTION_NAME(name); \
|
||||||
@ -85,7 +87,7 @@ void testTearDown();
|
|||||||
Body(); \
|
Body(); \
|
||||||
CV__TEST_CLEANUP \
|
CV__TEST_CLEANUP \
|
||||||
} \
|
} \
|
||||||
catch (const cvtest::SkipTestException& e) \
|
catch (const cvtest::details::SkipTestExceptionBase& e) \
|
||||||
{ \
|
{ \
|
||||||
printf("[ SKIP ] %s\n", e.what()); \
|
printf("[ SKIP ] %s\n", e.what()); \
|
||||||
} \
|
} \
|
||||||
|
|||||||
@ -386,7 +386,7 @@ public:
|
|||||||
static enum PERF_STRATEGY getCurrentModulePerformanceStrategy();
|
static enum PERF_STRATEGY getCurrentModulePerformanceStrategy();
|
||||||
static enum PERF_STRATEGY setModulePerformanceStrategy(enum PERF_STRATEGY strategy);
|
static enum PERF_STRATEGY setModulePerformanceStrategy(enum PERF_STRATEGY strategy);
|
||||||
|
|
||||||
class PerfSkipTestException: public cv::Exception
|
class PerfSkipTestException: public cvtest::SkipTestException
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int dummy; // workaround for MacOSX Xcode 7.3 bug (don't make class "empty")
|
int dummy; // workaround for MacOSX Xcode 7.3 bug (don't make class "empty")
|
||||||
@ -531,7 +531,7 @@ void PrintTo(const Size& sz, ::std::ostream* os);
|
|||||||
::cvtest::testSetUp(); \
|
::cvtest::testSetUp(); \
|
||||||
RunPerfTestBody(); \
|
RunPerfTestBody(); \
|
||||||
} \
|
} \
|
||||||
catch (cvtest::SkipTestException& e) \
|
catch (cvtest::details::SkipTestExceptionBase& e) \
|
||||||
{ \
|
{ \
|
||||||
printf("[ SKIP ] %s\n", e.what()); \
|
printf("[ SKIP ] %s\n", e.what()); \
|
||||||
} \
|
} \
|
||||||
|
|||||||
@ -125,6 +125,20 @@ bool required_opencv_test_namespace = false; // compilation check for non-refac
|
|||||||
namespace cvtest
|
namespace cvtest
|
||||||
{
|
{
|
||||||
|
|
||||||
|
details::SkipTestExceptionBase::SkipTestExceptionBase(bool handlingTags)
|
||||||
|
{
|
||||||
|
if (!handlingTags)
|
||||||
|
{
|
||||||
|
testTagIncreaseSkipCount("skip_other", true, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
details::SkipTestExceptionBase::SkipTestExceptionBase(const cv::String& message, bool handlingTags)
|
||||||
|
{
|
||||||
|
if (!handlingTags)
|
||||||
|
testTagIncreaseSkipCount("skip_other", true, true);
|
||||||
|
this->msg = message;
|
||||||
|
}
|
||||||
|
|
||||||
uint64 param_seed = 0x12345678; // real value is passed via parseCustomOptions function
|
uint64 param_seed = 0x12345678; // real value is passed via parseCustomOptions function
|
||||||
|
|
||||||
static std::string path_join(const std::string& prefix, const std::string& subpath)
|
static std::string path_join(const std::string& prefix, const std::string& subpath)
|
||||||
@ -850,6 +864,17 @@ void testTearDown()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool checkBigDataTests()
|
||||||
|
{
|
||||||
|
if (!runBigDataTests)
|
||||||
|
{
|
||||||
|
testTagIncreaseSkipCount("skip_bigdata", true, true);
|
||||||
|
printf("[ SKIP ] BigData tests are disabled\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void parseCustomOptions(int argc, char **argv)
|
void parseCustomOptions(int argc, char **argv)
|
||||||
{
|
{
|
||||||
const string command_line_keys = string(
|
const string command_line_keys = string(
|
||||||
|
|||||||
@ -2003,16 +2003,16 @@ void TestBase::RunPerfTestBody()
|
|||||||
implConf.GetImpl();
|
implConf.GetImpl();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
catch(const SkipTestException&)
|
|
||||||
{
|
|
||||||
metrics.terminationReason = performance_metrics::TERM_SKIP_TEST;
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
catch(const PerfSkipTestException&)
|
catch(const PerfSkipTestException&)
|
||||||
{
|
{
|
||||||
metrics.terminationReason = performance_metrics::TERM_SKIP_TEST;
|
metrics.terminationReason = performance_metrics::TERM_SKIP_TEST;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
catch(const cvtest::details::SkipTestExceptionBase&)
|
||||||
|
{
|
||||||
|
metrics.terminationReason = performance_metrics::TERM_SKIP_TEST;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
catch(const PerfEarlyExitException&)
|
catch(const PerfEarlyExitException&)
|
||||||
{
|
{
|
||||||
metrics.terminationReason = performance_metrics::TERM_INTERRUPT;
|
metrics.terminationReason = performance_metrics::TERM_INTERRUPT;
|
||||||
|
|||||||
@ -23,8 +23,10 @@ static std::map<std::string, int>& getTestTagsSkipExtraCounts()
|
|||||||
static std::map<std::string, int> testTagsSkipExtraCounts;
|
static std::map<std::string, int> testTagsSkipExtraCounts;
|
||||||
return testTagsSkipExtraCounts;
|
return testTagsSkipExtraCounts;
|
||||||
}
|
}
|
||||||
static void increaseTagsSkipCount(const std::string& tag, bool isMain)
|
void testTagIncreaseSkipCount(const std::string& tag, bool isMain, bool appendSkipTests)
|
||||||
{
|
{
|
||||||
|
if (appendSkipTests)
|
||||||
|
skipped_tests.push_back(::testing::UnitTest::GetInstance()->current_test_info());
|
||||||
std::map<std::string, int>& counts = isMain ? getTestTagsSkipCounts() : getTestTagsSkipExtraCounts();
|
std::map<std::string, int>& counts = isMain ? getTestTagsSkipCounts() : getTestTagsSkipExtraCounts();
|
||||||
std::map<std::string, int>::iterator i = counts.find(tag);
|
std::map<std::string, int>::iterator i = counts.find(tag);
|
||||||
if (i == counts.end())
|
if (i == counts.end())
|
||||||
@ -192,11 +194,14 @@ public:
|
|||||||
{
|
{
|
||||||
if (!skipped_tests.empty())
|
if (!skipped_tests.empty())
|
||||||
{
|
{
|
||||||
std::cout << "[ SKIPSTAT ] " << skipped_tests.size() << " tests via tags" << std::endl;
|
std::cout << "[ SKIPSTAT ] " << skipped_tests.size() << " tests skipped" << std::endl;
|
||||||
const std::vector<std::string>& skipTags = getTestTagsSkipList();
|
const std::vector<std::string>& skipTags = getTestTagsSkipList();
|
||||||
const std::map<std::string, int>& counts = getTestTagsSkipCounts();
|
const std::map<std::string, int>& counts = getTestTagsSkipCounts();
|
||||||
const std::map<std::string, int>& countsExtra = getTestTagsSkipExtraCounts();
|
const std::map<std::string, int>& countsExtra = getTestTagsSkipExtraCounts();
|
||||||
for (std::vector<std::string>::const_iterator i = skipTags.begin(); i != skipTags.end(); ++i)
|
std::vector<std::string> skipTags_all = skipTags;
|
||||||
|
skipTags_all.push_back("skip_bigdata");
|
||||||
|
skipTags_all.push_back("skip_other");
|
||||||
|
for (std::vector<std::string>::const_iterator i = skipTags_all.begin(); i != skipTags_all.end(); ++i)
|
||||||
{
|
{
|
||||||
int c1 = 0;
|
int c1 = 0;
|
||||||
std::map<std::string, int>::const_iterator i1 = counts.find(*i);
|
std::map<std::string, int>::const_iterator i1 = counts.find(*i);
|
||||||
@ -301,7 +306,7 @@ void checkTestTags()
|
|||||||
if (found != tags.size())
|
if (found != tags.size())
|
||||||
{
|
{
|
||||||
skipped_tests.push_back(::testing::UnitTest::GetInstance()->current_test_info());
|
skipped_tests.push_back(::testing::UnitTest::GetInstance()->current_test_info());
|
||||||
throw SkipTestException("Test tags don't pass required tags list (--test_tag parameter)");
|
throw details::SkipTestExceptionBase("Test tags don't pass required tags list (--test_tag parameter)", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -317,7 +322,7 @@ void checkTestTags()
|
|||||||
const std::string& testTag = testTags[i];
|
const std::string& testTag = testTags[i];
|
||||||
if (isTestTagSkipped(testTag, skipTag))
|
if (isTestTagSkipped(testTag, skipTag))
|
||||||
{
|
{
|
||||||
increaseTagsSkipCount(skipTag, skip_message.empty());
|
testTagIncreaseSkipCount(skipTag, skip_message.empty());
|
||||||
if (skip_message.empty()) skip_message = "Test with tag '" + testTag + "' is skipped ('" + skipTag + "' is in skip list)";
|
if (skip_message.empty()) skip_message = "Test with tag '" + testTag + "' is skipped ('" + skipTag + "' is in skip list)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -327,7 +332,7 @@ void checkTestTags()
|
|||||||
const std::string& testTag = testTagsImplied[i];
|
const std::string& testTag = testTagsImplied[i];
|
||||||
if (isTestTagSkipped(testTag, skipTag))
|
if (isTestTagSkipped(testTag, skipTag))
|
||||||
{
|
{
|
||||||
increaseTagsSkipCount(skipTag, skip_message.empty());
|
testTagIncreaseSkipCount(skipTag, skip_message.empty());
|
||||||
if (skip_message.empty()) skip_message = "Test with tag '" + testTag + "' is skipped (implied '" + skipTag + "' is in skip list)";
|
if (skip_message.empty()) skip_message = "Test with tag '" + testTag + "' is skipped (implied '" + skipTag + "' is in skip list)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -335,7 +340,7 @@ void checkTestTags()
|
|||||||
if (!skip_message.empty())
|
if (!skip_message.empty())
|
||||||
{
|
{
|
||||||
skipped_tests.push_back(::testing::UnitTest::GetInstance()->current_test_info());
|
skipped_tests.push_back(::testing::UnitTest::GetInstance()->current_test_info());
|
||||||
throw SkipTestException(skip_message);
|
throw details::SkipTestExceptionBase(skip_message, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,8 @@ namespace cvtest {
|
|||||||
|
|
||||||
void activateTestTags(const cv::CommandLineParser& parser);
|
void activateTestTags(const cv::CommandLineParser& parser);
|
||||||
|
|
||||||
|
void testTagIncreaseSkipCount(const std::string& tag, bool isMain = true, bool appendSkipTests = false);
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
#endif // OPENCV_TS_SRC_TAGS_HPP
|
#endif // OPENCV_TS_SRC_TAGS_HPP
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user