| /* |
| * Copyright 2012-present Facebook, 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.facebook.buck.util.collect; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| |
| import org.junit.Test; |
| |
| import java.util.Iterator; |
| import java.util.NoSuchElementException; |
| |
| public class ArrayIterableTest { |
| |
| @Test(expected = NullPointerException.class) |
| public void testSingleParamConstructorRejectsNullArray() { |
| ArrayIterable.of(/* array */ null); |
| } |
| |
| @Test(expected = NullPointerException.class) |
| public void testMultiParamConstructorRejectsNullArray() { |
| ArrayIterable.of(/* array */ null, 0, 0); |
| } |
| |
| @Test(expected = IndexOutOfBoundsException.class) |
| public void testMultiParamConstructorRejectsNegativeStartIndex() { |
| ArrayIterable.of(new Object[] {}, -1, 0); |
| } |
| |
| @Test(expected = IndexOutOfBoundsException.class) |
| public void testMultiParamConstructorRejectsStartIndexLargerThanArray() { |
| ArrayIterable.of(new Object[] {}, 2, 0); |
| } |
| |
| @Test(expected = IndexOutOfBoundsException.class) |
| public void testMultiParamConstructorRejectsNegativeEndIndex() { |
| ArrayIterable.of(new Object[] {}, 0, -1); |
| } |
| |
| @Test(expected = IndexOutOfBoundsException.class) |
| public void testMultiParamConstructorRejectsEndIndexLargerThanArray() { |
| ArrayIterable.of(new Object[] {}, 0, 2); |
| } |
| |
| @Test(expected = IndexOutOfBoundsException.class) |
| public void testMultiParamConstructorRejectsStartIndexLargerThanEndIndex() { |
| ArrayIterable.of(new String[] {"a", "b", "c"}, 2, 1); |
| } |
| |
| @Test |
| @SuppressWarnings("PMD.EmptyCatchBlock") |
| public void testEmptyArrayIterable() { |
| Iterable<Object> iterable = ArrayIterable.of(new Object[] {}); |
| Iterator<Object> iterator = iterable.iterator(); |
| assertFalse(iterator.hasNext()); |
| |
| try { |
| iterator.remove(); |
| fail("Should throw UnsupportedOperationException."); |
| } catch (UnsupportedOperationException e) { |
| // OK |
| } |
| |
| try { |
| iterator.next(); |
| fail("Should throw NoSuchElementException."); |
| } catch (NoSuchElementException e) { |
| // OK |
| } |
| } |
| |
| @Test |
| @SuppressWarnings("PMD.EmptyCatchBlock") |
| public void testEmptySingletonIterable() { |
| Iterable<String> iterable = ArrayIterable.of(new String[] { "only" }); |
| Iterator<String> iterator = iterable.iterator(); |
| |
| // First element. |
| assertTrue(iterator.hasNext()); |
| assertEquals("only", iterator.next()); |
| |
| // Second element. |
| assertFalse(iterator.hasNext()); |
| try { |
| iterator.next(); |
| fail("Should throw NoSuchElementException."); |
| } catch (NoSuchElementException e) { |
| // OK |
| } |
| } |
| |
| @Test |
| @SuppressWarnings("PMD.EmptyCatchBlock") |
| public void testMultiElementIterable() { |
| Iterable<String> iterable = ArrayIterable.of(new String[] { "a", "b", "c" }); |
| Iterator<String> iterator = iterable.iterator(); |
| |
| // First element. |
| assertTrue(iterator.hasNext()); |
| assertEquals("a", iterator.next()); |
| |
| // Second element. |
| assertTrue(iterator.hasNext()); |
| assertEquals("b", iterator.next()); |
| |
| // Third element. |
| assertTrue(iterator.hasNext()); |
| assertEquals("c", iterator.next()); |
| |
| try { |
| iterator.remove(); |
| fail("Should throw UnsupportedOperationException."); |
| } catch (UnsupportedOperationException e) { |
| // OK |
| } |
| |
| assertFalse("Iterator should be exhausted.", iterator.hasNext()); |
| try { |
| iterator.next(); |
| fail("Should throw NoSuchElementException."); |
| } catch (NoSuchElementException e) { |
| // OK |
| } |
| } |
| |
| @Test |
| @SuppressWarnings("PMD.EmptyCatchBlock") |
| public void testMultiElementIterableWithIndexes() { |
| Iterable<String> iterable = ArrayIterable.of( |
| new String[] { "a", "b", "c", "d", "e" }, |
| /* startIndex */ 1, |
| /* endIndex */ 4); |
| Iterator<String> iterator = iterable.iterator(); |
| |
| // First element. |
| assertTrue(iterator.hasNext()); |
| assertEquals("b", iterator.next()); |
| |
| // Second element. |
| assertTrue(iterator.hasNext()); |
| assertEquals("c", iterator.next()); |
| |
| // Third element. |
| assertTrue(iterator.hasNext()); |
| assertEquals("d", iterator.next()); |
| |
| assertFalse("Iterator should be exhausted.", iterator.hasNext()); |
| try { |
| iterator.next(); |
| fail("Should throw NoSuchElementException."); |
| } catch (NoSuchElementException e) { |
| // OK |
| } |
| } |
| } |