Skip to content

Commit d2b48fc

Browse files
committed
Added test for throwing in object constructor
1 parent b30f6a5 commit d2b48fc

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

tests/runtime_tests.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,14 @@ TEST_CASE("make observable", "[make_observable_unique]") {
417417
REQUIRE(instances == 0);
418418
}
419419

420+
TEST_CASE("make observable throw in constructor", "[make_observable_unique]") {
421+
REQUIRE_THROWS_AS(
422+
oup::make_observable_unique<test_object_thrower>(),
423+
throw_constructor);
424+
425+
REQUIRE(instances_thrower == 0);
426+
}
427+
420428
TEST_CASE("observer default constructor", "[observer_construction]") {
421429
{
422430
test_wptr ptr{};

tests/tests_common.hpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "oup/observable_unique_ptr.hpp"
22

3+
#include <exception>
4+
35
int instances = 0;
46
int instances_derived = 0;
57
int instances_thrower = 0;
@@ -21,9 +23,11 @@ struct test_object_derived : test_object {
2123
virtual ~test_object_derived() noexcept { --instances_derived; }
2224
};
2325

26+
struct throw_constructor : std::exception {};
27+
2428
struct test_object_thrower {
25-
test_object_thrower() { throw std::exception{}; }
26-
~test_object_thrower() noexcept { --instances_thrower; }
29+
test_object_thrower() { throw throw_constructor{}; }
30+
~test_object_thrower() { --instances_thrower; }
2731

2832
test_object_thrower(const test_object_thrower&) = delete;
2933
test_object_thrower(test_object_thrower&&) = delete;
@@ -53,7 +57,9 @@ struct test_deleter {
5357
return *this;
5458
}
5559

56-
void operator() (test_object* ptr) { delete ptr; }
60+
void operator() (test_object* ptr) noexcept { delete ptr; }
61+
void operator() (test_object_thrower* ptr) noexcept { delete ptr; }
62+
void operator() (std::nullptr_t) noexcept {}
5763
};
5864

5965
using test_ptr = oup::observable_unique_ptr<test_object>;

0 commit comments

Comments
 (0)