diff --git a/src/core/Expected.h b/src/core/Expected.h index 8813272..8d78941 100644 --- a/src/core/Expected.h +++ b/src/core/Expected.h @@ -27,7 +27,7 @@ public: Expected(const Expected& rhs) - : m_valid(rhs.valid) + : m_valid(rhs.m_valid) { if (m_valid) { new (&m_value) T(rhs.m_value); diff --git a/src/core/test/tst_expected.cpp b/src/core/test/tst_expected.cpp index 5848c13..babda3b 100644 --- a/src/core/test/tst_expected.cpp +++ b/src/core/test/tst_expected.cpp @@ -18,6 +18,14 @@ TEST(expected, get_when_valid_returns_value) 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(); @@ -36,6 +44,13 @@ TEST(expected, T_fromException_get_thows) 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")); @@ -97,6 +112,9 @@ TEST(expected, T_fromCode_E_has_derived_exception) ASSERT_TRUE(e.hasException()); } + + + //Expected getIntWithStdRuntimeError() { return Expected(); } Expected getNothing() { return Expected(); } @@ -114,17 +132,20 @@ TEST(expected_void, get_when_valid_returns_value) 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")); @@ -201,3 +222,5 @@ TEST(expected_void, void_fromCode_E_has_derived_exception) auto e = Expected::fromCode(expected_void_throws_func); ASSERT_THAT(e.hasException(), Eq(true)); } + +