renderer_test.cxx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //
  2. // direct_renderer_test.cxx
  3. // graphics-test
  4. //
  5. // Created by Sam Jaffe on 6/1/19.
  6. // Copyright © 2019 Sam Jaffe. All rights reserved.
  7. //
  8. #include <gmock/gmock.h>
  9. #include "../src/renderer_impl.hpp"
  10. #include "game/graphics/object.hpp"
  11. #include "game/graphics/renderer.hpp"
  12. #include "game/graphics/vertex.h"
  13. #include "game/math/shape.hpp"
  14. #include "matrix/matrix.hpp"
  15. struct mock_renderer_impl : graphics::renderer_impl {
  16. MOCK_CONST_METHOD0(manager, std::shared_ptr<graphics::manager const>());
  17. MOCK_METHOD3(draw, void(identity<graphics::material>, math::matr4 const &,
  18. std::vector<graphics::vertex> const &));
  19. MOCK_METHOD0(clear, void());
  20. MOCK_METHOD0(flush, void());
  21. };
  22. identity<graphics::material> cast(unsigned int id) {
  23. return *reinterpret_cast<identity<graphics::material> *>(&id);
  24. }
  25. struct DirectRendererTest : testing::Test {
  26. void SetUp() override;
  27. void TearDown() override;
  28. std::unique_ptr<graphics::direct_renderer> renderer;
  29. mock_renderer_impl * mock;
  30. };
  31. void DirectRendererTest::SetUp() {
  32. mock = new mock_renderer_impl;
  33. renderer.reset(new graphics::direct_renderer(mock));
  34. }
  35. void DirectRendererTest::TearDown() { delete mock; }
  36. TEST_F(DirectRendererTest, DrawPassesToDraw) {
  37. using testing::IsEmpty;
  38. EXPECT_CALL(*mock, draw(cast(1), math::matr4(), IsEmpty())).Times(1);
  39. renderer->draw(cast(1), math::matr4(), {});
  40. }
  41. TEST_F(DirectRendererTest, DrawObjectHasEmptyTranslation) {
  42. using testing::_;
  43. math::dim2::rectangle const size{{{-1.f, -1.f}}, {{2.f, 2.f}}};
  44. math::dim2::rectangle const tex{{{0.f, 0.f}}, {{1.f, 1.f}}};
  45. graphics::object const object{size, size, cast(1), tex};
  46. EXPECT_CALL(*mock, draw(cast(1), math::matr4(), _)).Times(1);
  47. renderer->draw(object);
  48. }
  49. TEST_F(DirectRendererTest, DrawObjectHasSixVertices) {
  50. using testing::SizeIs;
  51. using testing::_;
  52. math::dim2::rectangle const size{{{-1.f, -1.f}}, {{2.f, 2.f}}};
  53. math::dim2::rectangle const tex{{{0.f, 0.f}}, {{1.f, 1.f}}};
  54. graphics::object const object{size, size, cast(1), tex};
  55. EXPECT_CALL(*mock, draw(_, _, SizeIs(6))).Times(1);
  56. renderer->draw(object);
  57. }
  58. TEST_F(DirectRendererTest, ClearPassesToClear) {
  59. EXPECT_CALL(*mock, clear()).Times(1);
  60. renderer->clear();
  61. }
  62. TEST_F(DirectRendererTest, FlushPassesToFlush) {
  63. EXPECT_CALL(*mock, flush()).Times(1);
  64. renderer->flush();
  65. }