def test_1(self):
     layout = Layout('dark-blue',
                     [['rounded', 'red'],
                      ['chamfered', 'matt'],
                      ['pointy', 'anodized', 'black'],
                      ['bevelled', 'twisted', 'plastic-coated']],
                     ['red', 'burnt-ochre', 'orange'],
                     np.array([99, 42, 123], dtype=np.uint32),
                     Rectangle(210, 297),
                     np.array([(20, 30), (40, 50)], dtype=RectangleDType))
     xml = X.serialize(layout, 'layout')
     xml_str = XU.str_from_xml_elt(xml)
     expected_str = remove_whitespace(
         """<layout>
              <colour>dark-blue</colour>
              <corner-properties>
                <corner>
                  <prop>rounded</prop>
                  <prop>red</prop>
                </corner>
                <corner>
                  <prop>chamfered</prop>
                  <prop>matt</prop>
                </corner>
                <corner>
                  <prop>pointy</prop>
                  <prop>anodized</prop>
                  <prop>black</prop>
                </corner>
                <corner>
                  <prop>bevelled</prop>
                  <prop>twisted</prop>
                  <prop>plastic-coated</prop>
                </corner>
              </corner-properties>
              <stripes>
                <stripe-colour>red</stripe-colour>
                <stripe-colour>burnt-ochre</stripe-colour>
                <stripe-colour>orange</stripe-colour>
              </stripes>
              <product-id-codes>99,42,123</product-id-codes>
              <shape>
                <width>210</width>
                <height>297</height>
              </shape>
              <components>
                <rect>
                  <width>20</width>
                  <height>30</height>
                </rect>
                <rect>
                  <width>40</width>
                  <height>50</height>
                </rect>
              </components>
            </layout>""")
     assert xml_str == expected_str
     X.deserialize(Layout, xml, 'layout')
 def test_deserialization(self):
     xml_str = '''<fancy-rect>
                    <width>42</width>
                    <height>99</height>
                    <colour>blue</colour>
                    <stripes>30,40,50</stripes>
                  </fancy-rect>'''
     xml_elt = etree.fromstring(xml_str)
     obj = X.deserialize(self.FancyRectangle, xml_elt, 'fancy-rect')
     assert obj.width == 42
     assert obj.height == 99
     assert obj.colour == 'blue'
     assert obj.stripes.dtype is np.dtype(np.uint8)
     assert obj.stripes.size == 3
     assert np.all(obj.stripes == np.array([30, 40, 50], dtype=np.uint8))
 def test_bad_input(self, xml_str, des_tag, exc_re, exp_xpath):
     bad_xml = etree.fromstring(xml_str)
     with pytest.raises_regexp(XMLSerDesError, exc_re, exp_xpath):
         X.deserialize(Rectangle, bad_xml, des_tag)
    def test_1(self):
        serialized_xml = X.serialize(self.rect, 'rect')
        assert XU.str_from_xml_elt(serialized_xml) == expected_rect_xml(42, 123)

        rect_round_trip = X.deserialize(Rectangle, serialized_xml, 'rect')
        assert rect_round_trip == self.rect