add new test_edge_node_overlap_normal_and_inv_edge_arrows_all_modifiers test
authorMagnus Jacobsson <Magnus.Jacobsson@berotec.se>
Thu, 15 Sep 2022 11:10:13 +0000 (13:10 +0200)
committerMagnus Jacobsson <Magnus.Jacobsson@berotec.se>
Thu, 22 Sep 2022 08:21:14 +0000 (10:21 +0200)
An upcoming commit series will add separate fixes for different parts
of the overlap problems. Having separate test cases for checking
maximum or minimum overlap will make it easier to see that the fixes
have the intended effect.

tests/CMakeLists.txt
tests/test_edge_node_overlap_normal_and_inv_edge_arrows_all_modifiers.cpp [new file with mode: 0644]

index ea9ced5fb24ba282db0e72850a3824acaffca3d1..a9252ba1b6eab51769a9a6b1886f4d1c914cc42e 100644 (file)
@@ -91,6 +91,7 @@ CREATE_TEST(GVLayout_render)
 CREATE_TEST(edge_node_overlap_all_edge_arrows)
 CREATE_TEST(edge_node_overlap_all_node_shapes)
 CREATE_TEST(edge_node_overlap_normal_and_inv_edge_arrows)
+CREATE_TEST(edge_node_overlap_normal_and_inv_edge_arrows_all_modifiers)
 CREATE_TEST(edge_node_overlap_polygon_node_shapes)
 CREATE_TEST(edge_node_overlap_simple)
 CREATE_TEST(max_edge_node_overlap_simple)
diff --git a/tests/test_edge_node_overlap_normal_and_inv_edge_arrows_all_modifiers.cpp b/tests/test_edge_node_overlap_normal_and_inv_edge_arrows_all_modifiers.cpp
new file mode 100644 (file)
index 0000000..742037c
--- /dev/null
@@ -0,0 +1,43 @@
+#include <string>
+
+#include <catch2/catch.hpp>
+
+#include "test_edge_node_overlap_utilities.h"
+#include "test_utilities.h"
+
+// FIXME: this test fails for the 'l' and 'r' arrow shape modifiers which do not
+// handle the miter point correctly yet
+
+TEST_CASE(
+    "Edge node overlap for normal and inv arrow with all arrow shape modifiers",
+    "[!shouldfail] An edge connected to a node shall touch that node and not "
+    "overlap it too much, regardless of if the arrow shape is 'normal' or "
+    "'inv' and which arrrow shape modifier is used") {
+
+  std::string filename_base = "test_edge_node_overlap_all_edge_arrows";
+
+  const std::string_view primitive_arrow_shape = GENERATE("normal", "inv");
+  INFO(fmt::format("Edge primitive arrow shape: {}", primitive_arrow_shape));
+
+  const auto arrow_shape_modifier =
+      GENERATE(from_range(all_arrow_shape_modifiers));
+  INFO(fmt::format("Edge arrow shape modifier: {}", arrow_shape_modifier));
+
+  const auto arrow_shape =
+      fmt::format("{}{}", arrow_shape_modifier, primitive_arrow_shape);
+  INFO(fmt::format("Edge arrow shape: {}", arrow_shape));
+  filename_base += fmt::format("_arrow_{}", arrow_shape);
+
+  const graph_options graph_options = {
+      .node_shape = "polygon",
+      .node_penwidth = 2,
+      .dir = "both",
+      .edge_penwidth = 2,
+      .primitive_arrowhead_shape = primitive_arrow_shape,
+      .primitive_arrowtail_shape = primitive_arrow_shape,
+      .arrowhead_modifier = arrow_shape_modifier,
+      .arrowtail_modifier = arrow_shape_modifier,
+  };
+
+  test_edge_node_overlap(graph_options, {}, {.filename_base = filename_base});
+}