From 47001fe2440d0a7c97b0accc11cf14934c0cef93 Mon Sep 17 00:00:00 2001 From: CorentinBT Date: Tue, 9 Apr 2024 22:33:42 +0200 Subject: [PATCH 1/4] Forward selector exception in on_error_resume_next + expose some test utils --- .../rpp/observers}/mock_observer.hpp | 2 +- .../rpp/operators/on_error_resume_next.hpp | 17 ++++++++++++-- src/rpp/rpp/operators/switch_on_next.hpp | 4 ++-- .../rpp/schedulers}/test_scheduler.hpp | 0 src/rpp/rpp/sources.hpp | 3 ++- src/tests/rpp/test_buffer.cpp | 2 +- src/tests/rpp/test_combine_latest.cpp | 2 +- src/tests/rpp/test_concat.cpp | 2 +- src/tests/rpp/test_connectable_observable.cpp | 3 +-- src/tests/rpp/test_debounce.cpp | 4 ++-- src/tests/rpp/test_defer.cpp | 3 +-- src/tests/rpp/test_delay.cpp | 4 ++-- src/tests/rpp/test_distinct.cpp | 2 +- src/tests/rpp/test_distinct_until_changed.cpp | 2 +- src/tests/rpp/test_filter.cpp | 2 +- src/tests/rpp/test_finally.cpp | 2 +- src/tests/rpp/test_first.cpp | 2 +- src/tests/rpp/test_flat_map.cpp | 2 +- src/tests/rpp/test_from.cpp | 2 +- src/tests/rpp/test_group_by.cpp | 2 +- src/tests/rpp/test_interval.cpp | 4 ++-- src/tests/rpp/test_last.cpp | 2 +- src/tests/rpp/test_map.cpp | 2 +- src/tests/rpp/test_merge.cpp | 2 +- src/tests/rpp/test_observables.cpp | 2 +- src/tests/rpp/test_on_error_resume_next.cpp | 23 ++++++++++++++++++- src/tests/rpp/test_reduce.cpp | 2 +- src/tests/rpp/test_repeat.cpp | 2 +- src/tests/rpp/test_scan.cpp | 2 +- src/tests/rpp/test_scheduler.cpp | 5 ++-- src/tests/rpp/test_skip.cpp | 2 +- src/tests/rpp/test_start_with.cpp | 3 +-- src/tests/rpp/test_subjects.cpp | 2 +- src/tests/rpp/test_subscribe.cpp | 15 ++++++++---- src/tests/rpp/test_subscribe_on.cpp | 2 +- src/tests/rpp/test_switch_on_next.cpp | 2 +- src/tests/rpp/test_take.cpp | 2 +- src/tests/rpp/test_take_last.cpp | 2 +- src/tests/rpp/test_take_until.cpp | 2 +- src/tests/rpp/test_take_while.cpp | 2 +- src/tests/rpp/test_tap.cpp | 2 +- src/tests/rpp/test_throttle.cpp | 4 ++-- src/tests/rpp/test_timeout.cpp | 4 ++-- src/tests/rpp/test_timer.cpp | 5 ++-- src/tests/rpp/test_window.cpp | 2 +- src/tests/rpp/test_window_toggle.cpp | 2 +- src/tests/rpp/test_with_lastest_from.cpp | 2 +- src/tests/rpp/test_zip.cpp | 2 +- src/tests/rppqt/test_from_signal.cpp | 2 +- .../rppqt/test_main_thread_scheduler.cpp | 2 +- 50 files changed, 103 insertions(+), 66 deletions(-) rename src/{tests/utils => rpp/rpp/observers}/mock_observer.hpp (98%) rename src/{tests/utils => rpp/rpp/schedulers}/test_scheduler.hpp (100%) diff --git a/src/tests/utils/mock_observer.hpp b/src/rpp/rpp/observers/mock_observer.hpp similarity index 98% rename from src/tests/utils/mock_observer.hpp rename to src/rpp/rpp/observers/mock_observer.hpp index 1a41f02bb..7e3f8fa22 100644 --- a/src/tests/utils/mock_observer.hpp +++ b/src/rpp/rpp/observers/mock_observer.hpp @@ -12,7 +12,7 @@ #include -#include "rpp/disposables/fwd.hpp" +#include #include diff --git a/src/rpp/rpp/operators/on_error_resume_next.hpp b/src/rpp/rpp/operators/on_error_resume_next.hpp index f648f817e..2d1130281 100644 --- a/src/rpp/rpp/operators/on_error_resume_next.hpp +++ b/src/rpp/rpp/operators/on_error_resume_next.hpp @@ -38,14 +38,27 @@ namespace rpp::operators::details void on_error(const std::exception_ptr& err) const { + std::optional> selector_obs; + try + { + selector_obs.emplace(selector(err)); + } + catch (...) + { + observer.on_error(std::current_exception()); + } + if (selector_obs.has_value()) + { + std::move(selector_obs).value().subscribe(std::move(observer)); + } + disposable.dispose(); - selector(err).subscribe(std::move(observer)); } void on_completed() const { - disposable.dispose(); observer.on_completed(); + disposable.dispose(); } void set_upstream(const disposable_wrapper& d) diff --git a/src/rpp/rpp/operators/switch_on_next.hpp b/src/rpp/rpp/operators/switch_on_next.hpp index 15b017ee7..706b4060e 100644 --- a/src/rpp/rpp/operators/switch_on_next.hpp +++ b/src/rpp/rpp/operators/switch_on_next.hpp @@ -62,8 +62,8 @@ namespace rpp::operators::details void on_error(const std::exception_ptr& err) const { - m_state->dispose(); m_state->get_observer()->on_error(err); + m_state->dispose(); } void on_completed() const @@ -106,8 +106,8 @@ namespace rpp::operators::details void on_error(const std::exception_ptr& err) const { - m_state->dispose(); m_state->get_observer()->on_error(err); + m_state->dispose(); } void on_completed() const diff --git a/src/tests/utils/test_scheduler.hpp b/src/rpp/rpp/schedulers/test_scheduler.hpp similarity index 100% rename from src/tests/utils/test_scheduler.hpp rename to src/rpp/rpp/schedulers/test_scheduler.hpp diff --git a/src/rpp/rpp/sources.hpp b/src/rpp/rpp/sources.hpp index 9eac3e7da..d1427ec5a 100644 --- a/src/rpp/rpp/sources.hpp +++ b/src/rpp/rpp/sources.hpp @@ -26,4 +26,5 @@ #include #include #include -#include \ No newline at end of file +#include +#include \ No newline at end of file diff --git a/src/tests/rpp/test_buffer.cpp b/src/tests/rpp/test_buffer.cpp index 104c61f4f..ce13f1950 100644 --- a/src/tests/rpp/test_buffer.cpp +++ b/src/tests/rpp/test_buffer.cpp @@ -11,13 +11,13 @@ #include #include +#include #include #include #include #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEST_CASE("buffer bundles items") { diff --git a/src/tests/rpp/test_combine_latest.cpp b/src/tests/rpp/test_combine_latest.cpp index 8d9f195fa..d14c31f32 100644 --- a/src/tests/rpp/test_combine_latest.cpp +++ b/src/tests/rpp/test_combine_latest.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -21,7 +22,6 @@ #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include "snitch_logging.hpp" TEST_CASE("combine_latest bundles items") diff --git a/src/tests/rpp/test_concat.cpp b/src/tests/rpp/test_concat.cpp index f8f52af82..f450beb38 100644 --- a/src/tests/rpp/test_concat.cpp +++ b/src/tests/rpp/test_concat.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -24,7 +25,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include "snitch_logging.hpp" #include diff --git a/src/tests/rpp/test_connectable_observable.cpp b/src/tests/rpp/test_connectable_observable.cpp index bc28a2748..83b651ef6 100644 --- a/src/tests/rpp/test_connectable_observable.cpp +++ b/src/tests/rpp/test_connectable_observable.cpp @@ -11,13 +11,12 @@ #include #include +#include #include #include #include #include -#include "mock_observer.hpp" - TEST_CASE("connectable observable") { auto mock = mock_observer_strategy{}; diff --git a/src/tests/rpp/test_debounce.cpp b/src/tests/rpp/test_debounce.cpp index 4cd525274..222294735 100644 --- a/src/tests/rpp/test_debounce.cpp +++ b/src/tests/rpp/test_debounce.cpp @@ -10,12 +10,12 @@ #include +#include #include +#include #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" -#include "test_scheduler.hpp" TEST_CASE("debounce emit only items where timeout reached") diff --git a/src/tests/rpp/test_defer.cpp b/src/tests/rpp/test_defer.cpp index 81175002b..871b88545 100644 --- a/src/tests/rpp/test_defer.cpp +++ b/src/tests/rpp/test_defer.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -17,8 +18,6 @@ #include #include -#include "mock_observer.hpp" - TEST_CASE("defer on different sources") { auto mock = mock_observer_strategy{}; diff --git a/src/tests/rpp/test_delay.cpp b/src/tests/rpp/test_delay.cpp index 1a5e6a980..42790c870 100644 --- a/src/tests/rpp/test_delay.cpp +++ b/src/tests/rpp/test_delay.cpp @@ -10,18 +10,18 @@ #include +#include #include #include #include +#include #include #include #include #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include "snitch_logging.hpp" -#include "test_scheduler.hpp" namespace { diff --git a/src/tests/rpp/test_distinct.cpp b/src/tests/rpp/test_distinct.cpp index 92ebba568..60fcee2bf 100644 --- a/src/tests/rpp/test_distinct.cpp +++ b/src/tests/rpp/test_distinct.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -17,7 +18,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEMPLATE_TEST_CASE("distinct filters out repeated values and emit only items that have not already been emitted", "", rpp::memory_model::use_stack, rpp::memory_model::use_shared) { diff --git a/src/tests/rpp/test_distinct_until_changed.cpp b/src/tests/rpp/test_distinct_until_changed.cpp index 38649328d..12c1b2484 100644 --- a/src/tests/rpp/test_distinct_until_changed.cpp +++ b/src/tests/rpp/test_distinct_until_changed.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -17,7 +18,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEMPLATE_TEST_CASE("distinct_until_changed filters out consecutive duplicates and send first value from duplicates", "", rpp::memory_model::use_stack, rpp::memory_model::use_shared) diff --git a/src/tests/rpp/test_filter.cpp b/src/tests/rpp/test_filter.cpp index 4b6a8aadf..b28c62f71 100644 --- a/src/tests/rpp/test_filter.cpp +++ b/src/tests/rpp/test_filter.cpp @@ -10,12 +10,12 @@ #include +#include #include #include #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include #include diff --git a/src/tests/rpp/test_finally.cpp b/src/tests/rpp/test_finally.cpp index 2214528b2..ea30b834b 100644 --- a/src/tests/rpp/test_finally.cpp +++ b/src/tests/rpp/test_finally.cpp @@ -10,11 +10,11 @@ #include +#include #include #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEST_CASE("finally executes only at the end") { diff --git a/src/tests/rpp/test_first.cpp b/src/tests/rpp/test_first.cpp index e7eabf774..9e55f8fac 100644 --- a/src/tests/rpp/test_first.cpp +++ b/src/tests/rpp/test_first.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -18,7 +19,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEST_CASE("first only emits once") diff --git a/src/tests/rpp/test_flat_map.cpp b/src/tests/rpp/test_flat_map.cpp index 0cf949bc8..ed9a2130f 100644 --- a/src/tests/rpp/test_flat_map.cpp +++ b/src/tests/rpp/test_flat_map.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -22,7 +23,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include #include diff --git a/src/tests/rpp/test_from.cpp b/src/tests/rpp/test_from.cpp index 98494945d..7701da664 100644 --- a/src/tests/rpp/test_from.cpp +++ b/src/tests/rpp/test_from.cpp @@ -10,11 +10,11 @@ #include +#include #include #include #include "copy_count_tracker.hpp" -#include "mock_observer.hpp" #include "rpp/memory_model.hpp" #include "rpp/observers/fwd.hpp" #include "rpp/schedulers/current_thread.hpp" diff --git a/src/tests/rpp/test_group_by.cpp b/src/tests/rpp/test_group_by.cpp index f84d7de47..bed5195ff 100644 --- a/src/tests/rpp/test_group_by.cpp +++ b/src/tests/rpp/test_group_by.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -19,7 +20,6 @@ #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include "rpp/disposables/composite_disposable.hpp" #include "rpp/disposables/fwd.hpp" diff --git a/src/tests/rpp/test_interval.cpp b/src/tests/rpp/test_interval.cpp index bcf4a505d..5b6ee2924 100644 --- a/src/tests/rpp/test_interval.cpp +++ b/src/tests/rpp/test_interval.cpp @@ -10,17 +10,17 @@ #include +#include #include #include #include #include #include #include +#include #include -#include "mock_observer.hpp" #include "snitch_logging.hpp" -#include "test_scheduler.hpp" #include diff --git a/src/tests/rpp/test_last.cpp b/src/tests/rpp/test_last.cpp index 05f24e01b..cb0d270a3 100644 --- a/src/tests/rpp/test_last.cpp +++ b/src/tests/rpp/test_last.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -18,7 +19,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEST_CASE("last only emits once") diff --git a/src/tests/rpp/test_map.cpp b/src/tests/rpp/test_map.cpp index 3cfac12f1..4c7c41dd7 100644 --- a/src/tests/rpp/test_map.cpp +++ b/src/tests/rpp/test_map.cpp @@ -10,12 +10,12 @@ #include +#include #include #include #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include #include diff --git a/src/tests/rpp/test_merge.cpp b/src/tests/rpp/test_merge.cpp index e59429891..13d1f7718 100644 --- a/src/tests/rpp/test_merge.cpp +++ b/src/tests/rpp/test_merge.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -23,7 +24,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include #include diff --git a/src/tests/rpp/test_observables.cpp b/src/tests/rpp/test_observables.cpp index ac076f1d9..6cf1b8bb2 100644 --- a/src/tests/rpp/test_observables.cpp +++ b/src/tests/rpp/test_observables.cpp @@ -10,13 +10,13 @@ #include #include +#include #include #include #include #include #include -#include "mock_observer.hpp" #include "rpp/disposables/fwd.hpp" #include "rpp/operators/fwd.hpp" #include "rpp/operators/subscribe.hpp" diff --git a/src/tests/rpp/test_on_error_resume_next.cpp b/src/tests/rpp/test_on_error_resume_next.cpp index c30719665..90d91a583 100644 --- a/src/tests/rpp/test_on_error_resume_next.cpp +++ b/src/tests/rpp/test_on_error_resume_next.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -17,7 +18,6 @@ #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEMPLATE_TEST_CASE("on_error_resume_next switches observable on error", "", rpp::memory_model::use_stack, rpp::memory_model::use_shared) { @@ -140,6 +140,27 @@ TEMPLATE_TEST_CASE("on_error_resume_next switches observable on error", "", rpp: } } } + + SECTION("selector throwing exception") + { + auto obs = rpp::source::create([](const auto& sub) { + sub.on_error(std::make_exception_ptr(std::runtime_error{""})); + }); + SECTION("subscribe") + { + obs | rpp::operators::on_error_resume_next([](const std::exception_ptr& ep) { + std::rethrow_exception(ep); + return rpp::source::empty(); + }) + | rpp::ops::subscribe(mock); + SECTION("observer obtains selector error exception") + { + CHECK(mock.get_total_on_next_count() == 0); + CHECK(mock.get_on_error_count() == 1); + CHECK(mock.get_on_completed_count() == 0); + } + } + } } TEST_CASE("on_error_resume_next satisfies disposable contracts") diff --git a/src/tests/rpp/test_reduce.cpp b/src/tests/rpp/test_reduce.cpp index 59020ce16..e892d9fd4 100644 --- a/src/tests/rpp/test_reduce.cpp +++ b/src/tests/rpp/test_reduce.cpp @@ -10,12 +10,12 @@ #include +#include #include #include #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEMPLATE_TEST_CASE("reduce reduces values and store state", "", rpp::memory_model::use_stack, rpp::memory_model::use_shared) { diff --git a/src/tests/rpp/test_repeat.cpp b/src/tests/rpp/test_repeat.cpp index 2205f9ac5..f62f98c54 100644 --- a/src/tests/rpp/test_repeat.cpp +++ b/src/tests/rpp/test_repeat.cpp @@ -10,13 +10,13 @@ #include +#include #include #include #include #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEST_CASE("repeat resubscribes") diff --git a/src/tests/rpp/test_scan.cpp b/src/tests/rpp/test_scan.cpp index 381508d38..36bcc50e2 100644 --- a/src/tests/rpp/test_scan.cpp +++ b/src/tests/rpp/test_scan.cpp @@ -10,12 +10,12 @@ #include +#include #include #include #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEMPLATE_TEST_CASE("scan scans values and store state", "", rpp::memory_model::use_stack, rpp::memory_model::use_shared) diff --git a/src/tests/rpp/test_scheduler.cpp b/src/tests/rpp/test_scheduler.cpp index 3e40eeec8..dd5850801 100644 --- a/src/tests/rpp/test_scheduler.cpp +++ b/src/tests/rpp/test_scheduler.cpp @@ -8,19 +8,18 @@ // Project home: https://github.com/victimsnino/ReactivePlusPlus // -#include "test_scheduler.hpp" - #include #include #include #include +#include #include #include #include +#include #include -#include "mock_observer.hpp" #include "rpp/disposables/fwd.hpp" #include diff --git a/src/tests/rpp/test_skip.cpp b/src/tests/rpp/test_skip.cpp index 44e170544..4d279d47e 100644 --- a/src/tests/rpp/test_skip.cpp +++ b/src/tests/rpp/test_skip.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -19,7 +20,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEMPLATE_TEST_CASE("skip ignores first `count` of items", diff --git a/src/tests/rpp/test_start_with.cpp b/src/tests/rpp/test_start_with.cpp index b9c59f40b..cce218588 100644 --- a/src/tests/rpp/test_start_with.cpp +++ b/src/tests/rpp/test_start_with.cpp @@ -10,10 +10,9 @@ #include +#include #include -#include "mock_observer.hpp" - TEST_CASE("start_with works as concat with prepending instead of adding at the end") { auto mock = mock_observer_strategy{}; diff --git a/src/tests/rpp/test_subjects.cpp b/src/tests/rpp/test_subjects.cpp index 89bc9e901..9e8ac1f3e 100644 --- a/src/tests/rpp/test_subjects.cpp +++ b/src/tests/rpp/test_subjects.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -18,7 +19,6 @@ #include #include "copy_count_tracker.hpp" -#include "mock_observer.hpp" #include "snitch_logging.hpp" #include diff --git a/src/tests/rpp/test_subscribe.cpp b/src/tests/rpp/test_subscribe.cpp index aecbb55c7..4c5393384 100644 --- a/src/tests/rpp/test_subscribe.cpp +++ b/src/tests/rpp/test_subscribe.cpp @@ -11,10 +11,9 @@ #include #include +#include #include -#include "mock_observer.hpp" - #include TEMPLATE_TEST_CASE("subscribe as operator", "", rpp::memory_model::use_stack, rpp::memory_model::use_shared) @@ -101,7 +100,11 @@ TEMPLATE_TEST_CASE("subscribe as operator", "", rpp::memory_model::use_stack, rp SECTION("subscribe lambdas with disposable") { static_assert(std::is_same_v{}, rpp::utils::empty_function_t{}, rpp::utils::empty_function_t<>{})), rpp::composite_disposable_wrapper>); - auto d = observable | rpp::operators::subscribe(rpp::composite_disposable_wrapper::make(), [&mock](const auto& v) { mock.on_next(v); }, rpp::utils::empty_function_t{}, rpp::utils::empty_function_t<>{}); + auto d = observable | rpp::operators::subscribe( + rpp::composite_disposable_wrapper::make(), + [&mock](const auto& v) { mock.on_next(v); }, + rpp::utils::empty_function_t{}, + rpp::utils::empty_function_t<>{}); CHECK(d.is_disposed()); CHECK(mock.get_received_values() == std::vector{1}); } @@ -109,7 +112,11 @@ TEMPLATE_TEST_CASE("subscribe as operator", "", rpp::memory_model::use_stack, rp SECTION("subscribe lambdas with disposed disposable") { static_assert(std::is_same_v{}, rpp::utils::empty_function_t{}, rpp::utils::empty_function_t<>{})), rpp::composite_disposable_wrapper>); - auto d = observable | rpp::operators::subscribe(rpp::composite_disposable_wrapper::empty(), [&mock](const auto& v) { mock.on_next(v); }, rpp::utils::empty_function_t{}, rpp::utils::empty_function_t<>{}); + auto d = observable | rpp::operators::subscribe( + rpp::composite_disposable_wrapper::empty(), + [&mock](const auto& v) { mock.on_next(v); }, + rpp::utils::empty_function_t{}, + rpp::utils::empty_function_t<>{}); CHECK(d.is_disposed()); CHECK(mock.get_received_values().empty()); } diff --git a/src/tests/rpp/test_subscribe_on.cpp b/src/tests/rpp/test_subscribe_on.cpp index 9ba8feff8..3768db543 100644 --- a/src/tests/rpp/test_subscribe_on.cpp +++ b/src/tests/rpp/test_subscribe_on.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -18,7 +19,6 @@ #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include "rpp/disposables/composite_disposable.hpp" #include "rpp/disposables/fwd.hpp" #include "rpp/operators/fwd.hpp" diff --git a/src/tests/rpp/test_switch_on_next.cpp b/src/tests/rpp/test_switch_on_next.cpp index 0e8d8db50..2690fdee6 100644 --- a/src/tests/rpp/test_switch_on_next.cpp +++ b/src/tests/rpp/test_switch_on_next.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -20,7 +21,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include "snitch_logging.hpp" TEST_CASE("switch_on_next switches observable after obtaining new one") diff --git a/src/tests/rpp/test_take.cpp b/src/tests/rpp/test_take.cpp index 61d7d8135..eeda91967 100644 --- a/src/tests/rpp/test_take.cpp +++ b/src/tests/rpp/test_take.cpp @@ -10,12 +10,12 @@ #include +#include #include #include #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEST_CASE("take operator limits emissions") diff --git a/src/tests/rpp/test_take_last.cpp b/src/tests/rpp/test_take_last.cpp index 0243cd5d0..2daf3194d 100644 --- a/src/tests/rpp/test_take_last.cpp +++ b/src/tests/rpp/test_take_last.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -19,7 +20,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEST_CASE("take_last sends last values in correct order on completed") diff --git a/src/tests/rpp/test_take_until.cpp b/src/tests/rpp/test_take_until.cpp index b35d16019..ca2108940 100644 --- a/src/tests/rpp/test_take_until.cpp +++ b/src/tests/rpp/test_take_until.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -22,7 +23,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEST_CASE("take_until mirrors both source observable and trigger observable") { diff --git a/src/tests/rpp/test_take_while.cpp b/src/tests/rpp/test_take_while.cpp index 8d76ec5b8..d5a60eb67 100644 --- a/src/tests/rpp/test_take_while.cpp +++ b/src/tests/rpp/test_take_while.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -17,7 +18,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include #include diff --git a/src/tests/rpp/test_tap.cpp b/src/tests/rpp/test_tap.cpp index 1fd7b3b12..85017f9be 100644 --- a/src/tests/rpp/test_tap.cpp +++ b/src/tests/rpp/test_tap.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -17,7 +18,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEMPLATE_TEST_CASE("tap observes emissions and doesn't modify them", "", rpp::memory_model::use_stack, rpp::memory_model::use_shared) { diff --git a/src/tests/rpp/test_throttle.cpp b/src/tests/rpp/test_throttle.cpp index cda9aa8ea..f2b96df3e 100644 --- a/src/tests/rpp/test_throttle.cpp +++ b/src/tests/rpp/test_throttle.cpp @@ -10,14 +10,14 @@ #include +#include #include #include +#include #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include "snitch_logging.hpp" -#include "test_scheduler.hpp" TEST_CASE("throttle throttles emissions") { diff --git a/src/tests/rpp/test_timeout.cpp b/src/tests/rpp/test_timeout.cpp index 4a2e5d170..daa3c098c 100644 --- a/src/tests/rpp/test_timeout.cpp +++ b/src/tests/rpp/test_timeout.cpp @@ -10,17 +10,17 @@ #include +#include #include #include +#include #include #include #include #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include "snitch_logging.hpp" -#include "test_scheduler.hpp" TEST_CASE("timeout subscribes to passed observable in case of reaching timeout") diff --git a/src/tests/rpp/test_timer.cpp b/src/tests/rpp/test_timer.cpp index a292768d8..bc8970764 100644 --- a/src/tests/rpp/test_timer.cpp +++ b/src/tests/rpp/test_timer.cpp @@ -10,11 +10,10 @@ #include +#include +#include #include -#include "mock_observer.hpp" -#include "test_scheduler.hpp" - #include TEST_CASE("timer emit single value at provided duration") diff --git a/src/tests/rpp/test_window.cpp b/src/tests/rpp/test_window.cpp index 1d0baade4..f449f27cf 100644 --- a/src/tests/rpp/test_window.cpp +++ b/src/tests/rpp/test_window.cpp @@ -10,13 +10,13 @@ #include +#include #include #include #include #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include "snitch_logging.hpp" TEST_CASE("window subdivide observable into sub-observables") diff --git a/src/tests/rpp/test_window_toggle.cpp b/src/tests/rpp/test_window_toggle.cpp index 84b5a4d76..ab4c35e2f 100644 --- a/src/tests/rpp/test_window_toggle.cpp +++ b/src/tests/rpp/test_window_toggle.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -17,7 +18,6 @@ #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" #include "rpp/schedulers/immediate.hpp" #include "snitch_logging.hpp" diff --git a/src/tests/rpp/test_with_lastest_from.cpp b/src/tests/rpp/test_with_lastest_from.cpp index 6af2d8b6a..33db928c2 100644 --- a/src/tests/rpp/test_with_lastest_from.cpp +++ b/src/tests/rpp/test_with_lastest_from.cpp @@ -10,12 +10,12 @@ #include +#include #include #include #include #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEST_CASE("with_latest_from combines observables") diff --git a/src/tests/rpp/test_zip.cpp b/src/tests/rpp/test_zip.cpp index a3e3ec27c..6b5eb6dbc 100644 --- a/src/tests/rpp/test_zip.cpp +++ b/src/tests/rpp/test_zip.cpp @@ -10,6 +10,7 @@ #include +#include #include #include #include @@ -22,7 +23,6 @@ #include "copy_count_tracker.hpp" #include "disposable_observable.hpp" -#include "mock_observer.hpp" TEST_CASE("zip zips items") { diff --git a/src/tests/rppqt/test_from_signal.cpp b/src/tests/rppqt/test_from_signal.cpp index a0b551839..7b98e8a78 100644 --- a/src/tests/rppqt/test_from_signal.cpp +++ b/src/tests/rppqt/test_from_signal.cpp @@ -43,7 +43,7 @@ struct TestQObject : public QObject #include #include "copy_count_tracker.hpp" -#include "mock_observer.hpp" +#include #include "test_from_signal.moc" TEST_CASE("from_signal can see object value from object signal") diff --git a/src/tests/rppqt/test_main_thread_scheduler.cpp b/src/tests/rppqt/test_main_thread_scheduler.cpp index cb99de881..0299b9c11 100644 --- a/src/tests/rppqt/test_main_thread_scheduler.cpp +++ b/src/tests/rppqt/test_main_thread_scheduler.cpp @@ -13,7 +13,7 @@ #include -#include "mock_observer.hpp" +#include #include "rpp/disposables/fwd.hpp" #include "rpp/schedulers/fwd.hpp" From 1003d5ef2ce5f9afb80727d07df45d6ccb9d287f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 9 Apr 2024 20:35:03 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/rpp/rpp/observers/mock_observer.hpp | 4 ++-- src/tests/rpp/test_subscribe.cpp | 12 ++---------- src/tests/rppqt/test_from_signal.cpp | 3 ++- src/tests/rppqt/test_main_thread_scheduler.cpp | 2 +- 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/rpp/rpp/observers/mock_observer.hpp b/src/rpp/rpp/observers/mock_observer.hpp index 7e3f8fa22..358ef0711 100644 --- a/src/rpp/rpp/observers/mock_observer.hpp +++ b/src/rpp/rpp/observers/mock_observer.hpp @@ -10,10 +10,10 @@ #pragma once -#include - #include +#include + #include template diff --git a/src/tests/rpp/test_subscribe.cpp b/src/tests/rpp/test_subscribe.cpp index 4c5393384..e7735282d 100644 --- a/src/tests/rpp/test_subscribe.cpp +++ b/src/tests/rpp/test_subscribe.cpp @@ -100,11 +100,7 @@ TEMPLATE_TEST_CASE("subscribe as operator", "", rpp::memory_model::use_stack, rp SECTION("subscribe lambdas with disposable") { static_assert(std::is_same_v{}, rpp::utils::empty_function_t{}, rpp::utils::empty_function_t<>{})), rpp::composite_disposable_wrapper>); - auto d = observable | rpp::operators::subscribe( - rpp::composite_disposable_wrapper::make(), - [&mock](const auto& v) { mock.on_next(v); }, - rpp::utils::empty_function_t{}, - rpp::utils::empty_function_t<>{}); + auto d = observable | rpp::operators::subscribe(rpp::composite_disposable_wrapper::make(), [&mock](const auto& v) { mock.on_next(v); }, rpp::utils::empty_function_t{}, rpp::utils::empty_function_t<>{}); CHECK(d.is_disposed()); CHECK(mock.get_received_values() == std::vector{1}); } @@ -112,11 +108,7 @@ TEMPLATE_TEST_CASE("subscribe as operator", "", rpp::memory_model::use_stack, rp SECTION("subscribe lambdas with disposed disposable") { static_assert(std::is_same_v{}, rpp::utils::empty_function_t{}, rpp::utils::empty_function_t<>{})), rpp::composite_disposable_wrapper>); - auto d = observable | rpp::operators::subscribe( - rpp::composite_disposable_wrapper::empty(), - [&mock](const auto& v) { mock.on_next(v); }, - rpp::utils::empty_function_t{}, - rpp::utils::empty_function_t<>{}); + auto d = observable | rpp::operators::subscribe(rpp::composite_disposable_wrapper::empty(), [&mock](const auto& v) { mock.on_next(v); }, rpp::utils::empty_function_t{}, rpp::utils::empty_function_t<>{}); CHECK(d.is_disposed()); CHECK(mock.get_received_values().empty()); } diff --git a/src/tests/rppqt/test_from_signal.cpp b/src/tests/rppqt/test_from_signal.cpp index 7b98e8a78..e6ff62bf5 100644 --- a/src/tests/rppqt/test_from_signal.cpp +++ b/src/tests/rppqt/test_from_signal.cpp @@ -40,10 +40,11 @@ struct TestQObject : public QObject #include +#include + #include #include "copy_count_tracker.hpp" -#include #include "test_from_signal.moc" TEST_CASE("from_signal can see object value from object signal") diff --git a/src/tests/rppqt/test_main_thread_scheduler.cpp b/src/tests/rppqt/test_main_thread_scheduler.cpp index 0299b9c11..393a765d9 100644 --- a/src/tests/rppqt/test_main_thread_scheduler.cpp +++ b/src/tests/rppqt/test_main_thread_scheduler.cpp @@ -10,10 +10,10 @@ #include #include +#include #include -#include #include "rpp/disposables/fwd.hpp" #include "rpp/schedulers/fwd.hpp" From 588bb8f551616c6061c1e6aec67def41b8a5cc22 Mon Sep 17 00:00:00 2001 From: CorentinBT Date: Wed, 10 Apr 2024 19:13:44 +0200 Subject: [PATCH 3/4] Remove disposable changes for now --- src/rpp/rpp/operators/on_error_resume_next.hpp | 6 +++--- src/rpp/rpp/operators/switch_on_next.hpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rpp/rpp/operators/on_error_resume_next.hpp b/src/rpp/rpp/operators/on_error_resume_next.hpp index 2d1130281..222778696 100644 --- a/src/rpp/rpp/operators/on_error_resume_next.hpp +++ b/src/rpp/rpp/operators/on_error_resume_next.hpp @@ -38,6 +38,8 @@ namespace rpp::operators::details void on_error(const std::exception_ptr& err) const { + disposable.dispose(); + std::optional> selector_obs; try { @@ -51,14 +53,12 @@ namespace rpp::operators::details { std::move(selector_obs).value().subscribe(std::move(observer)); } - - disposable.dispose(); } void on_completed() const { - observer.on_completed(); disposable.dispose(); + observer.on_completed(); } void set_upstream(const disposable_wrapper& d) diff --git a/src/rpp/rpp/operators/switch_on_next.hpp b/src/rpp/rpp/operators/switch_on_next.hpp index 706b4060e..b76f15963 100644 --- a/src/rpp/rpp/operators/switch_on_next.hpp +++ b/src/rpp/rpp/operators/switch_on_next.hpp @@ -106,8 +106,8 @@ namespace rpp::operators::details void on_error(const std::exception_ptr& err) const { - m_state->get_observer()->on_error(err); m_state->dispose(); + m_state->get_observer()->on_error(err); } void on_completed() const From 3ff5a8a42aa98ddead7238941263f1e5313c0be2 Mon Sep 17 00:00:00 2001 From: Aleksey Loginov Date: Wed, 10 Apr 2024 23:02:40 +0300 Subject: [PATCH 4/4] Revert a bit --- src/rpp/rpp/operators/switch_on_next.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rpp/rpp/operators/switch_on_next.hpp b/src/rpp/rpp/operators/switch_on_next.hpp index b76f15963..fc845d0c8 100644 --- a/src/rpp/rpp/operators/switch_on_next.hpp +++ b/src/rpp/rpp/operators/switch_on_next.hpp @@ -62,8 +62,8 @@ namespace rpp::operators::details void on_error(const std::exception_ptr& err) const { - m_state->get_observer()->on_error(err); m_state->dispose(); + m_state->get_observer()->on_error(err); } void on_completed() const @@ -161,4 +161,4 @@ namespace rpp::operators { return details::switch_on_next_t{}; } -} // namespace rpp::operators \ No newline at end of file +} // namespace rpp::operators