Mercurial > irccd
annotate tests/plugin-plugin/main.cpp @ 883:3b9603c1a1b5 stable-2
misc: close stable-2 branch
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 20 Aug 2019 09:31:07 +0200 |
parents | c6fbb6e0e06d |
children | 0b156b82b8c1 |
rev | line source |
---|---|
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * main.cpp -- test plugin plugin |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
394 | 4 * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr> |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <gtest/gtest.h> |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <format.h> |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <irccd/irccd.hpp> |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <irccd/logger.hpp> |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <irccd/server.hpp> |
350 | 26 #include <irccd/service.hpp> |
27 #include <irccd/path.hpp> | |
28 | |
29 #include "plugin-tester.hpp" | |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 using namespace fmt::literals; |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 using namespace irccd; |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 class ServerTest : public Server { |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 private: |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
37 std::string m_last; |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 public: |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
40 inline ServerTest() |
250 | 41 : Server("test") |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
42 { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
43 } |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
45 inline const std::string &last() const noexcept |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
46 { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
47 return m_last; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
48 } |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
50 void message(std::string target, std::string message) override |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
51 { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
52 m_last = util::join({target, message}); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
53 } |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 }; |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 class FakePlugin : public Plugin { |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 public: |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
58 FakePlugin() |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
59 : Plugin("fake", "") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
60 { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
61 setAuthor("jean"); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
62 setVersion("0.0.0.0.0.1"); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
63 setLicense("BEER"); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
64 setSummary("Fake White Beer 2000"); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
65 } |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 }; |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 |
350 | 68 class PluginTest : public PluginTester { |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 protected: |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
70 std::shared_ptr<ServerTest> m_server; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
71 std::shared_ptr<Plugin> m_plugin; |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 public: |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
74 PluginTest() |
350 | 75 : m_server(std::make_shared<ServerTest>()) |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
76 { |
350 | 77 m_irccd.plugins().add(std::make_shared<FakePlugin>()); |
78 m_irccd.plugins().setFormats("plugin", { | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
79 { "usage", "usage=#{plugin}:#{command}:#{server}:#{channel}:#{origin}:#{nickname}" }, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
80 { "info", "info=#{plugin}:#{command}:#{server}:#{channel}:#{origin}:#{nickname}:#{author}:#{license}:#{name}:#{summary}:#{version}" }, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
81 { "not-found", "not-found=#{plugin}:#{command}:#{server}:#{channel}:#{origin}:#{nickname}:#{name}" }, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
82 { "too-long", "too-long=#{plugin}:#{command}:#{server}:#{channel}:#{origin}:#{nickname}" } |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
83 }); |
350 | 84 m_irccd.plugins().load("plugin", PLUGINDIR "/plugin.js"); |
85 m_plugin = m_irccd.plugins().require("plugin"); | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
86 } |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 }; |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 TEST_F(PluginTest, formatUsage) |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 { |
210
2d10d7e661a0
Irccd: make object based IRC events, #522
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
91 m_plugin->onCommand(m_irccd, MessageEvent{m_server, "jean!jean@localhost", "#staff", ""}); |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
92 ASSERT_EQ("#staff:usage=plugin:!plugin:test:#staff:jean!jean@localhost:jean", m_server->last()); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 |
210
2d10d7e661a0
Irccd: make object based IRC events, #522
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
94 m_plugin->onCommand(m_irccd, MessageEvent{m_server, "jean!jean@localhost", "#staff", "fail"}); |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
95 ASSERT_EQ("#staff:usage=plugin:!plugin:test:#staff:jean!jean@localhost:jean", m_server->last()); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 |
210
2d10d7e661a0
Irccd: make object based IRC events, #522
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
97 m_plugin->onCommand(m_irccd, MessageEvent{m_server, "jean!jean@localhost", "#staff", "info"}); |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
98 ASSERT_EQ("#staff:usage=plugin:!plugin:test:#staff:jean!jean@localhost:jean", m_server->last()); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 } |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 TEST_F(PluginTest, formatInfo) |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 { |
210
2d10d7e661a0
Irccd: make object based IRC events, #522
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
103 m_plugin->onCommand(m_irccd, MessageEvent{m_server, "jean!jean@localhost", "#staff", "info fake"}); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
105 ASSERT_EQ("#staff:info=plugin:!plugin:test:#staff:jean!jean@localhost:jean:jean:BEER:fake:Fake White Beer 2000:0.0.0.0.0.1", m_server->last()); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 } |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 TEST_F(PluginTest, formatNotFound) |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 { |
210
2d10d7e661a0
Irccd: make object based IRC events, #522
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
110 m_plugin->onCommand(m_irccd, MessageEvent{m_server, "jean!jean@localhost", "#staff", "info doesnotexistsihope"}); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
112 ASSERT_EQ("#staff:not-found=plugin:!plugin:test:#staff:jean!jean@localhost:jean:doesnotexistsihope", m_server->last()); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 } |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 TEST_F(PluginTest, formatTooLong) |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 { |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
117 for (int i = 0; i < 100; ++i) |
350 | 118 m_irccd.plugins().add(std::make_shared<Plugin>("plugin-n-{}"_format(i), "")); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 |
210
2d10d7e661a0
Irccd: make object based IRC events, #522
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
120 m_plugin->onCommand(m_irccd, MessageEvent{m_server, "jean!jean@localhost", "#staff", "list"}); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
122 ASSERT_EQ("#staff:too-long=plugin:!plugin:test:#staff:jean!jean@localhost:jean", m_server->last()); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 } |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 int main(int argc, char **argv) |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 { |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
127 path::setApplicationPath(argv[0]); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
128 testing::InitGoogleTest(&argc, argv); |
256
f04acabfbbe5
CMake: switch to NSIS with various fixes, closes #533
David Demelier <markand@malikania.fr>
parents:
250
diff
changeset
|
129 log::setLogger(std::make_unique<log::SilentLogger>()); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
131 return RUN_ALL_TESTS(); |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 } |