| /* |
| * Copyright 2008 Google Inc. |
| * |
| * Licensed 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 com.google.gwt.emultest.java.util; |
| |
| import java.util.Iterator; |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.NoSuchElementException; |
| |
| /** |
| * Test LinkedList class. |
| */ |
| @SuppressWarnings("unchecked") |
| public class LinkedListTest extends ListTestBase { |
| |
| private static final class LinkedListWithRemoveRange extends LinkedList { |
| @Override |
| public void removeRange(int fromIndex, int toIndex) { |
| super.removeRange(fromIndex, toIndex); |
| } |
| } |
| |
| public void testAddFirst() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| Object o3 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| l.addFirst(o1); |
| checkListSizeAndContent(l, o1); |
| l.addFirst(o2); |
| checkListSizeAndContent(l, o2, o1); |
| l.addFirst(o3); |
| checkListSizeAndContent(l, o3, o2, o1); |
| } |
| |
| public void testAddLast() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| Object o3 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| l.addLast(o1); |
| checkListSizeAndContent(l, o1); |
| l.addLast(o2); |
| checkListSizeAndContent(l, o1, o2); |
| l.addLast(o3); |
| checkListSizeAndContent(l, o1, o2, o3); |
| } |
| |
| public void testDescendingIterator() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| Object o3 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| Iterator<Object> it = l.descendingIterator(); |
| assertFalse(it.hasNext()); |
| try { |
| it.next(); |
| fail(); |
| } catch (NoSuchElementException e) { |
| } |
| |
| l.add(o1); |
| l.add(o2); |
| l.add(o3); |
| it = l.descendingIterator(); |
| assertTrue(it.hasNext()); |
| assertEquals(o3, it.next()); |
| assertTrue(it.hasNext()); |
| assertEquals(o2, it.next()); |
| assertTrue(it.hasNext()); |
| assertEquals(o1, it.next()); |
| assertFalse(it.hasNext()); |
| try { |
| it.next(); |
| fail(); |
| } catch (NoSuchElementException e) { |
| } |
| checkListSizeAndContent(l, o1, o2, o3); |
| |
| l = new LinkedList<Object>(); |
| l.add(o1); |
| l.add(o2); |
| l.add(o3); |
| it = l.descendingIterator(); |
| assertTrue(it.hasNext()); |
| assertEquals(o3, it.next()); |
| it.remove(); |
| assertEquals(2, l.size()); |
| assertTrue(it.hasNext()); |
| assertEquals(o2, it.next()); |
| assertTrue(it.hasNext()); |
| assertEquals(o1, it.next()); |
| it.remove(); |
| checkListSizeAndContent(l, o2); |
| } |
| |
| public void testElement() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| try { |
| l.element(); |
| fail(); |
| } catch (NoSuchElementException e) { |
| } |
| |
| l.add(o1); |
| assertEquals(o1, l.element()); |
| checkListSizeAndContent(l, o1); |
| |
| l.add(o2); |
| assertEquals(o1, l.element()); |
| checkListSizeAndContent(l, o1, o2); |
| } |
| |
| public void testGetFirst() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| try { |
| l.getFirst(); |
| fail(); |
| } catch (NoSuchElementException e) { |
| } |
| |
| l.add(o1); |
| assertEquals(o1, l.getFirst()); |
| checkListSizeAndContent(l, o1); |
| |
| l.add(o2); |
| assertEquals(o1, l.getFirst()); |
| checkListSizeAndContent(l, o1, o2); |
| } |
| |
| public void testGetLast() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| try { |
| l.getLast(); |
| fail(); |
| } catch (NoSuchElementException e) { |
| } |
| |
| l.add(o1); |
| assertEquals(o1, l.getLast()); |
| checkListSizeAndContent(l, o1); |
| |
| l.add(o2); |
| assertEquals(o2, l.getLast()); |
| checkListSizeAndContent(l, o1, o2); |
| } |
| |
| public void testOffer() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| Object o3 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertTrue(l.offer(o1)); |
| checkListSizeAndContent(l, o1); |
| assertTrue(l.offer(o2)); |
| checkListSizeAndContent(l, o1, o2); |
| assertTrue(l.offer(o3)); |
| checkListSizeAndContent(l, o1, o2, o3); |
| } |
| |
| public void testOfferFirst() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| Object o3 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertTrue(l.offerFirst(o1)); |
| checkListSizeAndContent(l, o1); |
| assertTrue(l.offerFirst(o2)); |
| checkListSizeAndContent(l, o2, o1); |
| assertTrue(l.offerFirst(o3)); |
| checkListSizeAndContent(l, o3, o2, o1); |
| } |
| |
| public void testOfferLast() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| Object o3 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertTrue(l.offerLast(o1)); |
| checkListSizeAndContent(l, o1); |
| assertTrue(l.offerLast(o2)); |
| checkListSizeAndContent(l, o1, o2); |
| assertTrue(l.offerLast(o3)); |
| checkListSizeAndContent(l, o1, o2, o3); |
| } |
| |
| public void testPeek() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertNull(l.peek()); |
| |
| l.add(o1); |
| assertEquals(o1, l.peek()); |
| checkListSizeAndContent(l, o1); |
| |
| l.add(o2); |
| assertEquals(o1, l.peek()); |
| checkListSizeAndContent(l, o1, o2); |
| } |
| |
| public void testPeekFirst() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertNull(l.peekFirst()); |
| |
| l.add(o1); |
| assertEquals(o1, l.peekFirst()); |
| checkListSizeAndContent(l, o1); |
| |
| l.add(o2); |
| assertEquals(o1, l.peekFirst()); |
| checkListSizeAndContent(l, o1, o2); |
| } |
| |
| public void testPeekLast() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertNull(l.peekLast()); |
| |
| l.add(o1); |
| assertEquals(o1, l.peekLast()); |
| checkListSizeAndContent(l, o1); |
| |
| l.add(o2); |
| assertEquals(o2, l.peekLast()); |
| checkListSizeAndContent(l, o1, o2); |
| } |
| |
| public void testPoll() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertNull(l.poll()); |
| |
| l.add(o1); |
| assertEquals(o1, l.poll()); |
| assertTrue(l.isEmpty()); |
| |
| l.add(o1); |
| l.add(o2); |
| assertEquals(o1, l.poll()); |
| checkListSizeAndContent(l, o2); |
| } |
| |
| public void testPollFirst() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertNull(l.pollFirst()); |
| |
| l.add(o1); |
| assertEquals(o1, l.pollFirst()); |
| assertTrue(l.isEmpty()); |
| |
| l.add(o1); |
| l.add(o2); |
| assertEquals(o1, l.pollFirst()); |
| checkListSizeAndContent(l, o2); |
| } |
| |
| public void testPollLast() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertNull(l.pollLast()); |
| |
| l.add(o1); |
| assertEquals(o1, l.pollLast()); |
| assertTrue(l.isEmpty()); |
| |
| l.add(o1); |
| l.add(o2); |
| assertEquals(o2, l.pollLast()); |
| checkListSizeAndContent(l, o1); |
| } |
| |
| public void testPop() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| try { |
| l.pop(); |
| fail(); |
| } catch (NoSuchElementException e) { |
| } |
| |
| l.add(o1); |
| assertEquals(o1, l.pop()); |
| assertTrue(l.isEmpty()); |
| |
| l.add(o1); |
| l.add(o2); |
| assertEquals(o1, l.pop()); |
| checkListSizeAndContent(l, o2); |
| } |
| |
| public void testPush() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| Object o3 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| l.push(o1); |
| checkListSizeAndContent(l, o1); |
| l.push(o2); |
| checkListSizeAndContent(l, o2, o1); |
| l.push(o3); |
| checkListSizeAndContent(l, o3, o2, o1); |
| } |
| |
| public void testRemove() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| try { |
| l.remove(); |
| fail(); |
| } catch (NoSuchElementException e) { |
| } |
| |
| l.add(o1); |
| assertEquals(o1, l.remove()); |
| assertTrue(l.isEmpty()); |
| |
| l.add(o1); |
| l.add(o2); |
| assertEquals(o1, l.remove()); |
| checkListSizeAndContent(l, o2); |
| } |
| |
| public void testRemoveFirst() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| try { |
| l.removeFirst(); |
| fail(); |
| } catch (NoSuchElementException e) { |
| } |
| |
| l.add(o1); |
| assertEquals(o1, l.removeFirst()); |
| assertTrue(l.isEmpty()); |
| |
| l.add(o1); |
| l.add(o2); |
| assertEquals(o1, l.removeFirst()); |
| checkListSizeAndContent(l, o2); |
| } |
| |
| public void testRemoveFirstOccurrence() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| Object o3 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertFalse(l.removeFirstOccurrence(o1)); |
| |
| l.add(o1); |
| assertTrue(l.removeFirstOccurrence(o1)); |
| assertTrue(l.isEmpty()); |
| |
| l = new LinkedList<Object>(); |
| l.add(o1); |
| l.add(o2); |
| l.add(o3); |
| assertTrue(l.removeFirstOccurrence(o2)); |
| checkListSizeAndContent(l, o1, o3); |
| |
| l = new LinkedList<Object>(); |
| l.add(o1); |
| l.add(o2); |
| l.add(o3); |
| l.add(o1); |
| l.add(o2); |
| l.add(o3); |
| assertTrue(l.removeFirstOccurrence(o2)); |
| checkListSizeAndContent(l, o1, o3, o1, o2, o3); |
| } |
| |
| public void testRemoveLast() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| try { |
| l.removeLast(); |
| fail(); |
| } catch (NoSuchElementException e) { |
| } |
| |
| l.add(o1); |
| assertEquals(o1, l.removeLast()); |
| assertTrue(l.isEmpty()); |
| |
| l.add(o1); |
| l.add(o2); |
| assertEquals(o2, l.removeLast()); |
| checkListSizeAndContent(l, o1); |
| } |
| |
| public void testRemoveLastOccurrence() { |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| Object o3 = new Object(); |
| |
| LinkedList<Object> l = new LinkedList<Object>(); |
| assertFalse(l.removeLastOccurrence(o1)); |
| |
| l.add(o1); |
| assertTrue(l.removeLastOccurrence(o1)); |
| assertTrue(l.isEmpty()); |
| |
| l = new LinkedList<Object>(); |
| l.add(o1); |
| l.add(o2); |
| l.add(o3); |
| assertTrue(l.removeLastOccurrence(o2)); |
| checkListSizeAndContent(l, o1, o3); |
| |
| l = new LinkedList<Object>(); |
| l.add(o1); |
| l.add(o2); |
| l.add(o3); |
| l.add(o1); |
| l.add(o2); |
| l.add(o3); |
| assertTrue(l.removeLastOccurrence(o2)); |
| checkListSizeAndContent(l, o1, o2, o3, o1, o3); |
| } |
| |
| public void testRemoveRange() { |
| LinkedListWithRemoveRange l = new LinkedListWithRemoveRange(); |
| for (int i = 0; i < 10; i++) { |
| l.add(new Integer(i)); |
| } |
| try { |
| l.removeRange(-1, 1); |
| fail(); |
| } catch (IndexOutOfBoundsException expected) { |
| } |
| |
| try { |
| l.removeRange(2, 11); |
| fail(); |
| } catch (NoSuchElementException expected) { |
| } |
| |
| assertEquals(2, l.size()); |
| for (int i = 0; i < 2; i++) { |
| Integer elem = (Integer) l.get(i); |
| assertEquals(i, elem.intValue()); |
| } |
| |
| for (int i = 2; i < 10; i++) { |
| l.add(new Integer(i)); |
| } |
| |
| l.removeRange(3, 5); |
| assertEquals(8, l.size()); |
| for (int i = 0; i < 3; i++) { |
| Integer elem = (Integer) l.get(i); |
| assertEquals(i, elem.intValue()); |
| } |
| for (int i = 3; i < 8; i++) { |
| Integer elem = (Integer) l.get(i); |
| assertEquals(i + 2, elem.intValue()); |
| } |
| } |
| |
| @Override |
| protected List makeEmptyList() { |
| return new LinkedList(); |
| } |
| |
| private void checkListSizeAndContent(List<Object> in, Object... expected) { |
| assertEquals(expected.length, in.size()); |
| for (int i = 0; i < expected.length; i++) { |
| assertEquals(expected[i], in.get(i)); |
| } |
| } |
| } |