| /* |
| * 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 tests.api.java.util; |
| |
| import java.util.AbstractSequentialList; |
| import java.util.Arrays; |
| import java.util.Collection; |
| import java.util.Iterator; |
| import java.util.LinkedList; |
| import java.util.ListIterator; |
| import java.util.Vector; |
| |
| import junit.framework.TestCase; |
| |
| public class AbstractSequentialListTest extends TestCase { |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| super.tearDown(); |
| } |
| |
| class ASLT<E> extends AbstractSequentialList<E> { |
| |
| LinkedList<E> l = new LinkedList<E>(); |
| |
| @Override |
| public ListIterator<E> listIterator(int index) { |
| return l.listIterator(index); |
| } |
| |
| @Override |
| public int size() { |
| return l.size(); |
| } |
| } |
| |
| /** |
| * {@link java.util.AbstractSequentialList#addAll(int, java.util.Collection)} |
| */ |
| public void test_addAll_ILCollection() { |
| AbstractSequentialList<String> al = new ASLT<String>(); |
| String[] someList = { "Aardvark" , |
| "Bear" , |
| "Chimpanzee", |
| "Duck" }; |
| Collection<String> c = Arrays.asList(someList); |
| al.addAll(c); |
| assertTrue("Should return true", al.addAll(2, c)); |
| } |
| |
| class Mock_unsupportedListIterator implements ListIterator { |
| public void add(Object o) { |
| throw new UnsupportedOperationException(); |
| } |
| |
| public boolean hasNext() { |
| return true; |
| } |
| |
| public boolean hasPrevious() { |
| return false; |
| } |
| |
| public Object next() { |
| return null; |
| } |
| |
| public int nextIndex() { |
| return 0; |
| } |
| |
| public Object previous() { |
| return null; |
| } |
| |
| public int previousIndex() { |
| return 0; |
| } |
| |
| public void remove() { |
| } |
| |
| public void set(Object o) { |
| throw new UnsupportedOperationException(); |
| } |
| } |
| |
| class Mock_ListIterator<E> implements ListIterator<E> { |
| final String wrongElement = "String"; |
| public void add(E o) { |
| if (o.equals(wrongElement)) throw new IllegalArgumentException(); |
| if (o == null) throw new NullPointerException(); |
| } |
| |
| public boolean hasNext() { |
| return false; |
| } |
| |
| public boolean hasPrevious() { |
| return false; |
| } |
| |
| public E next() { |
| return null; |
| } |
| |
| public int nextIndex() { |
| return 0; |
| } |
| |
| public E previous() { |
| return null; |
| } |
| |
| public int previousIndex() { |
| return 0; |
| } |
| |
| public void remove() { |
| } |
| |
| public void set(E o) { |
| } |
| } |
| |
| public void test_addAllILjava_util_Collection() { |
| AbstractSequentialList asl = new AbstractSequentialList() { |
| |
| @Override |
| public int size() { |
| return 0; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| return new Mock_unsupportedListIterator(); |
| } |
| }; |
| Collection strV = new Vector<String>(); |
| |
| strV.add("String"); |
| strV.add("1"); |
| strV.add("3.14"); |
| |
| try { |
| asl.addAll(0, strV); |
| fail("UnsupportedOperationException expected."); |
| } catch (UnsupportedOperationException ee) { |
| //expected |
| } |
| try { |
| asl.addAll(0, null); |
| fail("NullPointerException expected"); |
| } catch (NullPointerException ee) { |
| //expected |
| } |
| |
| //ClassCastException can not be checked for this method. |
| |
| asl = new AbstractSequentialList() { |
| |
| @Override |
| public int size() { |
| return 0; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| return new Mock_ListIterator(); |
| } |
| }; |
| |
| try { |
| asl.addAll(0, strV); |
| fail("IllegalArgumentException expected"); |
| } catch (IllegalArgumentException e) { |
| //expected |
| } |
| |
| strV.remove("String"); |
| strV.add(null); |
| |
| try { |
| asl.addAll(0, strV); |
| fail("NullPointerException expected"); |
| } catch (NullPointerException e) { |
| //expected |
| } |
| |
| strV.remove(null); |
| asl.addAll(0, strV); |
| |
| asl = new LinkedList(); |
| |
| try { |
| asl.addAll(-10, strV); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException e) { |
| //expected |
| } |
| |
| try { |
| asl.addAll(1, strV); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException e) { |
| //expected |
| } |
| } |
| |
| public void test_addILjava_lang_Object() { |
| AbstractSequentialList asl = new AbstractSequentialList() { |
| |
| @Override |
| public int size() { |
| return 0; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| return new Mock_unsupportedListIterator(); |
| } |
| }; |
| |
| try { |
| asl.add(0, 1); |
| fail("UnsupportedOperationException expected"); |
| } catch (UnsupportedOperationException e) { |
| //expected |
| } |
| |
| asl = new AbstractSequentialList() { |
| |
| @Override |
| public int size() { |
| return 0; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| return new Mock_ListIterator(); |
| } |
| }; |
| |
| try { |
| asl.add(0, "String"); |
| fail("IllegalArgumentException expected"); |
| } catch (IllegalArgumentException ee) { |
| //expected |
| } |
| |
| try { |
| asl.add(0, null); |
| fail("NullPointerException expected"); |
| } catch (NullPointerException ee) { |
| //expected |
| } |
| |
| //ClassCastException can not be checked for this method. |
| |
| asl.add(0, 1); |
| |
| asl = new LinkedList(); |
| |
| try { |
| asl.add(-1, 1); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException ee) { |
| //expected |
| } |
| |
| asl.add(0, 1); |
| |
| try { |
| asl.add(2, 1); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException ee) { |
| //expected |
| } |
| } |
| |
| public void test_getI() { |
| final String buff[] = {"0", "1", "2", "3", "4", "5"}; |
| AbstractSequentialList asl = new AbstractSequentialList() { |
| int currPos = 0; |
| |
| @Override |
| public int size() { |
| return buff.length; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| currPos = index; |
| return new ListIterator() { |
| public void add(Object o) { |
| } |
| |
| public boolean hasNext() { |
| return true; |
| } |
| |
| public boolean hasPrevious() { |
| return false; |
| } |
| |
| public Object next() { |
| return buff[currPos]; |
| } |
| |
| public int nextIndex() { |
| return 0; |
| } |
| |
| public Object previous() { |
| return null; |
| } |
| |
| public int previousIndex() { |
| return 0; |
| } |
| |
| public void remove() { |
| } |
| |
| public void set(Object o) { |
| } |
| }; |
| } |
| }; |
| |
| for (int i = 0; i < buff.length; i++) { |
| assertEquals(buff[i], asl.get(i)); |
| } |
| |
| try { |
| asl.get(asl.size() + 1); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException e) { |
| //expected |
| } |
| |
| try { |
| asl.get(-1); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException e) { |
| //expected |
| } |
| } |
| |
| public void test_iterrator() { |
| AbstractSequentialList asl = new AbstractSequentialList() { |
| |
| @Override |
| public int size() { |
| return 0; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| return new Mock_unsupportedListIterator(); |
| } |
| }; |
| |
| assertTrue(asl.iterator().getClass().toString().contains("Mock_unsupportedListIterator")); |
| |
| asl = new AbstractSequentialList() { |
| |
| @Override |
| public int size() { |
| return 0; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| return new Mock_ListIterator(); |
| } |
| }; |
| |
| assertTrue(asl.iterator().getClass().toString().contains("Mock_ListIterator")); |
| |
| asl = new AbstractSequentialList() { |
| |
| @Override |
| public int size() { |
| return 0; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| return null; |
| } |
| }; |
| assertNull(asl.iterator()); |
| } |
| |
| public void test_removeI() { |
| AbstractSequentialList asl = new AbstractSequentialList() { |
| String buff[] = {"0", "1", "2", "3", "4", "5"}; |
| int currPos = 0; |
| |
| @Override |
| public int size() { |
| return buff.length; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| currPos = index; |
| return new ListIterator() { |
| public void add(Object o) { |
| } |
| |
| public boolean hasNext() { |
| return true; |
| } |
| |
| public boolean hasPrevious() { |
| return false; |
| } |
| |
| public Object next() { |
| return buff[currPos]; |
| } |
| |
| public int nextIndex() { |
| return 0; |
| } |
| |
| public Object previous() { |
| return null; |
| } |
| |
| public int previousIndex() { |
| return 0; |
| } |
| |
| public void remove() { |
| buff[currPos] = "removed element"; |
| } |
| |
| public void set(Object o) { |
| } |
| }; |
| } |
| }; |
| |
| try { |
| asl.remove(asl.size() + 1); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException e) { |
| //expected |
| } |
| |
| try { |
| asl.remove(-1); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException e) { |
| //expected |
| } |
| |
| for(int i = 0; i < asl.size(); i++) { |
| assertFalse(asl.get(i).toString().contains("removed element")); |
| asl.remove(i); |
| assertTrue(asl.get(i).toString().contains("removed element")); |
| } |
| } |
| |
| public void test_setILjava_lang_Object() { |
| AbstractSequentialList asl = new AbstractSequentialList() { |
| String buff[] = {"0", "1", "2", "3", "4", "5"}; |
| final String illegalStr = "Illegal element"; |
| int currPos = 0; |
| |
| @Override |
| public int size() { |
| return buff.length; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| currPos = index; |
| return new ListIterator() { |
| public void add(Object o) { |
| } |
| |
| public boolean hasNext() { |
| return true; |
| } |
| |
| public boolean hasPrevious() { |
| return false; |
| } |
| |
| public Object next() { |
| return buff[currPos]; |
| } |
| |
| public int nextIndex() { |
| return 0; |
| } |
| |
| public Object previous() { |
| return null; |
| } |
| |
| public int previousIndex() { |
| return 0; |
| } |
| |
| public void remove() { |
| buff[currPos] = "removed element"; |
| } |
| |
| public void set(Object o) { |
| if (o == null) throw new NullPointerException(); |
| if (o.equals(illegalStr)) throw new IllegalArgumentException(); |
| buff[currPos] = (String) o; |
| } |
| }; |
| } |
| }; |
| |
| try { |
| asl.set(asl.size() + 1, "new element"); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException e) { |
| //expected |
| } |
| |
| try { |
| asl.set(-1, "new element"); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException e) { |
| //expected |
| } |
| |
| for(int i = 0; i < asl.size(); i++) { |
| assertFalse(asl.get(i).toString().contains("new element")); |
| asl.set(i, "new element"); |
| assertTrue(asl.get(i).toString().contains("new element")); |
| } |
| |
| try { |
| asl.set(1, new Double(1)); |
| fail("ClassCastException expected"); |
| } catch (ClassCastException e) { |
| // |
| } |
| |
| try { |
| asl.set(1, "Illegal element"); |
| fail("IllegalArgumentException expected"); |
| } catch (IllegalArgumentException ee) { |
| //expected |
| } |
| |
| try { |
| asl.set(1, null); |
| fail("NullPointerException expected"); |
| } catch (NullPointerException ee) { |
| //expected |
| } |
| |
| asl = new AbstractSequentialList() { |
| |
| @Override |
| public int size() { |
| return 0; |
| } |
| |
| @Override |
| public ListIterator listIterator(int index) { |
| return new Mock_unsupportedListIterator(); |
| } |
| }; |
| |
| try { |
| asl.set(0, "New element"); |
| fail("UnsupportedOperationException expected"); |
| } catch (UnsupportedOperationException e) { |
| //expected |
| } |
| } |
| } |