/* ********************************************************************** ** ** Copyright notice ** ** ** ** (c) 2005-2009 RSSOwl Development Team ** ** http://www.rssowl.org/ ** ** ** ** All rights reserved ** ** ** ** This program and the accompanying materials are made available under ** ** the terms of the Eclipse Public License v1.0 which accompanies this ** ** distribution, and is available at: ** ** http://www.rssowl.org/legal/epl-v10.html ** ** ** ** A copy is found in the file epl-v10.html and important notices to the ** ** license from the team is found in the textfile LICENSE.txt distributed ** ** in this package. ** ** ** ** This copyright notice MUST APPEAR in all copies of the file! ** ** ** ** Contributors: ** ** RSSOwl Development Team - initial API and implementation ** ** ** ** ********************************************************************** */ package org.rssowl.core.tests.importer; import static junit.framework.Assert.assertNotNull; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.junit.Before; import org.junit.Test; import org.rssowl.core.Owl; import org.rssowl.core.internal.newsaction.LabelNewsAction; import org.rssowl.core.internal.newsaction.MoveNewsAction; import org.rssowl.core.internal.persist.Label; import org.rssowl.core.internal.persist.Preference; import org.rssowl.core.internal.persist.SearchFilter; import org.rssowl.core.internal.persist.service.PersistenceServiceImpl; import org.rssowl.core.persist.IBookMark; import org.rssowl.core.persist.IEntity; import org.rssowl.core.persist.IFeed; import org.rssowl.core.persist.IFilterAction; import org.rssowl.core.persist.IFolder; import org.rssowl.core.persist.IFolderChild; import org.rssowl.core.persist.ILabel; import org.rssowl.core.persist.IMark; import org.rssowl.core.persist.INews; import org.rssowl.core.persist.INewsBin; import org.rssowl.core.persist.IPreference; import org.rssowl.core.persist.ISearchCondition; import org.rssowl.core.persist.ISearchFilter; import org.rssowl.core.persist.ISearchMark; import org.rssowl.core.persist.dao.DynamicDAO; import org.rssowl.core.persist.dao.IFolderDAO; import org.rssowl.core.util.CoreUtils; import org.rssowl.core.util.URIUtils; import org.rssowl.ui.internal.util.ImportUtils; import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Set; /** * Tests import of various OPML files. * * @author bpasero */ public class FileImportTest { /** * @throws Exception */ @Before public void setUp() throws Exception { ((PersistenceServiceImpl)Owl.getPersistenceService()).recreateSchemaForTests(); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused" }) public void testImport_Defaults() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(ImportUtils.class.getResourceAsStream("/default_feeds.xml")); ImportUtils.doImport(null, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertFalse(roots.isEmpty()); assertFalse(roots.iterator().next().getChildren().isEmpty()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused" }) public void testImport_Complex_All_Root() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml")); IFolder root = Owl.getModelFactory().createFolder(null, null, "Root"); IFolder target = Owl.getModelFactory().createFolder(null, root, "Target"); IFolder otherRoot = Owl.getModelFactory().createFolder(null, null, "Other Root"); DynamicDAO.save(root); DynamicDAO.save(otherRoot); ImportUtils.doImport(root, elements, true); assertTrue(root.getMarks().isEmpty()); List<IFolder> folders = root.getFolders(); folders.remove(target); validate_Complex(folders, elements); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused" }) public void testImport_Complex_All_Root_NoInitialRoots() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml")); ImportUtils.doImport(null, elements, true); assertFalse(CoreUtils.loadRootFolders().isEmpty()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused" }) public void testImport_Complex_All_Root_CheckProperties() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml")); IFolder root = Owl.getModelFactory().createFolder(null, null, "Root"); IFolder target = Owl.getModelFactory().createFolder(null, root, "Target"); IFolder otherRoot = Owl.getModelFactory().createFolder(null, null, "Other Root"); DynamicDAO.save(root); DynamicDAO.save(otherRoot); ImportUtils.doImport(root, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); for (IFolder foo : roots) { assertEmptyProperties(foo); } } private void assertEmptyProperties(IFolderChild child) { assertTrue(child.getProperties().isEmpty()); if (child instanceof IFolder) { List<IFolderChild> children = ((IFolder) child).getChildren(); for (IFolderChild foo : children) { assertEmptyProperties(foo); } } } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused" }) public void testImport_Complex_All_Target() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml")); IFolder root = Owl.getModelFactory().createFolder(null, null, "Root"); IFolder target = Owl.getModelFactory().createFolder(null, root, "Target"); IFolder otherRoot = Owl.getModelFactory().createFolder(null, null, "Other Root"); DynamicDAO.save(root); DynamicDAO.save(otherRoot); ImportUtils.doImport(target, elements, true); assertTrue(root.getMarks().isEmpty()); validate_Complex(target.getFolders(), elements); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused" }) public void testImport_Complex_All_OtherRoot() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml")); IFolder root = Owl.getModelFactory().createFolder(null, null, "Root"); IFolder target = Owl.getModelFactory().createFolder(null, root, "Target"); IFolder otherRoot = Owl.getModelFactory().createFolder(null, null, "Other Root"); DynamicDAO.save(root); DynamicDAO.save(otherRoot); ImportUtils.doImport(otherRoot, elements, true); assertTrue(otherRoot.getMarks().isEmpty()); validate_Complex(otherRoot.getFolders(), elements); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused" }) public void testImport_Complex_All_Direct_Import() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml")); ImportUtils.doImport(null, elements, true); /* Validate */ Collection<IFolder> roots = DynamicDAO.getDAO(IFolderDAO.class).loadRoots(); assertEquals(2, roots.size()); validate_Complex(roots, elements); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Complex_Bookmarks_Direct_Import() throws Exception { /* Import */ List<IBookMark> bookmarks = new ArrayList<IBookMark>(); List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml")); for (IEntity entity : elements) { fillBookmarks(entity, bookmarks); } List elementsToImport = new ArrayList(); elementsToImport.addAll(bookmarks); for (IEntity element : elements) { if (element instanceof ILabel || element instanceof ISearchFilter || element instanceof IPreference) elementsToImport.add(element); } IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); ImportUtils.doImport(root, elementsToImport, true); /* Validate */ Collection<IFolder> roots = DynamicDAO.getDAO(IFolderDAO.class).loadRoots(); assertEquals(1, roots.size()); assertEquals("Root", roots.iterator().next().getName()); root = roots.iterator().next(); assertEquals(3, root.getMarks().size()); List<IMark> marks = root.getMarks(); for (IMark mark : marks) { assertTrue(mark instanceof IBookMark); } assertEquals(0, root.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Complex_Bins_Direct_Import() throws Exception { /* Import */ List<INewsBin> bins = new ArrayList<INewsBin>(); List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml")); for (IEntity entity : elements) { fillNewsBins(entity, bins); } List elementsToImport = new ArrayList(); elementsToImport.addAll(bins); for (IEntity element : elements) { if (element instanceof ILabel || element instanceof ISearchFilter || element instanceof IPreference) elementsToImport.add(element); } IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); ImportUtils.doImport(root, elementsToImport, true); /* Validate */ Collection<IFolder> roots = DynamicDAO.getDAO(IFolderDAO.class).loadRoots(); assertEquals(1, roots.size()); assertEquals("Root", roots.iterator().next().getName()); root = roots.iterator().next(); assertEquals(3, root.getMarks().size()); List<IMark> marks = root.getMarks(); for (IMark mark : marks) { assertTrue(mark instanceof INewsBin); } assertEquals(0, root.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Complex_Searches_Direct_Import() throws Exception { /* Import */ List<ISearchMark> searches = new ArrayList<ISearchMark>(); List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml")); for (IEntity entity : elements) { fillSearches(entity, searches); } List elementsToImport = new ArrayList(); elementsToImport.addAll(searches); for (IEntity element : elements) { if (element instanceof ILabel || element instanceof ISearchFilter || element instanceof IPreference) elementsToImport.add(element); } IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); ImportUtils.doImport(root, elementsToImport, true); /* Validate */ Collection<IFolder> roots = DynamicDAO.getDAO(IFolderDAO.class).loadRoots(); assertEquals(1, roots.size()); assertEquals("Root", roots.iterator().next().getName()); root = roots.iterator().next(); assertEquals(1, root.getMarks().size()); List<IMark> marks = root.getMarks(); for (IMark mark : marks) { assertTrue(mark instanceof ISearchMark); } assertEquals(0, root.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Complex_Bookmarks_Target() throws Exception { /* Import */ List<IBookMark> bookmarks = new ArrayList<IBookMark>(); List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/complex.opml")); for (IEntity entity : elements) { fillBookmarks(entity, bookmarks); } List elementsToImport = new ArrayList(); elementsToImport.addAll(bookmarks); for (IEntity element : elements) { if (element instanceof ILabel || element instanceof ISearchFilter || element instanceof IPreference) elementsToImport.add(element); } IFolder root = Owl.getModelFactory().createFolder(null, null, "Root"); IFolder target = Owl.getModelFactory().createFolder(null, root, "Target"); DynamicDAO.save(root); ImportUtils.doImport(target, elementsToImport, true); /* Validate */ Collection<IFolder> roots = DynamicDAO.getDAO(IFolderDAO.class).loadRoots(); assertEquals(1, roots.size()); assertEquals("Root", roots.iterator().next().getName()); root = roots.iterator().next(); assertEquals(0, root.getMarks().size()); assertEquals(1, root.getFolders().size()); assertEquals(0, root.getFolders().iterator().next().getFolders().size()); assertEquals(3, root.getFolders().iterator().next().getMarks().size()); } private void fillBookmarks(IEntity entity, List<IBookMark> bookmarks) { if (entity instanceof IBookMark) bookmarks.add((IBookMark) entity); else if (entity instanceof IFolder) { IFolder folder = (IFolder) entity; List<IFolderChild> children = folder.getChildren(); for (IFolderChild child : children) { fillBookmarks(child, bookmarks); } } } private void fillNewsBins(IEntity entity, List<INewsBin> bins) { if (entity instanceof INewsBin) bins.add((INewsBin) entity); else if (entity instanceof IFolder) { IFolder folder = (IFolder) entity; List<IFolderChild> children = folder.getChildren(); for (IFolderChild child : children) { fillNewsBins(child, bins); } } } private void fillSearches(IEntity entity, List<ISearchMark> searches) { if (entity instanceof ISearchMark) searches.add((ISearchMark) entity); else if (entity instanceof IFolder) { IFolder folder = (IFolder) entity; List<IFolderChild> children = folder.getChildren(); for (IFolderChild child : children) { fillSearches(child, searches); } } } @SuppressWarnings( { "nls", "null", "unused" }) private void validate_Complex(Collection<IFolder> importedFolders, List<? extends IEntity> elements) throws Exception { IFolder firstSet = null; IFolder secondSet = null; for (IFolder set : importedFolders) { if ("First Set".equals(set.getName())) firstSet = set; else if ("Second Set".equals(set.getName())) secondSet = set; else fail("Unexpected Set"); } assertNotNull(firstSet); assertNotNull(secondSet); assertEquals(1, firstSet.getChildren().size()); IFolderChild child = firstSet.getChildren().iterator().next(); assertTrue(child instanceof IFolder); assertEquals("Folder A", child.getName()); IFolder folderA = (IFolder) child; assertEquals(1, folderA.getMarks().size()); assertEquals(1, folderA.getFolders().size()); List<IFolderChild> children = folderA.getChildren(); IBookMark rssowlMark = null; IFolder bins = null; for (IFolderChild foo : children) { if (foo instanceof IBookMark && "RSSOwl - A Java RSS / RDF / Atom Newsreader - May the owl be with you".equals(foo.getName())) rssowlMark = (IBookMark) foo; else if (foo instanceof IFolder && "Bins".equals(foo.getName())) bins = (IFolder) foo; else fail(); } assertNotNull(rssowlMark); assertNotNull(bins); assertEquals(1, bins.getChildren().size()); IFolderChild next = bins.getChildren().iterator().next(); assertEquals("Bin A", next.getName()); assertTrue(next instanceof INewsBin); INewsBin binA = (INewsBin) next; children = secondSet.getChildren(); assertEquals(4, children.size()); IFolder folderB = null; IBookMark macOsHints = null; INewsBin binC = null; ISearchMark searchA = null; for (IFolderChild foo : children) { if (foo instanceof IFolder && "Folder B".equals(foo.getName())) folderB = (IFolder) foo; else if (foo instanceof IBookMark && "MacOSXHints.com".equals(foo.getName())) macOsHints = (IBookMark) foo; else if (foo instanceof INewsBin && "Bin C".equals(foo.getName())) binC = (INewsBin) foo; else if (foo instanceof ISearchMark && "Search A".equals(foo.getName())) searchA = (ISearchMark) foo; } assertEquals(2, searchA.getSearchConditions().size()); List<ISearchCondition> conditions = searchA.getSearchConditions(); for (ISearchCondition condition : conditions) { if (condition.getField().getId() == INews.LOCATION) { List<IFolderChild> entities = CoreUtils.toEntities((Long[][]) condition.getValue()); assertEquals(1, entities.size()); assertTrue(entities.contains(folderA)); } } assertNotNull(folderB); assertNotNull(macOsHints); assertNotNull(binC); assertNotNull(searchA); children = folderB.getChildren(); IBookMark golemMark = null; IFolder bins2 = null; for (IFolderChild foo : children) { if (foo instanceof IBookMark && "Golem.de".equals(foo.getName())) golemMark = (IBookMark) foo; else if (foo instanceof IFolder && "Bins".equals(foo.getName())) bins2 = (IFolder) foo; else fail(); } assertNotNull(golemMark); assertNotNull(bins2); assertEquals(1, bins2.getChildren().size()); next = bins2.getChildren().iterator().next(); assertEquals("Bin B", next.getName()); assertTrue(next instanceof INewsBin); INewsBin binB = (INewsBin) next; assertEquals(6, count(Label.class.getName(), elements)); assertEquals(1, count(SearchFilter.class.getName(), elements)); assertTrue(count(Preference.class.getName(), elements) > 0); ISearchFilter filter = null; for (IEntity element : elements) { if (element instanceof ISearchFilter) { filter = (ISearchFilter) element; } } assertNotNull(filter); ILabel label = null; for (IEntity element : elements) { if (element instanceof ILabel && "RSSOwl".equals(((ILabel) element).getName())) { label = (ILabel) element; } } assertNotNull(label); List<IFilterAction> actions = filter.getActions(); assertEquals(2, actions.size()); for (IFilterAction action : actions) { if (MoveNewsAction.ID.equals(action.getActionId())) { Object data = action.getData(); assertTrue(data instanceof Long[]); assertEquals(binB.getId().longValue(), ((Long[]) data)[0].longValue()); } else if (LabelNewsAction.ID.equals(action.getActionId())) { Object data = action.getData(); assertEquals(label.getId().longValue(), ((Long) data).longValue()); } else fail(); } } private int count(String clazz, List<?> objs) { int count = 0; for (Object obj : objs) { if (obj.getClass().getName().equals(clazz)) count++; } return count; } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Filter() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/filter.opml")); assertEquals(1, elements.size()); assertEquals(1, count(SearchFilter.class.getName(), elements)); for (IEntity item : elements) { if ("Filter 1".equals(((ISearchFilter) item).getName())) assertEquals(0, ((ISearchFilter) item).getOrder()); } } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Orphaned_Filter() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/orphaned_filter.opml")); ImportUtils.doImport(null, elements, true); assertEquals(1, elements.size()); assertEquals(1, count(SearchFilter.class.getName(), elements)); for (IEntity item : elements) { if ("All News in 'RSSOwl News'".equals(((ISearchFilter) item).getName())) assertFalse(((ISearchFilter) item).isEnabled()); } } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Filter_Order() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); ISearchFilter filter = Owl.getModelFactory().createSearchFilter(null, null, "Filter 1"); filter.setMatchAllNews(true); filter.setEnabled(true); filter.setOrder(0); filter.addAction(Owl.getModelFactory().createFilterAction("org.rssowl.core.MarkReadNewsAction")); DynamicDAO.save(filter); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/filter.opml")); assertEquals(1, elements.size()); assertEquals(1, count(SearchFilter.class.getName(), elements)); ImportUtils.doImport(null, elements, false); Collection<ISearchFilter> filters = DynamicDAO.loadAll(ISearchFilter.class); for (ISearchFilter item : filters) { if ("Filter 1".equals(item.getName())) assertEquals(0, item.getOrder()); else assertEquals(1, item.getOrder()); } } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Labels() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/labels.opml")); assertEquals(5, elements.size()); assertEquals(5, count(Label.class.getName(), elements)); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Labels_Order_NoLabels() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/labels.opml")); assertEquals(5, elements.size()); assertEquals(5, count(Label.class.getName(), elements)); ImportUtils.doImport(null, elements, false); for (IEntity entity : elements) { ILabel label = (ILabel) entity; if ("Later".equals(label.getName())) assertEquals(0, label.getOrder()); else if ("Personal".equals(label.getName())) assertEquals(1, label.getOrder()); else if ("Important".equals(label.getName())) assertEquals(2, label.getOrder()); else if ("Work".equals(label.getName())) assertEquals(3, label.getOrder()); else if ("To Do".equals(label.getName())) assertEquals(4, label.getOrder()); } } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Labels_Order_ExistingLabels() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); ILabel fooLabel = Owl.getModelFactory().createLabel(null, "Foo"); fooLabel.setOrder(0); ILabel barLabel = Owl.getModelFactory().createLabel(null, "Bar"); barLabel.setOrder(1); DynamicDAO.save(fooLabel); DynamicDAO.save(barLabel); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/labels.opml")); assertEquals(5, elements.size()); assertEquals(5, count(Label.class.getName(), elements)); ImportUtils.doImport(null, elements, false); int orderSum = 0; Collection<ILabel> allLabels = DynamicDAO.loadAll(ILabel.class); for (ILabel label : allLabels) { orderSum += label.getOrder(); } /* Check the Sequence is consistent */ assertEquals(0 + 1 + 2 + 3 + 4 + 5 + 6, orderSum); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Labels_Order_ExistingLabels_Merge() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); ILabel laterLabel = Owl.getModelFactory().createLabel(null, "Later"); laterLabel.setOrder(1); ILabel personalLabel = Owl.getModelFactory().createLabel(null, "Personal"); personalLabel.setOrder(0); DynamicDAO.save(laterLabel); DynamicDAO.save(personalLabel); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/labels.opml")); assertEquals(5, elements.size()); assertEquals(5, count(Label.class.getName(), elements)); ImportUtils.doImport(null, elements, false); for (IEntity entity : elements) { ILabel label = (ILabel) entity; if ("Later".equals(label.getName())) assertEquals(0, label.getOrder()); else if ("Personal".equals(label.getName())) assertEquals(1, label.getOrder()); else if ("Important".equals(label.getName())) assertEquals(2, label.getOrder()); else if ("Work".equals(label.getName())) assertEquals(3, label.getOrder()); else if ("To Do".equals(label.getName())) assertEquals(4, label.getOrder()); } } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Preferences() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/preferences.opml")); assertEquals(91, elements.size()); assertEquals(91, count(Preference.class.getName(), elements)); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Labels_Filters_Preferences() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/label_filter_prefs.opml")); assertEquals(97, elements.size()); assertEquals(91, count(Preference.class.getName(), elements)); assertEquals(5, count(Label.class.getName(), elements)); assertEquals(1, count(SearchFilter.class.getName(), elements)); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Marks_All_DirectImport() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml")); ImportUtils.doImport(null, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertEquals(1, roots.size()); root = roots.iterator().next(); assertEquals(6, root.getMarks().size()); assertEquals(0, root.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Marks_All_DirectImport_NoInitialRoots() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml")); ImportUtils.doImport(null, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertEquals(1, roots.size()); IFolder root = roots.iterator().next(); assertEquals(6, root.getMarks().size()); assertEquals(0, root.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Marks_All_Target() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml")); ImportUtils.doImport(root, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertEquals(1, roots.size()); root = roots.iterator().next(); assertEquals(6, root.getMarks().size()); assertEquals(0, root.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Marks_All_SecondSet() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); IFolder otherRoot = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Other Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml")); ImportUtils.doImport(otherRoot, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertEquals(2, roots.size()); assertEquals(6, otherRoot.getMarks().size()); assertEquals(0, otherRoot.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Folders_All_DirectImport() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/folders.opml")); ImportUtils.doImport(null, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertEquals(1, roots.size()); root = roots.iterator().next(); assertEquals(0, root.getMarks().size()); assertEquals(3, root.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Folders_All_DirectImport_NoInitialRoots() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/folders.opml")); ImportUtils.doImport(null, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertEquals(1, roots.size()); IFolder root = roots.iterator().next(); assertEquals(0, root.getMarks().size()); assertEquals(3, root.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Folders_All_Target() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/folders.opml")); ImportUtils.doImport(root, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertEquals(1, roots.size()); root = roots.iterator().next(); assertEquals(0, root.getMarks().size()); assertEquals(3, root.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Folders_All_SecondSet() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); IFolder otherRoot = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Other Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/folders.opml")); ImportUtils.doImport(otherRoot, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertEquals(2, roots.size()); assertEquals(0, otherRoot.getMarks().size()); assertEquals(3, otherRoot.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Sets_Keep_Order() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/sets.opml")); ImportUtils.doImport(null, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); Iterator<IFolder> iterator = roots.iterator(); assertEquals("Set 1", iterator.next().getName()); assertEquals("Set 2", iterator.next().getName()); assertEquals("Set 3", iterator.next().getName()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Empty() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/empty.opml")); ImportUtils.doImport(null, elements, true); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Marks_DescriptionHomepage() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml")); ImportUtils.doImport(root, elements, true); root = CoreUtils.loadRootFolders().iterator().next(); List<IMark> marks = root.getMarks(); assertEquals("RSSOwl News", root.getMarks().get(0).getName()); IBookMark mark = (IBookMark) root.getMarks().get(0); IFeed feed = mark.getFeedLinkReference().resolve(); assertNotNull(feed); assertEquals("The Reader to Use!", feed.getDescription()); assertEquals(URIUtils.createURI("http://www.rssowl.org"), feed.getHomepage()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_AvoidDuplicateFeeds() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); IFeed feed = DynamicDAO.save(Owl.getModelFactory().createFeed(null, new URI("http://www.rssowl.org/newsfeed"))); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/marks.opml")); ImportUtils.doImport(root, elements, true); root = CoreUtils.loadRootFolders().iterator().next(); List<IMark> marks = root.getMarks(); assertEquals("RSSOwl News", root.getMarks().get(0).getName()); IBookMark mark = (IBookMark) root.getMarks().get(0); IFeed otherFeed = mark.getFeedLinkReference().resolve(); assertNotNull(otherFeed); assertEquals(feed, otherFeed); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Order_DirectImport() throws Exception { /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/order.opml")); ImportUtils.doImport(null, elements, true); IFolder root = CoreUtils.loadRootFolders().iterator().next(); List<IFolderChild> childs = root.getChildren(); assertEquals("RSSOwl News", childs.get(0).getName()); assertEquals("Engadget", childs.get(1).getName()); assertEquals("Search A", childs.get(2).getName()); assertEquals("MarketWatch", childs.get(3).getName()); assertEquals("New York Times", childs.get(4).getName()); assertEquals("Bins", childs.get(5).getName()); assertEquals("Techcrunch", childs.get(6).getName()); assertEquals("Bin A", childs.get(7).getName()); assertEquals("Wired Top Stories", childs.get(8).getName()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_Order_Target() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/order.opml")); ImportUtils.doImport(root, elements, true); root = CoreUtils.loadRootFolders().iterator().next(); List<IFolderChild> childs = root.getChildren(); assertEquals(1, childs.size()); childs = ((IFolder) childs.get(0)).getChildren(); assertEquals("RSSOwl News", childs.get(0).getName()); assertEquals("Engadget", childs.get(1).getName()); assertEquals("Search A", childs.get(2).getName()); assertEquals("MarketWatch", childs.get(3).getName()); assertEquals("New York Times", childs.get(4).getName()); assertEquals("Bins", childs.get(5).getName()); assertEquals("Techcrunch", childs.get(6).getName()); assertEquals("Bin A", childs.get(7).getName()); assertEquals("Wired Top Stories", childs.get(8).getName()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_DuplicateMarks_CheckExisting() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/duplicates.opml")); ImportUtils.doImport(null, elements, true); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertEquals(1, roots.size()); root = roots.iterator().next(); assertEquals(7, root.getMarks().size()); assertEquals(0, root.getFolders().size()); } /** * @throws Exception */ @Test @SuppressWarnings( { "nls", "null", "unused", "unchecked" }) public void testImport_DuplicateMarks_DoNotCheckExisting() throws Exception { IFolder root = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); /* Import */ List<? extends IEntity> elements = Owl.getInterpreter().importFrom(getClass().getResourceAsStream("/data/importer/duplicates.opml")); ImportUtils.doImport(null, elements, false); Set<IFolder> roots = CoreUtils.loadRootFolders(); assertEquals(1, roots.size()); root = roots.iterator().next(); assertEquals(7, root.getMarks().size()); assertEquals(0, root.getFolders().size()); } }