1
// SPDX-License-Identifier: LGPL-2.1-or-later
2
/***************************************************************************
3
* Copyright (c) 2023 David Carter <dcarter@david.carter.ca> *
5
* This file is part of FreeCAD. *
7
* FreeCAD is free software: you can redistribute it and/or modify it *
8
* under the terms of the GNU Lesser General Public License as *
9
* published by the Free Software Foundation, either version 2.1 of the *
10
* License, or (at your option) any later version. *
12
* FreeCAD is distributed in the hope that it will be useful, but *
13
* WITHOUT ANY WARRANTY; without even the implied warranty of *
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
15
* Lesser General Public License for more details. *
17
* You should have received a copy of the GNU Lesser General Public *
18
* License along with FreeCAD. If not, see *
19
* <https://www.gnu.org/licenses/>. *
21
**************************************************************************/
23
#include <gtest/gtest.h>
25
#include <Mod/Material/App/PreCompiled.h>
34
#include <App/Application.h>
35
#include <Gui/MetaTypes.h>
37
#include <Mod/Material/App/MaterialManager.h>
38
#include <Mod/Material/App/Model.h>
39
#include <Mod/Material/App/ModelManager.h>
40
#include <Mod/Material/App/ModelUuids.h>
42
class TestMaterialProperties: public ::testing::Test
45
static void SetUpTestSuite()
51
modelProp = Materials::ModelProperty(QString::fromStdString("Density"), // Name
52
QString::fromStdString("D"), // Header
53
QString::fromStdString("2DArray"), // Type
54
QString::fromStdString(""), // Units
55
QString::fromStdString(""), // URL
56
QString::fromStdString("desc")); // Description
57
modelProp1 = Materials::ModelProperty(QString::fromStdString("Temperature"),
58
QString::fromStdString("T"),
59
QString::fromStdString("Quantity"),
60
QString::fromStdString("C"),
61
QString::fromStdString(""),
62
QString::fromStdString("desc1"));
63
modelProp2 = Materials::ModelProperty(
64
QString::fromStdString("Density"),
65
QString::fromStdString("D"),
66
QString::fromStdString("Quantity"),
67
QString::fromStdString("kg/m^3"),
68
QString::fromStdString("https://en.wikipedia.org/wiki/Density"),
69
QString::fromStdString("desc2"));
71
modelProp.addColumn(modelProp1);
72
modelProp.addColumn(modelProp2);
75
model3DProp = Materials::ModelProperty(
76
QString::fromStdString("StressStrain"), // Name
77
QString::fromStdString("Stress / Strain"), // Header
78
QString::fromStdString("3DArray"), // Type
79
QString::fromStdString(""), // Units
80
QString::fromStdString(""), // URL
81
QString::fromStdString("3 Dimensional array showing stress and strain as a function of "
82
"temperature")); // Description
83
model3DProp1 = Materials::ModelProperty(QString::fromStdString("Temperature"),
84
QString::fromStdString("T"),
85
QString::fromStdString("Quantity"),
86
QString::fromStdString("C"),
87
QString::fromStdString(""),
88
QString::fromStdString("desc1"));
89
model3DProp2 = Materials::ModelProperty(QString::fromStdString("Stress"),
90
QString::fromStdString("Stress"),
91
QString::fromStdString("Quantity"),
92
QString::fromStdString("MPa"),
93
QString::fromStdString(""),
94
QString::fromStdString("desc2"));
95
model3DProp3 = Materials::ModelProperty(QString::fromStdString("Strain"),
96
QString::fromStdString("Strain"),
97
QString::fromStdString("Quantity"),
98
QString::fromStdString("MPa"),
99
QString::fromStdString(""),
100
QString::fromStdString("desc3"));
102
model3DProp.addColumn(model3DProp1);
103
model3DProp.addColumn(model3DProp2);
104
model3DProp.addColumn(model3DProp3);
107
// void TearDown() override {}
109
Materials::ModelProperty modelProp;
110
Materials::ModelProperty modelProp1;
111
Materials::ModelProperty modelProp2;
112
Materials::ModelProperty model3DProp;
113
Materials::ModelProperty model3DProp1;
114
Materials::ModelProperty model3DProp2;
115
Materials::ModelProperty model3DProp3;
118
TEST_F(TestMaterialProperties, TestEmpty)
120
Materials::MaterialProperty prop;
121
EXPECT_EQ(prop.getType(), Materials::MaterialValue::None);
122
EXPECT_TRUE(prop.isNull());
123
auto variant = prop.getValue();
124
EXPECT_TRUE(variant.isNull());
125
EXPECT_FALSE(variant.canConvert<QString>());
126
EXPECT_TRUE(variant.toString().isNull());
127
EXPECT_TRUE(variant.toString().isEmpty());
128
EXPECT_EQ(variant.toString().size(), 0);
131
TEST_F(TestMaterialProperties, TestSingle)
133
Materials::MaterialProperty prop(modelProp1, QLatin1String("sampleUUID"));
134
EXPECT_EQ(prop.getType(), Materials::MaterialValue::Quantity);
135
EXPECT_EQ(prop.getModelUUID(), QLatin1String("sampleUUID"));
136
EXPECT_TRUE(prop.isNull());
137
auto variant = prop.getValue();
138
EXPECT_TRUE(variant.canConvert<Base::Quantity>());
139
EXPECT_FALSE(variant.value<Base::Quantity>().isValid());
140
EXPECT_FALSE(variant.canConvert<QString>());
141
EXPECT_TRUE(variant.toString().isNull());
142
EXPECT_TRUE(variant.toString().isEmpty());
143
EXPECT_EQ(variant.toString().size(), 0);
146
void check2DArray(Materials::MaterialProperty& prop)
148
EXPECT_EQ(prop.getType(), Materials::MaterialValue::Array2D);
149
EXPECT_EQ(prop.getModelUUID(), QLatin1String("sampleUUID"));
150
EXPECT_TRUE(prop.isNull());
151
auto array = std::static_pointer_cast<Materials::Material2DArray>(prop.getMaterialValue());
152
EXPECT_EQ(array->rows(), 0);
153
auto variant = prop.getValue(); // Throw an error?
154
EXPECT_FALSE(variant.canConvert<QString>());
155
EXPECT_TRUE(variant.toString().isNull());
156
EXPECT_TRUE(variant.toString().isEmpty());
157
EXPECT_EQ(variant.toString().size(), 0);
160
EXPECT_EQ(prop.columns(), 2);
163
TEST_F(TestMaterialProperties, Test2DArray)
165
Materials::MaterialProperty prop(modelProp, QLatin1String("sampleUUID"));
169
TEST_F(TestMaterialProperties, Test2DArrayCopy)
171
Materials::MaterialProperty propBase(modelProp, QLatin1String("sampleUUID"));
172
Materials::MaterialProperty prop(propBase);
176
TEST_F(TestMaterialProperties, Test2DArrayAssignment)
178
Materials::MaterialProperty propBase(modelProp, QLatin1String("sampleUUID"));
179
Materials::MaterialProperty prop;
185
void check3DArray(Materials::MaterialProperty& prop)
187
EXPECT_EQ(prop.getType(), Materials::MaterialValue::Array3D);
188
EXPECT_EQ(prop.getModelUUID(), QLatin1String("sampleUUID"));
189
EXPECT_TRUE(prop.isNull());
190
auto array = std::static_pointer_cast<Materials::Material3DArray>(prop.getMaterialValue());
191
EXPECT_EQ(array->depth(), 0);
192
auto variant = prop.getValue(); // Throw an error?
193
EXPECT_FALSE(variant.canConvert<QString>());
194
EXPECT_TRUE(variant.toString().isNull());
195
EXPECT_TRUE(variant.toString().isEmpty());
196
EXPECT_EQ(variant.toString().size(), 0);
199
EXPECT_EQ(prop.columns(), 3);
202
TEST_F(TestMaterialProperties, Test3DArray)
204
Materials::MaterialProperty prop(model3DProp, QLatin1String("sampleUUID"));
208
TEST_F(TestMaterialProperties, Test3DArrayCopy)
210
Materials::MaterialProperty propBase(model3DProp, QLatin1String("sampleUUID"));
211
Materials::MaterialProperty prop(propBase);
215
TEST_F(TestMaterialProperties, Test3DArrayAssignment)
217
Materials::MaterialProperty propBase(model3DProp, QLatin1String("sampleUUID"));
218
Materials::MaterialProperty prop;