diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index f776b803d439452058cf5e76ccddbc2d7512f918..13833beb32c06257a9ba425d760d5c5eeb5525b2 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -50,6 +50,7 @@ add_executable (unit_tests
   test_BuiltinFunctionEmbedderTable.cpp
   test_BuiltinFunctionProcessor.cpp
   test_CastArray.cpp
+  test_ConsoleManager.cpp
   test_CG.cpp
   test_ContinueProcessor.cpp
   test_ConcatExpressionProcessor.cpp
diff --git a/tests/test_ConsoleManager.cpp b/tests/test_ConsoleManager.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2661852186f6d4bafd89b2f58d5f59b9b3fd0927
--- /dev/null
+++ b/tests/test_ConsoleManager.cpp
@@ -0,0 +1,37 @@
+#ifndef TEST_CONSOLE_MANAGER_HPP
+#define TEST_CONSOLE_MANAGER_HPP
+
+#include <catch2/catch.hpp>
+
+#include <utils/ConsoleManager.hpp>
+
+#include <rang.hpp>
+
+// clazy:excludeall=non-pod-global-static
+
+TEST_CASE("ConsoleManager", "[utils]")
+{
+  SECTION("is terminal")
+  {
+    const bool is_terminal = rang::rang_implementation::isTerminal(std::cout.rdbuf());
+
+    REQUIRE(is_terminal == ConsoleManager::isTerminal(std::cout));
+  }
+
+  SECTION("control settings")
+  {
+    const rang::control saved_control = rang::rang_implementation::controlMode();
+
+    ConsoleManager::init(true);
+
+    REQUIRE(rang::rang_implementation::controlMode() == rang::control::Force);
+
+    ConsoleManager::init(false);
+
+    REQUIRE(rang::rang_implementation::controlMode() == rang::control::Off);
+
+    rang::setControlMode(saved_control);
+  }
+}
+
+#endif   // TEST_CONSOLE_MANAGER_HPP