fps_counter_test.cxx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //
  2. // fps_counter_test.cxx
  3. // engine-test
  4. //
  5. // Created by Sam Jaffe on 7/7/19.
  6. // Copyright © 2019 Sam Jaffe. All rights reserved.
  7. //
  8. #include <gmock/gmock.h>
  9. #include "game/engine/fps_counter.hpp"
  10. #include "game/engine/text_engine.hpp"
  11. #include "mock_renderer.h"
  12. #ifdef __APPLE__
  13. namespace env { namespace detail {
  14. extern void bundle(std::string const &);
  15. }}
  16. #endif
  17. using testing::IsEmpty;
  18. using testing::SizeIs;
  19. struct FpsCounterTest : testing::Test {
  20. void SetUp() override;
  21. void TearDown() override;
  22. std::shared_ptr<graphics::manager> manager;
  23. std::shared_ptr<engine::text_engine> engine;
  24. };
  25. void FpsCounterTest::SetUp() {
  26. #ifdef __APPLE__
  27. env::detail::bundle("leumasjaffe.engine-test");
  28. #endif
  29. manager.reset(new stub_manager_impl);
  30. engine.reset(new engine::text_engine("font", manager));
  31. }
  32. void FpsCounterTest::TearDown() {
  33. engine.reset();
  34. manager.reset();
  35. }
  36. TEST_F(FpsCounterTest, CanConstructCtrNoExcept) {
  37. EXPECT_NO_THROW(engine::fps_counter(engine, 5));
  38. }
  39. TEST_F(FpsCounterTest, CanFrameNoExcept) {
  40. engine::fps_counter counter(engine, 5);
  41. env::clock::duration ms_100{100000000LL};
  42. EXPECT_NO_THROW(counter.set_frame_step(ms_100));
  43. }
  44. // TODO (sjaffe): Give ability to specifiy change_after_ in ctor?
  45. TEST_F(FpsCounterTest, NoGlyphsUntilCrossesChangeThresh) {
  46. engine::fps_counter counter(engine, 5);
  47. env::clock::duration ms_100{100000000LL};
  48. EXPECT_THAT(counter.glyphs(), IsEmpty());
  49. counter.set_frame_step(ms_100);
  50. EXPECT_THAT(counter.glyphs(), IsEmpty());
  51. }
  52. // TODO (sjaffe): Test different precisions
  53. // TODO (sjaffe): Test <10 fps and >=100 fps
  54. TEST_F(FpsCounterTest, ProducesEnoughDigitsForPrecision) {
  55. engine::fps_counter counter(engine, 5);
  56. env::clock::duration ms_100{100000000LL};
  57. for (int i = 0; i < 10; ++i) {
  58. counter.set_frame_step(ms_100);
  59. }
  60. EXPECT_THAT(counter.glyphs(), SizeIs(8));
  61. }
  62. struct mock_renderer : public stub_renderer {
  63. MOCK_METHOD1(draw, void(graphics::object const &));
  64. };
  65. TEST_F(FpsCounterTest, RenderCallInvokesOneDrawPerGlyph) {
  66. // Set up expectations
  67. using testing::_;
  68. mock_renderer renderer;
  69. EXPECT_CALL(renderer, draw(_)).Times(8);
  70. // Set up counter
  71. engine::fps_counter counter(engine, 5);
  72. env::clock::duration ms_100{100000000LL};
  73. for (int i = 0; i < 10; ++i) {
  74. counter.set_frame_step(ms_100);
  75. }
  76. counter.render(renderer);
  77. }