Add unit test.
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 1 Jun 2009 14:06:23 +0000 (14:06 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 1 Jun 2009 14:06:23 +0000 (14:06 +0000)
Fix compareTo.

NEW - bug 155: TreeTestResults ignored in collections
https://www.spartadn.com/bugzilla/show_bug.cgi?id=155

git-svn-id: https://svn.argeo.org/slc/trunk@2439 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

runtime/org.argeo.slc.support.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernateTest.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java

index 34430c96694362c61c100bd98bc292bd6310a8d5..fc9bc283b8ec027bfccc7e109417add2cb776f34 100644 (file)
@@ -1,6 +1,7 @@
 package org.argeo.slc.hibernate.test.tree;\r
 \r
 import java.sql.SQLException;\r
+import java.util.Date;\r
 \r
 import org.argeo.slc.core.test.tree.TreeTestResult;\r
 import org.argeo.slc.core.test.tree.TreeTestResultCollection;\r
@@ -44,6 +45,7 @@ public class TreeTestResultCollectionDaoHibernateTest extends HibernateTestCase
                final TreeTestResultCollection ttrcPersist = ttrcDao\r
                                .getTestResultCollection(ttrcName);\r
 \r
+               // Because of lazy initialization\r
                getHibernateTemplate().execute(new HibernateCallback() {\r
 \r
                        public Object doInHibernate(Session session)\r
@@ -57,6 +59,46 @@ public class TreeTestResultCollectionDaoHibernateTest extends HibernateTestCase
                });\r
        }\r
 \r
+       public void testResultsWithSameCloseDate() {\r
+               TreeTestResultDao ttrDao = getBean(TreeTestResultDao.class);\r
+               TreeTestResultCollectionDao ttrcDao = getBean(TreeTestResultCollectionDao.class);\r
+\r
+               String ttrcName = "testCollection";\r
+\r
+               Date closeDate = new Date();\r
+\r
+               // TTR1\r
+               TreeTestResult ttr1 = TreeTestResultTestUtils\r
+                               .createCompleteTreeTestResult();\r
+               ttr1.setCloseDate(closeDate);\r
+               ttrDao.create(ttr1);\r
+\r
+               // TTR2\r
+               TreeTestResult ttr2 = TreeTestResultTestUtils\r
+                               .createCompleteTreeTestResult();\r
+               ttr2.setCloseDate(closeDate);\r
+               ttrDao.create(ttr2);\r
+\r
+               // TTRC\r
+               TreeTestResultCollection ttrc = new TreeTestResultCollection(ttrcName);\r
+               ttrc.getResults().add(ttr1);\r
+               ttrc.getResults().add(ttr2);\r
+               ttrcDao.create(ttrc);\r
+\r
+               final TreeTestResultCollection ttrcPersist = ttrcDao\r
+                               .getTestResultCollection(ttrcName);\r
+               // Because of lazy initialization\r
+               getHibernateTemplate().execute(new HibernateCallback() {\r
+\r
+                       public Object doInHibernate(Session session)\r
+                                       throws HibernateException, SQLException {\r
+                               session.refresh(ttrcPersist);\r
+                               assertEquals(2, ttrcPersist.getResults().size());\r
+                               return null;\r
+                       }\r
+               });\r
+       }\r
+\r
        @Override\r
        protected String getApplicationContextLocation() {\r
                return "org/argeo/slc/hibernate/applicationContext.xml";\r
index 9ab13e9dc24e8282866e8d826d87bfdf52e481d7..c2b74575896bcffae4e9dfd25f59bc16f379dd4d 100644 (file)
@@ -198,16 +198,44 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,
        public int compareTo(TreeTestResult ttr2) {\r
                TreeTestResult ttr1 = this;\r
                if (ttr1.getCloseDate() != null && ttr2.getCloseDate() != null) {\r
-                       return -ttr1.getCloseDate().compareTo(ttr2.getCloseDate());\r
+                       if (ttr1.getCloseDate().equals(ttr2.getCloseDate()))\r
+                               return compareUuid(ttr1, ttr2);\r
+                       else\r
+                               return -ttr1.getCloseDate().compareTo(ttr2.getCloseDate());\r
                } else if (ttr1.getCloseDate() != null && ttr2.getCloseDate() == null) {\r
                        return 1;\r
                } else if (ttr1.getCloseDate() == null && ttr2.getCloseDate() != null) {\r
                        return -1;\r
                } else {\r
+                       return compareUuid(ttr1, ttr2);\r
+               }\r
+       }\r
+\r
+       protected int compareUuid(TestResult ttr1, TestResult ttr2) {\r
+               if (ttr1.getUuid() == null || ttr2.getUuid() == null)\r
+                       throw new SlcException(\r
+                                       "Cannot compare tree test result with null uuid");\r
+               else {\r
+                       if (ttr1.getUuid().equals(ttr2.getUuid()))\r
+                               return 0;\r
                        return ttr1.getUuid().compareTo(ttr2.getUuid());\r
                }\r
        }\r
 \r
+       public boolean equals(Object obj) {\r
+               if (obj instanceof TestResult)\r
+                       return compareUuid(this, ((TestResult) obj)) == 0;\r
+               else\r
+                       return false;\r
+       }\r
+\r
+       public int hashCode() {\r
+               if (uuid != null)\r
+                       return uuid.hashCode();\r
+               else\r
+                       return super.hashCode();\r
+       }\r
+\r
        public Map<String, String> getAttributes() {\r
                return attributes;\r
        }\r