/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.collections.list; import java.util.Arrays; /** * Test case for {@link AbstractLinkedList}. * * @version $Revision: 646780 $ $Date: 2008-04-10 13:48:07 +0100 (Thu, 10 Apr 2008) $ * * @author Rich Dougherty * @author David Hay * @author Phil Steitz */ public abstract class TestAbstractLinkedList extends AbstractTestList { public TestAbstractLinkedList(String testName) { super(testName); } //----------------------------------------------------------------------- public void testRemoveFirst() { resetEmpty(); AbstractLinkedList list = (AbstractLinkedList) collection; if (isRemoveSupported() == false) { try { list.removeFirst(); } catch (UnsupportedOperationException ex) {} } list.addAll( Arrays.asList( new String[]{"value1", "value2"})); assertEquals( "value1", list.removeFirst() ); checkNodes(); list.addLast( "value3"); checkNodes(); assertEquals( "value2", list.removeFirst() ); assertEquals( "value3", list.removeFirst() ); checkNodes(); list.addLast( "value4" ); checkNodes(); assertEquals( "value4", list.removeFirst() ); checkNodes(); } public void testRemoveLast() { resetEmpty(); AbstractLinkedList list = (AbstractLinkedList) collection; if (isRemoveSupported() == false) { try { list.removeLast(); } catch (UnsupportedOperationException ex) {} } list.addAll( Arrays.asList( new String[]{"value1", "value2"})); assertEquals( "value2", list.removeLast() ); list.addFirst( "value3"); checkNodes(); assertEquals( "value1", list.removeLast() ); assertEquals( "value3", list.removeLast() ); list.addFirst( "value4" ); checkNodes(); assertEquals( "value4", list.removeFirst() ); } public void testAddNodeAfter() { resetEmpty(); AbstractLinkedList list = (AbstractLinkedList) collection; if (isAddSupported() == false) { try { list.addFirst(null); } catch (UnsupportedOperationException ex) {} } list.addFirst("value1"); list.addNodeAfter(list.getNode(0,false),"value2"); assertEquals("value1", list.getFirst()); assertEquals("value2", list.getLast()); list.removeFirst(); checkNodes(); list.addNodeAfter(list.getNode(0,false),"value3"); checkNodes(); assertEquals("value2", list.getFirst()); assertEquals("value3", list.getLast()); list.addNodeAfter(list.getNode(0, false),"value4"); checkNodes(); assertEquals("value2", list.getFirst()); assertEquals("value3", list.getLast()); assertEquals("value4", list.get(1)); list.addNodeAfter(list.getNode(2, false), "value5"); checkNodes(); assertEquals("value2", list.getFirst()); assertEquals("value4", list.get(1)); assertEquals("value3", list.get(2)); assertEquals("value5", list.getLast()); } public void testRemoveNode() { resetEmpty(); if (isAddSupported() == false || isRemoveSupported() == false) return; AbstractLinkedList list = (AbstractLinkedList) collection; list.addAll( Arrays.asList( new String[]{"value1", "value2"})); list.removeNode(list.getNode(0, false)); checkNodes(); assertEquals("value2", list.getFirst()); assertEquals("value2", list.getLast()); list.addFirst("value1"); list.addFirst("value0"); checkNodes(); list.removeNode(list.getNode(1, false)); assertEquals("value0", list.getFirst()); assertEquals("value2", list.getLast()); checkNodes(); list.removeNode(list.getNode(1, false)); assertEquals("value0", list.getFirst()); assertEquals("value0", list.getLast()); checkNodes(); } public void testGetNode() { resetEmpty(); AbstractLinkedList list = (AbstractLinkedList) collection; // get marker assertEquals(list.getNode(0, true).previous, list.getNode(0, true).next); try { Object obj = list.getNode(0, false); fail("Expecting IndexOutOfBoundsException."); } catch (IndexOutOfBoundsException ex) { // expected } list.addAll( Arrays.asList( new String[]{"value1", "value2"})); checkNodes(); list.addFirst("value0"); checkNodes(); list.removeNode(list.getNode(1, false)); checkNodes(); try { Object obj = list.getNode(2, false); fail("Expecting IndexOutOfBoundsException."); } catch (IndexOutOfBoundsException ex) { // expected } try { Object obj = list.getNode(-1, false); fail("Expecting IndexOutOfBoundsException."); } catch (IndexOutOfBoundsException ex) { // expected } try { Object obj = list.getNode(3, true); fail("Expecting IndexOutOfBoundsException."); } catch (IndexOutOfBoundsException ex) { // expected } } protected void checkNodes() { AbstractLinkedList list = (AbstractLinkedList) collection; for (int i = 0; i < list.size; i++) { assertEquals(list.getNode(i, false).next, list.getNode(i + 1, true)); if (i < list.size - 1) { assertEquals(list.getNode(i + 1, false).previous, list.getNode(i, false)); } } } }