From db2682a5d2bfd90b465430ba2e6e895386b15ac1 Mon Sep 17 00:00:00 2001 From: Ali Kianian Date: Mon, 25 Sep 2023 12:21:09 +0300 Subject: [PATCH] QmlDesigner: Add google tests for the Lowest Common Ancestor Function Change-Id: I7a0b0c2cfe8861d1d5387ebd7d79ba31ac2f1ed6 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Reviewed-by: Marco Bubke --- .../tests/unittests/model/modelutils-test.cpp | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/tests/unit/tests/unittests/model/modelutils-test.cpp b/tests/unit/tests/unittests/model/modelutils-test.cpp index 4418d36ac83..8d69e69aba8 100644 --- a/tests/unit/tests/unittests/model/modelutils-test.cpp +++ b/tests/unit/tests/unittests/model/modelutils-test.cpp @@ -3,13 +3,16 @@ #include +#include #include #include - #include #include +#include namespace { +using QmlDesigner::ModelNode; +using QmlDesigner::ModelNodes; class ModelUtils : public ::testing::Test { @@ -106,4 +109,59 @@ TEST_F(ModelUtils, component_file_path_for_non_file_component_node_is_empty) ASSERT_THAT(path, IsEmpty()); } +TEST_F(ModelUtils, find_lowest_common_ancestor) +{ + auto child1 = model.createModelNode("Item"); + auto child2 = model.createModelNode("Item"); + model.rootModelNode().defaultNodeAbstractProperty().reparentHere(child1); + model.rootModelNode().defaultNodeAbstractProperty().reparentHere(child2); + ModelNodes nodes{child1, child2}; + + auto commonAncestor = QmlDesigner::ModelUtils::lowestCommonAncestor(nodes); + + ASSERT_THAT(commonAncestor, model.rootModelNode()); +} + +TEST_F(ModelUtils, lowest_common_ancestor_return_invalid_node_if_argument_is_invalid) +{ + auto child1 = model.createModelNode("Item"); + auto child2 = ModelNode{}; + model.rootModelNode().defaultNodeAbstractProperty().reparentHere(child1); + ModelNodes nodes{child1, child2}; + + auto commonAncestor = QmlDesigner::ModelUtils::lowestCommonAncestor(nodes); + + ASSERT_THAT(commonAncestor, Not(IsValid())); +} + +TEST_F(ModelUtils, find_lowest_common_ancestor_when_one_of_the_nodes_is_parent) +{ + auto parentNode = model.createModelNode("Item"); + auto childNode = model.createModelNode("Item"); + parentNode.defaultNodeAbstractProperty().reparentHere(childNode); + model.rootModelNode().defaultNodeAbstractProperty().reparentHere(parentNode); + ModelNodes nodes{childNode, parentNode}; + + auto commonAncestor = QmlDesigner::ModelUtils::lowestCommonAncestor(nodes); + + ASSERT_THAT(commonAncestor, parentNode); +} + +TEST_F(ModelUtils, lowest_common_ancestor_for_uncle_and_nephew_should_return_the_grandFather) +{ + auto grandFatherNode = model.createModelNode("Item"); + auto fatherNode = model.createModelNode("Item"); + auto uncleNode = model.createModelNode("Item"); + auto nephewNode = model.createModelNode("Item"); + fatherNode.defaultNodeAbstractProperty().reparentHere(nephewNode); + grandFatherNode.defaultNodeAbstractProperty().reparentHere(fatherNode); + grandFatherNode.defaultNodeAbstractProperty().reparentHere(uncleNode); + model.rootModelNode().defaultNodeAbstractProperty().reparentHere(grandFatherNode); + ModelNodes nodes{uncleNode, nephewNode}; + + auto commonAncestor = QmlDesigner::ModelUtils::lowestCommonAncestor(nodes); + + ASSERT_THAT(commonAncestor, grandFatherNode); +} + } // namespace