Sfoglia il codice sorgente

test: sink::before

Michele Caini 6 anni fa
parent
commit
5c7c682d41
2 ha cambiato i file con 117 aggiunte e 13 eliminazioni
  1. 0 1
      TODO
  2. 117 12
      test/entt/signal/sigh.cpp

+ 0 - 1
TODO

@@ -33,5 +33,4 @@ TODO
 * multi component registry::remove and some others?
 * multi component registry::remove and some others?
 * range based registry::remove and some others?
 * range based registry::remove and some others?
 * nested groups: AB/ABC/ABCD/... (hints: sort, check functions)
 * nested groups: AB/ABC/ABCD/... (hints: sort, check functions)
-  - sink::before and ordered calls
 * ::size_type - c'mon
 * ::size_type - c'mon

+ 117 - 12
test/entt/signal/sigh.cpp

@@ -16,6 +16,22 @@ struct sigh_listener {
     bool k{false};
     bool k{false};
 };
 };
 
 
+struct before_after {
+    void add(int v) { value += v; }
+    void mul(int v) { value *= v; }
+
+    static void static_add(int v) { before_after::value += v; }
+    static void static_mul(before_after &instance, int v) { instance.value *= v; }
+
+    static inline int value{};
+};
+
+struct SigH: public ::testing::Test {
+    void SetUp() override {
+        before_after::value = 0;
+    }
+};
+
 struct const_nonconst_noexcept {
 struct const_nonconst_noexcept {
     void f() { ++cnt; }
     void f() { ++cnt; }
     void g() noexcept { ++cnt; }
     void g() noexcept { ++cnt; }
@@ -24,7 +40,7 @@ struct const_nonconst_noexcept {
     mutable int cnt{0};
     mutable int cnt{0};
 };
 };
 
 
-TEST(SigH, Lifetime) {
+TEST_F(SigH, Lifetime) {
     using signal = entt::sigh<void(void)>;
     using signal = entt::sigh<void(void)>;
 
 
     ASSERT_NO_THROW(signal{});
     ASSERT_NO_THROW(signal{});
@@ -39,7 +55,7 @@ TEST(SigH, Lifetime) {
     ASSERT_NO_THROW(delete new signal{});
     ASSERT_NO_THROW(delete new signal{});
 }
 }
 
 
-TEST(SigH, Clear) {
+TEST_F(SigH, Clear) {
     entt::sigh<void(int &)> sigh;
     entt::sigh<void(int &)> sigh;
     entt::sink sink{sigh};
     entt::sink sink{sigh};
 
 
@@ -54,7 +70,7 @@ TEST(SigH, Clear) {
     ASSERT_TRUE(sigh.empty());
     ASSERT_TRUE(sigh.empty());
 }
 }
 
 
-TEST(SigH, Swap) {
+TEST_F(SigH, Swap) {
     entt::sigh<void(int &)> sigh1;
     entt::sigh<void(int &)> sigh1;
     entt::sigh<void(int &)> sigh2;
     entt::sigh<void(int &)> sigh2;
     entt::sink sink1{sigh1};
     entt::sink sink1{sigh1};
@@ -77,7 +93,7 @@ TEST(SigH, Swap) {
     ASSERT_FALSE(sigh2.empty());
     ASSERT_FALSE(sigh2.empty());
 }
 }
 
 
-TEST(SigH, Functions) {
+TEST_F(SigH, Functions) {
     entt::sigh<void(int &)> sigh;
     entt::sigh<void(int &)> sigh;
     entt::sink sink{sigh};
     entt::sink sink{sigh};
     int v = 0;
     int v = 0;
@@ -98,7 +114,7 @@ TEST(SigH, Functions) {
     ASSERT_EQ(v, 0);
     ASSERT_EQ(v, 0);
 }
 }
 
 
-TEST(SigH, FunctionsWithPayload) {
+TEST_F(SigH, FunctionsWithPayload) {
     entt::sigh<void()> sigh;
     entt::sigh<void()> sigh;
     entt::sink sink{sigh};
     entt::sink sink{sigh};
     int v = 0;
     int v = 0;
@@ -125,7 +141,7 @@ TEST(SigH, FunctionsWithPayload) {
     ASSERT_EQ(v, 0);
     ASSERT_EQ(v, 0);
 }
 }
 
 
-TEST(SigH, Members) {
+TEST_F(SigH, Members) {
     sigh_listener l1, l2;
     sigh_listener l1, l2;
     entt::sigh<bool(int)> sigh;
     entt::sigh<bool(int)> sigh;
     entt::sink sink{sigh};
     entt::sink sink{sigh};
@@ -156,7 +172,7 @@ TEST(SigH, Members) {
     ASSERT_EQ(1u, sigh.size());
     ASSERT_EQ(1u, sigh.size());
 }
 }
 
 
-TEST(SigH, Collector) {
+TEST_F(SigH, Collector) {
     sigh_listener listener;
     sigh_listener listener;
     entt::sigh<bool(int)> sigh;
     entt::sigh<bool(int)> sigh;
     entt::sink sink{sigh};
     entt::sink sink{sigh};
@@ -186,7 +202,7 @@ TEST(SigH, Collector) {
     ASSERT_EQ(cnt, 1);
     ASSERT_EQ(cnt, 1);
 }
 }
 
 
-TEST(SigH, CollectorVoid) {
+TEST_F(SigH, CollectorVoid) {
     sigh_listener listener;
     sigh_listener listener;
     entt::sigh<void(int)> sigh;
     entt::sigh<void(int)> sigh;
     entt::sink sink{sigh};
     entt::sink sink{sigh};
@@ -208,7 +224,7 @@ TEST(SigH, CollectorVoid) {
     ASSERT_EQ(cnt, 1);
     ASSERT_EQ(cnt, 1);
 }
 }
 
 
-TEST(SigH, Connection) {
+TEST_F(SigH, Connection) {
     entt::sigh<void(int &)> sigh;
     entt::sigh<void(int &)> sigh;
     entt::sink sink{sigh};
     entt::sink sink{sigh};
     int v = 0;
     int v = 0;
@@ -229,7 +245,7 @@ TEST(SigH, Connection) {
     ASSERT_EQ(0, v);
     ASSERT_EQ(0, v);
 }
 }
 
 
-TEST(SigH, ScopedConnection) {
+TEST_F(SigH, ScopedConnection) {
     sigh_listener listener;
     sigh_listener listener;
     entt::sigh<void(int)> sigh;
     entt::sigh<void(int)> sigh;
     entt::sink sink{sigh};
     entt::sink sink{sigh};
@@ -251,7 +267,7 @@ TEST(SigH, ScopedConnection) {
     ASSERT_TRUE(listener.k);
     ASSERT_TRUE(listener.k);
 }
 }
 
 
-TEST(SigH, ScopedConnectionConstructorsAndOperators) {
+TEST_F(SigH, ScopedConnectionConstructorsAndOperators) {
     sigh_listener listener;
     sigh_listener listener;
     entt::sigh<void(int)> sigh;
     entt::sigh<void(int)> sigh;
     entt::sink sink{sigh};
     entt::sink sink{sigh};
@@ -297,7 +313,7 @@ TEST(SigH, ScopedConnectionConstructorsAndOperators) {
     ASSERT_FALSE(listener.k);
     ASSERT_FALSE(listener.k);
 }
 }
 
 
-TEST(SigH, ConstNonConstNoExcept) {
+TEST_F(SigH, ConstNonConstNoExcept) {
     entt::sigh<void()> sigh;
     entt::sigh<void()> sigh;
     entt::sink sink{sigh};
     entt::sink sink{sigh};
     const_nonconst_noexcept functor;
     const_nonconst_noexcept functor;
@@ -321,3 +337,92 @@ TEST(SigH, ConstNonConstNoExcept) {
     ASSERT_EQ(functor.cnt, 2);
     ASSERT_EQ(functor.cnt, 2);
     ASSERT_EQ(cfunctor.cnt, 2);
     ASSERT_EQ(cfunctor.cnt, 2);
 }
 }
+
+TEST_F(SigH, BeforeFunction) {
+    entt::sigh<void(int)> sigh;
+    entt::sink sink{sigh};
+    before_after functor;
+
+    sink.connect<&before_after::add>(functor);
+    sink.connect<&before_after::static_add>();
+    sink.before<&before_after::static_add>().connect<&before_after::mul>(functor);
+    sigh.publish(2);
+
+    ASSERT_EQ(functor.value, 6);
+}
+
+TEST_F(SigH, BeforeMemberFunction) {
+    entt::sigh<void(int)> sigh;
+    entt::sink sink{sigh};
+    before_after functor;
+
+    sink.connect<&before_after::static_add>();
+    sink.connect<&before_after::add>(functor);
+    sink.before<&before_after::add>(functor).connect<&before_after::mul>(functor);
+    sigh.publish(2);
+
+    ASSERT_EQ(functor.value, 6);
+}
+
+TEST_F(SigH, BeforeFunctionWithPayload) {
+    entt::sigh<void(int)> sigh;
+    entt::sink sink{sigh};
+    before_after functor;
+
+    sink.connect<&before_after::static_add>();
+    sink.connect<&before_after::static_mul>(functor);
+    sink.before<&before_after::static_mul>(functor).connect<&before_after::add>(functor);
+    sigh.publish(2);
+
+    ASSERT_EQ(functor.value, 8);
+}
+
+TEST_F(SigH, BeforeInstanceOrPayload) {
+    entt::sigh<void(int)> sigh;
+    entt::sink sink{sigh};
+    before_after functor;
+
+    sink.connect<&before_after::static_mul>(functor);
+    sink.connect<&before_after::add>(functor);
+    sink.before(functor).connect<&before_after::static_add>();
+    sigh.publish(2);
+
+    ASSERT_EQ(functor.value, 6);
+}
+
+TEST_F(SigH, BeforeOpaqueInstanceOrPayload) {
+    entt::sigh<void(int)> sigh;
+    entt::sink sink{sigh};
+    before_after functor;
+
+    sink.connect<&before_after::static_mul>(functor);
+    sink.connect<&before_after::add>(functor);
+    sink.before(&functor).connect<&before_after::static_add>();
+    sigh.publish(2);
+
+    ASSERT_EQ(functor.value, 6);
+}
+
+TEST_F(SigH, BeforeAnythingElse) {
+    entt::sigh<void(int)> sigh;
+    entt::sink sink{sigh};
+    before_after functor;
+
+    sink.connect<&before_after::add>(functor);
+    sink.before().connect<&before_after::mul>(functor);
+    sigh.publish(2);
+
+    ASSERT_EQ(functor.value, 2);
+}
+
+TEST_F(SigH, BeforeListenerNotPresent) {
+    entt::sigh<void(int)> sigh;
+    entt::sink sink{sigh};
+    before_after functor;
+
+    sink.connect<&before_after::mul>(functor);
+    sink.before<&before_after::add>(functor).connect<&before_after::add>(functor);
+    sigh.publish(2);
+
+    ASSERT_EQ(functor.value, 2);
+}