From fbfb6dd1094956ba45d2161dbbee3fc608dfa039 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Thu, 21 Jun 2018 13:30:14 +0200
Subject: [PATCH] More tests: moving middle layer on top

---
 Tests/UnitTests/GUI/TestMultiLayerItem.h | 85 ++++++++++++++++++++++++
 1 file changed, 85 insertions(+)

diff --git a/Tests/UnitTests/GUI/TestMultiLayerItem.h b/Tests/UnitTests/GUI/TestMultiLayerItem.h
index e276d75a97f..3e4088d0a02 100644
--- a/Tests/UnitTests/GUI/TestMultiLayerItem.h
+++ b/Tests/UnitTests/GUI/TestMultiLayerItem.h
@@ -13,6 +13,7 @@ public:
 TestMultiLayerItem::~TestMultiLayerItem() = default;
 
 //! Testing layer appearance (enabled, disabled) in a MultiLayer made of two default layers.
+//! In two layer system top and bottom layers should have disabled thickness and roughness.
 
 TEST_F(TestMultiLayerItem, test_twoLayerSystem)
 {
@@ -40,3 +41,87 @@ TEST_F(TestMultiLayerItem, test_twoLayerSystem)
     EXPECT_EQ(bottom->getGroupItem(LayerItem::P_ROUGHNESS)->modelType(),
               Constants::LayerZeroRoughnessType);
 }
+
+//! Testing layer appearance (enabled, disabled) in a MultiLayer made of three default layers.
+//! In three layer system middle layer's thickness/roughness should be enabled.
+
+TEST_F(TestMultiLayerItem, test_threeLayerSystem)
+{
+    SampleModel model;
+
+    auto multilayer = model.insertNewItem(Constants::MultiLayerType);
+    auto top = model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer));
+    auto middle = model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer));
+    auto bottom = model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer));
+
+    // Thickness property should be disabled for top and bottom layers and enabled for middle
+    EXPECT_FALSE(top->getItem(LayerItem::P_THICKNESS)->isEnabled());
+    EXPECT_TRUE(middle->getItem(LayerItem::P_THICKNESS)->isEnabled());
+    EXPECT_FALSE(bottom->getItem(LayerItem::P_THICKNESS)->isEnabled());
+
+    // Thickness value should be 0.0 for top and bottom layers
+    EXPECT_EQ(top->getItemValue(LayerItem::P_THICKNESS).toDouble(), 0.0);
+    EXPECT_EQ(middle->getItemValue(LayerItem::P_THICKNESS).toDouble(), 0.0);
+    EXPECT_EQ(bottom->getItemValue(LayerItem::P_THICKNESS).toDouble(), 0.0);
+
+    // Roughness group property should be disabled for top, and enabled for other layers
+    EXPECT_FALSE(top->getItem(LayerItem::P_ROUGHNESS)->isEnabled());
+    EXPECT_TRUE(middle->getItem(LayerItem::P_ROUGHNESS)->isEnabled());
+    EXPECT_TRUE(bottom->getItem(LayerItem::P_ROUGHNESS)->isEnabled());
+
+    // Default roughness should be "LayerZeroRoughness"
+    EXPECT_EQ(top->getGroupItem(LayerItem::P_ROUGHNESS)->modelType(),
+              Constants::LayerZeroRoughnessType);
+    EXPECT_EQ(middle->getGroupItem(LayerItem::P_ROUGHNESS)->modelType(),
+              Constants::LayerZeroRoughnessType);
+    EXPECT_EQ(bottom->getGroupItem(LayerItem::P_ROUGHNESS)->modelType(),
+              Constants::LayerZeroRoughnessType);
+}
+
+//! Testing middle layer appearance when it is moved to the top.
+//! In three layer system, the moving of middle layer on top should lead to the disabling
+//! of roughness/thickness.
+
+TEST_F(TestMultiLayerItem, test_movingMiddleLayerOnTop)
+{
+    SampleModel model;
+
+    auto multilayer = model.insertNewItem(Constants::MultiLayerType);
+    auto top = model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer));
+    auto middle = model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer));
+    auto bottom = model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer));
+
+    const double thickness = 10.0;
+    middle->setItemValue(LayerItem::P_THICKNESS, thickness);
+
+    // Thickness property should be disabled for top and bottom layers and enabled for middle
+    EXPECT_FALSE(top->getItem(LayerItem::P_THICKNESS)->isEnabled());
+    EXPECT_TRUE(middle->getItem(LayerItem::P_THICKNESS)->isEnabled());
+    EXPECT_FALSE(bottom->getItem(LayerItem::P_THICKNESS)->isEnabled());
+
+    // Roughness group property should be disabled for top, and enabled for other layers
+    EXPECT_FALSE(top->getItem(LayerItem::P_ROUGHNESS)->isEnabled());
+    EXPECT_TRUE(middle->getItem(LayerItem::P_ROUGHNESS)->isEnabled());
+    EXPECT_TRUE(bottom->getItem(LayerItem::P_ROUGHNESS)->isEnabled());
+
+    // Thickness value should be 0.0 for top and bottom layers
+    EXPECT_EQ(top->getItemValue(LayerItem::P_THICKNESS).toDouble(), 0.0);
+    EXPECT_EQ(middle->getItemValue(LayerItem::P_THICKNESS).toDouble(), thickness);
+    EXPECT_EQ(bottom->getItemValue(LayerItem::P_THICKNESS).toDouble(), 0.0);
+
+    // Moving middle layer to top
+    model.moveItem(middle, multilayer, 0, MultiLayerItem::T_LAYERS);
+    // checking that middle is top now, and top layer is middle now
+    EXPECT_EQ(middle, multilayer->getChildrenOfType(Constants::LayerType).at(0));
+    EXPECT_EQ(top, multilayer->getChildrenOfType(Constants::LayerType).at(1));
+
+    // Thickness and roughness of middle layer should be disabled now
+    EXPECT_FALSE(middle->getItem(LayerItem::P_THICKNESS)->isEnabled());
+    EXPECT_FALSE(middle->getItem(LayerItem::P_ROUGHNESS)->isEnabled());
+
+    // Thickness and roughness of former top layer should be enabled now
+    EXPECT_TRUE(top->getItem(LayerItem::P_THICKNESS)->isEnabled());
+    EXPECT_TRUE(top->getItem(LayerItem::P_ROUGHNESS)->isEnabled());
+
+}
+
-- 
GitLab