Files Classes Functions Hierarchy
00001 #include <systemcalls.h> 00002 #include <projunittest.h> 00003 #include <projunittests.h> 00004 #include <stringconvert.h> 00005 #include <stringserialization.h> 00006 #include <systemcalls.h> 00007 #include <tokenizer.h> 00008 00009 string projunittests::fileresults="unittestsreport.txt"; 00010 string projunittests::tempfile="/tmp/proj829849.txt"; 00011 00012 00013 /* 00014 <unittests> 00015 <state><exitstatus> </exitstatus></state> 00016 <vi> 00017 [embedded xml "unittest.txt" for each unit test] 00018 ... 00019 </vi> 00020 </unittests> 00021 */ 00022 00023 stringc projunittests::xml() const 00024 { 00025 string s1; 00026 string s2 = stringtag(exitstatus,"exitstatus"); 00027 s1 += stringtag(s2,"status"); 00028 00029 string time = stringtrim( systemcallseval("echo `date +%Y`-`date +%m`-`date +%d`\\ `date +%k`:`date +%M`:`date +%S`").output() ); 00030 s1 += stringtag(time,"time"); 00031 00032 string s3; 00033 for (uint i=0; i<vi.size(); ++i) 00034 s3 += vi[i].xml(); 00035 s1 += stringtag(s3,"vi"); 00036 00037 return stringtag(s1,"unittestsreport"); 00038 } 00039 00040 int projunittests::eval() 00041 { 00042 string line("ls testscript*.txt"); 00043 systemcalls sys(line,tempfile); 00044 exitstatus=sys.eval(); 00045 tokenizer tk; 00046 tk.readaslinesgeneral(sys.output()); 00047 for ( tk.reset(); !tk; ++tk) 00048 vi.push_back( projunittest(tk()) ); 00049 00050 int status; 00051 for (uint i=0; i<vi.size(); ++i) 00052 { 00053 if (terminal.issummary()==false) 00054 vi[i].terminal.changestate(terminal); 00055 else 00056 vi[i].terminal.setsilent(); 00057 status=vi[i].eval(); 00058 if ((exitstatus==0)&&(status!=0)) 00059 exitstatus=status; 00060 } 00061 00062 // Write the xml file. 00063 string s2=xml(); 00064 bool res; 00065 res=filestring::serializeInverse(fileresults,s2); 00066 if (res==false) 00067 cout << "error: could not write file " + fileresults << endl; 00068 assert(res); 00069 if ((res==false)&&(exitstatus==0)) 00070 exitstatus=1; 00071 00072 if (!terminal.issilent()) 00073 cout << report(); 00074 flush(cout); 00075 00076 return exitstatus; 00077 } 00078 00079 /* 00080 00081 Unit Tests Success 00082 Report testscript001.txt Success 00083 ./main prog=135 00084 Success 00085 ./main prog=136 00086 Success 00087 ./main prog=82 00088 Success 00089 ./main prog=133 00090 Success 00091 Report testscript002.txt Success 00092 ./main prog=31 00093 Success 00094 ./main prog=32 00095 Success 00096 ./main prog=33 00097 Success 00098 ./main prog=34 00099 Success 00100 ./main prog=35 00101 Succes 00102 00103 */ 00104 00105 stringc projunittests::report() const 00106 { 00107 string s1; 00108 s1 = "Report unit tests " + isvalidtext() + endln; 00109 00110 for (uint i=0; i<vi.size(); ++i) 00111 { 00112 s1 += vi[i].report(); 00113 } 00114 00115 return s1; 00116 } 00117 00118
1.5.8