diff --git a/.travis.yml b/.travis.yml index e0a4f2e1..934494e6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ compiler: script: "./.travis/build" before_install: - sudo apt-get update -qq - - sudo apt-get install -qq libboost-system-dev libboost-thread-dev libboost-test-dev libtinyxml-dev python-yaml + - sudo apt-get install -qq libboost-system-dev libboost-thread-dev libboost-test-dev libtinyxml-dev python-yaml python-mock matrix: allow_failures: - compiler: clang diff --git a/urdf_parser_py/src/urdf_parser_py/urdf.py b/urdf_parser_py/src/urdf_parser_py/urdf.py index c08857c1..ec101f50 100644 --- a/urdf_parser_py/src/urdf_parser_py/urdf.py +++ b/urdf_parser_py/src/urdf_parser_py/urdf.py @@ -169,6 +169,9 @@ def check_valid(self): xmlr.Element('texture', Texture, False) ]) +class LinkMaterial(Material): + def check_valid(self): + pass class Visual(xmlr.Object): def __init__(self, geometry = None, material = None, origin = None): @@ -179,7 +182,7 @@ def __init__(self, geometry = None, material = None, origin = None): xmlr.reflect(Visual, params = [ origin_element, xmlr.Element('geometry', 'geometric'), - xmlr.Element('material', Material, False) + xmlr.Element('material', LinkMaterial, False) ]) diff --git a/urdf_parser_py/test/test_urdf.py b/urdf_parser_py/test/test_urdf.py index 51fa64ed..f0dfcd71 100644 --- a/urdf_parser_py/test/test_urdf.py +++ b/urdf_parser_py/test/test_urdf.py @@ -1,11 +1,17 @@ from __future__ import print_function import unittest +import mock from xml.dom import minidom from xml_matching import xml_matches from urdf_parser_py import urdf +class ParseException(Exception): + pass + class TestURDFParser(unittest.TestCase): + @mock.patch('urdf_parser_py.xml_reflection.on_error', + mock.Mock(side_effect=ParseException)) def parse(self, xml): return urdf.Robot.from_xml_string(xml) @@ -97,6 +103,36 @@ def test_old_transmission(self): ''' self.parse_and_compare(xml) + def test_link_material_missing_color_and_texture(self): + xml = ''' + + + + + + + + + +''' + self.parse_and_compare(xml) + + def test_robot_material(self): + xml = ''' + + + + +''' + self.parse_and_compare(xml) + + def test_robot_material_missing_color_and_texture(self): + xml = ''' + + +''' + self.assertRaises(ParseException, self.parse, xml) + if __name__ == '__main__': unittest.main()