diff --git a/src/tests/utils/disposable_observable.hpp b/src/tests/utils/disposable_observable.hpp index 009d096e0..52fc47552 100644 --- a/src/tests/utils/disposable_observable.hpp +++ b/src/tests/utils/disposable_observable.hpp @@ -13,6 +13,7 @@ #include #include +#include #include template @@ -49,16 +50,18 @@ void test_operator_over_observable_with_disposable(auto&& op) { SECTION("operator disposes disposable") { - auto observable_disposable = rpp::composite_disposable_wrapper::make(); - { - auto observable = observable_with_disposable(observable_disposable); - - auto observer_disposable = rpp::composite_disposable_wrapper::make(); - op(observable) | rpp::ops::subscribe(observer_disposable, [](const auto&) {}); - - observer_disposable.dispose(); - } - CHECK(observable_disposable.is_disposed() || observable_disposable.lock().use_count() == 2); + auto observable_disposable = rpp::composite_disposable_wrapper::make(); + std::optional> saved_observer{}; + auto observable = rpp::source::create([&observable_disposable, &saved_observer](auto&& obs) { + obs.set_upstream(observable_disposable); + saved_observer.emplace(std::forward(obs).as_dynamic()); + }); + + auto observer_disposable = rpp::composite_disposable_wrapper::make(); + op(observable) | rpp::ops::subscribe(observer_disposable, [](const auto&) {}); + + observer_disposable.dispose(); + CHECK(observable_disposable.is_disposed()); } SECTION("set_upstream with fixed_disposable_strategy_selector<1>")