Mercurial > irccd
annotate tests/js-timer/main.cpp @ 394:c6fbb6e0e06d
Happy new year!
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 01 Jan 2017 15:29:41 +0100 |
parents | 15da984ce7ea |
children | f9b4101fa51c |
rev | line source |
---|---|
0 | 1 /* |
2 * main.cpp -- test Irccd.Timer API | |
3 * | |
394 | 4 * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr> |
0 | 5 * |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 #include <gtest/gtest.h> | |
20 | |
95
1125d90b3b44
Misc: switch to .hpp, #477
David Demelier <markand@malikania.fr>
parents:
75
diff
changeset
|
21 #include <irccd/elapsed-timer.hpp> |
1125d90b3b44
Misc: switch to .hpp, #477
David Demelier <markand@malikania.fr>
parents:
75
diff
changeset
|
22 #include <irccd/irccd.hpp> |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
23 #include <irccd/logger.hpp> |
351
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
24 #include <irccd/mod-irccd.hpp> |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
25 #include <irccd/mod-plugin.hpp> |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
26 #include <irccd/mod-timer.hpp> |
131
77c90336ba56
Irccd: initial Plugin split, #501
David Demelier <markand@malikania.fr>
parents:
128
diff
changeset
|
27 #include <irccd/plugin-js.hpp> |
350 | 28 #include <irccd/service.hpp> |
95
1125d90b3b44
Misc: switch to .hpp, #477
David Demelier <markand@malikania.fr>
parents:
75
diff
changeset
|
29 #include <irccd/system.hpp> |
0 | 30 |
31 using namespace irccd; | |
32 | |
351
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
33 class TestJsTimer : public testing::Test { |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
34 protected: |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
35 Irccd m_irccd; |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
36 std::shared_ptr<JsPlugin> m_plugin; |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
37 |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
38 void open(const std::string &file) |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
39 { |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
40 m_plugin = std::make_shared<JsPlugin>("timer", file); |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
41 |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
42 IrccdModule().load(m_irccd, m_plugin); |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
43 PluginModule().load(m_irccd, m_plugin); |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
44 TimerModule().load(m_irccd, m_plugin); |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
45 |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
46 m_plugin->onLoad(m_irccd); |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
47 m_irccd.plugins().add(m_plugin); |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
48 } |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
49 }; |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
50 |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
51 TEST_F(TestJsTimer, single) |
0 | 52 { |
351
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
53 open(IRCCD_TESTS_DIRECTORY "/timer-single.js"); |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
54 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
55 ElapsedTimer timer; |
0 | 56 |
351
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
57 while (timer.elapsed() < 3000) |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
58 util::poller::poll(512, m_irccd); |
0 | 59 |
351
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
60 ASSERT_TRUE(duk_get_global_string(m_plugin->context(), "count")); |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
61 ASSERT_EQ(1, duk_get_int(m_plugin->context(), -1)); |
0 | 62 } |
63 | |
351
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
64 TEST_F(TestJsTimer, repeat) |
0 | 65 { |
351
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
66 open(IRCCD_TESTS_DIRECTORY "/timer-repeat.js"); |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
67 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
68 ElapsedTimer timer; |
0 | 69 |
351
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
70 while (timer.elapsed() < 3000) |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
71 util::poller::poll(512, m_irccd); |
0 | 72 |
351
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
73 ASSERT_TRUE(duk_get_global_string(m_plugin->context(), "count")); |
15da984ce7ea
Irccd: revert ownership as it's a cleaner solution
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
74 ASSERT_GE(duk_get_int(m_plugin->context(), -1), 5); |
0 | 75 } |
76 | |
77 #if 0 | |
78 | |
79 /* | |
80 * XXX: currently disabled because it will break single-shot timers. | |
81 */ | |
82 | |
83 TEST(Basic, pending) | |
84 { | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
85 /* |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
86 * This test ensure that if pending actions on a stopped timer are never executed. |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
87 */ |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
88 Irccd irccd; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
89 ElapsedTimer timer; |
0 | 90 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
91 auto plugin = std::make_shared<Plugin>("timer", IRCCD_TESTS_DIRECTORY "/timer-pending.js"); |
0 | 92 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
93 irccd.addPlugin(plugin); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
94 irccd.poll(); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
95 irccd.dispatch(); |
0 | 96 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
97 ASSERT_EQ(0, plugin->context().getGlobal<int>("count")); |
0 | 98 } |
99 | |
100 #endif | |
101 | |
102 int main(int argc, char **argv) | |
103 { | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
104 // Needed for some components. |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
105 sys::setProgramName("irccd"); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
106 path::setApplicationPath(argv[0]); |
256
f04acabfbbe5
CMake: switch to NSIS with various fixes, closes #533
David Demelier <markand@malikania.fr>
parents:
250
diff
changeset
|
107 log::setLogger(std::make_unique<log::SilentLogger>()); |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
108 log::setVerbose(true); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
109 testing::InitGoogleTest(&argc, argv); |
0 | 110 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
190
diff
changeset
|
111 return RUN_ALL_TESTS(); |
0 | 112 } |