not_null_test.cxx 994 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. //
  2. // not_null.t.h
  3. // pointers
  4. //
  5. // Created by Sam Jaffe on 12/2/16.
  6. //
  7. #include "pointers/not_null.hpp"
  8. #include <gmock/gmock.h>
  9. #include "test_stubs.h"
  10. using namespace pointers;
  11. TEST(NonNullPtrTest, ThrowsIfNullptrIsSnuckIn) {
  12. EXPECT_THROW(not_null<std::shared_ptr<int>>(std::shared_ptr<int>(nullptr)),
  13. null_pointer_exception);
  14. }
  15. TEST(NonNullPtrTest, ContainsInnerPtrForEquality) {
  16. std::shared_ptr<int> i{new int};
  17. not_null<std::shared_ptr<int>> n{i};
  18. EXPECT_THAT(n.get(), i.get());
  19. EXPECT_THAT(*n, *i);
  20. }
  21. TEST(NonNullPtrTest, CanModifyInnerValue) {
  22. std::shared_ptr<int> i{new int(5)};
  23. not_null<std::shared_ptr<int>> n{i};
  24. EXPECT_THAT(*n, 5);
  25. *n = 4;
  26. EXPECT_THAT(*i, 4);
  27. }
  28. TEST(NonNullPtrTest, DoesNotDeleteRawPtr) {
  29. bool has_delete{false};
  30. destructor_sentinal * test_struct = new destructor_sentinal{has_delete};
  31. not_null<destructor_sentinal *>{test_struct};
  32. EXPECT_FALSE(has_delete);
  33. delete test_struct;
  34. EXPECT_TRUE(has_delete);
  35. }