expect_test.cxx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. //
  2. // expect.t.h
  3. // expect
  4. //
  5. // Created by Sam Jaffe on 1/10/17.
  6. //
  7. #include <gmock/gmock.h>
  8. #include "expect/expect.hpp"
  9. struct my_error : public std::logic_error {
  10. using std::logic_error::logic_error;
  11. };
  12. using ::testing::Eq;
  13. using ::testing::HasSubstr;
  14. using ::testing::StrEq;
  15. TEST(ExpectTest, ExpectTrueIsSafe) {
  16. int i = 1;
  17. EXPECT_NO_THROW(expects(i == 1));
  18. }
  19. TEST(ExpectTest, ExpectFalseThrows) {
  20. int i = 1;
  21. EXPECT_THROW(expects(i == 2), std::logic_error);
  22. }
  23. TEST(ExpectTest, CanProvideCustomErrorType) {
  24. int i = 1;
  25. EXPECT_THROW((expects(i == 2, my_error, "error")), my_error);
  26. }
  27. TEST(ExpectTest, FailsWithErrorMessageContainingExpr) {
  28. int i = 1;
  29. try {
  30. expects(i == 2);
  31. FAIL() << "expected exception";
  32. } catch (std::exception const & e) {
  33. EXPECT_THAT(e.what(), HasSubstr("i == 2"));
  34. }
  35. }
  36. TEST(ExpectTest, CanProvideCustomErrorMessage) {
  37. int i = 1;
  38. try {
  39. expects(i == 2, "example error message");
  40. FAIL() << "expected exception";
  41. } catch (std::exception const & e) {
  42. EXPECT_THAT(e.what(), StrEq("example error message"));
  43. }
  44. }
  45. TEST(ExpectGracefulTest, ReturnsEarly) {
  46. int i = 1;
  47. expects_graceful(i == 2);
  48. FAIL() << "expected return";
  49. }
  50. TEST(ExpectGracefulTest, ReturnValueCanBeControlled) {
  51. auto get_gracefully = [](bool no) {
  52. expects_graceful(no, 7);
  53. return 1;
  54. };
  55. EXPECT_THAT(get_gracefully(true), Eq(1));
  56. EXPECT_THAT(get_gracefully(false), Eq(7));
  57. }
  58. TEST(EnsureTest, EnsureFiresOffWhenScopeExit) {
  59. int i = 7;
  60. ensures(i == 6);
  61. i = 6;
  62. }
  63. TEST(EnsureTest, ThrowsIfFailed) {
  64. int i = 7;
  65. EXPECT_THROW(ensures(i == 6), std::runtime_error);
  66. }
  67. TEST(EnsureTest, FailsWithErrorMessageContainingExpr) {
  68. int i = 1;
  69. try {
  70. { ensures(i == 2); }
  71. FAIL() << "expected exception";
  72. } catch (std::exception const & e) {
  73. EXPECT_THAT(e.what(), HasSubstr("i == 2"));
  74. }
  75. }
  76. TEST(EnsureTest, CanProvideCustomErrorType) {
  77. int i = 1;
  78. EXPECT_THROW((expects(i == 2, my_error, "error")), my_error);
  79. }
  80. TEST(EnsureTest, CanProvideCustomErrorMessage) {
  81. int i = 1;
  82. try {
  83. { ensures(i == 2, "example error message"); }
  84. FAIL() << "expected exception";
  85. } catch (std::exception const & e) {
  86. EXPECT_THAT(e.what(), StrEq("example error message"));
  87. }
  88. }
  89. TEST(ReturnEnsureTest, ReturnsFirstExprIfPassesLambda) {
  90. int i = 6;
  91. EXPECT_THAT(return_ensures(i + 1, _ > 5), Eq(7));
  92. }
  93. TEST(ReturnEnsureTest, ThrowsWhenFailingLambda) {
  94. EXPECT_THROW(return_ensures(7, _ < 5), std::runtime_error);
  95. }
  96. TEST(ReturnEnsureTest, FailsWithErrorMessageContainingExprAndLambda) {
  97. try {
  98. int i = 6;
  99. (void) return_ensures(i + 1, _ < 5);
  100. FAIL() << "expected exception";
  101. } catch (std::exception const & e) {
  102. EXPECT_THAT(e.what(), HasSubstr("_ < 5"));
  103. EXPECT_THAT(e.what(), HasSubstr("i + 1"));
  104. }
  105. }
  106. TEST(ReturnEnsureTest, CanProvideCustomErrorMessage) {
  107. try {
  108. (void) return_ensures(7, _ < 5, "example error message");
  109. FAIL() << "expected exception";
  110. } catch (std::exception const & e) {
  111. EXPECT_THAT(e.what(), StrEq("example error message"));
  112. }
  113. }
  114. TEST(ReturnEnsureTest, CanProvideCustomErrorType) {
  115. EXPECT_THROW(return_ensures(7, _ < 5, my_error, "error"), my_error);
  116. }