Go to the documentation of this file.00001 
00009 
00010 
00011 
00012 
00013 
00014 #include <iostream>
00015 #include <gtest/gtest.h>
00016 #include <ecl/exceptions/standard_exception.hpp>
00017 #include "../../include/ecl/sigslots/signal.hpp"
00018 #include "../../include/ecl/sigslots/slot.hpp"
00019 
00020 
00021 
00022 
00023 
00024 using ecl::StandardException;
00025 using ecl::Signal;
00026 using ecl::Slot;
00027 
00031 
00032 
00033 
00034 
00035 namespace ecl {
00036 namespace sigslots {
00037 namespace tests {
00038 
00039 
00040 
00041 
00042 
00043 class A {
00044 public:
00045         A() : f_count(0), g_count(0) {}
00046 
00047         void f(const int &i) {
00048 
00049                 f_count++;
00050         }
00051         void g() {
00052                 g_count++;
00053 
00054         }
00055         int f_count, g_count;
00056 };
00057 
00058 
00059 
00060 
00061 
00062 static int f_count = 0;
00063 static int g_count = 0;
00064 
00065 void f(const int &i)
00066 {
00067         f_count++;
00068 
00069 }
00070 
00071 void g()
00072 {
00073         g_count++;
00074 
00075 }
00076 
00077 } 
00078 } 
00079 } 
00080 
00081 
00082 
00083 
00084 
00085 using namespace ecl::sigslots::tests;
00086 
00090 
00091 
00092 
00093 
00094 TEST(SigSlotsTests, voidSigSlots) {
00095 
00096         A a;
00097     Signal<> sig_void;
00098 
00099     Slot<> slot_void0(g,"void_test");
00100     Slot<> slot_void1(&A::g,a);
00101 
00102     sig_void.connect("void_test");
00103 
00104     slot_void1.connect("void_test");
00105 
00106     sig_void.emit();
00107 
00108 
00109 
00110 
00111 
00112     EXPECT_EQ(1,a.g_count);
00113     EXPECT_EQ(1,g_count);
00114 }
00115 
00116 TEST(SigSlotsTests, relay) {
00117 
00118         A a;
00119     Signal<> sig_starter;
00120     Signal<> sig_relay;
00121 
00122     Slot<> slot_relayed_goal(g);
00123 
00124     sig_starter.connect("relay");
00125     sig_relay.connectAsSlot("relay");
00126     sig_relay.connect("final_goal");
00127     slot_relayed_goal.connect("final_goal");
00128 
00129     sig_starter.emit();
00130 
00131 
00132     EXPECT_EQ(2,g_count);
00133 }
00134 
00135 TEST(SigSlotsTests,dataSigSlots) {
00136 
00137         A a;
00138     Signal<const int&> sig_int;
00139     Slot<const int&> slot_int0(f);
00140     Slot<const int&> slot_int1(&A::f,a);
00141 
00142     sig_int.connect("int_test");
00143     slot_int0.connect("int_test");
00144     slot_int1.connect("int_test");
00145 
00146     sig_int.emit(4);
00147 
00148 
00149     EXPECT_EQ(1,a.f_count);
00150     EXPECT_EQ(1,f_count);
00151 }
00152 
00153 TEST(SigSlotsTests, disconnect) {
00154 
00155     Signal<> signal;
00156     Slot<> slot(g);
00157     signal.connect("disconnect");
00158     slot.connect("disconnect");
00159     signal.emit();
00160     slot.disconnect();
00161     Signal<const int&> data_signal;
00162     Slot<const int&> data_slot(f);
00163     data_signal.connect("disconnect"); 
00164     data_slot.connect("disconnect");
00165     data_signal.emit(1);
00166     data_slot.disconnect();
00167     data_signal.emit(1); 
00168 
00169     EXPECT_EQ(3,g_count);
00170     EXPECT_EQ(2,f_count);
00171 }
00172 
00173 
00174 
00175 
00176 
00177 int main(int argc, char **argv) {
00178 
00179     testing::InitGoogleTest(&argc,argv);
00180     return RUN_ALL_TESTS();
00181 }