1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
#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
|