#ifndef _TCUTESTPACKAGE_HPP #define _TCUTESTPACKAGE_HPP /*------------------------------------------------------------------------- * drawElements Quality Program Tester Core * ---------------------------------------- * * Copyright 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *//*! * \file * \brief Base class for a test case. *//*--------------------------------------------------------------------*/ #include "tcuDefs.hpp" #include "tcuTestCase.hpp" #include namespace tcu { //! Test run summary. class TestRunStatus { public: TestRunStatus (void) { clear(); } void clear (void) { numExecuted = 0; numPassed = 0; numFailed = 0; numNotSupported = 0; numWarnings = 0; numWaived = 0; isComplete = false; } int numExecuted; //!< Total number of cases executed. int numPassed; //!< Number of cases passed. int numFailed; //!< Number of cases failed. int numNotSupported; //!< Number of cases not supported. int numWarnings; //!< Number of QualityWarning / CompatibilityWarning results. int numWaived; //!< Number of waived tests. bool isComplete; //!< Is run complete. }; /*--------------------------------------------------------------------*//*! * \brief Test case execution interface. * * TestCaseExecutor provides package-specific resources & initialization * for test cases. * * \todo [2015-03-18 pyry] Replace with following API: * * class TestInstance * { * public: * TestInstance (TestContext& testCtx); * tcu::TestResult iterate (void); * }; * * class TestInstanceFactory (???) * { * public: * TestInstance* createInstance (const TestCase* testCase, const std::string& path); * }; *//*--------------------------------------------------------------------*/ class TestCaseExecutor { public: virtual ~TestCaseExecutor (void) {} virtual void init (TestCase* testCase, const std::string& path) = 0; virtual void deinit (TestCase* testCase) = 0; virtual TestNode::IterateResult iterate (TestCase* testCase) = 0; virtual void deinitTestPackage (TestContext& testCtx) { DE_UNREF(testCtx); }; virtual bool usesLocalStatus () { return false; } virtual void updateGlobalStatus (tcu::TestRunStatus& status) { DE_UNREF(status); } virtual void reportDurations (tcu::TestContext& testCtx, const std::string& packageName, const deInt64& duration, const std::map& groupsDurationTime) { DE_UNREF(testCtx); DE_UNREF(packageName); DE_UNREF(duration); DE_UNREF(groupsDurationTime); } }; /*--------------------------------------------------------------------*//*! * \brief Base class for test packages. * * Test packages are root-level test groups. They also provide package- * specific test case executor, see TestCaseExecutor. *//*--------------------------------------------------------------------*/ class TestPackage : public TestNode { public: TestPackage (TestContext& testCtx, const char* name, const char* description); virtual ~TestPackage (void); virtual TestCaseExecutor* createExecutor (void) const = 0; // Deprecated virtual Archive* getArchive (void) { return DE_NULL; } virtual IterateResult iterate (void); }; // TestPackageRegistry typedef TestPackage* (*TestPackageCreateFunc) (TestContext& testCtx); class TestPackageRegistry { public: struct PackageInfo { PackageInfo (std::string name_, TestPackageCreateFunc createFunc_) : name(name_), createFunc(createFunc_) {} std::string name; TestPackageCreateFunc createFunc; }; static TestPackageRegistry* getSingleton (void); static void destroy (void); void registerPackage (const char* name, TestPackageCreateFunc createFunc); const std::vector& getPackageInfos (void) const; PackageInfo* getPackageInfoByName (const char* name) const; TestPackage* createPackage (const char* name, TestContext& testCtx) const; private: TestPackageRegistry (void); ~TestPackageRegistry (void); static TestPackageRegistry* getOrDestroy (bool isCreate); // Member variables. std::vector m_packageInfos; }; // TestPackageDescriptor class TestPackageDescriptor { public: TestPackageDescriptor (const char* name, TestPackageCreateFunc createFunc); ~TestPackageDescriptor (void); }; // TestPackageRoot class TestPackageRoot : public TestNode { public: TestPackageRoot (TestContext& testCtx); TestPackageRoot (TestContext& testCtx, const std::vector& children); TestPackageRoot (TestContext& testCtx, const TestPackageRegistry* packageRegistry); virtual ~TestPackageRoot (void); virtual IterateResult iterate (void); }; } // tcu #endif // _TCUTESTPACKAGE_HPP