Home | History | Annotate | Download | only in common
      1 #ifndef _TCUTESTPACKAGE_HPP
      2 #define _TCUTESTPACKAGE_HPP
      3 /*-------------------------------------------------------------------------
      4  * drawElements Quality Program Tester Core
      5  * ----------------------------------------
      6  *
      7  * Copyright 2014 The Android Open Source Project
      8  *
      9  * Licensed under the Apache License, Version 2.0 (the "License");
     10  * you may not use this file except in compliance with the License.
     11  * You may obtain a copy of the License at
     12  *
     13  *      http://www.apache.org/licenses/LICENSE-2.0
     14  *
     15  * Unless required by applicable law or agreed to in writing, software
     16  * distributed under the License is distributed on an "AS IS" BASIS,
     17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     18  * See the License for the specific language governing permissions and
     19  * limitations under the License.
     20  *
     21  *//*!
     22  * \file
     23  * \brief Base class for a test case.
     24  *//*--------------------------------------------------------------------*/
     25 
     26 #include "tcuDefs.hpp"
     27 #include "tcuTestCase.hpp"
     28 
     29 namespace tcu
     30 {
     31 
     32 /*--------------------------------------------------------------------*//*!
     33  * \brief Test case execution interface.
     34  *
     35  * TestCaseExecutor provides package-specific resources & initialization
     36  * for test cases.
     37  *
     38  * \todo [2015-03-18 pyry] Replace with following API:
     39  *
     40  * class TestInstance
     41  * {
     42  * public:
     43  *     TestInstance (TestContext& testCtx);
     44  *     tcu::TestResult iterate (void);
     45  * };
     46  *
     47  * class TestInstanceFactory (???)
     48  * {
     49  * public:
     50  *     TestInstance* createInstance (const TestCase* testCase, const std::string& path);
     51  * };
     52  *//*--------------------------------------------------------------------*/
     53 class TestCaseExecutor
     54 {
     55 public:
     56 	virtual								~TestCaseExecutor	(void) {}
     57 
     58 	virtual void						init				(TestCase* testCase, const std::string& path) = 0;
     59 	virtual void						deinit				(TestCase* testCase) = 0;
     60 	virtual TestNode::IterateResult		iterate				(TestCase* testCase) = 0;
     61 };
     62 
     63 /*--------------------------------------------------------------------*//*!
     64  * \brief Base class for test packages.
     65  *
     66  * Test packages are root-level test groups. They also provide package-
     67  * specific test case executor, see TestCaseExecutor.
     68  *//*--------------------------------------------------------------------*/
     69 class TestPackage : public TestNode
     70 {
     71 public:
     72 									TestPackage			(TestContext& testCtx, const char* name, const char* description);
     73 	virtual							~TestPackage		(void);
     74 
     75 	virtual TestCaseExecutor*		createExecutor		(void) const = 0;
     76 
     77 	// Deprecated
     78 	virtual Archive*				getArchive			(void) { return DE_NULL; }
     79 
     80 	virtual IterateResult			iterate				(void);
     81 };
     82 
     83 // TestPackageRegistry
     84 
     85 typedef TestPackage* (*TestPackageCreateFunc)	(TestContext& testCtx);
     86 
     87 class TestPackageRegistry
     88 {
     89 public:
     90 	struct PackageInfo
     91 	{
     92 		PackageInfo (std::string name_, TestPackageCreateFunc createFunc_) : name(name_), createFunc(createFunc_) {}
     93 
     94 		std::string				name;
     95 		TestPackageCreateFunc	createFunc;
     96 	};
     97 
     98 	static TestPackageRegistry*			getSingleton			(void);
     99 	static void							destroy					(void);
    100 
    101 	void								registerPackage			(const char* name, TestPackageCreateFunc createFunc);
    102 	const std::vector<PackageInfo*>&	getPackageInfos			(void) const;
    103 	PackageInfo*						getPackageInfoByName	(const char* name) const;
    104 	TestPackage*						createPackage			(const char* name, TestContext& testCtx) const;
    105 
    106 private:
    107 										TestPackageRegistry		(void);
    108 										~TestPackageRegistry	(void);
    109 
    110 	static TestPackageRegistry*			getOrDestroy			(bool isCreate);
    111 
    112 	// Member variables.
    113 	std::vector<PackageInfo*>			m_packageInfos;
    114 };
    115 
    116 // TestPackageDescriptor
    117 
    118 class TestPackageDescriptor
    119 {
    120 public:
    121 						TestPackageDescriptor		(const char* name, TestPackageCreateFunc createFunc);
    122 						~TestPackageDescriptor		(void);
    123 };
    124 
    125 // TestPackageRoot
    126 
    127 class TestPackageRoot : public TestNode
    128 {
    129 public:
    130 							TestPackageRoot		(TestContext& testCtx);
    131 							TestPackageRoot		(TestContext& testCtx, const std::vector<TestNode*>& children);
    132 							TestPackageRoot		(TestContext& testCtx, const TestPackageRegistry* packageRegistry);
    133 	virtual					~TestPackageRoot	(void);
    134 
    135 	virtual IterateResult	iterate				(void);
    136 };
    137 
    138 } // tcu
    139 
    140 #endif // _TCUTESTPACKAGE_HPP
    141