1*35238bceSAndroid Build Coastguard Worker #ifndef _TCUTESTPACKAGE_HPP 2*35238bceSAndroid Build Coastguard Worker #define _TCUTESTPACKAGE_HPP 3*35238bceSAndroid Build Coastguard Worker /*------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program Tester Core 5*35238bceSAndroid Build Coastguard Worker * ---------------------------------------- 6*35238bceSAndroid Build Coastguard Worker * 7*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project 8*35238bceSAndroid Build Coastguard Worker * 9*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 10*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 11*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at 12*35238bceSAndroid Build Coastguard Worker * 13*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 14*35238bceSAndroid Build Coastguard Worker * 15*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 16*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 17*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 19*35238bceSAndroid Build Coastguard Worker * limitations under the License. 20*35238bceSAndroid Build Coastguard Worker * 21*35238bceSAndroid Build Coastguard Worker *//*! 22*35238bceSAndroid Build Coastguard Worker * \file 23*35238bceSAndroid Build Coastguard Worker * \brief Base class for a test case. 24*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/ 25*35238bceSAndroid Build Coastguard Worker 26*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp" 27*35238bceSAndroid Build Coastguard Worker #include "tcuTestCase.hpp" 28*35238bceSAndroid Build Coastguard Worker #include <map> 29*35238bceSAndroid Build Coastguard Worker 30*35238bceSAndroid Build Coastguard Worker namespace tcu 31*35238bceSAndroid Build Coastguard Worker { 32*35238bceSAndroid Build Coastguard Worker 33*35238bceSAndroid Build Coastguard Worker //! Test run summary. 34*35238bceSAndroid Build Coastguard Worker class TestRunStatus 35*35238bceSAndroid Build Coastguard Worker { 36*35238bceSAndroid Build Coastguard Worker public: TestRunStatus(void)37*35238bceSAndroid Build Coastguard Worker TestRunStatus(void) 38*35238bceSAndroid Build Coastguard Worker { 39*35238bceSAndroid Build Coastguard Worker clear(); 40*35238bceSAndroid Build Coastguard Worker } 41*35238bceSAndroid Build Coastguard Worker clear(void)42*35238bceSAndroid Build Coastguard Worker void clear(void) 43*35238bceSAndroid Build Coastguard Worker { 44*35238bceSAndroid Build Coastguard Worker numExecuted = 0; 45*35238bceSAndroid Build Coastguard Worker numPassed = 0; 46*35238bceSAndroid Build Coastguard Worker numFailed = 0; 47*35238bceSAndroid Build Coastguard Worker numDeviceLost = 0; 48*35238bceSAndroid Build Coastguard Worker numNotSupported = 0; 49*35238bceSAndroid Build Coastguard Worker numWarnings = 0; 50*35238bceSAndroid Build Coastguard Worker numWaived = 0; 51*35238bceSAndroid Build Coastguard Worker isComplete = false; 52*35238bceSAndroid Build Coastguard Worker } 53*35238bceSAndroid Build Coastguard Worker 54*35238bceSAndroid Build Coastguard Worker int numExecuted; //!< Total number of cases executed. 55*35238bceSAndroid Build Coastguard Worker int numPassed; //!< Number of cases passed. 56*35238bceSAndroid Build Coastguard Worker int numFailed; //!< Number of cases failed. 57*35238bceSAndroid Build Coastguard Worker int numNotSupported; //!< Number of cases not supported. 58*35238bceSAndroid Build Coastguard Worker int numWarnings; //!< Number of QualityWarning / CompatibilityWarning results. 59*35238bceSAndroid Build Coastguard Worker int numWaived; //!< Number of waived tests. 60*35238bceSAndroid Build Coastguard Worker int numDeviceLost; //!< Number of cases that caused a device lost 61*35238bceSAndroid Build Coastguard Worker bool isComplete; //!< Is run complete. 62*35238bceSAndroid Build Coastguard Worker }; 63*35238bceSAndroid Build Coastguard Worker 64*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*! 65*35238bceSAndroid Build Coastguard Worker * \brief Test case execution interface. 66*35238bceSAndroid Build Coastguard Worker * 67*35238bceSAndroid Build Coastguard Worker * TestCaseExecutor provides package-specific resources & initialization 68*35238bceSAndroid Build Coastguard Worker * for test cases. 69*35238bceSAndroid Build Coastguard Worker * 70*35238bceSAndroid Build Coastguard Worker * \todo [2015-03-18 pyry] Replace with following API: 71*35238bceSAndroid Build Coastguard Worker * 72*35238bceSAndroid Build Coastguard Worker * class TestInstance 73*35238bceSAndroid Build Coastguard Worker * { 74*35238bceSAndroid Build Coastguard Worker * public: 75*35238bceSAndroid Build Coastguard Worker * TestInstance (TestContext& testCtx); 76*35238bceSAndroid Build Coastguard Worker * tcu::TestResult iterate (void); 77*35238bceSAndroid Build Coastguard Worker * }; 78*35238bceSAndroid Build Coastguard Worker * 79*35238bceSAndroid Build Coastguard Worker * class TestInstanceFactory (???) 80*35238bceSAndroid Build Coastguard Worker * { 81*35238bceSAndroid Build Coastguard Worker * public: 82*35238bceSAndroid Build Coastguard Worker * TestInstance* createInstance (const TestCase* testCase, const std::string& path); 83*35238bceSAndroid Build Coastguard Worker * }; 84*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/ 85*35238bceSAndroid Build Coastguard Worker class TestCaseExecutor 86*35238bceSAndroid Build Coastguard Worker { 87*35238bceSAndroid Build Coastguard Worker public: ~TestCaseExecutor(void)88*35238bceSAndroid Build Coastguard Worker virtual ~TestCaseExecutor(void) 89*35238bceSAndroid Build Coastguard Worker { 90*35238bceSAndroid Build Coastguard Worker } 91*35238bceSAndroid Build Coastguard Worker 92*35238bceSAndroid Build Coastguard Worker virtual void init(TestCase *testCase, const std::string &path) = 0; 93*35238bceSAndroid Build Coastguard Worker virtual void deinit(TestCase *testCase) = 0; 94*35238bceSAndroid Build Coastguard Worker virtual TestNode::IterateResult iterate(TestCase *testCase) = 0; deinitTestPackage(TestContext & testCtx)95*35238bceSAndroid Build Coastguard Worker virtual void deinitTestPackage(TestContext &testCtx) 96*35238bceSAndroid Build Coastguard Worker { 97*35238bceSAndroid Build Coastguard Worker DE_UNREF(testCtx); 98*35238bceSAndroid Build Coastguard Worker }; usesLocalStatus()99*35238bceSAndroid Build Coastguard Worker virtual bool usesLocalStatus() 100*35238bceSAndroid Build Coastguard Worker { 101*35238bceSAndroid Build Coastguard Worker return false; 102*35238bceSAndroid Build Coastguard Worker } updateGlobalStatus(tcu::TestRunStatus & status)103*35238bceSAndroid Build Coastguard Worker virtual void updateGlobalStatus(tcu::TestRunStatus &status) 104*35238bceSAndroid Build Coastguard Worker { 105*35238bceSAndroid Build Coastguard Worker DE_UNREF(status); 106*35238bceSAndroid Build Coastguard Worker } reportDurations(tcu::TestContext & testCtx,const std::string & packageName,const int64_t & duration,const std::map<std::string,uint64_t> & groupsDurationTime)107*35238bceSAndroid Build Coastguard Worker virtual void reportDurations(tcu::TestContext &testCtx, const std::string &packageName, const int64_t &duration, 108*35238bceSAndroid Build Coastguard Worker const std::map<std::string, uint64_t> &groupsDurationTime) 109*35238bceSAndroid Build Coastguard Worker { 110*35238bceSAndroid Build Coastguard Worker DE_UNREF(testCtx); 111*35238bceSAndroid Build Coastguard Worker DE_UNREF(packageName); 112*35238bceSAndroid Build Coastguard Worker DE_UNREF(duration); 113*35238bceSAndroid Build Coastguard Worker DE_UNREF(groupsDurationTime); 114*35238bceSAndroid Build Coastguard Worker } 115*35238bceSAndroid Build Coastguard Worker }; 116*35238bceSAndroid Build Coastguard Worker 117*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*! 118*35238bceSAndroid Build Coastguard Worker * \brief Base class for test packages. 119*35238bceSAndroid Build Coastguard Worker * 120*35238bceSAndroid Build Coastguard Worker * Test packages are root-level test groups. They also provide package- 121*35238bceSAndroid Build Coastguard Worker * specific test case executor, see TestCaseExecutor. 122*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/ 123*35238bceSAndroid Build Coastguard Worker class TestPackage : public TestNode 124*35238bceSAndroid Build Coastguard Worker { 125*35238bceSAndroid Build Coastguard Worker public: 126*35238bceSAndroid Build Coastguard Worker TestPackage(TestContext &testCtx, const char *name, const char *description); 127*35238bceSAndroid Build Coastguard Worker virtual ~TestPackage(void); 128*35238bceSAndroid Build Coastguard Worker 129*35238bceSAndroid Build Coastguard Worker virtual TestCaseExecutor *createExecutor(void) const = 0; 130*35238bceSAndroid Build Coastguard Worker 131*35238bceSAndroid Build Coastguard Worker // Deprecated getArchive(void)132*35238bceSAndroid Build Coastguard Worker virtual Archive *getArchive(void) 133*35238bceSAndroid Build Coastguard Worker { 134*35238bceSAndroid Build Coastguard Worker return DE_NULL; 135*35238bceSAndroid Build Coastguard Worker } 136*35238bceSAndroid Build Coastguard Worker 137*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 138*35238bceSAndroid Build Coastguard Worker 139*35238bceSAndroid Build Coastguard Worker void setCaseListFilter(const CaseListFilter *caseListFilter); 140*35238bceSAndroid Build Coastguard Worker 141*35238bceSAndroid Build Coastguard Worker protected: 142*35238bceSAndroid Build Coastguard Worker const CaseListFilter *m_caseListFilter; 143*35238bceSAndroid Build Coastguard Worker }; 144*35238bceSAndroid Build Coastguard Worker 145*35238bceSAndroid Build Coastguard Worker // TestPackageRegistry 146*35238bceSAndroid Build Coastguard Worker 147*35238bceSAndroid Build Coastguard Worker typedef TestPackage *(*TestPackageCreateFunc)(TestContext &testCtx); 148*35238bceSAndroid Build Coastguard Worker 149*35238bceSAndroid Build Coastguard Worker class TestPackageRegistry 150*35238bceSAndroid Build Coastguard Worker { 151*35238bceSAndroid Build Coastguard Worker public: 152*35238bceSAndroid Build Coastguard Worker struct PackageInfo 153*35238bceSAndroid Build Coastguard Worker { PackageInfotcu::TestPackageRegistry::PackageInfo154*35238bceSAndroid Build Coastguard Worker PackageInfo(std::string name_, TestPackageCreateFunc createFunc_) : name(name_), createFunc(createFunc_) 155*35238bceSAndroid Build Coastguard Worker { 156*35238bceSAndroid Build Coastguard Worker } 157*35238bceSAndroid Build Coastguard Worker 158*35238bceSAndroid Build Coastguard Worker std::string name; 159*35238bceSAndroid Build Coastguard Worker TestPackageCreateFunc createFunc; 160*35238bceSAndroid Build Coastguard Worker }; 161*35238bceSAndroid Build Coastguard Worker 162*35238bceSAndroid Build Coastguard Worker static TestPackageRegistry *getSingleton(void); 163*35238bceSAndroid Build Coastguard Worker static void destroy(void); 164*35238bceSAndroid Build Coastguard Worker 165*35238bceSAndroid Build Coastguard Worker void registerPackage(const char *name, TestPackageCreateFunc createFunc); 166*35238bceSAndroid Build Coastguard Worker const std::vector<PackageInfo *> &getPackageInfos(void) const; 167*35238bceSAndroid Build Coastguard Worker PackageInfo *getPackageInfoByName(const char *name) const; 168*35238bceSAndroid Build Coastguard Worker TestPackage *createPackage(const char *name, TestContext &testCtx) const; 169*35238bceSAndroid Build Coastguard Worker 170*35238bceSAndroid Build Coastguard Worker private: 171*35238bceSAndroid Build Coastguard Worker TestPackageRegistry(void); 172*35238bceSAndroid Build Coastguard Worker ~TestPackageRegistry(void); 173*35238bceSAndroid Build Coastguard Worker 174*35238bceSAndroid Build Coastguard Worker static TestPackageRegistry *getOrDestroy(bool isCreate); 175*35238bceSAndroid Build Coastguard Worker 176*35238bceSAndroid Build Coastguard Worker // Member variables. 177*35238bceSAndroid Build Coastguard Worker std::vector<PackageInfo *> m_packageInfos; 178*35238bceSAndroid Build Coastguard Worker }; 179*35238bceSAndroid Build Coastguard Worker 180*35238bceSAndroid Build Coastguard Worker // TestPackageDescriptor 181*35238bceSAndroid Build Coastguard Worker 182*35238bceSAndroid Build Coastguard Worker class TestPackageDescriptor 183*35238bceSAndroid Build Coastguard Worker { 184*35238bceSAndroid Build Coastguard Worker public: 185*35238bceSAndroid Build Coastguard Worker TestPackageDescriptor(const char *name, TestPackageCreateFunc createFunc); 186*35238bceSAndroid Build Coastguard Worker ~TestPackageDescriptor(void); 187*35238bceSAndroid Build Coastguard Worker }; 188*35238bceSAndroid Build Coastguard Worker 189*35238bceSAndroid Build Coastguard Worker // TestPackageRoot 190*35238bceSAndroid Build Coastguard Worker 191*35238bceSAndroid Build Coastguard Worker class TestPackageRoot : public TestNode 192*35238bceSAndroid Build Coastguard Worker { 193*35238bceSAndroid Build Coastguard Worker public: 194*35238bceSAndroid Build Coastguard Worker TestPackageRoot(TestContext &testCtx); 195*35238bceSAndroid Build Coastguard Worker TestPackageRoot(TestContext &testCtx, const std::vector<TestNode *> &children); 196*35238bceSAndroid Build Coastguard Worker TestPackageRoot(TestContext &testCtx, const TestPackageRegistry *packageRegistry); 197*35238bceSAndroid Build Coastguard Worker virtual ~TestPackageRoot(void); 198*35238bceSAndroid Build Coastguard Worker 199*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 200*35238bceSAndroid Build Coastguard Worker }; 201*35238bceSAndroid Build Coastguard Worker 202*35238bceSAndroid Build Coastguard Worker } // namespace tcu 203*35238bceSAndroid Build Coastguard Worker 204*35238bceSAndroid Build Coastguard Worker #endif // _TCUTESTPACKAGE_HPP 205