1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
5 - University of LYON http://www.universite-lyon.fr/
6 - Léon Bérard cancer center http://www.centreleonberard.fr
7 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the copyright notices for more information.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================*/
24 #include <itksys/SystemTools.hxx>
25 const int NO_OUTPUT_OPTION=-1;
26 const int TEST_EXITED=1;
27 int getOutputOptionIndex(int argc, char** argv){
28 for(int i=1; i<argc; i++){
29 std::string s = argv[i];
34 return NO_OUTPUT_OPTION;
37 std::string getTmpFileName(){
39 char fileName[L_tmpnam_s];
40 errno_t err = tmpnam_s(fileName);
42 char fileName[] = "/tmp/vvTempXXXXXX";
44 int fd = mkstemp(fileName);
48 std::cout<<"couldnot create file. Exiting"<<std::endl;
51 return std::string(fileName);
54 void assertFalse(int fail, const std::string &message=""){
56 std::cout<<message<<std::endl;
67 * [2.x] is optional. If set a temporary file will be generated. So NO need to pass a random outputFileName
69 int main(int argc, char** argv){
70 //reference file must exist or we fail
71 char* refFile = argv[argc-1];
72 assertFalse(!(itksys::SystemTools::FileExists(refFile, true)), "refFile "+std::string(refFile)+" doesn't exist");
74 std::ostringstream cmd_line;
75 cmd_line<<CLITK_TEST_TOOLS_PATH;
76 for(int i=1; i<argc-1; i++){
77 //we should ensure the file exists, find an -i index or a long file name maybe?
78 cmd_line<<argv[i]<<" ";
81 //look for the need of generating an output file
82 int outputOptionIndex = getOutputOptionIndex(argc, argv);
84 if(NO_OUTPUT_OPTION==outputOptionIndex){
85 outFile = getTmpFileName();
86 cmd_line<<">"<<outFile;
88 outFile = argv[argc-2];
90 std::cout<<cmd_line.str()<<std::endl;;
91 //run the command line
92 system(cmd_line.str().c_str());
94 //compare source files
95 assertFalse((itksys::SystemTools::FilesDiffer(outFile.c_str(), refFile)), "Source Files are different");
97 //eventually raw files associated
98 //should be passed as a boolean to check also for raw or not
100 std::string refRawFile = std::string(refFile)+".raw";
103 int found=outFile.find_last_of(".");
104 std::string rawFile = outFile.substr(0, found)+".raw";
105 if((itksys::SystemTools::FileExists(refRawFile.c_str(), true))){
106 //compare the raw stuff
107 if((itksys::SystemTools::FileExists(rawFile.c_str(), true))){
108 std::cout<<"Checking raws"<<std::endl;
109 assertFalse(itksys::SystemTools::FilesDiffer(refRawFile.c_str(), rawFile.c_str()), "Raws are different");
111 //file is not removed if there is a fail
112 remove(rawFile.c_str());
115 remove(outFile.c_str());