diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index be4f1793..aba5a9f1 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -14,6 +14,10 @@ if(OS_DARWIN)
set(test_srcs ${test_srcs} test-darwin.cc)
endif()
+set(test_srcs ${test_srcs} test-core.cc)
+set(test_srcs ${test_srcs} test-diskio.cc)
+set(test_srcs ${test_srcs} test-fs.cc)
+
add_executable(test-conky test-common.cc ${test_srcs})
target_link_libraries(test-conky conky_core)
catch_discover_tests(test-conky)
diff --git a/tests/test-core.cc b/tests/test-core.cc
new file mode 100644
index 00000000..ff628172
--- /dev/null
+++ b/tests/test-core.cc
@@ -0,0 +1,68 @@
+/*
+ *
+ * Conky, a system monitor, based on torsmo
+ *
+ * Any original torsmo code is licensed under the BSD license
+ *
+ * All code written since the fork of torsmo is licensed under the GPL
+ *
+ * Please see COPYING for details
+ *
+ * Copyright (c) 2005-2019 Brenden Matthews, Philip Kovacs, et. al.
+ * (see AUTHORS)
+ * All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include "catch2/catch.hpp"
+
+#include
+
+TEST_CASE("remove_comments returns correct value") {
+ SECTION("for no comments") {
+ char text[] = "test text\n";
+
+ size_t removed_chars = remove_comments(text);
+
+ REQUIRE(removed_chars == 0);
+ }
+
+ SECTION("for no comments but with backslashes") {
+ char text[] = "te\\st t\\ext\n";
+
+ size_t removed_chars = remove_comments(text);
+
+ REQUIRE(removed_chars == 0);
+ }
+
+ SECTION("for single line of comment") {
+ char text_with_newline[] = "#test text\n";
+ char text_no_newline[] = "#test text";
+
+ size_t removed_chars_with_newline = remove_comments(text_with_newline);
+ size_t removed_chars_no_newline = remove_comments(text_no_newline);
+
+ REQUIRE(removed_chars_with_newline == 11);
+ REQUIRE(removed_chars_no_newline == 10);
+ }
+
+ SECTION("for comment starting in middle of line") {
+ char text[] = "test #text\n";
+
+ size_t removed_chars = remove_comments(text);
+
+ REQUIRE(removed_chars == 6);
+ }
+}
diff --git a/tests/test-diskio.cc b/tests/test-diskio.cc
new file mode 100644
index 00000000..d0c24eae
--- /dev/null
+++ b/tests/test-diskio.cc
@@ -0,0 +1,50 @@
+/*
+ *
+ * Conky, a system monitor, based on torsmo
+ *
+ * Any original torsmo code is licensed under the BSD license
+ *
+ * All code written since the fork of torsmo is licensed under the GPL
+ *
+ * Please see COPYING for details
+ *
+ * Copyright (c) 2005-2019 Brenden Matthews, Philip Kovacs, et. al.
+ * (see AUTHORS)
+ * All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include "catch2/catch.hpp"
+
+#include
+#include
+#include
+
+#if BUILD_X11
+TEST_CASE("diskiographval returns correct value") {
+ struct text_object obj;
+
+ SECTION("for valid data") {
+ diskio_stat *diskio = new diskio_stat;
+ diskio->current = 2.5;
+
+ obj.data.opaque = diskio;
+
+ REQUIRE(diskiographval(&obj) == Approx(2.5));
+
+ delete diskio;
+ }
+}
+#endif
diff --git a/tests/test-fs.cc b/tests/test-fs.cc
new file mode 100644
index 00000000..b66594f1
--- /dev/null
+++ b/tests/test-fs.cc
@@ -0,0 +1,61 @@
+/*
+ *
+ * Conky, a system monitor, based on torsmo
+ *
+ * Any original torsmo code is licensed under the BSD license
+ *
+ * All code written since the fork of torsmo is licensed under the GPL
+ *
+ * Please see COPYING for details
+ *
+ * Copyright (c) 2005-2019 Brenden Matthews, Philip Kovacs, et. al.
+ * (see AUTHORS)
+ * All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include "catch2/catch.hpp"
+
+#include
+
+TEST_CASE("fs_free_percentage returns correct value") {
+ struct text_object obj;
+
+ SECTION("for fs size == 0") {
+ fs_stat *fs = new fs_stat;
+ fs->size = 0;
+ fs->avail = 17;
+ fs->free = 97;
+
+ obj.data.opaque = fs;
+
+ REQUIRE(fs_free_percentage(&obj) == 0);
+
+ delete fs;
+ }
+
+ SECTION("for valid data") {
+ fs_stat *fs = new fs_stat;
+ fs->size = 68;
+ fs->avail = 17;
+ fs->free = 97;
+
+ obj.data.opaque = fs;
+
+ REQUIRE(fs_free_percentage(&obj) == 25);
+
+ delete fs;
+ }
+}