mock_MapService.cpp 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * mock_MapService.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 "mock_MapService.h"
  12. #include "../../lib/filesystem/Filesystem.h"
  13. #include "../../lib/mapping/CMap.h"
  14. #include "../../lib/mapping/MapFormatJson.h"
  15. MapServiceMock::MapServiceMock(const std::string & path, MapListener * mapListener_)
  16. : mapListener(mapListener_)
  17. {
  18. std::shared_ptr<CIOApi> io(new CProxyIOApi(&initialBuffer));
  19. CZipSaver saver(io, "_");
  20. const JsonNode header(JsonPath::builtin(path+CMapFormatJson::HEADER_FILE_NAME));
  21. const JsonNode objects(JsonPath::builtin(path+CMapFormatJson::OBJECTS_FILE_NAME));
  22. const JsonNode surface(JsonPath::builtin(path+"surface_terrain.json"));
  23. addToArchive(saver, header, CMapFormatJson::HEADER_FILE_NAME);
  24. addToArchive(saver, objects, CMapFormatJson::OBJECTS_FILE_NAME);
  25. addToArchive(saver, surface, "surface_terrain.json");
  26. auto undergroundPath = JsonPath::builtin(path+"underground_terrain.json");
  27. if(CResourceHandler::get()->existsResource(undergroundPath))
  28. {
  29. const JsonNode underground(undergroundPath);
  30. addToArchive(saver, underground, "underground_terrain.json");
  31. }
  32. }
  33. std::unique_ptr<CMap> MapServiceMock::loadMap() const
  34. {
  35. initialBuffer.seek(0);
  36. CMapLoaderJson initialLoader(&initialBuffer);
  37. std::unique_ptr<CMap> res = initialLoader.loadMap(nullptr);
  38. if(mapListener)
  39. mapListener->mapLoaded(res.get());
  40. return res;
  41. }
  42. std::unique_ptr<CMap> MapServiceMock::loadMap(const ResourcePath & name, IGameCallback * cb) const
  43. {
  44. return loadMap();
  45. }
  46. std::unique_ptr<CMapHeader> MapServiceMock::loadMapHeader(const ResourcePath & name) const
  47. {
  48. initialBuffer.seek(0);
  49. CMapLoaderJson initialLoader(&initialBuffer);
  50. return initialLoader.loadMapHeader();
  51. }
  52. std::unique_ptr<CMap> MapServiceMock::loadMap(const ui8 * buffer, int size, const std::string & name, const std::string & modName, const std::string & encoding, IGameCallback * cb) const
  53. {
  54. return loadMap();
  55. }
  56. std::unique_ptr<CMapHeader> MapServiceMock::loadMapHeader(const ui8 * buffer, int size, const std::string & name, const std::string & modName, const std::string & encoding) const
  57. {
  58. initialBuffer.seek(0);
  59. CMapLoaderJson initialLoader(&initialBuffer);
  60. return initialLoader.loadMapHeader();
  61. }
  62. void MapServiceMock::saveMap(const std::unique_ptr<CMap> & map, boost::filesystem::path fullPath) const
  63. {
  64. FAIL() << "Unexpected call to MapServiceMock::saveMap";
  65. }
  66. void MapServiceMock::addToArchive(CZipSaver & saver, const JsonNode & data, const std::string & filename)
  67. {
  68. auto s = data.toString();
  69. std::unique_ptr<COutputStream> stream = saver.addFile(filename);
  70. if(stream->write((const ui8*)s.c_str(), s.size()) != s.size())
  71. throw std::runtime_error("addToArchive: zip compression failed.");
  72. }