15#include "../../services/ISubject.hxx"
16#include "../../services/IObserver.hxx"
17#include "../../services/Event.hxx"
45 std::shared_ptr<svcs::services::IObserver> observer;
48 MockSubject() =
default;
49 ~MockSubject()
override =
default;
51 void attach(std::shared_ptr<svcs::services::IObserver> observer)
override {
52 observers.push_back(observer.get());
53 observer_pointers.push_back(observer);
56 void detach(std::shared_ptr<svcs::services::IObserver> observer)
override {
57 auto it = std::find(observers.begin(), observers.end(), observer.get());
58 if (it != observers.end()) {
62 auto ptr_it = std::find(observer_pointers.begin(), observer_pointers.end(), observer);
63 if (ptr_it != observer_pointers.end()) {
64 observer_pointers.erase(ptr_it);
69 recorded_notifications.push_back({event,
nullptr});
71 observer->update(event);
72 recorded_notifications.push_back({event,
nullptr});
76 void clearNotifications() {
77 recorded_notifications.clear();
80 size_t getNotificationCount()
const {
81 return recorded_notifications.size();
84 const std::vector<RecordedNotification>& getNotifications()
const {
85 return recorded_notifications;
89 for (
const auto& notification : recorded_notifications) {
90 if (notification.event.type == type) {
98 std::vector<svcs::services::IObserver*> observers;
99 std::vector<std::shared_ptr<svcs::services::IObserver>> observer_pointers;
100 mutable std::vector<RecordedNotification> recorded_notifications;
Интерфейс Subject (Издатель) (Абстрактный Базовый Класс).
Определения ISubject.hxx:35
std::vector< IObserver * > observers
Коллекция зарегистрированных наблюдателей.
Определения ISubject.hxx:40
void notify(const svcs::services::Event &event) const override
Уведомляет всех прикрепленных наблюдателей о событии.
Определения MockSubject.hxx:56
Mock объекты и тестовые дубли для тестирования основных компонентов.
Структура, описывающая событие, опубликованное ядром VCS.
Определения Event.hxx:27
Type
Типы событий, которые могут быть опубликованы.
Определения Event.hxx:31
Определения MockSubject.hxx:31