diff --git a/.travis/build b/.travis/build
index eca6c2e0..930a627f 100755
--- a/.travis/build
+++ b/.travis/build
@@ -10,6 +10,9 @@ urdfdom_headers_dir="$build_dir/urdfdom_headers"
# Shortcuts.
git_clone="git clone --quiet --recursive"
+# create locale for testing
+sudo locale-gen nl_NL.UTF-8
+
# Create layout.
rm -rf "$build_dir"
mkdir -p "$build_dir"
diff --git a/urdf_parser/test/CMakeLists.txt b/urdf_parser/test/CMakeLists.txt
index 0b52d6e6..c57f3479 100644
--- a/urdf_parser/test/CMakeLists.txt
+++ b/urdf_parser/test/CMakeLists.txt
@@ -38,5 +38,11 @@ foreach(GTEST_SOURCE_file ${tests})
COMMAND ${BINARY_NAME}
--gtest_output=xml:${CMAKE_BINARY_DIR}/test_results/${BINARY_NAME}.xml)
- set_tests_properties(${BINARY_NAME} PROPERTIES TIMEOUT 240)
+ set_tests_properties(${BINARY_NAME} PROPERTIES TIMEOUT 240 ENVIRONMENT LC_ALL=C)
+
+ add_test(NAME ${BINARY_NAME}_locale
+ COMMAND ${BINARY_NAME}
+ --gtest_output=xml:${CMAKE_BINARY_DIR}/test_results/${BINARY_NAME}_locale.xml)
+
+ set_tests_properties(${BINARY_NAME}_locale PROPERTIES TIMEOUT 240 ENVIRONMENT LC_ALL=nl_NL.UTF-8)
endforeach()
diff --git a/urdf_parser/test/urdf_unit_test.cpp b/urdf_parser/test/urdf_unit_test.cpp
index 9b109325..c46dd326 100644
--- a/urdf_parser/test/urdf_unit_test.cpp
+++ b/urdf_parser/test/urdf_unit_test.cpp
@@ -257,3 +257,88 @@ TEST(URDF_UNIT_TEST, parse_link_doubles)
EXPECT_EQ(0.0012, urdf->links_["l1"]->inertial->iyz);
EXPECT_EQ(0.908, urdf->links_["l1"]->inertial->izz);
}
+
+
+TEST(URDF_UNIT_TEST, parse_color_doubles)
+{
+ std::string joint_str =
+ ""
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ " "
+ "";
+
+ urdf::ModelInterfaceSharedPtr urdf = urdf::parseURDF(joint_str);
+
+ EXPECT_EQ(2, urdf->links_.size());
+ EXPECT_EQ(2, urdf->joints_.size());
+
+ EXPECT_EQ(urdf::Geometry::SPHERE, urdf->links_["l1"]->visual->geometry->type);
+ std::shared_ptr s = std::dynamic_pointer_cast(urdf->links_["l1"]->visual->geometry);
+ EXPECT_EQ(1.349, s->radius);
+ EXPECT_FLOAT_EQ(1.0, urdf->links_["l1"]->visual->material->color.r);
+ EXPECT_FLOAT_EQ(0.65, urdf->links_["l1"]->visual->material->color.g);
+ EXPECT_FLOAT_EQ(0.0, urdf->links_["l1"]->visual->material->color.b);
+ EXPECT_FLOAT_EQ(0.01, urdf->links_["l1"]->visual->material->color.a);
+ EXPECT_EQ("", urdf->links_["l1"]->visual->material->name);
+ EXPECT_EQ("", urdf->links_["l1"]->visual->material->texture_filename);
+
+ EXPECT_EQ(urdf::Geometry::CYLINDER, urdf->links_["l2"]->visual->geometry->type);
+ std::shared_ptr c = std::dynamic_pointer_cast(urdf->links_["l2"]->visual->geometry);
+ EXPECT_EQ(3.349, c->radius);
+ EXPECT_EQ(7.5490, c->length);
+ EXPECT_FLOAT_EQ(1.0, urdf->links_["l2"]->visual->material->color.r);
+ EXPECT_FLOAT_EQ(0.0001, urdf->links_["l2"]->visual->material->color.g);
+ EXPECT_FLOAT_EQ(0.0, urdf->links_["l2"]->visual->material->color.b);
+ EXPECT_FLOAT_EQ(1.0, urdf->links_["l2"]->visual->material->color.a);
+ EXPECT_EQ("red ish", urdf->links_["l2"]->visual->material->name);
+ EXPECT_EQ("", urdf->links_["l2"]->visual->material->texture_filename);
+
+ EXPECT_EQ(8.4396, urdf->links_["l1"]->inertial->mass);
+ EXPECT_EQ(0.087, urdf->links_["l1"]->inertial->ixx);
+ EXPECT_EQ(0.14, urdf->links_["l1"]->inertial->ixy);
+ EXPECT_EQ(0.912, urdf->links_["l1"]->inertial->ixz);
+ EXPECT_EQ(0.763, urdf->links_["l1"]->inertial->iyy);
+ EXPECT_EQ(0.0012, urdf->links_["l1"]->inertial->iyz);
+ EXPECT_EQ(0.908, urdf->links_["l1"]->inertial->izz);
+}
+
+
+int main(int argc, char **argv)
+{
+ ::testing::InitGoogleTest(&argc, argv);
+
+ // use the environment locale so that the unit test can be repeated with various locales easily
+ setlocale(LC_ALL, "");
+
+ return RUN_ALL_TESTS();
+}