From d30405f1c26a584abc9119bb23d501fb430e435c Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Fri, 20 Aug 2021 12:08:59 +0200 Subject: [PATCH] Add failure tests for OStream and OFStream --- src/language/utils/OFStream.cpp | 9 +++++++-- src/language/utils/OStream.hpp | 2 +- tests/test_OFStream.cpp | 9 +++++++++ tests/test_OStream.cpp | 8 ++++++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/language/utils/OFStream.cpp b/src/language/utils/OFStream.cpp index 3bc5e2991..39b7cc8ec 100644 --- a/src/language/utils/OFStream.cpp +++ b/src/language/utils/OFStream.cpp @@ -6,7 +6,12 @@ OFStream::OFStream(const std::string& filename) { if (parallel::rank() == 0) { m_fstream.open(filename); - Assert(m_ostream == nullptr, "ostream was already defined"); - m_ostream = &m_fstream; + if (m_fstream.is_open()) { + m_ostream = &m_fstream; + } else { + std::stringstream error_msg; + error_msg << "cannot create file " << rang::fgB::yellow << filename << rang::style::reset; + throw NormalError(error_msg.str()); + } } } diff --git a/src/language/utils/OStream.hpp b/src/language/utils/OStream.hpp index 6abbcf668..d9410e25e 100644 --- a/src/language/utils/OStream.hpp +++ b/src/language/utils/OStream.hpp @@ -16,7 +16,7 @@ class OStream friend std::shared_ptr<const OStream> operator<<(const std::shared_ptr<const OStream>& os, const DataT& t) { - Assert(os.use_count() > 0); + Assert(os.use_count() > 0, "non allocated stream"); if (os->m_ostream != nullptr) { *os->m_ostream << t; } diff --git a/tests/test_OFStream.cpp b/tests/test_OFStream.cpp index 6170ad55f..32b4ff21b 100644 --- a/tests/test_OFStream.cpp +++ b/tests/test_OFStream.cpp @@ -46,4 +46,13 @@ TEST_CASE("OFStream", "[language]") REQUIRE(not std::filesystem::exists(filename)); } + + SECTION("invalid filename") + { + if (parallel::rank() == 0) { + const std::string filename = "badpath/invalidpath/ofstream"; + + REQUIRE_THROWS_WITH(std::make_shared<OFStream>(filename), "error: cannot create file " + filename); + } + } } diff --git a/tests/test_OStream.cpp b/tests/test_OStream.cpp index 9e01e5016..417db374e 100644 --- a/tests/test_OStream.cpp +++ b/tests/test_OStream.cpp @@ -25,4 +25,12 @@ TEST_CASE("OStream", "[language]") REQUIRE(sstr.str() == "foo3 bar"); } + +#ifndef NDEBUG + SECTION("non allocated stream") + { + std::shared_ptr<OStream> bad_os; + REQUIRE_THROWS_WITH((bad_os << 2), "non allocated stream"); + } +#endif // NDEBUG } -- GitLab