package au.gov.ga.earthsci.bookmark.ui.editor;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.junit.Before;
import org.junit.Test;
import au.gov.ga.earthsci.bookmark.ui.editor.AbstractBookmarkEditor;
import au.gov.ga.earthsci.bookmark.ui.editor.BookmarkEditorMessage;
import au.gov.ga.earthsci.bookmark.ui.editor.IBookmarkEditor;
import au.gov.ga.earthsci.bookmark.ui.editor.IBookmarkEditorListener;
import au.gov.ga.earthsci.bookmark.ui.editor.IBookmarkEditorMessage;
import au.gov.ga.earthsci.bookmark.ui.editor.IBookmarkEditorMessage.Level;
/**
* Unit tests for the {@link AbstractBookmarkEditor} class
*
* @author James Navin (james.navin@ga.gov.au)
*/
public class AbstractBookmarkEditorTest
{
private AbstractBookmarkEditor classUnderTest;
private Mockery mockContext;
private IBookmarkEditorListener listener;
@Before
public void setup()
{
classUnderTest = new DummyBookmarkEditor();
mockContext = new Mockery();
listener = mockContext.mock(IBookmarkEditorListener.class);
classUnderTest.addListener(listener);
}
@Test
public void testValidateWithSingleValid()
{
mockContext.checking(new Expectations()
{
{
{
never(listener).editorInvalid(with(any(IBookmarkEditor.class)),
with(any(IBookmarkEditorMessage[].class)));
never(listener).editorValid(with(any(IBookmarkEditor.class)));
}
}
});
classUnderTest.validate("field1", true, new BookmarkEditorMessage(Level.ERROR, "error1", "error message"));
assertTrue(classUnderTest.isValid());
assertEquals(0, classUnderTest.getMessages().length);
}
@Test
public void testValidateWithMultipleValid()
{
mockContext.checking(new Expectations()
{
{
{
never(listener).editorInvalid(with(any(IBookmarkEditor.class)),
with(any(IBookmarkEditorMessage[].class)));
never(listener).editorValid(with(any(IBookmarkEditor.class)));
}
}
});
classUnderTest.validate("field1", true, new BookmarkEditorMessage(Level.ERROR, "error1", "error1"));
classUnderTest.validate("field1", true, new BookmarkEditorMessage(Level.ERROR, "error2", "error2"));
assertTrue(classUnderTest.isValid());
assertEquals(0, classUnderTest.getMessages().length);
}
@Test
public void testValidateWithSingleInvalid()
{
mockContext.checking(new Expectations()
{
{
{
oneOf(listener).editorInvalid(with(classUnderTest), with(any(IBookmarkEditorMessage[].class)));
never(listener).editorValid(with(any(IBookmarkEditor.class)));
}
}
});
classUnderTest.validate("field1", false, new BookmarkEditorMessage(Level.ERROR, "error1", "error1"));
assertFalse(classUnderTest.isValid());
assertEquals(1, classUnderTest.getMessages().length);
assertEquals(new BookmarkEditorMessage(Level.ERROR, "error1", "error1"), classUnderTest.getMessages()[0]);
}
@Test
public void testValidateWithMultipleInvalid()
{
mockContext.checking(new Expectations()
{
{
{
exactly(2).of(listener).editorInvalid(with(classUnderTest),
with(any(IBookmarkEditorMessage[].class)));
never(listener).editorValid(with(any(IBookmarkEditor.class)));
}
}
});
classUnderTest.validate("field1", false, new BookmarkEditorMessage(Level.ERROR, "error1", "error1"));
classUnderTest.validate("field1", false, new BookmarkEditorMessage(Level.ERROR, "error2", "error2"));
assertFalse(classUnderTest.isValid());
assertEquals(2, classUnderTest.getMessages().length);
assertEquals(new BookmarkEditorMessage(Level.ERROR, "error1", "error1"), classUnderTest.getMessages()[0]);
assertEquals(new BookmarkEditorMessage(Level.ERROR, "error2", "error2"), classUnderTest.getMessages()[1]);
}
@Test
public void testValidateWithInvalidFollowedByValidSameError()
{
mockContext.checking(new Expectations()
{
{
{
exactly(1).of(listener).editorInvalid(with(classUnderTest),
with(any(IBookmarkEditorMessage[].class)));
exactly(1).of(listener).editorValid(with(classUnderTest));
}
}
});
classUnderTest.validate("field1", false, new BookmarkEditorMessage(Level.ERROR, "error1", "error1"));
classUnderTest.validate("field1", true, new BookmarkEditorMessage(Level.ERROR, "error1", "error1"));
assertTrue(classUnderTest.isValid());
assertEquals(0, classUnderTest.getMessages().length);
}
@Test
public void testValidateWithInvalidFollowedByValidDifferentError()
{
mockContext.checking(new Expectations()
{
{
{
exactly(1).of(listener).editorInvalid(with(classUnderTest),
with(any(IBookmarkEditorMessage[].class)));
never(listener).editorValid(with(classUnderTest));
}
}
});
classUnderTest.validate("field1", false, new BookmarkEditorMessage(Level.ERROR, "error1", "error1"));
classUnderTest.validate("field1", true, new BookmarkEditorMessage(Level.ERROR, "error2", "error2"));
assertFalse(classUnderTest.isValid());
assertEquals(1, classUnderTest.getMessages().length);
assertEquals(new BookmarkEditorMessage(Level.ERROR, "error1", "error1"), classUnderTest.getMessages()[0]);
}
@Test
public void testValidateWithInvalidFollowedByValidDifferentField()
{
mockContext.checking(new Expectations()
{
{
{
exactly(1).of(listener).editorInvalid(with(classUnderTest),
with(any(IBookmarkEditorMessage[].class)));
never(listener).editorValid(with(classUnderTest));
}
}
});
classUnderTest.validate("field1", false, new BookmarkEditorMessage(Level.ERROR, "error1", "error1"));
classUnderTest.validate("field2", true, new BookmarkEditorMessage(Level.ERROR, "error1", "error1"));
assertFalse(classUnderTest.isValid());
assertEquals(1, classUnderTest.getMessages().length);
assertEquals(new BookmarkEditorMessage(Level.ERROR, "error1", "error1"), classUnderTest.getMessages()[0]);
}
@Test
public void testValidateWithInvalidFollowedByInvalidDifferentField()
{
mockContext.checking(new Expectations()
{
{
{
exactly(2).of(listener).editorInvalid(with(classUnderTest),
with(any(IBookmarkEditorMessage[].class)));
never(listener).editorValid(with(classUnderTest));
}
}
});
classUnderTest.validate("field1", false, new BookmarkEditorMessage(Level.ERROR, "error1", "error1"));
classUnderTest.validate("field2", false, new BookmarkEditorMessage(Level.ERROR, "error2", "error2"));
assertFalse(classUnderTest.isValid());
assertEquals(2, classUnderTest.getMessages().length);
assertEquals(new BookmarkEditorMessage(Level.ERROR, "error1", "error1"), classUnderTest.getMessages()[0]);
assertEquals(new BookmarkEditorMessage(Level.ERROR, "error2", "error2"), classUnderTest.getMessages()[1]);
}
private class DummyBookmarkEditor extends AbstractBookmarkEditor
{
@Override
public void okPressed()
{
}
@Override
public void cancelPressed()
{
}
@Override
public void restoreOriginalValues()
{
}
@Override
public Control createControl(Composite parent)
{
return null;
}
@Override
public Control getControl()
{
return null;
}
@Override
public String getName()
{
return null;
}
@Override
public String getDescription()
{
return null;
}
}
}