diff tests/util/main.cpp @ 0:1158cffe5a5e

Initial import
author David Demelier <markand@malikania.fr>
date Mon, 08 Feb 2016 16:43:14 +0100
parents
children f8160d515a76
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/util/main.cpp	Mon Feb 08 16:43:14 2016 +0100
@@ -0,0 +1,327 @@
+/*
+ * main.cpp -- test util functions
+ *
+ * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <gtest/gtest.h>
+
+#include <util.h>
+#include <system.h>
+
+namespace irccd {
+
+/* --------------------------------------------------------
+ * util::format function
+ * -------------------------------------------------------- */
+
+TEST(Format, nothing)
+{
+	std::string expected = "hello world!";
+	std::string result = util::format("hello world!");
+
+	ASSERT_EQ(expected, result);
+}
+
+TEST(Format, keywordSimple)
+{
+	util::Substitution params;
+
+	params.keywords.insert({"target", "irccd"});
+
+	std::string expected = "hello irccd!";
+	std::string result = util::format("hello #{target}!", params);
+
+	ASSERT_EQ(expected, result);
+}
+
+TEST(Format, keywordMultiple)
+{
+	util::Substitution params;
+
+	params.keywords.insert({"target", "irccd"});
+	params.keywords.insert({"source", "nightmare"});
+
+	std::string expected = "hello irccd from nightmare!";
+	std::string result = util::format("hello #{target} from #{source}!", params);
+
+	ASSERT_EQ(expected, result);
+}
+
+TEST(Format, keywordAdjTwice)
+{
+	util::Substitution params;
+
+	params.keywords.insert({"target", "irccd"});
+
+	std::string expected = "hello irccdirccd!";
+	std::string result = util::format("hello #{target}#{target}!", params);
+
+	ASSERT_EQ(expected, result);
+}
+
+TEST(Format, keywordMissing)
+{
+	std::string expected = "hello !";
+	std::string result = util::format("hello #{target}!");
+
+	ASSERT_EQ(expected, result);
+}
+
+TEST(Format, envSimple)
+{
+	std::string home = sys::env("HOME");
+
+	if (!home.empty()) {
+		std::string expected = "my home is " + home;
+		std::string result = util::format("my home is ${HOME}");
+
+		ASSERT_EQ(expected, result);
+	}
+}
+
+TEST(Format, envMissing)
+{
+	std::string expected = "value is ";
+	std::string result = util::format("value is ${HOPE_THIS_VAR_NOT_EXIST}");
+
+	ASSERT_EQ(expected, result);
+}
+
+/* --------------------------------------------------------
+ * util::split function
+ * -------------------------------------------------------- */
+
+using List = std::vector<std::string>;
+
+TEST(Split, simple)
+{
+	List expected { "a", "b" };
+	List result = util::split("a;b", ";");
+
+	ASSERT_EQ(expected, result);
+}
+
+TEST(Split, cut)
+{
+	List expected { "msg", "#staff", "foo bar baz" };
+	List result = util::split("msg;#staff;foo bar baz", ";", 3);
+
+	ASSERT_EQ(expected, result);
+}
+
+/* --------------------------------------------------------
+ * util::strip function
+ * -------------------------------------------------------- */
+
+TEST(Strip, left)
+{
+	std::string value = "   123";
+	std::string result = util::strip(value);
+
+	ASSERT_EQ("123", result);
+}
+
+TEST(Strip, right)
+{
+	std::string value = "123   ";
+	std::string result = util::strip(value);
+
+	ASSERT_EQ("123", result);
+}
+
+TEST(Strip, both)
+{
+	std::string value = "   123   ";
+	std::string result = util::strip(value);
+
+	ASSERT_EQ("123", result);
+}
+
+TEST(Strip, none)
+{
+	std::string value = "without";
+	std::string result = util::strip(value);
+
+	ASSERT_EQ("without", result);
+}
+
+TEST(Strip, betweenEmpty)
+{
+	std::string value = "one list";
+	std::string result = util::strip(value);
+
+	ASSERT_EQ("one list", result);
+}
+
+TEST(Strip, betweenLeft)
+{
+	std::string value = "  space at left";
+	std::string result = util::strip(value);
+
+	ASSERT_EQ("space at left", result);
+}
+
+TEST(Strip, betweenRight)
+{
+	std::string value = "space at right  ";
+	std::string result = util::strip(value);
+
+	ASSERT_EQ("space at right", result);
+}
+
+TEST(Strip, betweenBoth)
+{
+	std::string value = "  space at both  ";
+	std::string result = util::strip(value);
+
+	ASSERT_EQ("space at both", result);
+}
+
+TEST(Strip, empty)
+{
+	std::string value = "    ";
+	std::string result = util::strip(value);
+
+	ASSERT_EQ("", result);
+}
+
+/* --------------------------------------------------------
+ * util::join function
+ * -------------------------------------------------------- */
+
+TEST(Join, empty)
+{
+	std::string expected = "";
+	std::string result = util::join<int>({});
+
+	ASSERT_EQ(expected, result);
+}
+
+TEST(Join, one)
+{
+	std::string expected = "1";
+	std::string result = util::join({1});
+
+	ASSERT_EQ(expected, result);
+}
+
+TEST(Join, two)
+{
+	std::string expected = "1:2";
+	std::string result = util::join({1, 2});
+
+	ASSERT_EQ(expected, result);
+}
+
+TEST(Join, delimiterString)
+{
+	std::string expected = "1;;2;;3";
+	std::string result = util::join({1, 2, 3}, ";;");
+
+	ASSERT_EQ(expected, result);
+}
+
+TEST(Join, delimiterChar)
+{
+	std::string expected = "1@2@3@4";
+	std::string result = util::join({1, 2, 3, 4}, '@');
+
+	ASSERT_EQ(expected, result);
+}
+
+/* --------------------------------------------------------
+ * util::isIdentifierValid function
+ * -------------------------------------------------------- */
+
+TEST(IsIdentifierValid, correct)
+{
+	ASSERT_TRUE(util::isIdentifierValid("localhost"));
+	ASSERT_TRUE(util::isIdentifierValid("localhost2"));
+	ASSERT_TRUE(util::isIdentifierValid("localhost2-4_"));
+}
+
+TEST(IsIdentifierValid, incorrect)
+{
+	ASSERT_FALSE(util::isIdentifierValid(""));
+	ASSERT_FALSE(util::isIdentifierValid("localhost with spaces"));
+	ASSERT_FALSE(util::isIdentifierValid("localhost*"));
+	ASSERT_FALSE(util::isIdentifierValid("&&"));
+	ASSERT_FALSE(util::isIdentifierValid("@'"));
+	ASSERT_FALSE(util::isIdentifierValid("##"));
+	ASSERT_FALSE(util::isIdentifierValid("===++"));
+}
+
+/* --------------------------------------------------------
+ * util::isBoolean function
+ * -------------------------------------------------------- */
+
+TEST(IsBoolean, correct)
+{
+	// true
+	ASSERT_TRUE(util::isBoolean("true"));
+	ASSERT_TRUE(util::isBoolean("True"));
+	ASSERT_TRUE(util::isBoolean("TRUE"));
+	ASSERT_TRUE(util::isBoolean("TruE"));
+
+	// yes
+	ASSERT_TRUE(util::isBoolean("yes"));
+	ASSERT_TRUE(util::isBoolean("Yes"));
+	ASSERT_TRUE(util::isBoolean("YES"));
+	ASSERT_TRUE(util::isBoolean("YeS"));
+
+	// on
+	ASSERT_TRUE(util::isBoolean("on"));
+	ASSERT_TRUE(util::isBoolean("On"));
+	ASSERT_TRUE(util::isBoolean("oN"));
+	ASSERT_TRUE(util::isBoolean("ON"));
+
+	// 1
+	ASSERT_TRUE(util::isBoolean("1"));
+}
+
+TEST(IsBoolean, incorrect)
+{
+	ASSERT_FALSE(util::isBoolean("false"));
+	ASSERT_FALSE(util::isBoolean("lol"));
+	ASSERT_FALSE(util::isBoolean(""));
+	ASSERT_FALSE(util::isBoolean("0"));
+}
+
+/* --------------------------------------------------------
+ * util::isNumber function
+ * -------------------------------------------------------- */
+
+TEST(IsNumber, correct)
+{
+	ASSERT_TRUE(util::isNumber("123"));
+	ASSERT_TRUE(util::isNumber("-123"));
+	ASSERT_TRUE(util::isNumber("123.67"));
+}
+
+TEST(IsNumber, incorrect)
+{
+	ASSERT_FALSE(util::isNumber("lol"));
+	ASSERT_FALSE(util::isNumber("this is not a number"));
+}
+
+} // !irccd
+
+int main(int argc, char **argv)
+{
+	testing::InitGoogleTest(&argc, argv);
+
+	return RUN_ALL_TESTS();
+}