/*
 * Copyright (C) 2008  Remko Troncon
 * See COPYING for license details.
 */

#ifndef QTTESTUTIL_TESTREGISTRY_H
#define QTTESTUTIL_TESTREGISTRY_H

#include <QList>

class QObject;

namespace QtTestUtil {
	
	/**
	 * A registry of QtTest test classes.
	 * All test classes registered with QTTESTUTIL_REGISTER_TEST add 
	 * themselves to this registry. All registered tests can then be run at 
	 * once using runTests().
	 */
	class TestRegistry
	{
		public:
			/**
			 * Retrieve the single instance of the registry.
			 */
			static TestRegistry* getInstance();

			/**
			 * Register a QtTest test. 
			 * This method is called  by QTTESTUTIL_REGISTER_TEST, and you should 
			 * not use this method directly.
			 */
			void registerTest(QObject*);

			/**
			 * Run all registered tests using QTest::qExec()
			 */
			int runTests(int argc, char* argv[]);

		private:
			TestRegistry() {}
		
		private:
			QList<QObject*> tests_;
	};
}

#endif
