test_delegates.cpp
Go to the documentation of this file.
1 // Bring in my package's API, which is what I'm testing
4 #include <boost/bind.hpp>
5 
6 // Bring in gtest
7 #include <gtest/gtest.h>
8 
9 class Receiver {
10 public:
11  std::list<std::string> responses;
12  void handle(const can::Frame &f){
13  responses.push_back(can::tostring(f, true));
14  }
15  Receiver() = default;
16  ~Receiver() = default;
17 
18 private:
19  Receiver(const Receiver&) = delete;
20  Receiver& operator=(const Receiver&) = delete;
21 };
22 
24 
25 void fill_r2(const can::Frame &f){
26  g_r2.handle(f);
27 }
28 
29 void fill_any(Receiver &r, const can::Frame &f){
30  r.handle(f);
31 }
32 
33 TEST(DelegatesTest, testFrameDelegate)
34 {
35 
36  can::DummyInterface dummy(true);
37  Receiver r1, r3, r4, r5;
38  boost::shared_ptr<Receiver> r6(new Receiver());
39  std::shared_ptr<Receiver> r7(new Receiver());
40 
41  can::FrameListenerConstSharedPtr l1 = dummy.createMsgListener(can::CommInterface::FrameDelegate(&r1, &Receiver::handle));
42  can::FrameListenerConstSharedPtr l2 = dummy.createMsgListener(can::CommInterface::FrameDelegate(fill_r2));
43  can::FrameListenerConstSharedPtr l3 = dummy.createMsgListener(can::CommInterface::FrameDelegate(std::bind(fill_any, std::ref(r3), std::placeholders::_1)));
44  can::FrameListenerConstSharedPtr l4 = dummy.createMsgListener(std::bind(fill_any, std::ref(r4), std::placeholders::_1));
45  can::FrameListenerConstSharedPtr l5 = dummy.createMsgListener(boost::bind(fill_any, boost::ref(r5), boost::placeholders::_1));
46  can::FrameListenerConstSharedPtr l6 = dummy.createMsgListener(can::CommInterface::FrameDelegate(r6, &Receiver::handle));
47  can::FrameListenerConstSharedPtr l7 = dummy.createMsgListener(can::CommInterface::FrameDelegate(r7, &Receiver::handle));
48 
49  std::list<std::string> expected;
50  dummy.send(can::toframe("0#8200"));
51  expected.push_back("0#8200");
52 
53  EXPECT_EQ(expected, r1.responses);
54  EXPECT_EQ(expected, g_r2.responses);
55  EXPECT_EQ(expected, r3.responses);
56  EXPECT_EQ(expected, r4.responses);
57  EXPECT_EQ(expected, r5.responses);
58  EXPECT_EQ(expected, r6->responses);
59  EXPECT_EQ(expected, r7->responses);
60 }
61 
62 class BoolTest {
63  bool ret_;
64 public:
65  bool test_bool() { return ret_; }
66  BoolTest(bool ret) : ret_(ret) {}
67 public:
68  BoolTest(const BoolTest&) = delete;
69  BoolTest& operator=(const BoolTest&) = delete;
70 };
71 
72 TEST(DelegatesTest, testBoolFunc)
73 {
74 
75  using BoolFunc = std::function<bool(void)>;
76  using BoolDelegate = can::DelegateHelper<BoolFunc>;
77 
78  BoolDelegate d1([]() { return false; });
79  BoolDelegate d2([]() { return true; });
80 
81  EXPECT_FALSE(d1());
82  EXPECT_TRUE(d2());
83 
84  BoolTest b1(false);
85  BoolTest b2(true);
86 
87  BoolDelegate d3(&b1, &BoolTest::test_bool);
88  BoolDelegate d4(&b2, &BoolTest::test_bool);
89  EXPECT_FALSE(d3());
90  EXPECT_TRUE(d4());
91 
92 }
93 
94 
95 // Run all the tests that were declared with TEST()
96 int main(int argc, char **argv){
97 testing::InitGoogleTest(&argc, argv);
98 return RUN_ALL_TESTS();
99 }
void handle(const can::Frame &f)
bool test_bool()
Receiver()=default
std::string tostring(const Header &h, bool lc)
Definition: string.cpp:78
int main(int argc, char **argv)
Receiver g_r2
void fill_any(Receiver &r, const can::Frame &f)
virtual FrameListenerConstSharedPtr createMsgListener(const FrameFunc &delegate)
Definition: dummy.h:58
Frame toframe(const std::string &s)
Definition: string.cpp:119
CommInterface::FrameListenerConstSharedPtr FrameListenerConstSharedPtr
Definition: interface.h:176
TEST(DelegatesTest, testFrameDelegate)
~Receiver()=default
void fill_r2(const can::Frame &f)
std::list< std::string > responses
Receiver & operator=(const Receiver &)=delete
virtual bool send(const Frame &msg)
Definition: dummy.h:45
BoolTest(bool ret)


socketcan_interface
Author(s): Mathias Lüdtke
autogenerated on Mon Feb 28 2022 23:28:00