proj home

Files   Classes   Functions   Hierarchy  

projunittests.cpp

Go to the documentation of this file.
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 

Generated on Fri Mar 4 00:49:28 2011 for Chelton Evans Source by  doxygen 1.5.8