//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / pf
//
//File: test.h 
//
//Version: $Revision: 1.13 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/10/12 19:56:42 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//	Vesa-Matti Puro
//
//Description:
//
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History: 
//
//

#ifndef __PF_PFTEST_H__
#define __PF_PFTEST_H__

#include <typeinfo>
#include <string>

class pfTest
{
    public:

    // public constructors and destructors

        pfTest(void);
        pfTest(const pfTest &other_);
        virtual ~pfTest(void);
        pfTest &operator=(const pfTest &other_);

    // public testing interface for test runner 

	virtual string name(void) const;
	virtual string purpose(void) const;
	virtual void test(void);

    protected:

    // protected testing interface for test developer 

	virtual void init(void);
	virtual void finalize(void);

	virtual void *create(void);
	virtual void destroy(void *object_);
	virtual bool assign(void);
	virtual bool copy();
	virtual bool valid();
	virtual bool invalid();
	virtual bool inopportune();
	virtual bool timing();

    private:

    // private interface with methods without implementation


    // private verdict recording interface for protected member functions

	void report(void);
        void recordPass(void);
        void recordFail(void);
        void recordInco(void);

    // private data members

	static pfTest *_only;
	string _name;
	string _purpose;

    // type and counters for FASS, FAIL and INCONCLUSIVE verdicts

        typedef unsigned long VerdictCount;

	VerdictCount _passCount;
	VerdictCount _failCount;
	VerdictCount _incoCount;
};

#endif //__PF_PFTEST_H__

