SdlWindowApiTest.cpp 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*
  2. * author: Patrick-Christopher Mattulat
  3. * e-mail: webmaster@lynarstudios.com
  4. */
  5. #include <gmock/gmock.h>
  6. #include <test/window/mock/SdlApiMock.hpp>
  7. #include <glossary/StatusCodes.hpp>
  8. #include <gtest/gtest.h>
  9. #include <interface/AStatusCode.hpp>
  10. #include <ls-std/core/exception/IllegalArgumentException.hpp>
  11. #include <string>
  12. #include <window/SdlWindowApi.hpp>
  13. using ls::atlantis::glossary::StatusCodes;
  14. using ls::atlantis::interfaces::AStatusCode;
  15. using ls::atlantis::interfaces::ISdlApi;
  16. using ls::atlantis::window::SdlWindowApi;
  17. using ls::atlantis::window::test::SdlApiMock;
  18. using ls::std::core::IllegalArgumentException;
  19. using ::std::make_shared;
  20. using ::std::shared_ptr;
  21. using ::std::string;
  22. using ::testing::Return;
  23. using ::testing::StrEq;
  24. using ::testing::Test;
  25. namespace
  26. {
  27. class SdlWindowApiTest : public Test
  28. {
  29. public:
  30. SdlWindowApiTest() = default;
  31. ~SdlWindowApiTest() override = default;
  32. shared_ptr<SdlApiMock> sdlApiMock = make_shared<SdlApiMock>();
  33. };
  34. TEST_F(SdlWindowApiTest, constructor_nullPointer)
  35. {
  36. ASSERT_THROW(SdlWindowApi(nullptr), IllegalArgumentException);
  37. }
  38. TEST_F(SdlWindowApiTest, init)
  39. {
  40. int dummyWindowHandle = 0;
  41. auto *fakeWindow = static_cast<SDL_Window *>(static_cast<void *>(&dummyWindowHandle));
  42. EXPECT_CALL(*sdlApiMock, Init(SDL_INIT_VIDEO)).WillOnce(Return(1));
  43. EXPECT_CALL(*sdlApiMock, CreateWindow(StrEq(""), 0, 0, SDL_WINDOW_FULLSCREEN)).WillOnce(Return(fakeWindow));
  44. EXPECT_CALL(*sdlApiMock, DestroyWindow(fakeWindow));
  45. EXPECT_CALL(*sdlApiMock, Quit());
  46. ASSERT_EQ(StatusCodes::OK, SdlWindowApi(sdlApiMock).init()->getCode());
  47. }
  48. TEST_F(SdlWindowApiTest, init_failed)
  49. {
  50. const string hint = "Upsi Dupsi";
  51. EXPECT_CALL(*sdlApiMock, Init(SDL_INIT_VIDEO)).WillOnce(Return(0));
  52. EXPECT_CALL(*sdlApiMock, GetError()).WillOnce(Return(hint.c_str()));
  53. EXPECT_CALL(*sdlApiMock, Quit());
  54. const shared_ptr<AStatusCode> statusCode = SdlWindowApi(sdlApiMock).init();
  55. ASSERT_EQ(StatusCodes::WINDOW_API_LOADING_FAILED, statusCode->getCode());
  56. ASSERT_EQ(1, statusCode->getHints().size());
  57. ASSERT_STREQ(hint.c_str(), statusCode->getHints()[0].c_str());
  58. }
  59. TEST_F(SdlWindowApiTest, init_windowCreationFailed)
  60. {
  61. const string hint = "Upsi Dupsi";
  62. EXPECT_CALL(*sdlApiMock, Init(SDL_INIT_VIDEO)).WillOnce(Return(1));
  63. EXPECT_CALL(*sdlApiMock, CreateWindow(StrEq(""), 0, 0, SDL_WINDOW_FULLSCREEN)).WillOnce(Return(nullptr));
  64. EXPECT_CALL(*sdlApiMock, GetError()).WillOnce(Return(hint.c_str()));
  65. EXPECT_CALL(*sdlApiMock, Quit());
  66. const shared_ptr<AStatusCode> statusCode = SdlWindowApi(sdlApiMock).init();
  67. ASSERT_EQ(StatusCodes::WINDOW_CREATION_FAILED, statusCode->getCode());
  68. ASSERT_EQ(1, statusCode->getHints().size());
  69. ASSERT_STREQ(hint.c_str(), statusCode->getHints()[0].c_str());
  70. }
  71. }