proj home

Files   Classes   Functions   Hierarchy  

projunittest Class Reference

A unit test storing results. More...

#include <projunittest.h>

Inheritance diagram for projunittest:
Collaboration diagram for projunittest:

List of all members.

Public Member Functions

 projunittest ()
 Bad state.
 projunittest (stringc &filename_)
stringc xml () const
 Ouput object as xml.
int eval ()
 Execute the commands in the shell.
stringc report () const
 Loop through commands and calc exit status.

Public Attributes

projprint terminal
 Print mode.
string filename
 Generally testscript*.txt format.
vector< unittestcmdvi
 Command lines associated with the file.

Static Public Attributes

static string fileresults = "unittestreport.txt"
 Locally saved xml.


Detailed Description

A unit test storing results.

Definition at line 53 of file projunittest.h.


Constructor & Destructor Documentation

projunittest::projunittest (  ) 

Bad state.

Definition at line 69 of file projunittest.cpp.

00070 {
00071 }

projunittest::projunittest ( stringc filename_  ) 

Definition at line 73 of file projunittest.cpp.

00074   : filename(filename_)
00075 {
00076 }


Member Function Documentation

int projunittest::eval (  ) 

Execute the commands in the shell.

Definition at line 78 of file projunittest.cpp.

References exitint::exitstatus, filename, fileresults, projprint::issilent(), tokenizer::readaslines(), report(), tokenizer::reset(), filestring::serialize(), filestring::serializeInverse(), terminal, tokenizer::trim_and_prune(), vi, and xml().

Referenced by mkerrorstest::test02().

00079 {
00080   string s1;
00081   if (!filestring::serialize(s1,filename))
00082   {
00083     cout << "error: Can not open " << filename << "." << endl;
00084     return 1;
00085   }
00086 
00087 //cout << SHOW3(s1) << endl; 
00088   tokenizer ss;
00089   ss.readaslines(s1);
00090 
00091   ss.reset();
00092   for ( ; !ss; ++ss)
00093   {
00094     vi.push_back( unittestcmd(ss()) );
00095   }
00096   ss.trim_and_prune();
00097 
00098 //cout << SHOW(vi.size()) << endl;
00099 
00100   for (uint i=0; i<vi.size(); ++i)
00101   {
00102 //    cout << SHOW(vi[i].line) << endl;
00103     assert(vi[i].line.empty()==false);
00104     vi[i].terminal.changestate(terminal);
00105   }
00106 
00107 //cout << SHOW(vi.size()) << endl;
00108 
00109 /*
00110   string temp=vi[0].xml();
00111 cout << SHOW(temp) << endl;
00112   vi[0].eval();
00113   temp=vi[0].xml();
00114 cout << SHOW3(temp) << endl;
00115 */
00116 
00117 //  for ( uint i=0; i<vi.size(); ++i)
00118 //    cout << vi[i].xml() << endl;
00119   
00120   // Loop through and execute the commands.
00121   // If one test fails then the unit
00122   // test has failed.
00123   int exitstatus2=0;
00124   for (uint i=0; i<vi.size(); ++i)
00125   {
00126     int status = vi[i].eval();  
00127     if (status != 0)
00128     {
00129       // Only change exitstatus2 on the first error.
00130       if (exitstatus2==0)
00131         exitstatus2=status;
00132       continue;
00133     }
00134   }
00135   exitstatus=exitstatus2;
00136 
00137   // write to fileresults
00138   string s2=xml();
00139   //cout << SHOW3(s2) << endl;
00140 
00141   bool res;
00142   res=filestring::serializeInverse(fileresults,s2);
00143   if (res==false)
00144     cout << "error: could not write file " + fileresults << endl;
00145   assert(res);
00146   if ((res==false)&&(exitstatus==0))
00147     exitstatus=1;
00148 //cout << SHOW(res) << endl;
00149 
00150   if (!terminal.issilent())
00151     cout << report();
00152   flush(cout); 
00153 
00154   return exitstatus;
00155 }

stringc projunittest::report (  )  const

Loop through commands and calc exit status.

Definition at line 181 of file projunittest.cpp.

References endln, filename, exitint::isvalidtext(), and vi.

Referenced by eval().

00182 {
00183   string s1;
00184   s1 = "Report " + filename + " " + isvalidtext() + endln;
00185 
00186   for (uint i=0; i<vi.size(); ++i)
00187   {
00188     s1 += (vi[i].line + endln);
00189     s1 += (" " + vi[i].isvalidtext() + endln);
00190   }
00191 
00192   return s1;
00193 }

stringc projunittest::xml (  )  const

Ouput object as xml.

Definition at line 157 of file projunittest.cpp.

References exitint::exitstatus, filename, stringtag(), and vi.

Referenced by eval().

00158 {
00159   if (filename.empty())
00160     return "";
00161 
00162   string s1;
00163 
00164   //s1 += stringtag( stringtag(exitstatus,"exitstatus"),"state");
00165   s1 += stringtag(exitstatus,"exitstatus");
00166   s1 += stringtag(filename,"file");
00167 
00168   string s2;
00169   
00170   for (uint i=0; i<vi.size(); ++i)
00171     s2 += vi[i].xml();
00172 
00173   string s3 = stringtag(s2,"commandlines");
00174   s1 += s3;
00175 
00176   string s4( stringtag(s1,"unittest") );
00177 
00178   return s4;
00179 }


Member Data Documentation

Generally testscript*.txt format.

Definition at line 64 of file projunittest.h.

Referenced by eval(), report(), and xml().

string projunittest::fileresults = "unittestreport.txt" [static]

Locally saved xml.

Definition at line 61 of file projunittest.h.

Referenced by eval().

Print mode.

Definition at line 58 of file projunittest.h.

Referenced by eval(), and mkerrorstest::test02().

Command lines associated with the file.

Definition at line 72 of file projunittest.h.

Referenced by eval(), report(), and xml().


The documentation for this class was generated from the following files:

Generated on Fri Mar 4 00:50:11 2011 for Chelton Evans Source by  doxygen 1.5.8