SpTest.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "SpBase.h"
  2. #include "SpTest.h"
  3. #include "SpTransactionContext.h"
  4. #include "SpEntity.h"
  5. #include <vector>
  6. #include <sstream>
  7. namespace {
  8. class TestRegistry : public ITestCaseRegistry
  9. {
  10. public:
  11. TestRegistry() :m_unnamedCount(0) {}
  12. virtual ~TestRegistry() {}
  13. virtual void RegisterTest(TestCase const& testCase)
  14. {
  15. std::string name = testCase.GetTestInfo().strName;
  16. if (name.empty()) {
  17. std::ostringstream oss;
  18. oss << "Anonymous test case " << ++m_unnamedCount;
  19. return RegisterTest(testCase.CloneExceptName(oss.str()));
  20. }
  21. m_functions.push_back(testCase);
  22. }
  23. virtual std::vector<TestCase> const& getAllTests(TestConfig const& config) const {
  24. return m_functions;
  25. }
  26. private:
  27. std::vector<TestCase> m_functions;
  28. size_t m_unnamedCount;
  29. };
  30. class CTestRegistryHub : public ITestRegistryHub {
  31. CTestRegistryHub(CTestRegistryHub const&) = delete;
  32. CTestRegistryHub& operator = (CTestRegistryHub const&) = delete;
  33. public:
  34. CTestRegistryHub() {}
  35. virtual void RegisterTest(TestCase const& testInfo) override
  36. {
  37. m_testCaseRegistry.RegisterTest(testInfo);
  38. }
  39. virtual ITestCaseRegistry const& GetTestCaseRegistry() const override
  40. {
  41. return m_testCaseRegistry;
  42. }
  43. private:
  44. TestRegistry m_testCaseRegistry;
  45. };
  46. CTestRegistryHub*& getTheRegistryHub() {
  47. static CTestRegistryHub* theRegistryHub = nullptr;
  48. if (!theRegistryHub) {
  49. theRegistryHub = new CTestRegistryHub();
  50. }
  51. return theRegistryHub;
  52. }
  53. }
  54. SPBASE_API ITestRegistryHub& GetRegistryHub()
  55. {
  56. return *getTheRegistryHub();
  57. }
  58. SPBASE_API TestCase MakeTestCase(IMethodTestCase* testCase,
  59. std::string const& className,
  60. std::string const& name,
  61. std::string const& desc,
  62. SourceLineInfo const& lineInfo)
  63. {
  64. TestCaseInfo info(name, className, desc, lineInfo);
  65. return TestCase(testCase, info);
  66. }
  67. SPBASE_API void RegisterTestCaseFunction(TestFunction function,
  68. NameAndDesc const& nameAndDesc,
  69. SourceLineInfo const& lineInfo
  70. )
  71. {
  72. RegisterTestCase(new DefaultFuncTestCase(function), "", nameAndDesc, lineInfo);
  73. }
  74. SPBASE_API void RegisterTestCase(IMethodTestCase* testCase, char const* className,
  75. NameAndDesc const& nameAndDesc,
  76. SourceLineInfo const& lineInfo)
  77. {
  78. GetRegistryHub().RegisterTest(
  79. MakeTestCase(testCase, SP::Utility::ExtractClassName(className),
  80. nameAndDesc.name, nameAndDesc.description,
  81. lineInfo
  82. ));
  83. }
  84. SPBASE_API CSmartPointer<ITransactionContext>
  85. CreateMockTransactionContext(CSmartPointer<IEntityFunction>const& entityFunction)
  86. {
  87. CSmartPointer<IEntityFunction> temp = entityFunction;
  88. CSmartPointer<ITransactionContext> pTransactionContext;
  89. SpEntity* entity = temp.ConvertCase<SpEntity>().GetRawPointer();
  90. pTransactionContext.Attach(new SpMockTransactionContext(entity/*nullptr*/));
  91. return pTransactionContext;
  92. }