public void testNestedProperties() {

    String xml = "<?xml version=\"1.0\"?>";
    xml +=
        "<inspection-result xmlns=\"http://www.metawidget.org/inspection-result\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.metawidget.org/inspection-result ../../inspector/inspection-result-1.0.xsd\" version=\"1.0\">";
    xml += "<entity type=\"Foo\">";
    xml += "<property name=\"a\"/>";
    xml += "<property name=\"b\"/>";
    xml += "<property name=\"c\">";
    xml += "\t<property name=\"c1\"/>";
    xml += "\t<property name=\"c2\"/>";
    xml += "\t<property name=\"c3\" type=\"C3-Type\">";
    xml += "\t\t<property name=\"c31\"/>";
    xml += "\t\t<property name=\"c32\"/>";
    xml += "\t</property>";
    xml += "</property>";
    xml += "</entity>";
    xml += "</inspection-result>";

    // Without 'type' attribute

    Inspector inspector =
        new XmlInspector(
            new XmlInspectorConfig().setInputStream(new ByteArrayInputStream(xml.getBytes())));
    Document document = XmlUtils.documentFromString(inspector.inspect(null, "Foo", "c"));

    Element entity = (Element) document.getDocumentElement().getFirstChild();
    assertEquals(ENTITY, entity.getNodeName());
    assertEquals("c", entity.getAttribute(NAME));
    assertEquals("", entity.getAttribute(TYPE));
    assertEquals(2, entity.getAttributes().getLength());

    Element property = (Element) entity.getFirstChild();
    assertEquals(PROPERTY, property.getNodeName());
    assertEquals("c1", property.getAttribute(NAME));
    assertEquals(1, property.getAttributes().getLength());

    property = (Element) property.getNextSibling();
    assertEquals(PROPERTY, property.getNodeName());
    assertEquals("c2", property.getAttribute(NAME));
    assertEquals(1, property.getAttributes().getLength());

    property = (Element) property.getNextSibling();
    assertEquals(PROPERTY, property.getNodeName());
    assertEquals("c3", property.getAttribute(NAME));
    assertEquals("C3-Type", property.getAttribute(TYPE));
    assertEquals(2, property.getAttributes().getLength());

    assertEquals(3, entity.getChildNodes().getLength());

    // With 'type' attribute

    inspector =
        new XmlInspector(
            new XmlInspectorConfig().setInputStream(new ByteArrayInputStream(xml.getBytes())));
    document = XmlUtils.documentFromString(inspector.inspect(null, "Foo", "c", "c3"));

    entity = (Element) document.getDocumentElement().getFirstChild();
    assertEquals(ENTITY, entity.getNodeName());
    assertEquals("c3", entity.getAttribute(NAME));
    assertEquals("C3-Type", entity.getAttribute(TYPE));
    assertEquals(2, entity.getAttributes().getLength());

    property = (Element) entity.getFirstChild();
    assertEquals(PROPERTY, property.getNodeName());
    assertEquals("c31", property.getAttribute(NAME));
    assertEquals(1, property.getAttributes().getLength());

    property = (Element) property.getNextSibling();
    assertEquals(PROPERTY, property.getNodeName());
    assertEquals("c32", property.getAttribute(NAME));
    assertEquals(1, property.getAttributes().getLength());

    assertEquals(2, entity.getChildNodes().getLength());
  }