Blame dejagnu.h

Packit 62fe53
/* DejaGnu unit testing header.
Packit 62fe53
   Copyright (C) 2000-2016 Free Software Foundation, Inc.
Packit 62fe53
Packit 62fe53
This file is part of DejaGnu.
Packit 62fe53
Packit 62fe53
DejaGnu is free software; you can redistribute it and/or modify it
Packit 62fe53
under the terms of the GNU General Public License as published by
Packit 62fe53
the Free Software Foundation; either version 3 of the License, or
Packit 62fe53
(at your option) any later version.
Packit 62fe53
Packit 62fe53
DejaGnu is distributed in the hope that it will be useful, but
Packit 62fe53
WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 62fe53
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 62fe53
General Public License for more details.
Packit 62fe53
Packit 62fe53
You should have received a copy of the GNU General Public License
Packit 62fe53
along with DejaGnu; if not, write to the Free Software Foundation,
Packit 62fe53
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
Packit 62fe53
Packit 62fe53
#ifndef __DEJAGNU_H__
Packit 62fe53
#define __DEJAGNU_H__
Packit 62fe53
Packit 62fe53
#include <stdio.h>
Packit 62fe53
#include <stdarg.h>
Packit 62fe53
#include <string.h>
Packit 62fe53
Packit 62fe53
/* If you have problems with DejaGnu dropping failed, untested, or
Packit 62fe53
 * unresolved messages generated by a unit testcase, then:  */
Packit 62fe53
Packit 62fe53
/* #define _DEJAGNU_WAIT_  */
Packit 62fe53
Packit 62fe53
#ifdef _DEJAGNU_WAIT_
Packit 62fe53
#include <sys/time.h>
Packit 62fe53
#include <sys/types.h>
Packit 62fe53
#include <unistd.h>
Packit 62fe53
#endif
Packit 62fe53
Packit 62fe53
static int passed;
Packit 62fe53
static int failed;
Packit 62fe53
static int untest;
Packit 62fe53
static int unresolve;
Packit 62fe53
static int xfailed;
Packit 62fe53
static int xpassed;
Packit 62fe53
Packit 62fe53
static char buffer[512];
Packit 62fe53
Packit 62fe53
void
Packit 62fe53
wait (void)
Packit 62fe53
{
Packit 62fe53
#ifdef _DEJAGNU_WAIT_
Packit 62fe53
  fd_set rfds;
Packit 62fe53
  struct timeval tv;
Packit 62fe53
Packit 62fe53
  FD_ZERO (&rfds);
Packit 62fe53
  tv.tv_sec = 0;
Packit 62fe53
  tv.tv_usec = 1;
Packit 62fe53
Packit 62fe53
  select (0, &rfds, NULL, NULL, &tv;;
Packit 62fe53
#endif
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
static inline void
Packit 62fe53
pass (const char* fmt, ...)
Packit 62fe53
{
Packit 62fe53
  va_list ap;
Packit 62fe53
Packit 62fe53
  passed++;
Packit 62fe53
  va_start (ap, fmt);
Packit 62fe53
  vsnprintf (buffer, sizeof (buffer), fmt, ap);
Packit 62fe53
  va_end (ap);
Packit 62fe53
  printf ("\tPASSED: %s\n", buffer);
Packit 62fe53
  wait ();
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
static inline void
Packit 62fe53
xpass (const char* fmt, ...)
Packit 62fe53
{
Packit 62fe53
  va_list ap;
Packit 62fe53
Packit 62fe53
  passed++;
Packit 62fe53
  va_start (ap, fmt);
Packit 62fe53
  vsnprintf (buffer, sizeof (buffer), fmt, ap);
Packit 62fe53
  va_end (ap);
Packit 62fe53
  printf ("\tXPASSED: %s\n", buffer);
Packit 62fe53
  wait ();
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
static inline void
Packit 62fe53
fail (const char* fmt, ...)
Packit 62fe53
{
Packit 62fe53
  va_list ap;
Packit 62fe53
Packit 62fe53
  failed++;
Packit 62fe53
  va_start (ap, fmt);
Packit 62fe53
  vsnprintf (buffer, sizeof (buffer), fmt, ap);
Packit 62fe53
  va_end (ap);
Packit 62fe53
  printf ("\tFAILED: %s\n", buffer);
Packit 62fe53
  wait ();
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
static inline void
Packit 62fe53
xfail (const char* fmt, ...)
Packit 62fe53
{
Packit 62fe53
  va_list ap;
Packit 62fe53
Packit 62fe53
  failed++;
Packit 62fe53
  va_start (ap, fmt);
Packit 62fe53
  vsnprintf (buffer, sizeof (buffer), fmt, ap);
Packit 62fe53
  va_end (ap);
Packit 62fe53
  printf ("\tXFAILED: %s\n", buffer);
Packit 62fe53
  wait ();
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
static inline void
Packit 62fe53
untested (const char* fmt, ...)
Packit 62fe53
{
Packit 62fe53
  va_list ap;
Packit 62fe53
Packit 62fe53
  untest++;
Packit 62fe53
  va_start (ap, fmt);
Packit 62fe53
  vsnprintf (buffer, sizeof (buffer), fmt, ap);
Packit 62fe53
  va_end (ap);
Packit 62fe53
  printf ("\tUNTESTED: %s\n", buffer);
Packit 62fe53
  wait ();
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
static inline void
Packit 62fe53
unresolved (const char* fmt, ...)
Packit 62fe53
{
Packit 62fe53
  va_list ap;
Packit 62fe53
Packit 62fe53
  unresolve++;
Packit 62fe53
  va_start (ap, fmt);
Packit 62fe53
  vsnprintf (buffer, sizeof (buffer), fmt, ap);
Packit 62fe53
  va_end (ap);
Packit 62fe53
  printf ("\tUNRESOLVED: %s\n", buffer);
Packit 62fe53
  wait ();
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
static inline void
Packit 62fe53
note (const char* fmt, ...)
Packit 62fe53
{
Packit 62fe53
  va_list ap;
Packit 62fe53
Packit 62fe53
  va_start (ap, fmt);
Packit 62fe53
  vsnprintf (buffer, sizeof (buffer), fmt, ap);
Packit 62fe53
  va_end (ap);
Packit 62fe53
  printf ("\tNOTE: %s\n", buffer);
Packit 62fe53
  wait ();
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
static inline void
Packit 62fe53
totals (void)
Packit 62fe53
{
Packit 62fe53
  printf ("\nTotals:\n");
Packit 62fe53
  printf ("\t#passed:\t\t%d\n", passed);
Packit 62fe53
  printf ("\t#real failed:\t\t%d\n", failed);
Packit 62fe53
  if (xfailed)
Packit 62fe53
    printf ("\t#expected failures:\t\t%d\n", xfailed);
Packit 62fe53
  if (untest)
Packit 62fe53
    printf ("\t#untested:\t\t%d\n", untest);
Packit 62fe53
  if (unresolve)
Packit 62fe53
    printf ("\t#unresolved:\t\t%d\n", unresolve);
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
#ifdef __cplusplus
Packit 62fe53
Packit 62fe53
#include <iostream>
Packit 62fe53
#include <iomanip>
Packit 62fe53
#include <fstream>
Packit 62fe53
#include <string>
Packit 62fe53
Packit 62fe53
const char *outstate_list[] = {
Packit 62fe53
  "FAILED: ", "PASSED: ", "UNTESTED: ", "UNRESOLVED: ", "XFAILED: ", "XPASSED: "
Packit 62fe53
};
Packit 62fe53
Packit 62fe53
const char ** outstate = outstate_list;
Packit 62fe53
Packit 62fe53
enum teststate { FAILED, PASSED, UNTESTED, UNRESOLVED, XFAILED, XPASSED} laststate;
Packit 62fe53
Packit 62fe53
class TestState {
Packit 62fe53
 private:
Packit 62fe53
  teststate laststate;
Packit 62fe53
  std::string lastmsg;
Packit 62fe53
 public:
Packit 62fe53
  TestState (void)
Packit 62fe53
    {
Packit 62fe53
      passed = 0;
Packit 62fe53
      failed = 0;
Packit 62fe53
      untest = 0;
Packit 62fe53
      xpassed = 0;
Packit 62fe53
      xfailed = 0;
Packit 62fe53
      unresolve = 0;
Packit 62fe53
    }
Packit 62fe53
Packit 62fe53
  ~TestState (void) { totals(); }
Packit 62fe53
Packit 62fe53
  void testrun (bool b, std::string s)
Packit 62fe53
    {
Packit 62fe53
      if (b)
Packit 62fe53
	pass (s);
Packit 62fe53
      else
Packit 62fe53
	fail (s);
Packit 62fe53
    }
Packit 62fe53
Packit 62fe53
    void pass (std::string s)
Packit 62fe53
      {
Packit 62fe53
	passed++;
Packit 62fe53
	laststate = PASSED;
Packit 62fe53
	lastmsg = s;
Packit 62fe53
	std::cout << "\t" << outstate[PASSED] << s << std::endl;
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void pass (const char *c)
Packit 62fe53
      {
Packit 62fe53
	std::string s = c;
Packit 62fe53
	pass (s);
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void xpass (std::string s)
Packit 62fe53
      {
Packit 62fe53
	xpassed++;
Packit 62fe53
	laststate = PASSED;
Packit 62fe53
	lastmsg = s;
Packit 62fe53
	std::cout << "\t" << outstate[XPASSED] << s << std::endl;
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void xpass (const char *c)
Packit 62fe53
      {
Packit 62fe53
	std::string s = c;
Packit 62fe53
	xpass (s);
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void fail (std::string s)
Packit 62fe53
      {
Packit 62fe53
	failed++;
Packit 62fe53
	laststate = FAILED;
Packit 62fe53
	lastmsg = s;
Packit 62fe53
	std::cout << "\t" << outstate[FAILED] << s << std::endl;
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void fail (const char *c)
Packit 62fe53
      {
Packit 62fe53
	std::string s = c;
Packit 62fe53
	fail (s);
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void xfail (std::string s)
Packit 62fe53
      {
Packit 62fe53
	xfailed++;
Packit 62fe53
	laststate = XFAILED;
Packit 62fe53
	lastmsg = s;
Packit 62fe53
	std::cout << "\t" << outstate[XFAILED] << s << std::endl;
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void xfail (const char *c)
Packit 62fe53
      {
Packit 62fe53
	std::string s = c;
Packit 62fe53
	xfail (s);
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void untested (std::string s)
Packit 62fe53
      {
Packit 62fe53
	untest++;
Packit 62fe53
	laststate = UNTESTED;
Packit 62fe53
	lastmsg = s;
Packit 62fe53
	std::cout << "\t" << outstate[UNTESTED] << s << std::endl;
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void untested (const char *c)
Packit 62fe53
      {
Packit 62fe53
	std::string s = c;
Packit 62fe53
	untested (s);
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void unresolved (std::string s)
Packit 62fe53
      {
Packit 62fe53
	unresolve++;
Packit 62fe53
	laststate = UNRESOLVED;
Packit 62fe53
	lastmsg = s;
Packit 62fe53
	std::cout << "\t" << outstate[UNRESOLVED] << s << std::endl;
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void unresolved (const char *c)
Packit 62fe53
      {
Packit 62fe53
	std::string s = c;
Packit 62fe53
	unresolved (s);
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    void totals (void)
Packit 62fe53
      {
Packit 62fe53
	std::cout << "\t#passed:\t\t" << passed << std::endl;
Packit 62fe53
	std::cout << "\t#real failed:\t\t" << failed << std::endl;
Packit 62fe53
	if (xfailed)
Packit 62fe53
	  std::cout << "\t#expected failures:\t\t" << xfailed << std::endl;
Packit 62fe53
	if (xpassed)
Packit 62fe53
	  std::cout << "\t#unexpected passes:\t\t" << xpassed << std::endl;
Packit 62fe53
	if (untest)
Packit 62fe53
	  std::cout << "\t#untested:\t\t" << untest << std::endl;
Packit 62fe53
	if (unresolve)
Packit 62fe53
	  std::cout << "\t#unresolved:\t\t" << unresolve << std::endl;
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    // This is so this class can be printed in an ostream.
Packit 62fe53
    friend std::ostream & operator << (std::ostream &os, TestState& t)
Packit 62fe53
      {
Packit 62fe53
	return os << "\t" << outstate[t.laststate] << t.lastmsg ;
Packit 62fe53
      }
Packit 62fe53
Packit 62fe53
    int GetState (void) { return laststate; }
Packit 62fe53
    std::string GetMsg (void) { return lastmsg; }
Packit 62fe53
};
Packit 62fe53
Packit 62fe53
#endif /* __cplusplus */
Packit 62fe53
#endif /* _DEJAGNU_H_ */