BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
customvariants.test.cpp File Reference

Implements class CLASS? More...

Include dependency graph for customvariants.test.cpp:

Go to the source code of this file.

Classes

class  CustomVariantsTest
 

Functions

 TEST_F (CustomVariantsTest, CompatibleVariantTypes)
 Variant compatibility. More...
 
 TEST_F (CustomVariantsTest, IsTheSameComboProperty)
 Checks if ComboProperty based variant is the same. More...
 
 TEST_F (CustomVariantsTest, IsTheSameVariant)
 Test variant equality reported by SessionItemUtils::isTheSame. More...
 
 TEST_F (CustomVariantsTest, isVariantType)
 Checks all functions related to variant types. More...
 
 TEST_F (CustomVariantsTest, toCustomVariant)
 Test translation of variants. More...
 
 TEST_F (CustomVariantsTest, toQtVariant)
 Test toQtVAriant function. More...
 
 TEST_F (CustomVariantsTest, VariantFromTemplateArgument)
 To keep under control implicit type conversion. More...
 
 TEST_F (CustomVariantsTest, VariantName)
 Variant compatibility. More...
 

Detailed Description

Implements class CLASS?

Homepage:\n http://www.bornagainproject.org
License:\n GNU General Public License v3 or higher (see COPYING)
Authors
Gennady Pospelov et al, Scientific Computing Group at MLZ (see CITATION, AUTHORS)

Definition in file customvariants.test.cpp.

Function Documentation

◆ TEST_F() [1/8]

TEST_F ( CustomVariantsTest  ,
CompatibleVariantTypes   
)

Variant compatibility.

Definition at line 76 of file customvariants.test.cpp.

77 {
78  QVariant undefined;
79  QVariant bool_variant = QVariant::fromValue(true);
80  QVariant int_variant = QVariant::fromValue(1);
81  QVariant double_variant = QVariant::fromValue(42.0);
82  QVariant string_variant = QVariant::fromValue(std::string("string"));
83  std::vector<double> vec{1, 2};
84  QVariant vector_variant = QVariant::fromValue(vec);
85  ComboProperty combo = ComboProperty::createFrom({"a1", "a2", "s3"});
86  QVariant combo_variant = QVariant::fromValue(combo);
87  QVariant color_variant = QVariant::fromValue(QColor(Qt::red));
88  QVariant extprop_variant = QVariant::fromValue(ExternalProperty());
89  QVariant limits_variant = QVariant::fromValue(RealLimits());
90 
91  std::vector<QVariant> variants = {bool_variant, int_variant, double_variant,
92  string_variant, vector_variant, combo_variant,
93  color_variant, extprop_variant, limits_variant};
94  for (size_t i = 0; i < variants.size(); ++i) {
95  EXPECT_TRUE(Utils::CompatibleVariantTypes(undefined, variants[i]));
96  EXPECT_FALSE(Utils::VariantType(undefined) == Utils::VariantType(variants[i]));
97  for (size_t j = 0; j < variants.size(); ++j) {
98  if (i == j) {
99  EXPECT_TRUE(Utils::VariantType(variants[i]) == Utils::VariantType(variants[j]));
100  EXPECT_TRUE(Utils::CompatibleVariantTypes(variants[i], variants[j]));
101  } else {
102  EXPECT_FALSE(Utils::CompatibleVariantTypes(variants[i], variants[j]));
103  EXPECT_FALSE(Utils::VariantType(variants[i]) == Utils::VariantType(variants[j]));
104  }
105  }
106  }
107 }
Custom property to define list of string values with multiple selections.
Definition: comboproperty.h:27
Property to carry text, color and identifier.
Limits for double.
Definition: reallimits.h:25
int VariantType(const QVariant &variant)
Returns type of variant (additionally checks for user type).
bool CompatibleVariantTypes(const QVariant &oldValue, const QVariant &newValue)
Returns true if variants has compatible types.

References ModelView::Utils::CompatibleVariantTypes(), ModelView::ComboProperty::createFrom(), and ModelView::Utils::VariantType().

Here is the call graph for this function:

◆ TEST_F() [2/8]

TEST_F ( CustomVariantsTest  ,
IsTheSameComboProperty   
)

Checks if ComboProperty based variant is the same.

Definition at line 161 of file customvariants.test.cpp.

162 {
163  ComboProperty combo1 = ComboProperty::createFrom({"a1", "a2"});
164  ComboProperty combo2 = ComboProperty::createFrom({"a1", "a2"});
165 
166  EXPECT_TRUE(Utils::IsTheSame(QVariant::fromValue(combo1), QVariant::fromValue(combo1)));
167 
168  combo1.setValue("a1");
169  combo2.setValue("a2");
170  EXPECT_FALSE(Utils::IsTheSame(QVariant::fromValue(combo1), QVariant::fromValue(combo2)));
171 
172  QVariant v1 = QVariant::fromValue(combo1);
173  QVariant v2 = QVariant::fromValue(combo2);
174  EXPECT_FALSE(Utils::IsTheSame(v1, v2));
175 }
void setValue(const std::string &name)
bool IsTheSame(const QVariant &var1, const QVariant &var2)
Returns true if given variants have same type and value.

References ModelView::ComboProperty::createFrom(), ModelView::Utils::IsTheSame(), and ModelView::ComboProperty::setValue().

Here is the call graph for this function:

◆ TEST_F() [3/8]

TEST_F ( CustomVariantsTest  ,
IsTheSameVariant   
)

Test variant equality reported by SessionItemUtils::isTheSame.

Definition at line 111 of file customvariants.test.cpp.

112 {
113  const std::vector<double> vec1{1, 2};
114  const std::vector<double> vec2{1, 2, 3};
115  const ComboProperty combo1 = ComboProperty::createFrom({"a1", "a2"});
116  const ComboProperty combo2 = ComboProperty::createFrom({"b1"});
117  const ExternalProperty extprop1;
118  const ExternalProperty extprop2("abc", QColor(Qt::red), "123");
119  const RealLimits lim1;
120  const RealLimits lim2 = RealLimits::limited(1.0, 2.0);
121 
122  ComboProperty combo3 = ComboProperty::createFrom({"e1", "e2"});
123  ComboProperty combo4 = ComboProperty::createFrom({"e1", "e2"});
124  combo3.setValue("e1");
125  combo4.setValue("e2");
126 
127  std::vector<QVariant> variants = {QVariant(),
128  QVariant::fromValue(true),
129  QVariant::fromValue(false),
130  QVariant::fromValue(1),
131  QVariant::fromValue(2),
132  QVariant::fromValue(42.0),
133  QVariant::fromValue(43.0),
134  QVariant::fromValue(std::string("string1")),
135  QVariant::fromValue(std::string("string2")),
136  QVariant::fromValue(vec1),
137  QVariant::fromValue(vec2),
138  QVariant::fromValue(combo1),
139  QVariant::fromValue(combo2),
140  QVariant::fromValue(QColor(Qt::red)),
141  QVariant::fromValue(QColor(Qt::green)),
142  QVariant::fromValue(extprop1),
143  QVariant::fromValue(extprop2),
144  QVariant::fromValue(lim1),
145  QVariant::fromValue(lim2),
146  QVariant::fromValue(combo3),
147  QVariant::fromValue(combo4)};
148 
149  for (size_t i = 0; i < variants.size(); ++i) {
150  for (size_t j = 0; j < variants.size(); ++j) {
151  if (i == j)
152  EXPECT_TRUE(Utils::IsTheSame(variants[i], variants[j]));
153  else
154  EXPECT_FALSE(Utils::IsTheSame(variants[i], variants[j]));
155  }
156  }
157 }
static RealLimits limited(double left_bound_value, double right_bound_value)
Creates an object bounded from the left and right.
Definition: RealLimits.cpp:125

References ModelView::ComboProperty::createFrom(), ModelView::Utils::IsTheSame(), ModelView::RealLimits::limited(), and ModelView::ComboProperty::setValue().

Here is the call graph for this function:

◆ TEST_F() [4/8]

TEST_F ( CustomVariantsTest  ,
isVariantType   
)

Checks all functions related to variant types.

Definition at line 221 of file customvariants.test.cpp.

222 {
223  using is_variant_t = std::function<bool(const QVariant&)>;
224 
225  std::vector<std::pair<QVariant, is_variant_t>> data = {
226  {QVariant::fromValue(true), Utils::IsBoolVariant},
227  {QVariant::fromValue(1), Utils::IsIntVariant},
228  {QVariant::fromValue(42.0), Utils::IsDoubleVariant},
229  {QVariant::fromValue(ComboProperty()), Utils::IsComboVariant},
230  {QVariant::fromValue(std::string("string1")), Utils::IsStdStringVariant},
231  {QVariant::fromValue(std::vector<double>({1, 2})), Utils::IsDoubleVectorVariant},
232  {QVariant::fromValue(QColor(Qt::red)), Utils::IsColorVariant},
233  {QVariant::fromValue(ExternalProperty()), Utils::IsExtPropertyVariant},
234  {QVariant::fromValue(RealLimits()), Utils::IsRealLimitsVariant}};
235 
236  for (size_t i = 0; i < data.size(); ++i) {
237  auto is_variant_func = data[i].second;
238  for (size_t j = 0; j < data.size(); ++j) {
239  auto variant = data[j].first;
240  if (i == j)
241  EXPECT_TRUE(is_variant_func(variant));
242  else
243  EXPECT_FALSE(is_variant_func(variant));
244  }
245  }
246 }
MVVM_MODEL_EXPORT bool IsIntVariant(const Variant &variant)
Returns true in the case of double value based variant.
MVVM_MODEL_EXPORT bool IsColorVariant(const Variant &variant)
Returns true in the case of QColor based variant.
MVVM_MODEL_EXPORT bool IsDoubleVariant(const Variant &variant)
Returns true in the case of double value based variant.
MVVM_MODEL_EXPORT bool IsStdStringVariant(const Variant &variant)
Returns true in the case of double value based variant.
MVVM_MODEL_EXPORT bool IsBoolVariant(const Variant &variant)
Returns true in the case of double value based variant.
MVVM_MODEL_EXPORT bool IsExtPropertyVariant(const Variant &variant)
Returns true in the case of ExternalProperty based variant.
MVVM_MODEL_EXPORT bool IsComboVariant(const Variant &variant)
Returns true in the case of double value based variant.
MVVM_MODEL_EXPORT bool IsDoubleVectorVariant(const Variant &variant)
Returns true in the case of variant based on std::vector<double>.
MVVM_MODEL_EXPORT bool IsRealLimitsVariant(const Variant &variant)
Returns true in the case of RealLimits based variant.

References ModelView::Utils::IsBoolVariant(), ModelView::Utils::IsColorVariant(), ModelView::Utils::IsComboVariant(), ModelView::Utils::IsDoubleVariant(), ModelView::Utils::IsDoubleVectorVariant(), ModelView::Utils::IsExtPropertyVariant(), ModelView::Utils::IsIntVariant(), ModelView::Utils::IsRealLimitsVariant(), and ModelView::Utils::IsStdStringVariant().

Here is the call graph for this function:

◆ TEST_F() [5/8]

TEST_F ( CustomVariantsTest  ,
toCustomVariant   
)

Test translation of variants.

Definition at line 199 of file customvariants.test.cpp.

200 {
201  // from Variant based on QString to variant based on std::string
202  QVariant stdstring_variant = QVariant::fromValue(std::string("abc"));
203  QVariant qstring_variant = QVariant::fromValue(QString("abc"));
204  QVariant converted = Utils::toCustomVariant(qstring_variant);
205 
206  EXPECT_FALSE(qstring_variant == stdstring_variant);
207  EXPECT_TRUE(stdstring_variant == converted);
208 
209  // Double variant should be unchanged
210  QVariant value(42.0);
211  EXPECT_TRUE(Utils::toCustomVariant(value) == QVariant::fromValue(42.0));
212 
213  QVariant invalid;
214  EXPECT_FALSE(Utils::toCustomVariant(invalid).isValid());
215 }
MVVM_MODEL_EXPORT Variant toCustomVariant(const Variant &standard)
Converts Qt variant to custom variant on board of SessionItem.

References ModelView::Utils::toCustomVariant().

Here is the call graph for this function:

◆ TEST_F() [6/8]

TEST_F ( CustomVariantsTest  ,
toQtVariant   
)

Test toQtVAriant function.

Definition at line 179 of file customvariants.test.cpp.

180 {
181  // from Variant based on std::string to variant based on QString
182  QVariant stdstring_variant = QVariant::fromValue(std::string("abc"));
183  QVariant qstring_variant = QVariant::fromValue(QString("abc"));
184  QVariant converted = Utils::toQtVariant(stdstring_variant);
185 
186  EXPECT_FALSE(qstring_variant == stdstring_variant);
187  EXPECT_TRUE(qstring_variant == converted);
188 
189  // Double variant should be unchanged
190  QVariant value(42.0);
191  EXPECT_TRUE(Utils::toQtVariant(value) == QVariant::fromValue(42.0));
192 
193  QVariant invalid;
194  EXPECT_FALSE(Utils::toQtVariant(invalid).isValid());
195 }
MVVM_MODEL_EXPORT Variant toQtVariant(const Variant &custom)
Converts custom variant to standard variant which Qt views will understand.

References ModelView::Utils::toQtVariant().

Here is the call graph for this function:

◆ TEST_F() [7/8]

TEST_F ( CustomVariantsTest  ,
VariantFromTemplateArgument   
)

To keep under control implicit type conversion.

Definition at line 44 of file customvariants.test.cpp.

45 {
46  EXPECT_EQ(variantFromArgument(true).typeName(), Constants::bool_type_name);
47  EXPECT_EQ(variantFromArgument(1).typeName(), Constants::int_type_name);
48  EXPECT_EQ(variantFromArgument(42.0).typeName(), Constants::double_type_name);
49  EXPECT_EQ(variantFromArgument(std::string("abc")).typeName(), Constants::string_type_name);
50 }
const std::string string_type_name
const std::string bool_type_name
const std::string double_type_name
const std::string int_type_name

References ModelView::Constants::bool_type_name, ModelView::Constants::double_type_name, ModelView::Constants::int_type_name, and ModelView::Constants::string_type_name.

◆ TEST_F() [8/8]

TEST_F ( CustomVariantsTest  ,
VariantName   
)

Variant compatibility.

Definition at line 54 of file customvariants.test.cpp.

55 {
56  const std::vector<double> vec{1, 2};
57  const ComboProperty combo = ComboProperty::createFrom({"a1", "a2", "s3"});
58  EXPECT_EQ(Utils::VariantName(QVariant()), Constants::invalid_type_name);
59  EXPECT_EQ(Utils::VariantName(QVariant::fromValue(true)), Constants::bool_type_name);
60  EXPECT_EQ(Utils::VariantName(QVariant::fromValue(1)), Constants::int_type_name);
61  EXPECT_EQ(Utils::VariantName(QVariant::fromValue(42.0)), Constants::double_type_name);
62  EXPECT_EQ(Utils::VariantName(QVariant::fromValue(std::string("string"))),
64  EXPECT_EQ(Utils::VariantName(QVariant::fromValue(vec)), Constants::vector_double_type_name);
65  EXPECT_EQ(Utils::VariantName(QVariant::fromValue(combo)), Constants::comboproperty_type_name);
66  EXPECT_EQ(Utils::VariantName(QVariant::fromValue(QColor(Qt::red))),
68  EXPECT_EQ(Utils::VariantName(QVariant::fromValue(ExternalProperty())),
70  EXPECT_EQ(Utils::VariantName(QVariant::fromValue(RealLimits())),
72 }
const std::string reallimits_type_name
const std::string comboproperty_type_name
const std::string extproperty_type_name
const std::string vector_double_type_name
const std::string invalid_type_name
const std::string qcolor_type_name
MVVM_MODEL_EXPORT std::string VariantName(const Variant &variant)
Returns name of variant.

References ModelView::Constants::bool_type_name, ModelView::Constants::comboproperty_type_name, ModelView::ComboProperty::createFrom(), ModelView::Constants::double_type_name, ModelView::Constants::extproperty_type_name, ModelView::Constants::int_type_name, ModelView::Constants::invalid_type_name, ModelView::Constants::qcolor_type_name, ModelView::Constants::reallimits_type_name, ModelView::Constants::string_type_name, ModelView::Utils::VariantName(), and ModelView::Constants::vector_double_type_name.

Here is the call graph for this function: