annotate tests/plugin-history/main.cpp @ 195:1c22fcce1662

Irccd: rename PluginService.configure to setConfig
author David Demelier <markand@malikania.fr>
date Tue, 07 Jun 2016 14:19:27 +0200
parents 70ed0753ce0d
children 6635b9187d71
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * main.cpp -- test history plugin
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr>
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
70ed0753ce0d Plugin history: 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
70ed0753ce0d Plugin history: 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
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
70ed0753ce0d Plugin history: 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
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
70ed0753ce0d Plugin history: 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
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
70ed0753ce0d Plugin history: 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
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <regex>
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <gtest/gtest.h>
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <irccd/irccd.hpp>
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <irccd/server.hpp>
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <irccd/service-plugin.hpp>
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 using namespace irccd;
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 class ServerTest : public Server {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 private:
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 std::string m_last;
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
32
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 public:
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 inline ServerTest()
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 : Server("test", ServerInfo())
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 }
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 inline const std::string &last() const noexcept
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 return m_last;
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 }
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 void message(std::string target, std::string message) override
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 m_last = util::join({target, message});
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 }
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 };
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 class HistoryTest : public testing::Test {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 protected:
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 Irccd m_irccd;
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 PluginService &m_ps;
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 std::shared_ptr<ServerTest> m_server;
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 std::shared_ptr<Plugin> m_plugin;
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 public:
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 HistoryTest()
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 : m_ps(m_irccd.pluginService())
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 , m_server(std::make_shared<ServerTest>())
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 m_ps.setFormats("history", {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 { "error", "error=#{plugin}:#{command}:#{server}:#{channel}:#{origin}:#{nickname}" },
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 { "seen", "seen=#{plugin}:#{command}:#{server}:#{channel}:#{origin}:#{nickname}:#{target}:%H:%M" },
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 { "said", "said=#{plugin}:#{command}:#{server}:#{channel}:#{origin}:#{nickname}:#{target}:#{message}:%H:%M" },
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 { "unknown", "unknown=#{plugin}:#{command}:#{server}:#{channel}:#{origin}:#{nickname}:#{target}" },
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 });
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 }
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 void load(PluginConfig config = PluginConfig())
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 // Add file if not there.
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 if (config.count("file") == 0)
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 config.emplace("file", SOURCEDIR "/words.conf");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
76
195
1c22fcce1662 Irccd: rename PluginService.configure to setConfig
David Demelier <markand@malikania.fr>
parents: 159
diff changeset
77 m_ps.setConfig("history", config);
159
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 m_ps.load("history", PLUGINDIR "/history.js");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 m_plugin = m_ps.require("history");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 }
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 };
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 TEST_F(HistoryTest, formatError)
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 load({{ "file", SOURCEDIR "/broken-conf.json" }});
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
86
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 m_plugin->onCommand(m_irccd, m_server, "jean!jean@localhost", "#history", "seen francis");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 ASSERT_EQ("#history:error=history:!history:test:#history:jean!jean@localhost:jean", m_server->last());
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 }
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
90
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 TEST_F(HistoryTest, formatSeen)
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 std::regex rule("#history:seen=history:!history:test:#history:destructor!dst@localhost:destructor:jean:\\d{2}:\\d{2}");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
94
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 remove(BINARYDIR "/seen.json");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 load({{ "file", BINARYDIR "/seen.json" }});
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
97
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 m_plugin->onMessage(m_irccd, m_server, "jean!jean@localhost", "#history", "hello");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 m_plugin->onCommand(m_irccd, m_server, "destructor!dst@localhost", "#history", "seen jean");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 ASSERT_TRUE(std::regex_match(m_server->last(), rule));
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 }
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
103
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 TEST_F(HistoryTest, formatSaid)
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 std::regex rule("#history:said=history:!history:test:#history:destructor!dst@localhost:destructor:jean:hello:\\d{2}:\\d{2}");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
107
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 remove(BINARYDIR "/said.json");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 load({{ "file", BINARYDIR "/said.json" }});
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 m_plugin->onMessage(m_irccd, m_server, "jean!jean@localhost", "#history", "hello");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 m_plugin->onCommand(m_irccd, m_server, "destructor!dst@localhost", "#history", "said jean");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
113
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 ASSERT_TRUE(std::regex_match(m_server->last(), rule));
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 }
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
116
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 TEST_F(HistoryTest, formatUnknown)
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 remove(BINARYDIR "/unknown.json");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 load({{ "file", BINARYDIR "/unknown.json" }});
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
121
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 m_plugin->onMessage(m_irccd, m_server, "jean!jean@localhost", "#history", "hello");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 m_plugin->onCommand(m_irccd, m_server, "destructor!dst@localhost", "#history", "seen nobody");
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
124
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 ASSERT_EQ("#history:unknown=history:!history:test:#history:destructor!dst@localhost:destructor:nobody", m_server->last());
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 }
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
127
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 int main(int argc, char **argv)
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 {
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 path::setApplicationPath(argv[0]);
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 testing::InitGoogleTest(&argc, argv);
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
132
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 return RUN_ALL_TESTS();
70ed0753ce0d Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 }