#include #include #include "Expected.h" using namespace testing; Expected getAnswerToEverything() { return 42; } TEST(expected, valid_when_valid_returns_true) { Expected v = getAnswerToEverything(); ASSERT_TRUE(v.valid()); } TEST(expected, get_when_valid_returns_value) { Expected v = getAnswerToEverything(); ASSERT_EQ(v.get(), 42); } TEST(expected, get_when_valid_returns_value_copycon) { Expected t = getAnswerToEverything(); Expected v(t); ASSERT_TRUE(v.valid()); ASSERT_EQ(v.get(), 42); } TEST(expected, hasException_when_valid_returns_false) { Expected v = getAnswerToEverything(); ASSERT_FALSE(v.hasException()); } TEST(expected, T_fromException_is_not_valid) { auto e = Expected::fromException(std::runtime_error("hello")); ASSERT_FALSE(e.valid()); } TEST(expected, T_fromException_get_thows) { auto e = Expected::fromException(std::runtime_error("hello")); ASSERT_THROW (e.get(), std::runtime_error); } TEST(expected, T_fromException_get_thows_copycon) { auto f = Expected::fromException(std::runtime_error("hello")); auto e(f); ASSERT_THROW (e.get(), std::runtime_error); } TEST(expected, T_fromException_has_exception_true) { auto e = Expected::fromException(std::runtime_error("hello")); ASSERT_TRUE(e.hasException()); } TEST(expected, T_fromException_has_exception_false) { auto e = Expected::fromException(std::runtime_error("hello")); ASSERT_FALSE(e.hasException()); } TEST(expected, T_fromException_has_derived_exception) { auto e = Expected::fromException(std::runtime_error("hello")); ASSERT_TRUE(e.hasException()); } TEST(expected, T_fromCode_is_valid) { auto e = Expected::fromCode([]() -> int { return 42; }); ASSERT_TRUE(e.valid()); } TEST(expected, T_fromCode_get) { auto e = Expected::fromCode([]() -> int { return 42; }); ASSERT_EQ(e.get(), 42); } TEST(expected, T_fromCode_E_is_not_valid) { auto e = Expected::fromCode([]() -> int { throw std::runtime_error("hello"); }); ASSERT_FALSE(e.valid()); } TEST(expected, T_fromCode_E_get_thows) { auto e = Expected::fromCode([]() -> int { throw std::runtime_error("hello"); }); ASSERT_THROW (e.get(), std::runtime_error); } TEST(expected, T_fromCode_E_has_exception_true) { auto e = Expected::fromCode([]() -> int { throw std::runtime_error("hello"); }); ASSERT_TRUE(e.hasException()); } TEST(expected, T_fromCode_E_has_exception_false) { auto e = Expected::fromCode([]() -> int { throw std::runtime_error("hello"); }); ASSERT_FALSE(e.hasException()); } TEST(expected, T_fromCode_E_has_derived_exception) { auto e = Expected::fromCode([]() -> int { throw std::runtime_error("hello"); }); ASSERT_TRUE(e.hasException()); } //Expected getIntWithStdRuntimeError() { return Expected(); } Expected getNothing() { return Expected(); } TEST(expected_void, valid_when_valid_returns_true) { Expected v = getNothing(); ASSERT_TRUE(v.valid()); } TEST(expected_void, get_when_valid_returns_value) { Expected v = getNothing(); ASSERT_NO_THROW(v.get()); } TEST(expected_void, get_when_valid_returns_value_copycon) { Expected t = getNothing(); auto v(t); ASSERT_TRUE(v.valid()); ASSERT_NO_THROW(v.get()); } TEST(expected_void, hasException_when_valid_returns_false) { Expected v = getNothing(); ASSERT_FALSE(v.hasException()); } TEST(expected_void, void_fromException_is_not_valid) { auto e = Expected::fromException(std::runtime_error("hello")); ASSERT_THAT(e.valid(), Eq(false)); } TEST(expected_void, void_fromException_get_thows) { auto e = Expected::fromException(std::runtime_error("hello")); ASSERT_THROW (e.get(), std::runtime_error); } TEST(expected_void, void_fromException_has_exception_true) { auto e = Expected::fromException(std::runtime_error("hello")); ASSERT_THAT(e.hasException(), Eq(true)); } TEST(expected_void, void_fromException_has_exception_false) { auto e = Expected::fromException(std::runtime_error("hello")); ASSERT_THAT(e.hasException(), Eq(false)); } TEST(expected_void, void_fromException_has_derived_exception) { auto e = Expected::fromException(std::runtime_error("hello")); ASSERT_THAT(e.hasException(), Eq(true)); } TEST(expected_void, void_fromCode_is_valid) { auto e = Expected::fromCode([]() -> void { }); ASSERT_THAT(e.valid(), Eq(true)); } TEST(expected_void, void_fromCode_get) { auto e = Expected::fromCode([]() -> void { }); ASSERT_NO_THROW(e.get()); } void expected_void_throws_func() { throw std::runtime_error("hello"); } TEST(expected_void, void_fromCode_E_is_not_valid) { auto e = Expected::fromCode(expected_void_throws_func); ASSERT_THAT(e.valid(), Eq(false)); } TEST(expected_void, void_fromCode_E_get_thows) { auto e = Expected::fromCode(expected_void_throws_func); ASSERT_THROW (e.get(), std::runtime_error); } TEST(expected_void, void_fromCode_E_has_exception_true) { auto e = Expected::fromCode(expected_void_throws_func); ASSERT_THAT(e.hasException(), Eq(true)); } TEST(expected_void, void_fromCode_E_has_exception_false) { auto e = Expected::fromCode(expected_void_throws_func); ASSERT_THAT(e.hasException(), Eq(false)); } TEST(expected_void, void_fromCode_E_has_derived_exception) { auto e = Expected::fromCode(expected_void_throws_func); ASSERT_THAT(e.hasException(), Eq(true)); }