From 5997c39189620452169b1b07aad32e6dd716e986 Mon Sep 17 00:00:00 2001 From: Tobias Knopff <t.knopff@fz-juelich.de> Date: Tue, 27 Apr 2021 08:46:21 +0200 Subject: [PATCH] Make MaterialItem::P_MATERIAL_DATA private --- GUI/coregui/Models/MaterialItem.cpp | 35 +++++++++++++++++ GUI/coregui/Models/MaterialItem.h | 14 ++++++- Tests/UnitTests/GUI/TestMaterialModel.cpp | 46 ++++++++++++++++++----- 3 files changed, 83 insertions(+), 12 deletions(-) diff --git a/GUI/coregui/Models/MaterialItem.cpp b/GUI/coregui/Models/MaterialItem.cpp index 407aa4ebc5e..3aec3fe6a79 100644 --- a/GUI/coregui/Models/MaterialItem.cpp +++ b/GUI/coregui/Models/MaterialItem.cpp @@ -59,6 +59,41 @@ void MaterialItem::setSLDData(double sld_real, double sld_imag) sldData->setItemValue(MaterialSLDDataItem::P_SLD_IMAG, sld_imag); } +bool MaterialItem::isRefractive() const +{ + SessionItem* data = getGroupItem(P_MATERIAL_DATA); + ASSERT(data); + return dynamic_cast<MaterialRefractiveDataItem*>(data) != nullptr; +} + +double MaterialItem::refractiveDataDelta() const +{ + ASSERT(isRefractive()); + return getGroupItem(P_MATERIAL_DATA) + ->getItemValue(MaterialRefractiveDataItem::P_DELTA).toDouble(); +} + +double MaterialItem::refractiveDataBeta() const +{ + ASSERT(isRefractive()); + return getGroupItem(P_MATERIAL_DATA) + ->getItemValue(MaterialRefractiveDataItem::P_BETA).toDouble(); +} + +double MaterialItem::SLDDataReal() const +{ + ASSERT(!isRefractive()); + return getGroupItem(P_MATERIAL_DATA) + ->getItemValue(MaterialSLDDataItem::P_SLD_REAL).toDouble(); +} + +double MaterialItem::SLDDataImag() const +{ + ASSERT(!isRefractive()); + return getGroupItem(P_MATERIAL_DATA) + ->getItemValue(MaterialSLDDataItem::P_SLD_IMAG).toDouble(); +} + QString MaterialItem::identifier() const { return getItemValue(P_IDENTIFIER).toString(); diff --git a/GUI/coregui/Models/MaterialItem.h b/GUI/coregui/Models/MaterialItem.h index c837ac2ce6b..687b6bcf839 100644 --- a/GUI/coregui/Models/MaterialItem.h +++ b/GUI/coregui/Models/MaterialItem.h @@ -22,8 +22,8 @@ class Material; class BA_CORE_API_ MaterialItem : public SessionItem { private: static const QString P_COLOR; -public: static const QString P_MATERIAL_DATA; +public: static const QString P_MAGNETIZATION; private: static const QString P_IDENTIFIER; @@ -33,7 +33,17 @@ public: void setRefractiveData(double delta, double beta); void setSLDData(double sld_real, double sld_imag); - + /// \return true iff material is refractive, and SLD otherwise + bool isRefractive() const; + /// \pre isRefractive + double refractiveDataDelta() const; + /// \pre isRefractive + double refractiveDataBeta() const; + /// \pre ! isRefractive + double SLDDataReal() const; + /// \pre ! isRefractive + double SLDDataImag() const; + QString identifier() const; void setIdentifier(const QString& id); diff --git a/Tests/UnitTests/GUI/TestMaterialModel.cpp b/Tests/UnitTests/GUI/TestMaterialModel.cpp index 1aae2389cb5..6a65f498089 100644 --- a/Tests/UnitTests/GUI/TestMaterialModel.cpp +++ b/Tests/UnitTests/GUI/TestMaterialModel.cpp @@ -22,9 +22,9 @@ TEST_F(TestMaterialModel, addRefractiveMaterial) EXPECT_EQ(model->rowCount(QModelIndex()), 1); EXPECT_EQ(material->itemName(), name); - auto materialData = material->getGroupItem(MaterialItem::P_MATERIAL_DATA); - EXPECT_EQ(materialData->getItemValue(MaterialRefractiveDataItem::P_DELTA), delta); - EXPECT_EQ(materialData->getItemValue(MaterialRefractiveDataItem::P_BETA), beta); + EXPECT_TRUE(material->isRefractive()); + EXPECT_EQ(material->refractiveDataDelta(), delta); + EXPECT_EQ(material->refractiveDataBeta(), beta); } TEST_F(TestMaterialModel, addSLDMaterial) @@ -42,12 +42,12 @@ TEST_F(TestMaterialModel, addSLDMaterial) EXPECT_EQ(model->rowCount(QModelIndex()), 1); EXPECT_EQ(material->itemName(), name); - auto materialData = material->getGroupItem(MaterialItem::P_MATERIAL_DATA); - EXPECT_EQ(materialData->getItemValue(MaterialSLDDataItem::P_SLD_REAL), sld_real); - EXPECT_EQ(materialData->getItemValue(MaterialSLDDataItem::P_SLD_IMAG), sld_imag); + EXPECT_FALSE(material->isRefractive()); + EXPECT_EQ(material->SLDDataReal(), sld_real); + EXPECT_EQ(material->SLDDataImag(), sld_imag); } -TEST_F(TestMaterialModel, cloneMaterial) +TEST_F(TestMaterialModel, cloneMaterialRefractive) { std::unique_ptr<MaterialModel> model(new MaterialModel); @@ -69,10 +69,36 @@ TEST_F(TestMaterialModel, cloneMaterial) // checking name of cloned material EXPECT_EQ(material->itemName() + " (clone)", clonedMaterial->itemName()); + EXPECT_EQ(material->isRefractive(), clonedMaterial->isRefractive()); + EXPECT_EQ(material->refractiveDataDelta(), delta); + EXPECT_EQ(material->refractiveDataBeta(), beta); +} + +TEST_F(TestMaterialModel, cloneMaterialSLD) +{ + std::unique_ptr<MaterialModel> model(new MaterialModel); + + EXPECT_EQ(model->rowCount(QModelIndex()), 0); + + const double real(0.7), imag(0.5); + const QString name("MaterialName"); + auto material = model->addSLDMaterial(name, real, imag); + const QString origIdentifier = material->identifier(); + + auto clonedMaterial = model->cloneMaterial(material->index()); + EXPECT_EQ(model->rowCount(QModelIndex()), 2); + + // clone should not change identifier of original material (as it once happened) + EXPECT_EQ(material->identifier(), origIdentifier); - auto materialData = clonedMaterial->getGroupItem(MaterialItem::P_MATERIAL_DATA); - EXPECT_EQ(materialData->getItemValue(MaterialRefractiveDataItem::P_DELTA), delta); - EXPECT_EQ(materialData->getItemValue(MaterialRefractiveDataItem::P_BETA), beta); + // cloned material should have different identifier + EXPECT_TRUE(clonedMaterial->identifier() != material->identifier()); + + // checking name of cloned material + EXPECT_EQ(material->itemName() + " (clone)", clonedMaterial->itemName()); + EXPECT_EQ(material->isRefractive(), clonedMaterial->isRefractive()); + EXPECT_EQ(material->SLDDataReal(), real); + EXPECT_EQ(material->SLDDataImag(), imag); } //! Checks the method which returns MaterialItem from known identifier. -- GitLab