MapComparer.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * MapComparer.h, 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. #pragma once
  11. #include "../lib/ScopeGuard.h"
  12. #include "../lib/JsonNode.h"
  13. namespace vstd
  14. {
  15. template<typename Func>
  16. class ScopeGuard;
  17. }
  18. class CMap;
  19. class CGObjectInstance;
  20. struct MapComparer
  21. {
  22. const CMap * actual;
  23. const CMap * expected;
  24. void compareHeader();
  25. void compareOptions();
  26. void compareObject(const CGObjectInstance * actual, const CGObjectInstance * expected);
  27. void compareObjects();
  28. void compareTerrain();
  29. void compare();
  30. void operator() (const std::unique_ptr<CMap>& actual, const std::unique_ptr<CMap>& expected);
  31. };
  32. struct JsonMapComparer
  33. {
  34. typedef std::function<void(void)> TScopeGuard;
  35. bool strict;
  36. std::list<std::string> namePath;
  37. JsonMapComparer(bool strict_);
  38. vstd::ScopeGuard<TScopeGuard> pushName(const std::string & name);
  39. std::string buildMessage(const std::string & message);
  40. void addError(const std::string & message);
  41. bool isEmpty(const JsonNode & value);
  42. void check(const bool condition, const std::string & message);
  43. void checkExcessStructField(const JsonNode & actualValue, const std::string & name, const JsonMap & expected);
  44. void checkStructField(const JsonMap & actual, const std::string & name, const JsonNode & expectedValue);
  45. void checkEqualInteger(const si64 actual, const si64 expected);
  46. void checkEqualFloat(const double actual, const double expected);
  47. void checkEqualString(const std::string & actual, const std::string & expected);
  48. void checkEqualJson(const JsonNode & actual, const JsonNode & expected);
  49. void checkEqualJson(const JsonMap & actual, const JsonMap & expected);
  50. void checkEqualJson(const JsonVector & actual, const JsonVector & expected);
  51. void compare(const std::string & name, const JsonNode & actual, const JsonNode & expected);
  52. void compareHeader(const JsonNode & actual, const JsonNode & expected);
  53. void compareObjects(const JsonNode & actual, const JsonNode & expected);
  54. };