module.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name: tests/misc/module.cpp
  3. // Purpose: Test wxModule
  4. // Author: Francesco Montorsi (extracted from console sample)
  5. // Created: 2010-06-02
  6. // Copyright: (c) 2010 wxWidgets team
  7. ///////////////////////////////////////////////////////////////////////////////
  8. // ----------------------------------------------------------------------------
  9. // headers
  10. // ----------------------------------------------------------------------------
  11. #include "testprec.h"
  12. #ifdef __BORLANDC__
  13. # pragma hdrstop
  14. #endif
  15. #include "wx/module.h"
  16. #include "wx/wxcrt.h" // for wxStrcat()
  17. // ----------------------------------------------------------------------------
  18. // test classes derived from wxModule
  19. // ----------------------------------------------------------------------------
  20. char g_strLoadOrder[256] = "\0";
  21. class Module : public wxModule
  22. {
  23. protected:
  24. virtual bool OnInit() { wxStrcat(g_strLoadOrder, GetClassInfo()->GetClassName()); return true; }
  25. virtual void OnExit() { }
  26. };
  27. class ModuleA : public Module
  28. {
  29. public:
  30. ModuleA();
  31. private:
  32. DECLARE_DYNAMIC_CLASS(ModuleA)
  33. };
  34. class ModuleB : public Module
  35. {
  36. public:
  37. ModuleB();
  38. private:
  39. DECLARE_DYNAMIC_CLASS(ModuleB)
  40. };
  41. class ModuleC : public Module
  42. {
  43. public:
  44. ModuleC();
  45. private:
  46. DECLARE_DYNAMIC_CLASS(ModuleC)
  47. };
  48. class ModuleD : public Module
  49. {
  50. public:
  51. ModuleD();
  52. private:
  53. DECLARE_DYNAMIC_CLASS(ModuleD)
  54. };
  55. IMPLEMENT_DYNAMIC_CLASS(ModuleA, wxModule)
  56. ModuleA::ModuleA()
  57. {
  58. AddDependency(CLASSINFO(ModuleB));
  59. AddDependency(CLASSINFO(ModuleD));
  60. }
  61. IMPLEMENT_DYNAMIC_CLASS(ModuleB, wxModule)
  62. ModuleB::ModuleB()
  63. {
  64. AddDependency(CLASSINFO(ModuleC));
  65. AddDependency(CLASSINFO(ModuleD));
  66. }
  67. IMPLEMENT_DYNAMIC_CLASS(ModuleC, wxModule)
  68. ModuleC::ModuleC()
  69. {
  70. AddDependency(CLASSINFO(ModuleD));
  71. }
  72. IMPLEMENT_DYNAMIC_CLASS(ModuleD, wxModule)
  73. ModuleD::ModuleD()
  74. {
  75. }
  76. // ----------------------------------------------------------------------------
  77. // test class
  78. // ----------------------------------------------------------------------------
  79. class ModuleTestCase : public CppUnit::TestCase
  80. {
  81. public:
  82. ModuleTestCase() { }
  83. private:
  84. CPPUNIT_TEST_SUITE( ModuleTestCase );
  85. CPPUNIT_TEST( LoadOrder );
  86. CPPUNIT_TEST_SUITE_END();
  87. void LoadOrder();
  88. DECLARE_NO_COPY_CLASS(ModuleTestCase)
  89. };
  90. // register in the unnamed registry so that these tests are run by default
  91. CPPUNIT_TEST_SUITE_REGISTRATION( ModuleTestCase );
  92. // also include in its own registry so that these tests can be run alone
  93. CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( ModuleTestCase, "ModuleTestCase" );
  94. void ModuleTestCase::LoadOrder()
  95. {
  96. // module D is the only one with no dependencies and so should load as first (and so on):
  97. CPPUNIT_ASSERT_EQUAL( "ModuleDModuleCModuleBModuleA", g_strLoadOrder );
  98. }