|
|
@@ -9,6 +9,7 @@
|
|
|
#include <gmock/gmock.h>
|
|
|
|
|
|
#include "../src/renderer_impl.hpp"
|
|
|
+#include "game/graphics/exception.h"
|
|
|
#include "game/graphics/object.hpp"
|
|
|
#include "game/graphics/renderer.hpp"
|
|
|
#include "game/graphics/vertex.h"
|
|
|
@@ -155,3 +156,41 @@ TEST_F(BatchRendererTest, BatchLimitingCanSplitTheWrites) {
|
|
|
renderer->draw(DemoObject(2));
|
|
|
renderer->draw(DemoObject(2));
|
|
|
}
|
|
|
+
|
|
|
+struct InjectRendererTest : testing::Test {
|
|
|
+protected:
|
|
|
+ void SetUp() override;
|
|
|
+ void TearDown() override;
|
|
|
+ mock_renderer_impl * mock;
|
|
|
+
|
|
|
+private:
|
|
|
+ graphics::renderer_impl_factory::scoped_binding scope_;
|
|
|
+};
|
|
|
+
|
|
|
+void InjectRendererTest::SetUp() {
|
|
|
+ mock = new mock_renderer_impl;
|
|
|
+ auto & factory = graphics::renderer_impl_factory::instance();
|
|
|
+ scope_ = factory.bind_scoped("mock", [this]() { return mock; });
|
|
|
+}
|
|
|
+
|
|
|
+void InjectRendererTest::TearDown() { delete mock; }
|
|
|
+
|
|
|
+TEST_F(InjectRendererTest, ThrowsOnRequestOfBlank) {
|
|
|
+ EXPECT_THROW(graphics::direct_renderer(""),
|
|
|
+ graphics::unmapped_enum<graphics::driver>);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(UnboundRendererTest, ThrowsOnRequestOfUnboundDriver) {
|
|
|
+ EXPECT_THROW(graphics::direct_renderer("mock"),
|
|
|
+ graphics::unmapped_enum<graphics::driver>);
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(InjectRendererTest, SuccessfulConstructionWithBoundImpl) {
|
|
|
+ EXPECT_NO_THROW(graphics::direct_renderer("mock"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(InjectRendererTest, BoundImplIsSamePointed) {
|
|
|
+ graphics::direct_renderer renderer("mock");
|
|
|
+ EXPECT_CALL(*mock, draw(cast(1), math::matr4(), IsEmpty())).Times(1);
|
|
|
+ renderer.draw(cast(1), math::matr4(), {});
|
|
|
+}
|