ConceptCore/ccl/cclCommons/test/src/testObserver.cpp
2024-04-15 22:16:14 +03:00

83 lines
1.7 KiB
C++

#define GTEST_LANG_CXX11 1
#include "gtest/gtest.h"
#include "FakeObserver.hpp"
namespace ct = ccl::types;
class UTObserver : public ::testing::Test {
public:
FakeObserver obs{};
FakeObservable object{};
};
TEST_F(UTObserver, BasicMod) {
auto basic = ct::BasicMsg{ 42U };
EXPECT_EQ(basic.Type(), 42U);
}
TEST_F(UTObserver, NoObservers) {
EXPECT_NO_THROW(object.Notify(42U));
EXPECT_NO_THROW(object.Notify(ct::BasicMsg{ 42U }));
}
TEST_F(UTObserver, AddObserver) {
object.AddObserver(obs);
object.Notify(42U);
EXPECT_EQ(ssize(obs.events), 1);
}
TEST_F(UTObserver, ImportObservers) {
object.AddObserver(obs);
FakeObservable anotherObj{};
anotherObj.ImportObserversFrom(object);
object.Notify(42U);
EXPECT_EQ(ssize(obs.events), 1);
anotherObj.Notify(42U);
EXPECT_EQ(ssize(obs.events), 2);
}
TEST_F(UTObserver, AddDoubleObserver) {
object.AddObserver(obs);
object.AddObserver(obs);
object.Notify(42U);
EXPECT_EQ(ssize(obs.events), 2);
}
TEST_F(UTObserver, RemoveObserver) {
object.AddObserver(obs);
object.RemoveObserver(obs);
object.Notify(42U);
EXPECT_EQ(ssize(obs.events), 0);
}
TEST_F(UTObserver, RemoveDoubleObserver) {
object.AddObserver(obs);
object.AddObserver(obs);
object.RemoveObserver(obs);
object.Notify(42U);
EXPECT_EQ(ssize(obs.events), 0);
}
TEST_F(UTObserver, Notify) {
object.AddObserver(obs);
object.Notify(42U);
EXPECT_EQ(ssize(obs.events), 1);
EXPECT_EQ(obs.events[0], 42U);
}
TEST_F(UTObserver, DndStatus) {
EXPECT_FALSE(obs.DndStatus());
auto guard = obs.DndGuard();
EXPECT_TRUE(obs.DndStatus());
}
TEST_F(UTObserver, DndBlockObserve) {
object.AddObserver(obs);
auto guard = obs.DndGuard();
object.Notify(42U);
EXPECT_EQ(ssize(obs.events), 0);
}