#include #include #include #include #include #include #include #include #include #include #include "IGeomVisitor.cxx" namespace tut { struct baseGeomVisitor { baseGeomVisitor() { // Run before each test. COMET::IOADatabase::Get().RegisterGeometryLookup(NULL); COMET::IOADatabase::Get().RegisterAlignmentLookup(NULL); if (!gGeoManager) { COMET::IOADatabase::Get().GeomId().ReadGeometry( COMET::ISHAHashValue()); } else { COMET::IOADatabase::Get().GeomId().ResetGeometry(); } COMET::IOADatabase::Get().ClearGeometryCallbacks(); COMET::IOADatabase::Get().SetGeometryOverride( COMET::IOADatabase::Get().GeomId().GetHash()); } ~baseGeomVisitor() { // Run after each test. COMET::IOADatabase::Get().RegisterGeometryLookup(NULL); COMET::IOADatabase::Get().RegisterAlignmentLookup(NULL); COMET::IOADatabase::Get().ClearGeometryCallbacks(); } }; // Declare the test typedef test_group::object testGeomVisitor; test_group groupGeomVisitor("GeomVisitor"); class IFalseVisitor: public COMET::IGeomVisitor { public: int calls; IFalseVisitor() {calls = 0;} virtual ~IFalseVisitor() {} bool VisitNode(int, const std::string& , const TGeoNode* ) { ++calls; return false; } }; // Test the default constructor and destructor. template<> template<> void testGeomVisitor::test<1> () { IFalseVisitor visitor; visitor.VisitGeometry(); ensure_equals("Visitor only called once", visitor.calls,1); } class ITrueVisitor: public COMET::IGeomVisitor { public: int calls; ITrueVisitor() {calls = 0;} virtual ~ITrueVisitor() {} bool VisitNode(int, const std::string&, const TGeoNode*) { ++calls; return true; } }; // Test the default constructor and destructor. template<> template<> void testGeomVisitor::test<2> () { ITrueVisitor visitor; visitor.VisitGeometry(); ensure_greaterthan("Visitor for many nodes", visitor.calls, 1000); ensure_equals("Visitor saw all nodes", visitor.calls, gGeoManager->CountNodes()); } };