/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.dlect.events.collections;
import java.util.Iterator;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InOrder;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
/**
*
* @author lee
*/
@RunWith(MockitoJUnitRunner.class)
@SuppressWarnings("unchecked")
public class EventFiringIteratorTest {
@Mock
private Iterator<Object> delegate;
@Mock
private CollectionEventHelper<Object> helper;
@InjectMocks
private EventFiringIterator<Object> testMockIteratorObject;
/**
* Test of delegate method, of class EventFiringIterator.
*/
@Test
public void testDelegate() {
assertSame(delegate, testMockIteratorObject.delegate());
}
/**
* Test of next method, of class EventFiringIterator.
*/
@Test
public void testNext() {
Object expNext = new Object();
when(delegate.next()).thenReturn(expNext);
Object next = testMockIteratorObject.next();
assertEquals(expNext, next);
verify(delegate).next();
verifyZeroInteractions(helper);
verifyNoMoreInteractions(delegate);
}
/**
* Test of next method, of class EventFiringIterator.
*/
@Test
public void testNext_Exception() {
Object expNext = new Object();
when(delegate.next()).thenThrow(IllegalStateException.class);
try {
testMockIteratorObject.next();
fail("No exception Thrown!");
} catch (IllegalStateException e) {
verify(delegate).next();
verifyZeroInteractions(helper);
verifyNoMoreInteractions(delegate);
}
}
/**
* Test of remove method, of class EventFiringIterator.
*/
@Test
public void testRemove() {
Object expNext = new Object();
when(delegate.next()).thenReturn(expNext);
testMockIteratorObject.next();
testMockIteratorObject.remove();
InOrder inOrder = inOrder(delegate, helper);
inOrder.verify(delegate).next();
inOrder.verify(delegate).remove();
inOrder.verify(helper).fireRemove(expNext);
verifyNoMoreInteractions(delegate, helper);
}
/**
* Test of remove method, of class EventFiringIterator.
*/
@Test
public void testRemove_ExceptionThrown() {
Object expNext = new Object();
when(delegate.next()).thenReturn(expNext);
doThrow(IllegalStateException.class).when(delegate).remove();
testMockIteratorObject.next();
try {
testMockIteratorObject.remove();
fail("No exception Thrown!");
} catch (IllegalStateException e) {
verify(delegate).next();
verify(delegate).remove();
verifyZeroInteractions(helper);
verifyNoMoreInteractions(delegate);
}
}
}