From e1f52a47979eac9299dbaf4de34ac00fe2b5d6f4 Mon Sep 17 00:00:00 2001 From: Stephen Colebourne Date: Sun, 2 Nov 2003 17:06:59 +0000 Subject: [PATCH] Add UnmodifiableMapEntry git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@131315 13f79535-47bb-0310-9956-ffa450edef68 --- .../pairs/UnmodifiableMapEntry.java | 116 +++++++++++++ .../commons/collections/pairs/TestAll.java | 5 +- .../pairs/TestUnmodifiableMapEntry.java | 159 ++++++++++++++++++ 3 files changed, 278 insertions(+), 2 deletions(-) create mode 100644 src/java/org/apache/commons/collections/pairs/UnmodifiableMapEntry.java create mode 100644 src/test/org/apache/commons/collections/pairs/TestUnmodifiableMapEntry.java diff --git a/src/java/org/apache/commons/collections/pairs/UnmodifiableMapEntry.java b/src/java/org/apache/commons/collections/pairs/UnmodifiableMapEntry.java new file mode 100644 index 000000000..64d59c394 --- /dev/null +++ b/src/java/org/apache/commons/collections/pairs/UnmodifiableMapEntry.java @@ -0,0 +1,116 @@ +/* + * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/pairs/Attic/UnmodifiableMapEntry.java,v 1.1 2003/11/02 17:06:58 scolebourne Exp $ + * ==================================================================== + * + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowledgement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgement may appear in the software itself, + * if and wherever such third-party acknowledgements normally appear. + * + * 4. The names "The Jakarta Project", "Commons", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + */ +package org.apache.commons.collections.pairs; + +import java.util.Map; + +import org.apache.commons.collections.Unmodifiable; + +/** + * A {@link java.util.Map.Entry} that throws UnsupportedOperationException + * when setValue is called. + * + * @since Commons Collections 3.0 + * @version $Revision: 1.1 $ $Date: 2003/11/02 17:06:58 $ + * + * @author Stephen Colebourne + */ +public final class UnmodifiableMapEntry extends AbstractMapEntry implements Unmodifiable { + + /** + * Constructs a new entry with the specified key and given value. + * + * @param key the key for the entry, may be null + * @param value the value for the entry, may be null + */ + public UnmodifiableMapEntry(final Object key, final Object value) { + super(key, value); + } + + /** + * Constructs a new entry from the specified KeyValue. + * + * @param pair the pair to copy, must not be null + * @throws NullPointerException if the entry is null + */ + public UnmodifiableMapEntry(final KeyValue pair) { + super(pair.getKey(), pair.getValue()); + } + + /** + * Constructs a new entry from the specified MapEntry. + * + * @param entry the entry to copy, must not be null + * @throws NullPointerException if the entry is null + */ + public UnmodifiableMapEntry(final Map.Entry entry) { + super(entry.getKey(), entry.getValue()); + } + + /** + * Throws UnsupportedOperationException. + * + * @param value the new value + * @return the previous value + * @throws UnsupportedOperationException always + */ + public Object setValue(Object value) { + throw new UnsupportedOperationException("setValue() is not supported"); + } + +} diff --git a/src/test/org/apache/commons/collections/pairs/TestAll.java b/src/test/org/apache/commons/collections/pairs/TestAll.java index 91676303c..cf5d9a78a 100644 --- a/src/test/org/apache/commons/collections/pairs/TestAll.java +++ b/src/test/org/apache/commons/collections/pairs/TestAll.java @@ -1,5 +1,5 @@ /* - * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/pairs/Attic/TestAll.java,v 1.1 2003/10/01 22:36:49 scolebourne Exp $ + * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/pairs/Attic/TestAll.java,v 1.2 2003/11/02 17:06:59 scolebourne Exp $ * ==================================================================== * * The Apache Software License, Version 1.1 @@ -65,7 +65,7 @@ import junit.framework.TestSuite; * Entry point for key-value test cases. * * @since Commons Collections 3.0 - * @version $Revision: 1.1 $ $Date: 2003/10/01 22:36:49 $ + * @version $Revision: 1.2 $ $Date: 2003/11/02 17:06:59 $ * * @author Neil O'Toole */ @@ -85,6 +85,7 @@ public class TestAll extends TestCase { suite.addTest(TestDefaultKeyValue.suite()); suite.addTest(TestDefaultMapEntry.suite()); + suite.addTest(TestUnmodifiableMapEntry.suite()); return suite; } diff --git a/src/test/org/apache/commons/collections/pairs/TestUnmodifiableMapEntry.java b/src/test/org/apache/commons/collections/pairs/TestUnmodifiableMapEntry.java new file mode 100644 index 000000000..42d948590 --- /dev/null +++ b/src/test/org/apache/commons/collections/pairs/TestUnmodifiableMapEntry.java @@ -0,0 +1,159 @@ +/* + * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/pairs/Attic/TestUnmodifiableMapEntry.java,v 1.1 2003/11/02 17:06:59 scolebourne Exp $ + * ==================================================================== + * + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowledgement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgement may appear in the software itself, + * if and wherever such third-party acknowledgements normally appear. + * + * 4. The names "The Jakarta Project", "Commons", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + */ +package org.apache.commons.collections.pairs; + +import java.util.Map; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.commons.collections.Unmodifiable; + +/** + * Test the UnmodifiableMapEntry class. + * + * @since Commons Collections 3.0 + * @version $Revision: 1.1 $ $Date: 2003/11/02 17:06:59 $ + * + * @author Neil O'Toole + */ +public class TestUnmodifiableMapEntry extends AbstractTestMapEntry { + + public TestUnmodifiableMapEntry(String testName) { + super(testName); + + } + + public static void main(String[] args) { + junit.textui.TestRunner.run(TestUnmodifiableMapEntry.class); + } + + public static Test suite() { + return new TestSuite(TestUnmodifiableMapEntry.class); + } + + //----------------------------------------------------------------------- + /** + * Make an instance of Map.Entry with the default (null) key and value. + * Subclasses should override this method to return a Map.Entry + * of the type being tested. + */ + public Map.Entry makeMapEntry() { + return new UnmodifiableMapEntry(null, null); + } + + /** + * Make an instance of Map.Entry with the specified key and value. + * Subclasses should override this method to return a Map.Entry + * of the type being tested. + */ + public Map.Entry makeMapEntry(Object key, Object value) { + return new UnmodifiableMapEntry(key, value); + } + + //----------------------------------------------------------------------- + /** + * Subclasses should override this method. + * + */ + public void testConstructors() { + // 1. test key-value constructor + Map.Entry entry = new UnmodifiableMapEntry(key, value); + assertSame(key, entry.getKey()); + assertSame(value, entry.getValue()); + + // 2. test pair constructor + KeyValue pair = new DefaultKeyValue(key, value); + entry = new UnmodifiableMapEntry(pair); + assertSame(key, entry.getKey()); + assertSame(value, entry.getValue()); + + // 3. test copy constructor + Map.Entry entry2 = new UnmodifiableMapEntry(entry); + assertSame(key, entry2.getKey()); + assertSame(value, entry2.getValue()); + + assertTrue(entry instanceof Unmodifiable); + } + + public void testAccessorsAndMutators() { + Map.Entry entry = makeMapEntry(key, value); + + assertSame(key, entry.getKey()); + assertSame(value, entry.getValue()); + + // check that null doesn't do anything funny + entry = makeMapEntry(null, null); + assertSame(null, entry.getKey()); + assertSame(null, entry.getValue()); + } + + public void testSelfReferenceHandling() { + // block + } + + public void testUnmodifiable() { + Map.Entry entry = makeMapEntry(); + try { + entry.setValue(null); + fail(); + + } catch (UnsupportedOperationException ex) {} + } + +}