12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef _UNITTESTCOMPONENTINTERFACE_H_
- #define _UNITTESTCOMPONENTINTERFACE_H_
- #include "unit/test.h"
- #include "component/simComponent.h"
- #include "component/componentInterface.h"
- // This is commented out because I want to keep the explicit namespace referencing
- // so that the multiple inheritances from UnitTest doesn't screw anyone up. It will
- // also make for more readable code in the derived test-interfaces. -patw
- //using namespace UnitTesting;
- /// This is a class that will make it very easy for a component author to provide
- /// unit testing functionality from within an instantiated component.
- class UnitTestComponentInterface : public ComponentInterface, UnitTesting::UnitTest
- {
- typedef ComponentInterface Parent;
- private:
- StringTableEntry mName;
- UnitTesting::DynamicTestRegistration *mTestReg;
- // Constructors/Destructors
- public:
- UnitTestComponentInterface( const char *name )
- {
- mName = StringTable->insert( name );
- mTestReg = new UnitTesting::DynamicTestRegistration( name, this );
- }
- virtual ~UnitTestComponentInterface()
- {
- delete mTestReg;
- }
-
- // ComponentInterface overrides
- public:
- virtual bool isValid() const
- {
- return Parent::isValid() && ( mTestReg != NULL );
- }
- // UnitTest overrides
- public:
- /// This is the only function you need to overwrite to add a unit test interface
- /// your component.
- virtual void run() = 0;
- };
- // Macros
- #ifndef TORQUE_DEBUG
- # define DECLARE_UNITTEST_INTERFACE(x)
- # define CACHE_UNITTEST_INTERFACE(x)
- #else
- //-----------------------------------------------------------------------------
- # define DECLARE_UNITTEST_INTERFACE(x) \
- class x##_UnitTestInterface : public UnitTestComponentInterface \
- {\
- typedef UnitTestComponentInterface Parent; \
- public: \
- x##_UnitTestInterface() : UnitTestComponentInterface( #x ) {}; \
- virtual void run(); \
- } _##x##UnitTestInterface
- //-----------------------------------------------------------------------------
- # define CACHE_UNITTEST_INTERFACE(x) registerCachedInterface( "unittest", #x, this, &_##x##UnitTestInterface )
- #endif
- #endif
|