Line data Source code
1 : // Copyright (c) 2012-2024 Made to Order Software Corp. All Rights Reserved
2 : //
3 : // https://snapwebsites.org/project/eventdispatcher
4 : // contact@m2osw.com
5 : //
6 : // This program is free software; you can redistribute it and/or modify
7 : // it under the terms of the GNU General Public License as published by
8 : // the Free Software Foundation; either version 2 of the License, or
9 : // (at your option) any later version.
10 : //
11 : // This program is distributed in the hope that it will be useful,
12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : // GNU General Public License for more details.
15 : //
16 : // You should have received a copy of the GNU General Public License along
17 : // with this program; if not, write to the Free Software Foundation, Inc.,
18 : // 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 :
20 : // self
21 : //
22 : #include "catch_main.h"
23 :
24 :
25 : // eventdispatcher
26 : //
27 : #include <eventdispatcher/dispatcher.h>
28 : #include <eventdispatcher/dispatcher_match.h>
29 :
30 :
31 : // last include
32 : //
33 : #include <snapdev/poison.h>
34 :
35 :
36 :
37 : namespace
38 : {
39 :
40 :
41 0 : void callback(ed::message & msg)
42 : {
43 0 : snapdev::NOT_USED(msg);
44 0 : }
45 :
46 :
47 : } // no name namespace
48 :
49 :
50 :
51 3 : CATCH_TEST_CASE("dispatcher_setup_error", "[dispatcher][error][setup]")
52 : {
53 3 : CATCH_START_SECTION("create a dispatcher with callback set to nullptr")
54 : {
55 : // the callback is required
56 : //
57 10 : CATCH_REQUIRE_THROWS_MATCHES(
58 : ::ed::define_match(
59 : ::ed::Expression("REGISTER"),
60 : ::ed::Callback(nullptr),
61 : ::ed::MatchFunc(&ed::one_to_one_match)
62 : )
63 : , ed::parameter_error
64 : , Catch::Matchers::ExceptionMessage("parameter_error: a callback function is required in dispatcher_match, it cannot be set to nullptr."));
65 : }
66 3 : CATCH_END_SECTION()
67 :
68 3 : CATCH_START_SECTION("create a dispatcher with missing expression when using the one_to_one_match() function")
69 : {
70 : // the callback is required
71 : //
72 10 : CATCH_REQUIRE_THROWS_MATCHES(
73 : ::ed::define_match(
74 : ::ed::Callback(&::callback),
75 : ::ed::MatchFunc(&ed::one_to_one_match)
76 : )
77 : , ed::parameter_error
78 : , Catch::Matchers::ExceptionMessage("parameter_error: an expression is required for the one_to_one_match()."));
79 : }
80 3 : CATCH_END_SECTION()
81 :
82 3 : CATCH_START_SECTION("create a dispatcher with missing expression when using the one_to_one_match() function")
83 : {
84 : // the priority must be between min & max
85 : //
86 101 : for(int count(0); count < 100; ++count)
87 : {
88 100 : ed::dispatcher_match::priority_t priority(0);
89 : for(;;)
90 : {
91 100 : priority = rand();
92 100 : if(priority > ed::dispatcher_match::DISPATCHER_MATCH_MAX_PRIORITY)
93 : {
94 100 : break;
95 : }
96 : }
97 1200 : CATCH_REQUIRE_THROWS_MATCHES(
98 : ::ed::define_match(
99 : ::ed::Expression("REGISTER"),
100 : ::ed::Callback(&::callback),
101 : ::ed::MatchFunc(&ed::one_to_one_match),
102 : ::ed::Priority(priority)
103 : )
104 : , ed::parameter_error
105 : , Catch::Matchers::ExceptionMessage("parameter_error: priority too large for dispatcher match."));
106 : }
107 : }
108 3 : CATCH_END_SECTION()
109 3 : }
110 :
111 :
112 : // vim: ts=4 sw=4 et
|