### Question:
MicroElement extends AbstractMicroNodeWithChildren implements IMicroElement { @Nonnull public IMicroElement getClone () { final MicroElement ret = new MicroElement (m_sNamespaceURI, m_sTagName); if (m_aAttrs != null) ret.m_aAttrs = new CommonsLinkedHashMap <> (m_aAttrs); forAllChildren (aChildNode -> ret.appendChild (aChildNode.getClone ())); return ret; } MicroElement(@Nonnull @Nonempty final String sTagName);  MicroElement(@Nullable final String sNamespaceURI, @Nonnull @Nonempty final String sTagName); @Nonnull EMicroNodeType getType(); @Nonnull @Nonempty String getNodeName(); boolean hasAttributes(); boolean hasNoAttributes(); @Nonnegative int getAttributeCount(); @Nullable @ReturnsImmutableObject Iterable <MicroAttribute> getAttributeObjs(); @Nullable @ReturnsMutableCopy ICommonsList <MicroAttribute> getAllAttributeObjs(); @Nullable @ReturnsMutableCopy ICommonsOrderedMap <IMicroQName, String> getAllQAttributes(); @Nullable @ReturnsMutableCopy ICommonsOrderedSet <IMicroQName> getAllAttributeQNames(); void forAllAttributes(@Nonnull final Consumer <? super IMicroAttribute> aConsumer); void forAllAttributes(@Nonnull final BiConsumer <? super IMicroQName, ? super String> aConsumer); void forAllAttributes(@Nonnull final ITriConsumer <? super String, ? super String, ? super String> aConsumer); @Nullable MicroAttribute getAttributeObj(@Nullable final IMicroQName aQName); @Nullable DSTTYPE getAttributeValueWithConversion(@Nullable final IMicroQName aAttrName, @Nonnull final Class <DSTTYPE> aDstClass); boolean hasAttribute(@Nullable final IMicroQName aAttrName); @Nonnull EChange removeAttribute(@Nullable final IMicroQName aAttrName); @Nonnull MicroElement setAttribute(@Nonnull final IMicroQName aAttrName, @Nullable final String sAttrValue); @Nonnull EChange removeAllAttributes(); @Nullable String getNamespaceURI(); @Nonnull EChange setNamespaceURI(@Nullable final String sNamespaceURI); @Nullable String getLocalName(); @Nonnull String getTagName(); @Nonnull @ReturnsMutableCopy ICommonsList <IMicroElement> getAllChildElementsRecursive(); boolean containsAnyChildElement(@Nullable final Predicate <? super IMicroElement> aFilter); @Nullable IMicroElement getFirstChildElement(@Nullable final Predicate <? super IMicroElement> aFilter); void forAllChildElements(@Nullable final Predicate <? super IMicroElement> aFilter,
                                   @Nonnull final Consumer <? super IMicroElement> aConsumer); @Nonnull EContinue forAllChildElementsBreakable(@Nullable final Predicate <? super IMicroElement> aFilter,
                                                 @Nonnull final Function <? super IMicroElement, EContinue> aConsumer); @Nonnull IMicroElement getClone(); @Override boolean isEqualContent(@Nullable final IMicroNode o); @Override String toString();  }### Answer:
@Test public void testGetClone () { final IMicroElement eRoot = new MicroElement ("root"); IMicroElement eClone = eRoot.getClone (); assertEquals (eRoot.getTagName (), eClone.getTagName ()); assertNull (eRoot.getNamespaceURI ()); assertNull (eClone.getNamespaceURI ()); assertNull (eRoot.getAllQAttributes ()); assertNull (eClone.getAllQAttributes ()); eRoot.setAttribute ("attr1", "b"); eClone = eRoot.getClone (); assertEquals (eRoot.getTagName (), eClone.getTagName ()); assertNull (eRoot.getNamespaceURI ()); assertNull (eClone.getNamespaceURI ()); assertEquals (eRoot.getAllQAttributes (), eClone.getAllQAttributes ()); eRoot.setAttribute ("nsuri", "attr2", "c"); eClone = eRoot.getClone (); assertEquals (eRoot.getTagName (), eClone.getTagName ()); assertNull (eRoot.getNamespaceURI ()); assertNull (eClone.getNamespaceURI ()); assertEquals (eRoot.getAllQAttributes (), eClone.getAllQAttributes ()); assertTrue (eRoot.isEqualContent (eRoot.getClone ())); eRoot.appendText ("text"); eRoot.appendCDATA ("CDATA content <>"); assertTrue (eRoot.isEqualContent (eRoot.getClone ())); }