You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2011/01/08 22:37:14 UTC

svn commit: r1056807 - in /mina/vysper/trunk/nbxml/src: main/java/org/apache/vysper/xml/fragment/XMLElement.java test/java/org/apache/vysper/xml/fragment/XMLElementTestCase.java

Author: ngn
Date: Sat Jan  8 21:37:13 2011
New Revision: 1056807

URL: http://svn.apache.org/viewvc?rev=1056807&view=rev
Log:
Fixed bug in XMLElement.equals which failed on different attribute order

Modified:
    mina/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xml/fragment/XMLElement.java
    mina/vysper/trunk/nbxml/src/test/java/org/apache/vysper/xml/fragment/XMLElementTestCase.java

Modified: mina/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xml/fragment/XMLElement.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xml/fragment/XMLElement.java?rev=1056807&r1=1056806&r2=1056807&view=diff
==============================================================================
--- mina/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xml/fragment/XMLElement.java (original)
+++ mina/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xml/fragment/XMLElement.java Sat Jan  8 21:37:13 2011
@@ -297,8 +297,26 @@ public class XMLElement implements XMLFr
 
         final XMLElement that = (XMLElement) o;
 
-        if (attributes != null ? !attributes.equals(that.attributes) : that.attributes != null)
+        // attributes are allowed to be in any order
+        if(attributes != null && that.attributes != null) {
+            if(attributes.size() != that.attributes.size()) return false;
+            for(Attribute attribute : attributes) {
+                boolean found = false;
+                for(Attribute thatAttribute : that.attributes) {
+                    if(thatAttribute.equals(attribute)) {
+                        found = true;
+                        break;
+                    }
+                }
+                if(!found) return false;
+            }
+            
+        } else if(attributes == null && that.attributes == null) {
+            // ok
+        } else {
             return false;
+        }
+        
         if (innerFragments != null ? !innerFragments.equals(that.innerFragments) : that.innerFragments != null) {
             return false;
         }

Modified: mina/vysper/trunk/nbxml/src/test/java/org/apache/vysper/xml/fragment/XMLElementTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/nbxml/src/test/java/org/apache/vysper/xml/fragment/XMLElementTestCase.java?rev=1056807&r1=1056806&r2=1056807&view=diff
==============================================================================
--- mina/vysper/trunk/nbxml/src/test/java/org/apache/vysper/xml/fragment/XMLElementTestCase.java (original)
+++ mina/vysper/trunk/nbxml/src/test/java/org/apache/vysper/xml/fragment/XMLElementTestCase.java Sat Jan  8 21:37:13 2011
@@ -25,6 +25,8 @@ import java.util.Map;
 
 import junit.framework.TestCase;
 
+import org.junit.Assert;
+
 /**
  */
 public class XMLElementTestCase extends TestCase {
@@ -208,7 +210,59 @@ public class XMLElementTestCase extends 
         assertNull(xmlElement.getAttributeValue("http://example.com", "foo"));
         assertNull(xmlElement.getAttributeValue("lang"));
         assertEquals("cn", xmlElement.getAttributeValue(Namespaces.XML, "lang"));
-
+    }
+    
+    public void testEqualsAttributeOrder() {
+        XMLElement elm1 = new XMLElementBuilder("test")
+            .addAttribute("attr1", "foo")
+            .addAttribute("attr2", "foo")
+            .build();
+
+        XMLElement elm2 = new XMLElementBuilder("test")
+        .addAttribute("attr2", "foo")
+        .addAttribute("attr1", "foo")
+        .build();
+        
+        Assert.assertTrue("Equals must be true", elm1.equals(elm2));
+    }
+
+    public void testEqualsAttributeValue() {
+        XMLElement elm1 = new XMLElementBuilder("test")
+            .addAttribute("attr1", "foo")
+            .addAttribute("attr2", "bar")
+            .build();
+
+        XMLElement elm2 = new XMLElementBuilder("test")
+            .addAttribute("attr1", "foo")
+            .addAttribute("attr2", "foo")
+            .build();
+        
+        Assert.assertFalse("Equals must be false", elm1.equals(elm2));
+    }
+
+    public void testEqualsAttributeMissing() {
+        XMLElement elm1 = new XMLElementBuilder("test")
+            .addAttribute("attr1", "foo")
+            .addAttribute("attr2", "bar")
+            .build();
+
+        XMLElement elm2 = new XMLElementBuilder("test")
+            .addAttribute("attr1", "foo")
+            .build();
+        
+        Assert.assertFalse("Equals must be false", elm1.equals(elm2));
+    }
+
+    public void testEqualsNoAttributes() {
+        XMLElement elm1 = new XMLElementBuilder("test")
+            .addAttribute("attr1", "foo")
+            .addAttribute("attr2", "bar")
+            .build();
+
+        XMLElement elm2 = new XMLElementBuilder("test")
+            .build();
+        
+        Assert.assertFalse("Equals must be false", elm1.equals(elm2));
     }
 
 }