tesseract_urdf_material_unit.cpp
Go to the documentation of this file.
3 #include <gtest/gtest.h>
4 #include <Eigen/Geometry>
7 
11 
12 TEST(TesseractURDFUnit, parse_material) // NOLINT
13 {
14  auto m = std::make_shared<tesseract_scene_graph::Material>("test_material");
15  m->color = Eigen::Vector4d(1, .5, .5, 1);
16  m->texture_filename = tesseract_common::getTempPath() + "texture.txt";
17 
18  {
19  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
20  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
21  available_materials["test_material"] = m;
22 
23  std::string str = R"(<material name="test_material" extra="0 0 0">
24  <color rgba="1 .5 .5 1" extra="0 0 0"/>
25  <texture filename=")" +
26  m->texture_filename + R"("extra="0 0 0"/>
27  </material>)";
29  EXPECT_TRUE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
31  str,
33  empty_available_materials,
34  true));
35  EXPECT_TRUE(elem->getName() == "test_material");
36  EXPECT_TRUE(elem->color.isApprox(Eigen::Vector4d(1, .5, .5, 1), 1e-8));
37  EXPECT_TRUE(elem->texture_filename == tesseract_common::getTempPath() + "texture.txt");
38  }
39 
40  {
41  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
42  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
43  available_materials["test_material"] = m;
44 
45  std::string str = R"(<material name="test_material">
46  <color rgba="1 .5 .5 1"/>
47  </material>)";
49  EXPECT_TRUE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
51  str,
53  empty_available_materials,
54  true));
55  EXPECT_TRUE(elem->getName() == "test_material");
56  EXPECT_TRUE(elem->color.isApprox(Eigen::Vector4d(1, .5, .5, 1), 1e-8));
57  EXPECT_TRUE(elem->texture_filename.empty());
58  }
59 
60  {
61  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
62  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
63  available_materials["test_material"] = m;
64 
65  std::string str = R"(<material name="test_material"/>)";
67  EXPECT_TRUE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
69  str,
71  available_materials,
72  true));
73  EXPECT_TRUE(elem->getName() == "test_material");
74  EXPECT_TRUE(elem->color.isApprox(Eigen::Vector4d(1, .5, .5, 1), 1e-8));
75  EXPECT_TRUE(elem->texture_filename == tesseract_common::getTempPath() + "texture.txt");
76  }
77 
78  {
79  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
80  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
81  available_materials["test_material"] = m;
82 
83  std::string str = R"(<material name="test_material" extra="0 0 0">
84  <color rgba="1 .5 .5 1" extra="0 0 0"/>
85  <texture />
86  </material>)";
88  EXPECT_FALSE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
90  str,
92  empty_available_materials,
93  true));
94  }
95 
96  {
97  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
98  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
99  available_materials["test_material"] = m;
100 
101  std::string str = R"(<material name="test_material">
102  <color />
103  </material>)";
105  EXPECT_FALSE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
107  str,
109  empty_available_materials,
110  true));
111  }
112 
113  {
114  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
115  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
116  available_materials["test_material"] = m;
117 
118  std::string str = R"(<material />)";
120  EXPECT_FALSE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
122  str,
124  available_materials,
125  true));
126  }
127 
128  {
129  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
130  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
131  available_materials["test_material"] = m;
132 
133  std::string str = R"(<material name="test_material"/>)";
135  EXPECT_FALSE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
137  str,
139  empty_available_materials,
140  true));
141  }
142 
143  {
144  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
145  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
146  available_materials["test_material"] = m;
147 
148  std::string str = R"(<material name="test_material">
149  <color rgba="1 .5 .5 a"/>
150  <texture filename=")" +
151  m->texture_filename + R"("/>
152  </material>)";
154  EXPECT_FALSE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
156  str,
158  empty_available_materials,
159  true));
160  }
161 
162  {
163  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
164  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
165  available_materials["test_material"] = m;
166 
167  std::string str = R"(<material name="test_material">
168  <color rgba="1 .5 a 1"/>
169  <texture filename=")" +
170  m->texture_filename + R"("/>
171  </material>)";
173  EXPECT_FALSE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
175  str,
177  empty_available_materials,
178  true));
179  }
180 
181  {
182  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
183  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
184  available_materials["test_material"] = m;
185 
186  std::string str = R"(<material name="test_material">
187  <color rgba="1 a .5 1"/>
188  <texture filename=")" +
189  m->texture_filename + R"("/>
190  </material>)";
192  EXPECT_FALSE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
194  str,
196  empty_available_materials,
197  true));
198  }
199 
200  {
201  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
202  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
203  available_materials["test_material"] = m;
204 
205  std::string str = R"(<material name="test_material">
206  <color rgba="a .5 .5 1"/>
207  <texture filename=")" +
208  m->texture_filename + R"("/>
209  </material>)";
211  EXPECT_FALSE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
213  str,
215  empty_available_materials,
216  true));
217  }
218 
219  {
220  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
221  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
222  available_materials["test_material"] = m;
223 
224  std::string str = R"(<material name="test_material">
225  <color rgba="1 .5 .5 1 1"/>
226  <texture filename=")" +
227  m->texture_filename + R"("/>
228  </material>)";
230  EXPECT_FALSE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
232  str,
234  empty_available_materials,
235  true));
236  }
237 
238  {
239  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
240  std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> available_materials;
241  available_materials["test_material"] = m;
242 
243  std::string str = R"(<material name="test_material">
244  <color rgba=""/>
245  <texture filename=")" +
246  m->texture_filename + R"("/>
247  </material>)";
249  EXPECT_FALSE(runTest<tesseract_scene_graph::Material::Ptr>(elem,
251  str,
253  empty_available_materials,
254  true));
255  }
256 }
257 
258 TEST(TesseractURDFUnit, write_material) // NOLINT
259 {
260  {
261  tesseract_scene_graph::Material::Ptr material = std::make_shared<tesseract_scene_graph::Material>("unobtainium");
262  material->color = Eigen::Vector4d(1.0, 0.5, 0.5, 1.0);
263  std::string text;
264  EXPECT_EQ(0, writeTest<tesseract_scene_graph::Material::Ptr>(material, &tesseract_urdf::writeMaterial, text));
265  // This string literal is not pretty, but has to match whitespace for comparison.
266  // clang-format off
267  std::string expected =
268 R"(<material name="unobtainium">
269  <color rgba="1 0.5 0.5 1"/>
270 </material>)";
271  // clang-format on
272  EXPECT_EQ(text, expected);
273  }
274 
275  {
276  tesseract_scene_graph::Material::Ptr material = std::make_shared<tesseract_scene_graph::Material>("unobtainium");
277  material->color = Eigen::Vector4d(1.0, 0.5, 0.5, 1.0);
278  material->texture_filename = "/tmp/texture.txt";
279  std::string text;
280  EXPECT_EQ(0, writeTest<tesseract_scene_graph::Material::Ptr>(material, &tesseract_urdf::writeMaterial, text));
281  // This string literal is not pretty, but has to match whitespace for comparison.
282  // clang-format off
283  std::string expected =
284 R"(<material name="unobtainium">
285  <texture filename="/tmp/texture.txt"/>
286  <color rgba="1 0.5 0.5 1"/>
287 </material>)";
288  // clang-format on
289  EXPECT_EQ(text, expected);
290  }
291  {
292  tesseract_scene_graph::Material::Ptr material = nullptr;
293  std::string text;
294  EXPECT_EQ(1, writeTest<tesseract_scene_graph::Material::Ptr>(material, &tesseract_urdf::writeMaterial, text));
295  EXPECT_EQ(text, "");
296  }
297 }
tesseract_common::getTempPath
std::string getTempPath()
utils.h
tesseract_urdf::MATERIAL_ELEMENT_NAME
static constexpr std::string_view MATERIAL_ELEMENT_NAME
Definition: material.h:46
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
EXPECT_TRUE
#define EXPECT_TRUE(args)
tesseract_urdf_common_unit.h
material.h
Parse material from xml string.
urdf_parser.h
A urdf parser for tesseract.
TESSERACT_COMMON_IGNORE_WARNINGS_POP
tesseract_urdf::writeMaterial
tinyxml2::XMLElement * writeMaterial(const std::shared_ptr< const tesseract_scene_graph::Material > &material, tinyxml2::XMLDocument &doc)
Definition: material.cpp:124
tesseract_scene_graph::Material::Ptr
std::shared_ptr< Material > Ptr
TEST
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH TESSERACT_COMMON_IGNORE_WARNINGS_POP TEST(TesseractURDFUnit, parse_material)
Definition: tesseract_urdf_material_unit.cpp:12
macros.h
EXPECT_EQ
#define EXPECT_EQ(a, b)
tesseract_urdf::parseMaterial
std::shared_ptr< tesseract_scene_graph::Material > parseMaterial(const tinyxml2::XMLElement *xml_element, std::unordered_map< std::string, std::shared_ptr< tesseract_scene_graph::Material >> &available_materials, bool allow_anonymous)
Parse xml element material.
EXPECT_FALSE
#define EXPECT_FALSE(args)


tesseract_urdf
Author(s): Levi Armstrong
autogenerated on Thu Apr 24 2025 03:10:44