text_engine_test.cxx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. //
  2. // text_engine_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 "game/engine/text_engine.hpp"
  9. #include <testing/xcode_gtest_helper.h>
  10. #include "mock_renderer.h"
  11. #ifdef __APPLE__
  12. namespace env::osx {
  13. extern void bundle(std::string const &);
  14. }
  15. #endif
  16. using testing::Eq;
  17. using testing::Le;
  18. using testing::SizeIs;
  19. struct TextEngineTest : testing::Test {
  20. void SetUp() override;
  21. void TearDown() override;
  22. std::shared_ptr<graphics::manager> manager;
  23. };
  24. void TextEngineTest::SetUp() {
  25. #ifdef __APPLE__
  26. env::osx::bundle("leumasjaffe.engine-test");
  27. #endif
  28. manager.reset(new stub_manager_impl);
  29. }
  30. void TextEngineTest::TearDown() { manager.reset(); }
  31. TEST_F(TextEngineTest, CanBuildFromFont) {
  32. EXPECT_NO_THROW(engine::text_engine("font", manager));
  33. }
  34. TEST_F(TextEngineTest, ThrowsOnInvalidFile) {
  35. EXPECT_ANY_THROW(engine::text_engine("missing", manager));
  36. }
  37. struct CreateTextTest : TextEngineTest {
  38. void SetUp() override;
  39. void TearDown() override;
  40. std::vector<graphics::object> out;
  41. std::unique_ptr<engine::text_engine> engine;
  42. engine::text_engine::cell const data{math::vec2(0.f, 0.f),
  43. math::vec2(10.f, 20.f), "HELLO"};
  44. };
  45. void CreateTextTest::SetUp() {
  46. TextEngineTest::SetUp();
  47. engine.reset(new engine::text_engine("font", manager));
  48. }
  49. void CreateTextTest::TearDown() {
  50. engine.reset();
  51. TextEngineTest::TearDown();
  52. }
  53. TEST_F(CreateTextTest, TextGenIsNoThrow) {
  54. EXPECT_NO_THROW(engine->create_text_cells(out, data));
  55. }
  56. TEST_F(CreateTextTest, GeneratesOneObjectPerChar) {
  57. engine->create_text_cells(out, data);
  58. EXPECT_THAT(out, SizeIs(5));
  59. }
  60. TEST_F(CreateTextTest, ShrinksOutVectorIfNeeded) {
  61. out.resize(10, {{}, {}, cast<graphics::material>(1), {}});
  62. engine->create_text_cells(out, data);
  63. EXPECT_THAT(out, SizeIs(5));
  64. }
  65. TEST_F(CreateTextTest, ObjectsDoNotOverlap) {
  66. engine->create_text_cells(out, data);
  67. for (std::size_t i = 0; i < out.size() - 1; ++i) {
  68. EXPECT_THAT(out[i].location.origin[0] + data.size[0],
  69. Le(out[i + 1].location.origin[0]));
  70. }
  71. }
  72. TEST_F(CreateTextTest, ObjectsAreOnSameHeight) {
  73. engine->create_text_cells(out, data);
  74. for (std::size_t i = 0; i < out.size(); ++i) {
  75. EXPECT_THAT(out[i].location.origin[1], Eq(data.origin[1]));
  76. }
  77. }
  78. TEST_F(CreateTextTest, EachObjectIsSizedByTheCell) {
  79. engine->create_text_cells(out, data);
  80. for (auto & obj : out) {
  81. EXPECT_THAT(obj.location.size, Eq(data.size));
  82. }
  83. }