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;
62 void dosToUnixFile(std::string dosFile, std::string unixedFile){
64 std::ifstream ifile(dosFile.c_str(),std::ios::binary);
65 ifile.seekg(0,std::ios_base::end);
67 char *buffer=new char[s];
71 std::string txt(buffer,s);
74 while ((off=txt.find("\r\n",off))!=std::string::npos)
75 txt.replace(off,sizeof("\r\n")-1,"\n");
76 std::ofstream ofile(unixedFile.c_str());
77 ofile.write(txt.c_str(),txt.size());
88 * [2.x] is optional. If set a temporary file will be generated. So NO need to pass a random outputFileName
90 int main(int argc, char** argv){
91 //reference file must exist or we fail
92 char* refFile = argv[argc-1];
93 assertFalse(!(itksys::SystemTools::FileExists(refFile, true)), "refFile "+std::string(refFile)+" doesn't exist");
95 std::ostringstream cmd_line;
96 cmd_line<<CLITK_TEST_TOOLS_PATH;
97 for(int i=1; i<argc-1; i++){
98 //we should ensure the file exists, find an -i index or a long file name maybe?
99 cmd_line<<argv[i]<<" ";
102 //look for the need of generating an output file
103 int outputOptionIndex = getOutputOptionIndex(argc, argv);
105 if(NO_OUTPUT_OPTION==outputOptionIndex){
106 outFile = getTmpFileName();
107 cmd_line<<">"<<outFile;
109 outFile = argv[argc-2];
111 std::cout<<cmd_line.str()<<std::endl;;
112 //run the command line
113 system(cmd_line.str().c_str());
116 //compare source files
118 std::string unixedOutFile= getTmpFileName();
120 dosToUnixFile(outFile, unixedOutFile);
121 assertFalse((itksys::SystemTools::FilesDiffer(unixedOutFile.c_str(), refFile)), "Generated mhd file != ref File");
122 remove(unixedOutFile.c_str());
124 assertFalse((itksys::SystemTools::FilesDiffer(outFile.c_str(), refFile)), "Generated mhd file != ref File");
128 //eventually raw files associated
129 //should be passed as a boolean to check also for raw or not
130 std::string refRawFile = std::string(refFile)+".raw";
132 int found=outFile.find_last_of(".");
133 std::string rawFile = outFile.substr(0, found)+".raw";
134 if((itksys::SystemTools::FileExists(refRawFile.c_str(), true))){
135 //compare the raw stuff
136 if((itksys::SystemTools::FileExists(rawFile.c_str(), true))){
137 std::cout<<"Checking raws"<<std::endl;
138 assertFalse(itksys::SystemTools::FilesDiffer(refRawFile.c_str(), rawFile.c_str()), "Raws are different");
140 //file is not removed if there is a fail
141 remove(rawFile.c_str());
144 remove(outFile.c_str());