You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.8 KiB
C++

#ifndef vtkMultiBaselineRegressionTest_h
#define vtkMultiBaselineRegressionTest_h
#include "vtkNew.h"
#include "vtkRenderWindow.h"
#include "vtkTesting.h"
#include "vtksys/SystemTools.hxx"
#include <string.h>
/**\brief Run a regression test with an explicitly-provided image filename.
*
* Unlike the traditional C++ image-based test macro (vtkRegressionTestImage),
* this templated function accepts the name of a baseline image.
* It uses the existing vtkTesting infrastructure to expand the image name
* into a full path by replacing the implied filename component of the valid
* image (specified with "-V" on the command line) with the given \a img
* value. The directory portion of the valid image path preceding is untouched.
*/
template <typename T>
int RegressionTestWithImageName(
int argc, char* argv[], T* rw, const std::string& img, double thresh = 10.)
{
vtkNew<vtkTesting> testing;
bool isImgPath = false;
for (int i = 0; i < argc; ++i)
{
if (!strcmp(argv[i], "-V"))
{
isImgPath = true;
}
else if (isImgPath)
{
isImgPath = false;
std::vector<std::string> components;
std::string originalImage = argv[i];
vtksys::SystemTools::SplitPath(originalImage, components);
// Substitute image filename for last component;
components.back() = img;
std::string tryme = vtksys::SystemTools::JoinPath(components);
testing->AddArgument(tryme.c_str());
continue;
}
testing->AddArgument(argv[i]);
}
if (testing->IsInteractiveModeSpecified())
{
return vtkTesting::DO_INTERACTOR;
}
if (testing->IsValidImageSpecified())
{
testing->SetRenderWindow(rw);
return testing->RegressionTestAndCaptureOutput(thresh, cout);
}
return vtkTesting::NOT_RUN;
}
#endif
// VTK-HeaderTest-Exclude: vtkMultiBaselineRegressionTest.h