Browse Source

Test graphics::direct_renderer::draw

Sam Jaffe 6 years ago
parent
commit
ca2a00cde1
2 changed files with 33 additions and 0 deletions
  1. 2 0
      graphics/graphics.xcodeproj/project.pbxproj
  2. 31 0
      graphics/test/renderer_test.cxx

+ 2 - 0
graphics/graphics.xcodeproj/project.pbxproj

@@ -26,6 +26,7 @@
 		CDED9C1922A2D6CE00AE5CE5 /* libgraphics.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CD3AC6E21D2C0364002B4BB0 /* libgraphics.dylib */; };
 		CDED9C4322A2FACB00AE5CE5 /* renderer_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDED9C4222A2FACB00AE5CE5 /* renderer_test.cxx */; };
 		CDED9C4622A2FCA100AE5CE5 /* GoogleMock.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD62FCDF22904AD100376440 /* GoogleMock.framework */; };
+		CDED9C4722A308AE00AE5CE5 /* libmath.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA34D9922517A3D008036A7 /* libmath.dylib */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -114,6 +115,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				CDED9C4722A308AE00AE5CE5 /* libmath.dylib in Frameworks */,
 				CDED9C4622A2FCA100AE5CE5 /* GoogleMock.framework in Frameworks */,
 				CDED9C1922A2D6CE00AE5CE5 /* libgraphics.dylib in Frameworks */,
 			);

+ 31 - 0
graphics/test/renderer_test.cxx

@@ -9,8 +9,10 @@
 #include <gmock/gmock.h>
 
 #include "../src/renderer_impl.hpp"
+#include "game/graphics/object.hpp"
 #include "game/graphics/renderer.hpp"
 #include "game/graphics/vertex.h"
+#include "game/math/shape.hpp"
 #include "matrix/matrix.hpp"
 
 struct mock_renderer_impl : graphics::renderer_impl {
@@ -21,6 +23,10 @@ struct mock_renderer_impl : graphics::renderer_impl {
   MOCK_METHOD0(flush, void());
 };
 
+identity<graphics::material> cast(unsigned int id) {
+  return *reinterpret_cast<identity<graphics::material> *>(&id);
+}
+
 struct DirectRendererTest : testing::Test {
   void SetUp() override;
   void TearDown() override;
@@ -36,6 +42,31 @@ void DirectRendererTest::SetUp() {
 
 void DirectRendererTest::TearDown() { delete mock; }
 
+TEST_F(DirectRendererTest, DrawPassesToDraw) {
+  using testing::IsEmpty;
+  EXPECT_CALL(*mock, draw(cast(1), math::matr4(), IsEmpty())).Times(1);
+  renderer->draw(cast(1), math::matr4(), {});
+}
+
+TEST_F(DirectRendererTest, DrawObjectHasEmptyTranslation) {
+  using testing::_;
+  math::dim2::rectangle const size{{{-1.f, -1.f}}, {{2.f, 2.f}}};
+  math::dim2::rectangle const tex{{{0.f, 0.f}}, {{1.f, 1.f}}};
+  graphics::object const object{size, size, cast(1), tex};
+  EXPECT_CALL(*mock, draw(cast(1), math::matr4(), _)).Times(1);
+  renderer->draw(object);
+}
+
+TEST_F(DirectRendererTest, DrawObjectHasSixVertices) {
+  using testing::SizeIs;
+  using testing::_;
+  math::dim2::rectangle const size{{{-1.f, -1.f}}, {{2.f, 2.f}}};
+  math::dim2::rectangle const tex{{{0.f, 0.f}}, {{1.f, 1.f}}};
+  graphics::object const object{size, size, cast(1), tex};
+  EXPECT_CALL(*mock, draw(_, _, SizeIs(6))).Times(1);
+  renderer->draw(object);
+}
+
 TEST_F(DirectRendererTest, ClearPassesToClear) {
   EXPECT_CALL(*mock, clear()).Times(1);
   renderer->clear();