Mercurial > irccd
annotate tests/plugin-history/main.cpp @ 159:70ed0753ce0d
Plugin history: add initial unit test
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 23 May 2016 14:05:41 +0200 |
parents | |
children | 1c22fcce1662 |
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 |
70ed0753ce0d
Plugin history: add initial unit test
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 m_ps.configure("history", config); |
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 } |