CHealthTest.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /*
  2. * CHealthTest.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include <boost/test/unit_test.hpp>
  12. #include "../../lib/CStack.h"
  13. class CUnitHealthInfoMock : public IUnitHealthInfo
  14. {
  15. public:
  16. CUnitHealthInfoMock():
  17. maxHealth(123),
  18. baseAmount(300)
  19. {}
  20. int32_t maxHealth;
  21. int32_t baseAmount;
  22. int32_t unitMaxHealth() const override
  23. {
  24. return maxHealth;
  25. };
  26. int32_t unitBaseAmount() const override
  27. {
  28. return baseAmount;
  29. };
  30. };
  31. static void checkTotal(const CHealth & health, const CUnitHealthInfoMock & mock)
  32. {
  33. BOOST_CHECK_EQUAL(health.total(), mock.maxHealth * mock.baseAmount);
  34. }
  35. static void checkEmptyHealth(const CHealth & health, const CUnitHealthInfoMock & mock)
  36. {
  37. checkTotal(health, mock);
  38. BOOST_CHECK_EQUAL(health.getCount(), 0);
  39. BOOST_CHECK_EQUAL(health.getFirstHPleft(), 0);
  40. BOOST_CHECK_EQUAL(health.getResurrected(), 0);
  41. BOOST_CHECK_EQUAL(health.available(), 0);
  42. }
  43. static void checkFullHealth(const CHealth & health, const CUnitHealthInfoMock & mock)
  44. {
  45. checkTotal(health, mock);
  46. BOOST_CHECK_EQUAL(health.getCount(), mock.baseAmount);
  47. BOOST_CHECK_EQUAL(health.getFirstHPleft(), mock.maxHealth);
  48. BOOST_CHECK_EQUAL(health.getResurrected(), 0);
  49. BOOST_CHECK_EQUAL(health.available(), mock.maxHealth * mock.baseAmount);
  50. }
  51. static void checkDamage(CHealth & health, const int32_t initialDamage, const int32_t expectedDamage)
  52. {
  53. int32_t damage = initialDamage;
  54. health.damage(damage);
  55. BOOST_CHECK_EQUAL(damage, expectedDamage);
  56. }
  57. static void checkNormalDamage(CHealth & health, const int32_t initialDamage)
  58. {
  59. checkDamage(health, initialDamage, initialDamage);
  60. }
  61. static void checkNoDamage(CHealth & health, const int32_t initialDamage)
  62. {
  63. checkDamage(health, initialDamage, 0);
  64. }
  65. static void checkHeal(CHealth & health, EHealLevel level, EHealPower power, const int32_t initialHeal, const int32_t expectedHeal)
  66. {
  67. int32_t heal = initialHeal;
  68. health.heal(heal, level, power);
  69. BOOST_CHECK_EQUAL(heal, expectedHeal);
  70. }
  71. BOOST_AUTO_TEST_SUITE(CHealthTest_Suite)
  72. BOOST_AUTO_TEST_CASE(empty)
  73. {
  74. CUnitHealthInfoMock uhi;
  75. CHealth health(&uhi);
  76. checkEmptyHealth(health, uhi);
  77. health.init();
  78. checkFullHealth(health, uhi);
  79. health.reset();
  80. checkEmptyHealth(health, uhi);
  81. }
  82. BOOST_AUTO_TEST_CASE(damage)
  83. {
  84. CUnitHealthInfoMock uhi;
  85. CHealth health(&uhi);
  86. health.init();
  87. checkNormalDamage(health, 0);
  88. checkFullHealth(health, uhi);
  89. checkNormalDamage(health, uhi.maxHealth - 1);
  90. BOOST_CHECK_EQUAL(health.getCount(), uhi.baseAmount);
  91. BOOST_CHECK_EQUAL(health.getFirstHPleft(), 1);
  92. BOOST_CHECK_EQUAL(health.getResurrected(), 0);
  93. checkNormalDamage(health, 1);
  94. BOOST_CHECK_EQUAL(health.getCount(), uhi.baseAmount - 1);
  95. BOOST_CHECK_EQUAL(health.getFirstHPleft(), uhi.maxHealth);
  96. BOOST_CHECK_EQUAL(health.getResurrected(), 0);
  97. checkNormalDamage(health, uhi.maxHealth * (uhi.baseAmount - 1));
  98. checkEmptyHealth(health, uhi);
  99. checkNoDamage(health, 1337);
  100. checkEmptyHealth(health, uhi);
  101. }
  102. BOOST_AUTO_TEST_CASE(heal)
  103. {
  104. CUnitHealthInfoMock uhi;
  105. CHealth health(&uhi);
  106. health.init();
  107. checkNormalDamage(health, 99);
  108. BOOST_CHECK_EQUAL(health.getCount(), uhi.baseAmount);
  109. BOOST_CHECK_EQUAL(health.getFirstHPleft(), uhi.maxHealth-99);
  110. BOOST_CHECK_EQUAL(health.getResurrected(), 0);
  111. checkHeal(health, EHealLevel::HEAL, EHealPower::PERMANENT, 9, 9);
  112. BOOST_CHECK_EQUAL(health.getCount(), uhi.baseAmount);
  113. BOOST_CHECK_EQUAL(health.getFirstHPleft(), uhi.maxHealth-90);
  114. BOOST_CHECK_EQUAL(health.getResurrected(), 0);
  115. checkHeal(health, EHealLevel::RESURRECT, EHealPower::ONE_BATTLE, 40, 40);
  116. BOOST_CHECK_EQUAL(health.getCount(), uhi.baseAmount);
  117. BOOST_CHECK_EQUAL(health.getFirstHPleft(), uhi.maxHealth-50);
  118. BOOST_CHECK_EQUAL(health.getResurrected(), 0);
  119. checkHeal(health, EHealLevel::OVERHEAL, EHealPower::PERMANENT, 50, 50);
  120. checkFullHealth(health, uhi);
  121. }
  122. BOOST_AUTO_TEST_SUITE_END()