|
|
@@ -15,6 +15,7 @@
|
|
|
#include <json/reader.h>
|
|
|
|
|
|
#include "game/engine/serial.hpp"
|
|
|
+#include "game/graphics/object.hpp"
|
|
|
|
|
|
Json::Value to_json(std::string const & str) {
|
|
|
Json::Value json;
|
|
|
@@ -67,3 +68,72 @@ TEST_F(SerialTest, FallbackReaderActivatesOnNull) {
|
|
|
std::string const data = "null";
|
|
|
EXPECT_THAT(engine::to_vec2(to_json(data), {{1, 5}}), Eq(expected));
|
|
|
}
|
|
|
+
|
|
|
+std::string const object_data = R"(
|
|
|
+{
|
|
|
+ "material": {
|
|
|
+ "shaderProgram": {
|
|
|
+ "fragmentShader": "serial/fragment.test",
|
|
|
+ "vertexShader": "serial/vertex.test"
|
|
|
+ },
|
|
|
+ "texture": {
|
|
|
+ "uniform": "u_normalMap"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "position": [0, 0],
|
|
|
+ "scale": 1.0
|
|
|
+}
|
|
|
+)";
|
|
|
+
|
|
|
+struct ObjectSerialTest : testing::Test {
|
|
|
+ stub_manager_impl mgr;
|
|
|
+};
|
|
|
+
|
|
|
+TEST_F(ObjectSerialTest, CanConstructFromJson) {
|
|
|
+ EXPECT_NO_THROW(engine::to_object(to_json(object_data), mgr));
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(ObjectSerialTest, DoesNotRequireShaderProgramDefinition) {
|
|
|
+ Json::Value json = to_json(object_data);
|
|
|
+ json["material"].removeMember("shaderProgram");
|
|
|
+ EXPECT_NO_THROW(engine::to_object(json, mgr));
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(ObjectSerialTest, UsesPositionFromJsonForLocation) {
|
|
|
+ Json::Value json = to_json(object_data);
|
|
|
+ {
|
|
|
+ graphics::object const obj = engine::to_object(json, mgr);
|
|
|
+ EXPECT_THAT(obj.location.origin, Eq(make_vector(0.0f, 0.0f)));
|
|
|
+ }
|
|
|
+ {
|
|
|
+ json["position"][0] = 5.f;
|
|
|
+ graphics::object const obj = engine::to_object(json, mgr);
|
|
|
+ EXPECT_THAT(obj.location.origin, Eq(make_vector(5.0f, 0.0f)));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(ObjectSerialTest, SizeIsTextureSizeTimesScale) {
|
|
|
+ Json::Value json = to_json(object_data);
|
|
|
+ {
|
|
|
+ graphics::object const obj = engine::to_object(json, mgr);
|
|
|
+ EXPECT_THAT(obj.location.size, Eq(make_vector(1.0f, 1.0f)));
|
|
|
+ }
|
|
|
+ {
|
|
|
+ json["scale"] = 0.5f;
|
|
|
+ graphics::object const obj = engine::to_object(json, mgr);
|
|
|
+ EXPECT_THAT(obj.location.size, Eq(make_vector(0.5f, 0.5f)));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(ObjectSerialTest, DefaultFrameIsEntireTex) {
|
|
|
+ graphics::object const obj = engine::to_object(to_json(object_data), mgr);
|
|
|
+ EXPECT_THAT(obj.frame.size, Eq(make_vector(1.f, 1.f)));
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(ObjectSerialTest, OverridesFrameSize) {
|
|
|
+ Json::Value json = to_json(object_data);
|
|
|
+ json["frameSize"][0] = 0.125f;
|
|
|
+ json["frameSize"][1] = 0.125f;
|
|
|
+ graphics::object const obj = engine::to_object(json, mgr);
|
|
|
+ EXPECT_THAT(obj.frame.size, Eq(make_vector(0.125f, 0.125f)));
|
|
|
+}
|