source: filezilla/trunk/fuentes/tests/dispatch.cpp @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 3 years ago

First release to xenial

File size: 2.0 KB
Line 
1#include <libfilezilla.h>
2
3#include <event_loop.h>
4
5#include <cppunit/extensions/HelperMacros.h>
6
7class DispatchTest : public CppUnit::TestFixture
8{
9        CPPUNIT_TEST_SUITE(DispatchTest);
10        CPPUNIT_TEST(testSingle);
11        CPPUNIT_TEST(testArgs);
12        CPPUNIT_TEST(testMultiple);
13        CPPUNIT_TEST_SUITE_END();
14
15public:
16        void setUp() {}
17        void tearDown() {}
18
19        void testSingle();
20        void testArgs();
21        void testMultiple();
22};
23
24CPPUNIT_TEST_SUITE_REGISTRATION(DispatchTest);
25
26namespace {
27struct target {
28
29        void a() { ++a_; }
30        void b() { ++b_; }
31        void c() { ++c_; }
32
33        void two(int a, int b)
34        {
35                a_ += a;
36                b_ += b;
37        }
38
39        int a_{};
40        int b_{};
41        int c_{};
42};
43
44struct type1;
45typedef CEvent<type1> T1;
46
47struct type2;
48typedef CEvent<type2> T2;
49
50struct type3;
51typedef CEvent<type3> T3;
52
53struct type4;
54typedef CEvent<type4, int, int> T4;
55}
56
57void DispatchTest::testSingle()
58{
59        target t;
60
61        T1 const t1{};
62        CPPUNIT_ASSERT(Dispatch<T1>(t1, &t, &target::a));
63        CPPUNIT_ASSERT(Dispatch<T1>(t1, &t, &target::b));
64
65        T2 const t2{};
66        CPPUNIT_ASSERT(!Dispatch<T1>(t2, &t, &target::b));
67
68        CPPUNIT_ASSERT_EQUAL(t.a_, 1);
69        CPPUNIT_ASSERT_EQUAL(t.b_, 1);
70}
71
72void DispatchTest::testArgs()
73{
74        target t;
75
76        T4 const t4(1, 5);
77        CPPUNIT_ASSERT(Dispatch<T4>(t4, &t, &target::two));
78
79        T3 const t3{};
80        CPPUNIT_ASSERT(!Dispatch<T4>(t3, &t, &target::two));
81
82        CPPUNIT_ASSERT_EQUAL(t.a_, 1);
83        CPPUNIT_ASSERT_EQUAL(t.b_, 5);
84}
85
86void DispatchTest::testMultiple()
87{
88        target t;
89
90        T1 const t1{};
91        T2 const t2{};
92        T3 const t3{};
93        T4 const t4(3, 8);
94
95        CPPUNIT_ASSERT((Dispatch<T1, T2, T3>(t1, &t, &target::a, &target::b, &target::c)));
96        CPPUNIT_ASSERT((Dispatch<T1, T2, T3>(t2, &t, &target::a, &target::b, &target::c)));
97        CPPUNIT_ASSERT((Dispatch<T1, T2, T3>(t3, &t, &target::a, &target::b, &target::c)));
98        CPPUNIT_ASSERT((!Dispatch<T1, T2, T3>(t4, &t, &target::a, &target::b, &target::c)));
99
100        CPPUNIT_ASSERT_EQUAL(t.a_, 1);
101        CPPUNIT_ASSERT_EQUAL(t.b_, 1);
102        CPPUNIT_ASSERT_EQUAL(t.c_, 1);
103
104        CPPUNIT_ASSERT((Dispatch<T1, T4>(t4, &t, &target::a, &target::two)));
105
106        CPPUNIT_ASSERT_EQUAL(t.a_, 4);
107        CPPUNIT_ASSERT_EQUAL(t.b_, 9);
108}
Note: See TracBrowser for help on using the repository browser.