package au.gov.ga.earthsci.bookmark.ui; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import au.gov.ga.earthsci.bookmark.model.Bookmark; import au.gov.ga.earthsci.bookmark.model.Bookmarks; import au.gov.ga.earthsci.bookmark.model.IBookmark; import au.gov.ga.earthsci.bookmark.model.IBookmarkList; import au.gov.ga.earthsci.bookmark.model.IBookmarks; import au.gov.ga.earthsci.bookmark.ui.BookmarksController; import au.gov.ga.earthsci.test.util.DummyRealm; /** * Unit tests for the {@link BookmarksController} class * * @author James Navin (james.navin@ga.gov.au) */ public class BookmarksControllerTest { private BookmarksController classUnderTest; private IBookmarks bookmarks; private IBookmark[] testBookmarks; @BeforeClass public static void init() { DummyRealm.init(); } @Before public void setup() { classUnderTest = new BookmarksController(); bookmarks = new Bookmarks(); classUnderTest.setBookmarks(bookmarks); testBookmarks = new IBookmark[] { createBookmark("b0"), createBookmark("b1"), createBookmark("b2") }; bookmarks.getDefaultList().setBookmarks(Arrays.asList(testBookmarks)); } @Test public void testGetCurrentListWithOnlyDefaultList() { IBookmarkList currentList = classUnderTest.getCurrentList(); assertNotNull(currentList); assertEquals(bookmarks.getDefaultList(), currentList); } @Test public void testDeleteWithNull() { IBookmark bookmark = null; classUnderTest.delete(bookmark); assertDefaultBookmarkListCorrect(testBookmarks[0], testBookmarks[1], testBookmarks[2]); assertFalse(classUnderTest.isPlaying()); } @Test public void testDeleteWithNonNull() { IBookmark bookmark = testBookmarks[1]; classUnderTest.delete(bookmark); assertDefaultBookmarkListCorrect(testBookmarks[0], testBookmarks[2]); assertFalse(classUnderTest.isPlaying()); } @Test public void testDeleteWithNonIncluded() { IBookmark bookmark = createBookmark("new"); classUnderTest.delete(bookmark); assertDefaultBookmarkListCorrect(testBookmarks[0], testBookmarks[1], testBookmarks[2]); assertFalse(classUnderTest.isPlaying()); } @Test public void testDeleteMultiWithNull() { IBookmark[] toDelete = null; classUnderTest.delete(toDelete); assertDefaultBookmarkListCorrect(testBookmarks[0], testBookmarks[1], testBookmarks[2]); assertFalse(classUnderTest.isPlaying()); } @Test public void testDeleteMultiWithEmpty() { IBookmark[] toDelete = new IBookmark[0]; classUnderTest.delete(toDelete); assertDefaultBookmarkListCorrect(testBookmarks[0], testBookmarks[1], testBookmarks[2]); assertFalse(classUnderTest.isPlaying()); } @Test public void testDeleteMultiWithNonEmpty() { IBookmark[] toDelete = new IBookmark[] { testBookmarks[2], createBookmark("new"), testBookmarks[0] }; classUnderTest.delete(toDelete); assertDefaultBookmarkListCorrect(testBookmarks[1]); assertFalse(classUnderTest.isPlaying()); } @Test public void testMoveToWithNull() { IBookmark[] toMove = null; int targetIndex = 2; classUnderTest.moveBookmarks(toMove, targetIndex); assertDefaultBookmarkListCorrect(testBookmarks[0], testBookmarks[1], testBookmarks[2]); } @Test public void testMoveToWithEmpty() { IBookmark[] toMove = new IBookmark[0]; int targetIndex = 2; classUnderTest.moveBookmarks(toMove, targetIndex); assertDefaultBookmarkListCorrect(testBookmarks[0], testBookmarks[1], testBookmarks[2]); } @Test public void testMoveToWithNonEmpty() { IBookmark[] toMove = new IBookmark[] { testBookmarks[1], testBookmarks[0] }; int targetIndex = 3; classUnderTest.moveBookmarks(toMove, targetIndex); assertDefaultBookmarkListCorrect(testBookmarks[2], testBookmarks[1], testBookmarks[0]); } @Test public void testCopyToWithNull() { IBookmark[] toCopy = null; int targetIndex = 3; classUnderTest.copyBookmarks(toCopy, targetIndex); assertDefaultBookmarkListCorrect(testBookmarks[0], testBookmarks[1], testBookmarks[2]); } @Test public void testCopyToWithEmpty() { IBookmark[] toCopy = new IBookmark[0]; int targetIndex = 3; classUnderTest.copyBookmarks(toCopy, targetIndex); assertDefaultBookmarkListCorrect(testBookmarks[0], testBookmarks[1], testBookmarks[2]); } @Test public void testCopyToWithNonEmpty() { IBookmark[] toCopy = new IBookmark[] { testBookmarks[0], testBookmarks[1] }; int targetIndex = 3; classUnderTest.copyBookmarks(toCopy, targetIndex); List<IBookmark> bookmarkList = classUnderTest.getCurrentList().getBookmarks(); assertEquals(5, bookmarkList.size()); assertEquals(testBookmarks[0], bookmarkList.get(0)); assertEquals(testBookmarks[1], bookmarkList.get(1)); assertEquals(testBookmarks[2], bookmarkList.get(2)); assertEquals(testBookmarks[0].getName(), bookmarkList.get(3).getName()); assertEquals(testBookmarks[1].getName(), bookmarkList.get(4).getName()); } private void assertDefaultBookmarkListCorrect(IBookmark... expected) { try { List<IBookmark> defaultBookmarks = classUnderTest.getCurrentList().getBookmarks(); assertEquals(expected.length, defaultBookmarks.size()); for (int i = 0; i < expected.length; i++) { assertEquals(expected[i], defaultBookmarks.get(i)); } } catch (AssertionError e) { System.out.println("Expected: " + Arrays.asList(expected) + "| Actual: " + classUnderTest.getCurrentList().getBookmarks()); fail("Default bookmark list not as expected."); } } private IBookmark createBookmark(String name) { Bookmark result = new Bookmark(); result.setName(name); return result; } }