You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ni...@apache.org on 2004/08/02 16:48:59 UTC
svn commit: rev 35590 - in avalon/trunk/runtime/framework/impl/src: java/org/apache/avalon/framework/context test/org/apache/avalon/framework/context/test
Author: niclas
Date: Mon Aug 2 07:48:59 2004
New Revision: 35590
Modified:
avalon/trunk/runtime/framework/impl/src/java/org/apache/avalon/framework/context/DefaultContext.java
avalon/trunk/runtime/framework/impl/src/test/org/apache/avalon/framework/context/test/ContextTestCase.java
Log:
Added equals(), hashCode() and Serializable to DefaultContext, and updated the testcases for it.
Modified: avalon/trunk/runtime/framework/impl/src/java/org/apache/avalon/framework/context/DefaultContext.java
==============================================================================
--- avalon/trunk/runtime/framework/impl/src/java/org/apache/avalon/framework/context/DefaultContext.java (original)
+++ avalon/trunk/runtime/framework/impl/src/java/org/apache/avalon/framework/context/DefaultContext.java Mon Aug 2 07:48:59 2004
@@ -27,7 +27,7 @@
* @version $Id$
*/
public class DefaultContext
- implements Context
+ implements Context, Serializable
{
private static final class Hidden implements Serializable
{
@@ -202,5 +202,57 @@
"Context is read only and can not be modified";
throw new IllegalStateException( message );
}
+ }
+
+ /** Check for equality between two DefaultContext objects.
+ *
+ * <p>Equality is said to be true if, and only if, the following
+ * criteria are met;<p>
+ * <ul>
+ * <li>They are both of the same class.</li>
+ * <li>They both have the same parent.</li>
+ * <li>The content of the context map are identical, i.e HashMap.equals()</li>
+ * <li>The have the same readOnly state.</li>
+ * </ul>
+ *
+ * @since 4.5
+ */
+ public boolean equals( Object o )
+ {
+ if( this == o )
+ return true;
+
+ if( ! (o.getClass().equals( getClass() ) ) )
+ return false;
+
+ DefaultContext other = (DefaultContext) o ;
+
+ if( ! m_contextData.equals( other.m_contextData ) )
+ return false;
+
+ if( m_parent == null )
+ {
+ if( other.m_parent != null )
+ return false;
+ }
+ else
+ {
+ if( ! m_parent.equals( other.m_parent ) )
+ return false;
+ }
+
+ return m_readOnly == other.m_readOnly;
+ }
+
+
+ public int hashCode()
+ {
+ int hash = m_contextData.hashCode();
+ if( m_parent != null )
+ hash ^= m_parent.hashCode();
+ else
+ hash >>>= 3;
+ hash >>>= m_readOnly ? 7 : 13 ;
+ return hash;
}
}
Modified: avalon/trunk/runtime/framework/impl/src/test/org/apache/avalon/framework/context/test/ContextTestCase.java
==============================================================================
--- avalon/trunk/runtime/framework/impl/src/test/org/apache/avalon/framework/context/test/ContextTestCase.java (original)
+++ avalon/trunk/runtime/framework/impl/src/test/org/apache/avalon/framework/context/test/ContextTestCase.java Mon Aug 2 07:48:59 2004
@@ -182,4 +182,63 @@
// Supposed to be thrown.
}
}
+
+ public void testEquals()
+ throws Exception
+ {
+ // Different set of parents.
+ DefaultContext p1 = new DefaultContext();
+ p1.put( "test", "CoolTest" );
+ DefaultContext p2 = new DefaultContext();
+ p2.put( "test", "Cool Test" );
+
+ DefaultContext c1 = new DefaultContext( p1 );
+ DefaultContext c2 = new DefaultContext( p1 );
+ DefaultContext c3 = new DefaultContext( p1 );
+ DefaultContext c4 = new DefaultContext( p1 );
+ DefaultContext c5 = new DefaultContext( p2 );
+
+ c1.put( "test", "Cool Test" );
+ c2.put( "test", "Cool Test" );
+ c3.put( "test", "Cool Test" );
+ c3.put( "test2", "Cool Test" );
+ c4.put( "test", "Cool Test" );
+ c4.makeReadOnly();
+ c5.put( "test", "Cool Test" );
+
+ assertEquals( "Identical", c1, c2 );
+ assertTrue( "ContextData", ! c1.equals( c3 ) );
+ assertTrue( "ReadOnly", ! c1.equals( c4 ) );
+ assertTrue( "Parent", ! c1.equals( c5 ) );
+
+ }
+
+ public void testHashcode()
+ throws Exception
+ {
+ // Different set of parents.
+ DefaultContext p1 = new DefaultContext();
+ p1.put( "test", "CoolTest" );
+ DefaultContext p2 = new DefaultContext();
+ p2.put( "test", "Cool Test" );
+
+ DefaultContext c1 = new DefaultContext( p1 );
+ DefaultContext c2 = new DefaultContext( p1 );
+ DefaultContext c3 = new DefaultContext( p1 );
+ DefaultContext c4 = new DefaultContext( p1 );
+ DefaultContext c5 = new DefaultContext( p2 );
+
+ c1.put( "test", "Cool Test" );
+ c2.put( "test", "Cool Test" );
+ c3.put( "test", "Cool Test" );
+ c3.put( "test2", "Cool Test" );
+ c4.put( "test", "Cool Test" );
+ c4.makeReadOnly();
+ c5.put( "test", "Cool Test" );
+
+ assertEquals( "Identical", c1.hashCode(), c2.hashCode() );
+ assertTrue( "ContextData", c1.hashCode() != c3.hashCode() );
+ assertTrue( "ReadOnly", c1.hashCode() != c4.hashCode() );
+ assertTrue( "Parent", c1.hashCode() != c5.hashCode() );
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org