SdlWindowApiTest.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * author: Patrick-Christopher Mattulat
  3. * e-mail: webmaster@lynarstudios.com
  4. */
  5. #include <gmock/gmock.h>
  6. #include <gtest/gtest.h>
  7. #include <test/window/mock/SdlApiMock.hpp>
  8. #include <window/SdlWindowApi.hpp>
  9. #include <core/StatusCodes.hpp>
  10. #include <ls-std/core/exception/IllegalArgumentException.hpp>
  11. #include <interface/AStatusCode.hpp>
  12. #include <string>
  13. using ls::atlantis::core::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()->getId());
  47. }
  48. TEST_F(SdlWindowApiTest, init_failed)
  49. {
  50. EXPECT_CALL(*sdlApiMock, Init(SDL_INIT_VIDEO)).WillOnce(Return(0));
  51. EXPECT_CALL(*sdlApiMock, Quit());
  52. ASSERT_EQ(StatusCodes::WINDOW_API_LOADING_FAILED, SdlWindowApi(sdlApiMock).init()->getId());
  53. }
  54. TEST_F(SdlWindowApiTest, init_windowCreationFailed)
  55. {
  56. const string hint = "Upsi Dupsi";
  57. EXPECT_CALL(*sdlApiMock, Init(SDL_INIT_VIDEO)).WillOnce(Return(1));
  58. EXPECT_CALL(*sdlApiMock, CreateWindow(StrEq(""), 0, 0, SDL_WINDOW_FULLSCREEN)).WillOnce(Return(nullptr));
  59. EXPECT_CALL(*sdlApiMock, GetError()).WillOnce(Return(hint.c_str()));
  60. EXPECT_CALL(*sdlApiMock, Quit());
  61. const shared_ptr<AStatusCode> statusCode = SdlWindowApi(sdlApiMock).init();
  62. ASSERT_EQ(StatusCodes::WINDOW_CREATION_FAILED, statusCode->getId());
  63. ASSERT_EQ(1, statusCode->getHints().size());
  64. ASSERT_STREQ(hint.c_str(), statusCode->getHints()[0].c_str());
  65. }
  66. }