Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Convert the unit tests of xbt::config to Catch2.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 1 Feb 2019 13:58:38 +0000 (14:58 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 1 Feb 2019 13:58:38 +0000 (14:58 +0100)
src/xbt/config.cpp
src/xbt/config_test.cpp [new file with mode: 0644]
tools/cmake/Tests.cmake
tools/cmake/UnitTesting.cmake

index 2b0e472..07d839f 100644 (file)
@@ -714,90 +714,3 @@ int xbt_cfg_get_boolean(const char *key)
 {
   return (*simgrid_config)[key].get_value<bool>() ? 1 : 0;
 }
-
-#ifdef SIMGRID_TEST
-
-#include <string>
-
-#include "simgrid/Exception.hpp"
-#include "xbt.h"
-#include "xbt/ex.h"
-
-#include <xbt/config.hpp>
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(xbt_cfg);
-
-XBT_TEST_SUITE("config", "Configuration support");
-
-XBT_PUBLIC_DATA simgrid::config::Config* simgrid_config;
-
-static void make_set()
-{
-  simgrid_config = nullptr;
-  xbt_log_threshold_set(&_XBT_LOGV(xbt_cfg), xbt_log_priority_critical);
-  simgrid::config::declare_flag<int>("speed", "description", 0);
-  simgrid::config::declare_flag<std::string>("peername", "description", "");
-  simgrid::config::declare_flag<std::string>("user", "description", "");
-}                               /* end_of_make_set */
-
-XBT_TEST_UNIT("memuse", test_config_memuse, "Alloc and free a config set")
-{
-  auto temp = simgrid_config;
-  make_set();
-  xbt_test_add("Alloc and free a config set");
-  simgrid::config::set_parse("peername:veloce user:bidule");
-  simgrid::config::finalize();
-  simgrid_config = temp;
-}
-
-XBT_TEST_UNIT("use", test_config_use, "Data retrieving tests")
-{
-  auto temp = simgrid_config;
-  make_set();
-  xbt_test_add("Get a single value");
-  {
-    /* get_single_value */
-    simgrid::config::set_parse("peername:toto:42 speed:42");
-    int ival = simgrid::config::get_value<int>("speed");
-    if (ival != 42)
-      xbt_test_fail("Speed value = %d, I expected 42", ival);
-  }
-
-  xbt_test_add("Access to a non-existant entry");
-  {
-    try {
-      simgrid::config::set_parse("color:blue");
-    } catch(xbt_ex& e) {
-      if (e.category != not_found_error)
-        xbt_test_exception(e);
-    }
-  }
-  simgrid::config::finalize();
-  simgrid_config = temp;
-}
-
-XBT_TEST_UNIT("c++flags", test_config_cxx_flags, "C++ flags")
-{
-  auto temp = simgrid_config;
-  make_set();
-  xbt_test_add("C++ declaration of flags");
-
-  simgrid::config::Flag<int> int_flag("int", "", 0);
-  simgrid::config::Flag<std::string> string_flag("string", "", "foo");
-  simgrid::config::Flag<double> double_flag("double", "", 0.32);
-  simgrid::config::Flag<bool> bool_flag1("bool1", "", false);
-  simgrid::config::Flag<bool> bool_flag2("bool2", "", true);
-
-  xbt_test_add("Parse values");
-  simgrid::config::set_parse("int:42 string:bar double:8.0 bool1:true bool2:false");
-  xbt_test_assert(int_flag == 42, "Check int flag");
-  xbt_test_assert(string_flag == "bar", "Check string flag");
-  xbt_test_assert(double_flag == 8.0, "Check double flag");
-  xbt_test_assert(bool_flag1, "Check bool1 flag");
-  xbt_test_assert(not bool_flag2, "Check bool2 flag");
-
-  simgrid::config::finalize();
-  simgrid_config = temp;
-}
-
-#endif                          /* SIMGRID_TEST */
diff --git a/src/xbt/config_test.cpp b/src/xbt/config_test.cpp
new file mode 100644 (file)
index 0000000..dd89d9e
--- /dev/null
@@ -0,0 +1,84 @@
+/* Copyright (c) 2004-2019. The SimGrid Team. All rights reserved.     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include <xbt/config.hpp>
+
+#include "simgrid/Exception.hpp"
+#include <string>
+#include <xbt/log.h>
+
+#include "catch.hpp"
+
+XBT_PUBLIC_DATA simgrid::config::Config* simgrid_config;
+
+static void make_set()
+{
+  XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(xbt_cfg);
+  xbt_log_threshold_set(&_XBT_LOGV(xbt_cfg), xbt_log_priority_critical);
+  simgrid_config = nullptr;
+  simgrid::config::declare_flag<int>("speed", "description", 0);
+  simgrid::config::declare_flag<std::string>("peername", "description", "");
+  simgrid::config::declare_flag<std::string>("user", "description", "");
+}
+
+TEST_CASE("xbt::config: Configuration support", "config")
+{
+
+  SECTION("Alloc and free a config set")
+  {
+    auto temp = simgrid_config;
+    make_set();
+    INFO("Alloc and free a config set");
+    simgrid::config::set_parse("peername:veloce user:bidule");
+    simgrid::config::finalize();
+    simgrid_config = temp;
+  }
+
+  SECTION("Data retrieving tests")
+  {
+    auto temp = simgrid_config;
+    make_set();
+
+    INFO("Get a single value");
+    /* get_single_value */
+    simgrid::config::set_parse("peername:toto:42 speed:42");
+    int ival = simgrid::config::get_value<int>("speed");
+    REQUIRE(ival == 42); // Unexpected value for speed
+
+    INFO("Access to a non-existant entry");
+
+    REQUIRE_THROWS_MATCHES(
+        simgrid::config::set_parse("color:blue"), xbt_ex,
+        Catch::Matchers::Predicate<xbt_ex>([](xbt_ex const& e) { return e.category == not_found_error; },
+                                           "category not_found_error"));
+
+    simgrid::config::finalize();
+    simgrid_config = temp;
+  }
+
+  SECTION("C++ flags")
+  {
+    auto temp = simgrid_config;
+    make_set();
+    INFO("C++ declaration of flags");
+
+    simgrid::config::Flag<int> int_flag("int", "", 0);
+    simgrid::config::Flag<std::string> string_flag("string", "", "foo");
+    simgrid::config::Flag<double> double_flag("double", "", 0.32);
+    simgrid::config::Flag<bool> bool_flag1("bool1", "", false);
+    simgrid::config::Flag<bool> bool_flag2("bool2", "", true);
+
+    INFO("Parse values");
+    simgrid::config::set_parse("int:42 string:bar double:8.0 bool1:true bool2:false");
+    REQUIRE(int_flag == 42);       // Check int flag
+    REQUIRE(string_flag == "bar"); // Check string flag
+    REQUIRE(double_flag == 8.0);   // Check double flag
+    REQUIRE(bool_flag1);           // Check bool1 flag
+    REQUIRE(not bool_flag2);       // Check bool2 flag
+
+    simgrid::config::finalize();
+    simgrid_config = temp;
+  }
+}
index 02da373..7bc0867 100644 (file)
@@ -124,6 +124,7 @@ ADD_TEST(testall                                 ${CMAKE_BINARY_DIR}/testall)
 
 # New tests should use the Catch Framework
 set(UNIT_TESTS  src/surf/trace_mgr_test.cpp
+                src/xbt/config_test.cpp
                 src/xbt/dict_test.cpp
                 src/xbt/dynar_test.cpp
                 src/xbt/xbt_str_test.cpp)
index 1ac344d..93a7d77 100644 (file)
@@ -6,7 +6,6 @@
 
 set(FILES_CONTAINING_UNITTESTS
   src/xbt/cunit.cpp
-  src/xbt/config.cpp
 )
 
 ####  Nothing to change below this line to add a new tested file