12637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin/* 22637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * Copyright (c) 2016 Mockito contributors 32637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * This program is made available under the terms of the MIT License. 42637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin */ 52637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpackage org.mockito.internal.matchers.text; 62637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 72637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport java.lang.reflect.Array; 82637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport java.util.Iterator; 92637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin/** 112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * Inspired on hamcrest, internal package class, 122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * TODO add specific unit tests instead of relying on higher level unit tests 132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin */ 142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinclass ArrayIterator implements Iterator<Object> { 152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private final Object array; 172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private int currentIndex = 0; 182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public ArrayIterator(Object array) { 202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (array == null) { 212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin //TODO extract a small utility for null-checking 222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin throw new IllegalArgumentException("Expected array instance but got null"); 232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (!array.getClass().isArray()) { 252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin throw new IllegalArgumentException("Expected array but got object of type: " 262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin + array.getClass() + ", the object: " + array.toString()); 272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin this.array = array; 292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public boolean hasNext() { 322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return currentIndex < Array.getLength(array); 332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 352637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public Object next() { 362637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return Array.get(array, currentIndex++); 372637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 382637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 392637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public void remove() { 402637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin throw new UnsupportedOperationException("cannot remove items from an array"); 412637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 422637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin} 43