1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-11-01 16:32:31 +01:00
openrw/tests/test_Globals.hpp

136 lines
2.9 KiB
C++
Raw Normal View History

#ifndef _TESTGLOBALS_HPP_
#define _TESTGLOBALS_HPP_
2013-12-12 11:58:14 +01:00
#ifdef _MSC_VER
#pragma warning(disable : 4305)
#endif
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305)
#endif
#include <SDL.h>
2016-09-09 22:13:22 +02:00
#include <GameWindow.hpp>
#include <boost/test/unit_test.hpp>
2016-09-09 22:13:22 +02:00
#include <core/Logger.hpp>
2015-04-18 02:11:17 +02:00
#include <engine/GameData.hpp>
#include <engine/GameState.hpp>
2016-09-09 22:13:22 +02:00
#include <engine/GameWorld.hpp>
2018-09-05 00:14:27 +02:00
#include <objects/GameObject.hpp>
#include <glm/gtx/string_cast.hpp>
2013-12-12 11:58:14 +01:00
#include <memory>
#define DATA_TEST_PREDICATE * boost::unit_test_framework::label("data-test")\
* boost::unit_test_framework::disabled()
2016-09-09 22:13:22 +02:00
std::ostream& operator<<(std::ostream& stream, glm::vec3 const& v);
// Boost moved the print_log_value struct in version 1.59
// TODO: use another testing library
#if BOOST_VERSION >= 105900
2016-09-09 22:13:22 +02:00
#define BOOST_NS_MAGIC namespace tt_detail {
#define BOOST_NS_MAGIC_CLOSING }
#else
2016-09-09 22:13:22 +02:00
#define BOOST_NS_MAGIC
#define BOOST_NS_MAGIC_CLOSING
#endif
2016-09-09 22:13:22 +02:00
namespace boost {
namespace test_tools {
BOOST_NS_MAGIC
template <>
struct print_log_value<glm::vec3> {
2016-09-09 22:13:22 +02:00
void operator()(std::ostream& s, glm::vec3 const& v) {
s << glm::to_string(v);
}
};
2019-05-24 00:38:35 +02:00
template <>
struct print_log_value<glm::vec4> {
void operator()(std::ostream& s, glm::vec4 const& v) {
s << glm::to_string(v);
}
};
BOOST_NS_MAGIC_CLOSING
2016-09-09 22:13:22 +02:00
}
}
#if BOOST_VERSION < 106400
2016-09-09 22:13:22 +02:00
namespace boost {
namespace test_tools {
BOOST_NS_MAGIC
template <>
struct print_log_value<std::nullptr_t> {
2016-09-09 22:13:22 +02:00
void operator()(std::ostream& s, std::nullptr_t) {
s << "nullptr";
}
2014-05-29 12:12:40 +02:00
};
BOOST_NS_MAGIC_CLOSING
2016-09-09 22:13:22 +02:00
}
}
#endif
2016-09-09 22:13:22 +02:00
namespace boost {
namespace test_tools {
BOOST_NS_MAGIC
template <>
struct print_log_value<GameString> {
2016-09-09 22:13:22 +02:00
void operator()(std::ostream& s, GameString const& v) {
for (GameString::size_type i = 0u; i < v.size(); ++i) {
2018-07-27 22:53:35 +02:00
s << static_cast<char>(v[i]);
2016-09-09 22:13:22 +02:00
}
}
};
BOOST_NS_MAGIC_CLOSING
2016-09-09 22:13:22 +02:00
}
}
#undef BOOST_NS_MAGIC
#undef BOOST_NS_MAGIC_CLOSING
2014-05-29 12:12:40 +02:00
2016-09-09 22:13:22 +02:00
class Global {
2013-12-12 11:58:14 +01:00
public:
2016-09-09 22:13:22 +02:00
GameWindow window;
GameData* d;
GameWorld* e;
GameState* s;
std::unique_ptr<GameData> d_;
std::unique_ptr<GameWorld> e_;
std::unique_ptr<GameState> s_;
2016-09-09 22:13:22 +02:00
Logger log;
2016-09-09 22:13:22 +02:00
Global() {
if (SDL_Init(SDL_INIT_VIDEO) < 0)
throw std::runtime_error("Failed to initialize SDL2!");
2016-09-09 22:13:22 +02:00
window.create("Tests", 800, 600, false);
window.hideCursor();
d_ = std::make_unique<GameData>(&log, getGamePath());
d = d_.get();
2016-09-09 22:13:22 +02:00
d->load();
e_ = std::make_unique<GameWorld>(&log, d);
e = e_.get();
s_ = std::make_unique<GameState>();
s = s_.get();
2016-09-09 22:13:22 +02:00
e->state = s;
2016-09-09 22:13:22 +02:00
e->dynamicsWorld->setGravity(btVector3(0.f, 0.f, 0.f));
}
2013-12-12 11:58:14 +01:00
2016-09-09 22:13:22 +02:00
~Global() {
window.close();
}
2014-05-25 23:30:50 +02:00
static std::string getGamePath();
2016-09-09 22:13:22 +02:00
static Global& get() {
static Global g;
return g;
}
2013-12-12 11:58:14 +01:00
};
#endif