/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.control.common.util;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import junit.framework.TestCase;
import org.easymock.MockControl;
/**
* Description of the Class
*
* @author $Author: gonnot $
* @version $Revision: 1.2 $
*/
public class EntityIteratorImplTest extends TestCase {
private MockEntityHelper helper;
private EntityIteratorImpl iterator;
private ResultSet rs;
private MockControl rsControler;
private Statement stmt;
private MockControl stmtControler;
public EntityIteratorImplTest(String testCaseName) {
super(testCaseName);
}
public void test_close() throws Exception {
helper = new MockEntityHelper();
stmt.close();
stmtControler.setVoidCallable(1);
rsControler.replay();
stmtControler.replay();
iterator = new EntityIteratorImpl(helper, rs, stmt);
iterator.close();
rsControler.verify();
stmtControler.verify();
}
public void test_hasNext() throws Exception {
helper = new MockEntityHelper();
rs.next();
rsControler.setReturnValue(true, 2);
rs.next();
rsControler.setReturnValue(false, 1);
rsControler.replay();
iterator = new EntityIteratorImpl(helper, rs, stmt);
assertTrue("Premiere ligne", iterator.hasNext());
assertTrue("Toujours la premiere ligne", iterator.hasNext());
iterator.next();
assertTrue("Deuxieme ligne", iterator.hasNext());
assertTrue("Toujours une Deuxieme ligne", iterator.hasNext());
iterator.next();
assertTrue("Plus de ligne", !iterator.hasNext());
assertTrue("Vraiment plus aucune ligne ", !iterator.hasNext());
rsControler.verify();
assertTrue("new object ", helper.newObjectFromCalled);
}
public void test_update() throws Exception {
helper = new MockEntityHelper();
rs.next();
rsControler.setReturnValue(true, 1);
// Cet appel rs.next() est fait par l'update pour s'assurer
// que l'ordre d'appel est correcte
// cf. http://4ddev02/vqwiki/jsp/Wiki?EasyMock
rs.next();
rsControler.setThrowable(new RuntimeException("Normalement captur� par l'update"),
1);
rs.updateRow();
rsControler.setVoidCallable(1);
rs.next();
rsControler.setReturnValue(false, 1);
rsControler.replay();
iterator = new EntityIteratorImpl(helper, rs, stmt);
assertTrue(iterator.hasNext());
Object obj = iterator.next();
// Maj de obj par des contr�les
iterator.update(obj, null);
assertTrue("Plus de ligne", !iterator.hasNext());
rsControler.verify();
}
@Override
protected void setUp() {
rsControler = MockControl.createControl(ResultSet.class);
rs = (ResultSet)rsControler.getMock();
stmtControler = MockControl.createControl(Statement.class);
stmt = (Statement)stmtControler.getMock();
}
@Override
protected void tearDown() {
}
private class MockEntityHelper extends EntityHelper {
boolean newObjectFromCalled = false;
int newObjectFromCalledNb = 0;
@Override
Object newObjectFrom(ResultSet rs) throws SQLException {
newObjectFromCalled = true;
newObjectFromCalledNb++;
return new Object();
}
@Override
void updateResultSet(ResultSet rs, Object obj, EntityResultState ctrl)
throws SQLException {
// void updateResultSet(ResultSet rs, Object obj) throws SQLException {
try {
rs.next();
}
catch (RuntimeException ex) {
// Exception normal - Pour verifier l'ordre d'appel
}
}
}
}