comparison tests/command/main.cpp @ 204:751ac58d7747

Irccd: initial properties required in Command, #516
author David Demelier <markand@malikania.fr>
date Fri, 10 Jun 2016 11:54:13 +0200
parents
children 6635b9187d71
comparison
equal deleted inserted replaced
203:c26754e419c4 204:751ac58d7747
1 /*
2 * main.cpp -- test Command class
3 *
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr>
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
21 #include <irccd/command.hpp>
22
23 using namespace irccd;
24
25 class MyCommand : public Command {
26 public:
27 MyCommand()
28 : Command("test", "Test")
29 {
30 }
31
32 std::string help() const override
33 {
34 return "This is a super command";
35 }
36
37 std::vector<Property> properties() const
38 {
39 return {
40 { "b", { json::Type::Boolean } },
41 { "i", { json::Type::Int } },
42 { "m", { json::Type::Boolean, json::Type::Int, json::Type::String } }
43 };
44 }
45 };
46
47 TEST(Properties, valid)
48 {
49 Irccd *irccd = nullptr;
50 MyCommand cmd;
51
52 ASSERT_NO_THROW(cmd.exec(*irccd, json::object({
53 { "b", true },
54 { "i", 123 },
55 { "m", "abc" }
56 })));
57
58 ASSERT_NO_THROW(cmd.exec(*irccd, json::object({
59 { "b", true },
60 { "i", 123 },
61 { "m", 456 }
62 })));
63
64 ASSERT_NO_THROW(cmd.exec(*irccd, json::object({
65 { "b", true },
66 { "i", 123 },
67 { "m", "456" }
68 })));
69 }
70
71 TEST(Properties, missingB)
72 {
73 Irccd *irccd = nullptr;
74 MyCommand cmd;
75
76 ASSERT_THROW(cmd.exec(*irccd, json::object({
77 { "i", 123 },
78 { "m", "abc" }
79 })), std::invalid_argument);
80 }
81
82 TEST(Properties, missingI)
83 {
84 Irccd *irccd = nullptr;
85 MyCommand cmd;
86
87 ASSERT_THROW(cmd.exec(*irccd, json::object({
88 { "b", true },
89 { "m", "abc" }
90 })), std::invalid_argument);
91 }
92
93 TEST(Properties, missingM)
94 {
95 Irccd *irccd = nullptr;
96 MyCommand cmd;
97
98 ASSERT_THROW(cmd.exec(*irccd, json::object({
99 { "b", true },
100 { "i", 123 },
101 })), std::invalid_argument);
102 }
103
104 TEST(Properties, invalidB)
105 {
106 Irccd *irccd = nullptr;
107 MyCommand cmd;
108
109 ASSERT_THROW(cmd.exec(*irccd, json::object({
110 { "b", "fail" },
111 { "i", 123 },
112 { "m", "abc" }
113 })), std::invalid_argument);
114 }
115
116 TEST(Properties, invalidM)
117 {
118 Irccd *irccd = nullptr;
119 MyCommand cmd;
120
121 ASSERT_THROW(cmd.exec(*irccd, json::object({
122 { "b", "fail" },
123 { "i", 123 },
124 { "m", nullptr }
125 })), std::invalid_argument);
126 }
127
128 int main(int argc, char **argv)
129 {
130 testing::InitGoogleTest(&argc, argv);
131
132 return RUN_ALL_TESTS();
133 }