/* ********************************************************************** **
** 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.ui;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.junit.Before;
import org.junit.Test;
import org.rssowl.core.Owl;
import org.rssowl.core.internal.persist.BookMark;
import org.rssowl.core.internal.persist.Category;
import org.rssowl.core.internal.persist.Feed;
import org.rssowl.core.internal.persist.Folder;
import org.rssowl.core.internal.persist.Label;
import org.rssowl.core.internal.persist.News;
import org.rssowl.core.internal.persist.Person;
import org.rssowl.core.internal.persist.service.PersistenceServiceImpl;
import org.rssowl.core.persist.IAttachment;
import org.rssowl.core.persist.IBookMark;
import org.rssowl.core.persist.ICategory;
import org.rssowl.core.persist.IEntity;
import org.rssowl.core.persist.IFeed;
import org.rssowl.core.persist.IFolder;
import org.rssowl.core.persist.ILabel;
import org.rssowl.core.persist.IModelFactory;
import org.rssowl.core.persist.INews;
import org.rssowl.core.persist.INewsBin;
import org.rssowl.core.persist.IPerson;
import org.rssowl.core.persist.dao.DynamicDAO;
import org.rssowl.core.persist.event.ModelEvent;
import org.rssowl.core.persist.event.NewsEvent;
import org.rssowl.core.persist.reference.FeedLinkReference;
import org.rssowl.core.util.CoreUtils;
import org.rssowl.core.util.Pair;
import org.rssowl.ui.internal.EntityGroup;
import org.rssowl.ui.internal.EntityGroupItem;
import org.rssowl.ui.internal.util.ModelUtils;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Tests for the ModelUtils and CoreUtils class of the UI Plugin.
*
* @author bpasero
*/
public class ModelUtilsTest {
private IModelFactory fFactory;
/**
* @throws Exception
*/
@Before
public void setUp() throws Exception {
((PersistenceServiceImpl)Owl.getPersistenceService()).recreateSchemaForTests();
fFactory = Owl.getModelFactory();
}
/**
* @throws Exception
*/
@Test
public void testGetEntitiesFromSelection() throws Exception {
ILabel label1 = fFactory.createLabel(null, "Label 1");
ILabel label2 = fFactory.createLabel(null, "Label 2");
ILabel label3 = fFactory.createLabel(null, "Label 3");
EntityGroup group = new EntityGroup(1, "Group");
new EntityGroupItem(group, label2);
new EntityGroupItem(group, label3);
Object selectedItems[] = new Object[] { label1, group };
IStructuredSelection sel = new StructuredSelection(selectedItems);
List<IEntity> entities = ModelUtils.getEntities(sel);
assertEquals(3, entities.size());
int l1 = 0, l2 = 0, l3 = 0;
for (IEntity entity : entities) {
assertTrue(entity instanceof ILabel);
if ("Label 1".equals(((ILabel) entity).getName()))
l1++;
else if ("Label 2".equals(((ILabel) entity).getName()))
l2++;
else if ("Label 3".equals(((ILabel) entity).getName()))
l3++;
}
assertEquals(1, l1);
assertEquals(1, l2);
assertEquals(1, l3);
}
/**
* @throws Exception
*/
@Test
public void testGetEntitiesFromSelectionWithClass() throws Exception {
ILabel label1 = fFactory.createLabel(null, "Label 1");
ILabel label2 = fFactory.createLabel(null, "Label 2");
ILabel label3 = fFactory.createLabel(null, "Label 3");
IFeed feed1 = fFactory.createFeed(null, new URI("http://www.news.com"));
EntityGroup group = new EntityGroup(1, "Group");
new EntityGroupItem(group, label2);
new EntityGroupItem(group, label3);
Object selectedItems[] = new Object[] { label1, feed1, group };
IStructuredSelection sel = new StructuredSelection(selectedItems);
List<ILabel> labels = ModelUtils.getEntities(sel, ILabel.class);
assertEquals(3, labels.size());
int l1 = 0, l2 = 0, l3 = 0;
for (IEntity entity : labels) {
assertTrue(entity instanceof ILabel);
if ("Label 1".equals(((ILabel) entity).getName()))
l1++;
else if ("Label 2".equals(((ILabel) entity).getName()))
l2++;
else if ("Label 3".equals(((ILabel) entity).getName()))
l3++;
}
assertEquals(1, l1);
assertEquals(1, l2);
assertEquals(1, l3);
List<IFeed> feeds = ModelUtils.getEntities(sel, IFeed.class);
assertEquals(1, feeds.size());
assertEquals(feed1, feeds.get(0));
List<INews> newsList = ModelUtils.getEntities(sel, INews.class);
assertEquals(0, newsList.size());
}
/**
* @throws Exception
*/
@Test
public void testRelax() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.link.com"));
feed = DynamicDAO.save(feed);
IFolder root1 = fFactory.createFolder(null, null, "Root 1");
IFolder subRoot = fFactory.createFolder(null, root1, "Sub Root 1");
IBookMark mark1 = fFactory.createBookMark(null, root1, new FeedLinkReference(feed.getLink()), "Mark 1");
IBookMark mark2 = fFactory.createBookMark(null, root1, new FeedLinkReference(feed.getLink()), "Mark 2");
IBookMark mark3 = fFactory.createBookMark(null, subRoot, new FeedLinkReference(feed.getLink()), "Mark 3");
IBookMark mark4 = fFactory.createBookMark(null, subRoot, new FeedLinkReference(feed.getLink()), "Mark 4");
IFolder root2 = fFactory.createFolder(null, null, "Root 2");
IBookMark mark5 = fFactory.createBookMark(null, root2, new FeedLinkReference(feed.getLink()), "Mark 5");
IBookMark mark6 = fFactory.createBookMark(null, root2, new FeedLinkReference(feed.getLink()), "Mark 6");
/* Relax Root 1 */
List<IEntity> entities = new ArrayList<IEntity>();
entities.add(root1);
entities.add(root2);
entities.add(mark5);
entities.add(mark6);
entities.add(subRoot);
entities.add(mark1);
entities.add(mark2);
entities.add(mark3);
entities.add(mark4);
CoreUtils.normalize(root1, entities);
assertEquals(4, entities.size());
assertEquals(true, entities.containsAll(Arrays.asList(new IEntity[] { root1, root2, mark5, mark6 })));
/* Relax Sub Root 1 */
entities = new ArrayList<IEntity>();
entities.add(root1);
entities.add(root2);
entities.add(mark5);
entities.add(mark6);
entities.add(subRoot);
entities.add(mark1);
entities.add(mark2);
entities.add(mark3);
entities.add(mark4);
CoreUtils.normalize(subRoot, entities);
assertEquals(7, entities.size());
assertEquals(true, entities.containsAll(Arrays.asList(new IEntity[] { root1, root2, subRoot, mark1, mark2, mark5, mark6 })));
/* Relax Root 2 */
entities = new ArrayList<IEntity>();
entities.add(root1);
entities.add(root2);
entities.add(mark5);
entities.add(mark6);
entities.add(subRoot);
entities.add(mark1);
entities.add(mark2);
entities.add(mark3);
entities.add(mark4);
CoreUtils.normalize(root2, entities);
assertEquals(7, entities.size());
assertEquals(true, entities.containsAll(Arrays.asList(new IEntity[] { root1, root2, subRoot, mark1, mark2, mark3, mark4 })));
}
/**
* @throws Exception
*/
@Test
public void testIsNewsStateChange() throws Exception {
IFeed feed = fFactory.createFeed(Long.valueOf(0L), new URI("http://www.rssowl.org"));
Set<ModelEvent> events = new HashSet<ModelEvent>();
INews newNews = fFactory.createNews(0L, feed, new Date());
newNews.setState(INews.State.NEW);
INews unreadNews = fFactory.createNews(1L, feed, new Date());
unreadNews.setState(INews.State.UNREAD);
INews readNews = fFactory.createNews(2L, feed, new Date());
readNews.setState(INews.State.READ);
INews hiddenNews = fFactory.createNews(3L, feed, new Date());
hiddenNews.setState(INews.State.HIDDEN);
INews deletedNews = fFactory.createNews(4L, feed, new Date());
deletedNews.setState(INews.State.DELETED);
INews readNews2 = fFactory.createNews(5L, feed, new Date());
readNews2.setState(INews.State.READ);
INews unreadNews2 = fFactory.createNews(6L, feed, new Date());
unreadNews2.setState(INews.State.UNREAD);
INews hiddenNews2 = fFactory.createNews(7L, feed, new Date());
hiddenNews2.setState(INews.State.HIDDEN);
NewsEvent event1 = new NewsEvent(newNews, newNews, true);
NewsEvent event2 = new NewsEvent(newNews, unreadNews, true);
NewsEvent event3 = new NewsEvent(newNews, readNews, true);
NewsEvent event4 = new NewsEvent(unreadNews, readNews2, true);
NewsEvent event5 = new NewsEvent(unreadNews, unreadNews2, true);
NewsEvent event6 = new NewsEvent(hiddenNews, hiddenNews, true);
NewsEvent event7 = new NewsEvent(newNews, hiddenNews2, true);
NewsEvent event8 = new NewsEvent(newNews, deletedNews, true);
events.add(event1);
assertEquals(false, CoreUtils.isNewStateChange(events));
events.add(event4);
assertEquals(false, CoreUtils.isNewStateChange(events));
events.add(event5);
assertEquals(false, CoreUtils.isNewStateChange(events));
events.add(event6);
assertEquals(false, CoreUtils.isNewStateChange(events));
events.add(event2);
assertEquals(true, CoreUtils.isNewStateChange(events));
events.add(event3);
assertEquals(true, CoreUtils.isNewStateChange(events));
events.clear();
events.add(event7);
assertEquals(true, CoreUtils.isNewStateChange(events));
events.clear();
events.add(event8);
assertEquals(true, CoreUtils.isNewStateChange(events));
}
/**
* @throws Exception
*/
@Test
public void testHasBecomeUnread() throws Exception {
IFeed feed = fFactory.createFeed(Long.valueOf(0L), new URI("http://www.rssowl.org"));
Set<ModelEvent> events = new HashSet<ModelEvent>();
INews newNews = fFactory.createNews(0L, feed, new Date());
newNews.setState(INews.State.NEW);
INews unreadNews = fFactory.createNews(1L, feed, new Date());
unreadNews.setState(INews.State.UNREAD);
INews readNews = fFactory.createNews(2L, feed, new Date());
readNews.setState(INews.State.READ);
INews hiddenNews = fFactory.createNews(3L, feed, new Date());
hiddenNews.setState(INews.State.HIDDEN);
INews deletedNews = fFactory.createNews(4L, feed, new Date());
deletedNews.setState(INews.State.DELETED);
INews readNews2 = fFactory.createNews(5L, feed, new Date());
readNews2.setState(INews.State.READ);
INews unreadNews2 = fFactory.createNews(6L, feed, new Date());
unreadNews2.setState(INews.State.UNREAD);
INews hiddenNews2 = fFactory.createNews(7L, feed, new Date());
hiddenNews2.setState(INews.State.HIDDEN);
NewsEvent event1 = new NewsEvent(newNews, newNews, true);
NewsEvent event2 = new NewsEvent(newNews, unreadNews, true);
NewsEvent event3 = new NewsEvent(newNews, readNews, true);
NewsEvent event4 = new NewsEvent(unreadNews, readNews2, true);
NewsEvent event5 = new NewsEvent(unreadNews, unreadNews2, true);
NewsEvent event6 = new NewsEvent(hiddenNews, hiddenNews, true);
NewsEvent event7 = new NewsEvent(newNews, hiddenNews2, true);
NewsEvent event8 = new NewsEvent(newNews, deletedNews, true);
NewsEvent event9 = new NewsEvent(readNews, newNews, true);
NewsEvent event10 = new NewsEvent(hiddenNews, unreadNews, true);
NewsEvent event11 = new NewsEvent(readNews, unreadNews, true);
events.add(event1);
assertEquals(false, CoreUtils.changedFromReadToUnread(events));
events.add(event4);
assertEquals(false, CoreUtils.changedFromReadToUnread(events));
events.add(event5);
assertEquals(false, CoreUtils.changedFromReadToUnread(events));
events.add(event6);
assertEquals(false, CoreUtils.changedFromReadToUnread(events));
events.add(event2);
assertEquals(false, CoreUtils.changedFromReadToUnread(events));
events.add(event3);
assertEquals(false, CoreUtils.changedFromReadToUnread(events));
events.clear();
events.add(event7);
assertEquals(false, CoreUtils.changedFromReadToUnread(events));
events.clear();
events.add(event8);
assertEquals(false, CoreUtils.changedFromReadToUnread(events));
events.clear();
events.add(event9);
assertEquals(true, CoreUtils.changedFromReadToUnread(events));
events.clear();
events.add(event10);
assertEquals(false, CoreUtils.changedFromReadToUnread(events));
events.clear();
events.add(event11);
assertEquals(true, CoreUtils.changedFromReadToUnread(events));
}
/**
* @throws Exception
*/
@Test
public void testIsReadStateChange() throws Exception {
IFeed feed = fFactory.createFeed(Long.valueOf(0L), new URI("http://www.rssowl.org"));
Set<ModelEvent> events = new HashSet<ModelEvent>();
INews newNews = fFactory.createNews(0L, feed, new Date());
newNews.setState(INews.State.NEW);
INews unreadNews = fFactory.createNews(1L, feed, new Date());
unreadNews.setState(INews.State.UNREAD);
INews readNews = fFactory.createNews(2L, feed, new Date());
readNews.setState(INews.State.READ);
INews hiddenNews = fFactory.createNews(3L, feed, new Date());
hiddenNews.setState(INews.State.HIDDEN);
INews deletedNews = fFactory.createNews(4L, feed, new Date());
deletedNews.setState(INews.State.DELETED);
INews updatedNews = fFactory.createNews(5L, feed, new Date());
updatedNews.setState(INews.State.UPDATED);
INews unreadNews2 = fFactory.createNews(6L, feed, new Date());
unreadNews2.setState(INews.State.UNREAD);
INews hiddenNews2 = fFactory.createNews(7L, feed, new Date());
hiddenNews2.setState(INews.State.HIDDEN);
NewsEvent event1 = new NewsEvent(newNews, newNews, true);
NewsEvent event2 = new NewsEvent(deletedNews, unreadNews, true);
NewsEvent event3 = new NewsEvent(hiddenNews, updatedNews, true);
NewsEvent event4 = new NewsEvent(unreadNews, readNews, true);
NewsEvent event5 = new NewsEvent(unreadNews, unreadNews2, true);
NewsEvent event6 = new NewsEvent(hiddenNews, hiddenNews, true);
NewsEvent event7 = new NewsEvent(newNews, hiddenNews2, true);
NewsEvent event8 = new NewsEvent(newNews, deletedNews, true);
events.add(event1);
assertEquals(false, CoreUtils.isReadStateChange(events));
events.add(event4);
assertEquals(true, CoreUtils.isReadStateChange(events));
events.add(event5);
assertEquals(true, CoreUtils.isReadStateChange(events));
events.clear();
events.add(event7);
assertEquals(true, CoreUtils.isReadStateChange(events));
events.clear();
events.add(event8);
assertEquals(true, CoreUtils.isReadStateChange(events));
events.clear();
events.add(event2);
assertEquals(true, CoreUtils.isReadStateChange(events));
events.clear();
events.add(event3);
assertEquals(true, CoreUtils.isReadStateChange(events));
events.clear();
events.add(event6);
assertEquals(false, CoreUtils.isReadStateChange(events));
}
/**
* @throws Exception
*/
@Test
public void testIsNewOrReadStateChange() throws Exception {
{
IFeed feed = fFactory.createFeed(Long.valueOf(0L), new URI("http://www.rssowl.org"));
Set<ModelEvent> events = new HashSet<ModelEvent>();
INews newNews = fFactory.createNews(0L, feed, new Date());
newNews.setState(INews.State.NEW);
INews unreadNews = fFactory.createNews(1L, feed, new Date());
unreadNews.setState(INews.State.UNREAD);
INews readNews = fFactory.createNews(2L, feed, new Date());
readNews.setState(INews.State.READ);
INews hiddenNews = fFactory.createNews(3L, feed, new Date());
hiddenNews.setState(INews.State.HIDDEN);
INews deletedNews = fFactory.createNews(4L, feed, new Date());
deletedNews.setState(INews.State.DELETED);
INews readNews2 = fFactory.createNews(5L, feed, new Date());
readNews2.setState(INews.State.READ);
INews unreadNews2 = fFactory.createNews(6L, feed, new Date());
unreadNews2.setState(INews.State.UNREAD);
INews hiddenNews2 = fFactory.createNews(7L, feed, new Date());
hiddenNews2.setState(INews.State.HIDDEN);
NewsEvent event1 = new NewsEvent(newNews, newNews, true);
NewsEvent event2 = new NewsEvent(newNews, unreadNews, true);
NewsEvent event3 = new NewsEvent(newNews, readNews, true);
NewsEvent event4 = new NewsEvent(unreadNews, readNews2, true);
NewsEvent event5 = new NewsEvent(unreadNews, unreadNews2, true);
NewsEvent event6 = new NewsEvent(hiddenNews, hiddenNews, true);
NewsEvent event7 = new NewsEvent(newNews, hiddenNews2, true);
NewsEvent event8 = new NewsEvent(newNews, deletedNews, true);
events.add(event1);
assertEquals(false, CoreUtils.isNewOrReadStateChange(events));
events.add(event4);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.add(event5);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.add(event6);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.add(event2);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.add(event3);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event7);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event8);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
}
{
IFeed feed = fFactory.createFeed(Long.valueOf(0L), new URI("http://www.rssowl.org"));
Set<ModelEvent> events = new HashSet<ModelEvent>();
INews newNews = fFactory.createNews(0L, feed, new Date());
newNews.setState(INews.State.NEW);
INews unreadNews = fFactory.createNews(1L, feed, new Date());
unreadNews.setState(INews.State.UNREAD);
INews readNews = fFactory.createNews(2L, feed, new Date());
readNews.setState(INews.State.READ);
INews hiddenNews = fFactory.createNews(3L, feed, new Date());
hiddenNews.setState(INews.State.HIDDEN);
INews deletedNews = fFactory.createNews(4L, feed, new Date());
deletedNews.setState(INews.State.DELETED);
INews updatedNews = fFactory.createNews(5L, feed, new Date());
updatedNews.setState(INews.State.UPDATED);
INews unreadNews2 = fFactory.createNews(6L, feed, new Date());
unreadNews2.setState(INews.State.UNREAD);
INews hiddenNews2 = fFactory.createNews(7L, feed, new Date());
hiddenNews2.setState(INews.State.HIDDEN);
NewsEvent event1 = new NewsEvent(newNews, newNews, true);
NewsEvent event2 = new NewsEvent(deletedNews, unreadNews, true);
NewsEvent event3 = new NewsEvent(hiddenNews, updatedNews, true);
NewsEvent event4 = new NewsEvent(unreadNews, readNews, true);
NewsEvent event5 = new NewsEvent(unreadNews, unreadNews2, true);
NewsEvent event6 = new NewsEvent(hiddenNews, hiddenNews, true);
NewsEvent event7 = new NewsEvent(newNews, hiddenNews2, true);
NewsEvent event8 = new NewsEvent(newNews, deletedNews, true);
events.add(event1);
assertEquals(false, CoreUtils.isNewOrReadStateChange(events));
events.add(event4);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.add(event5);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event7);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event8);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event2);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event3);
assertEquals(true, CoreUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event6);
assertEquals(false, CoreUtils.isNewOrReadStateChange(events));
}
}
/**
* @throws Exception
*/
@Test
public void testIsDateChange() throws Exception {
Date now = new Date();
IFeed feed = new Feed(new URI("http://www.link.com"));
INews news1 = new News(null, feed, new Date());
news1.setPublishDate(now);
INews news2 = new News(null, feed, new Date());
news2.setPublishDate(now);
INews news3 = new News(null, feed, new Date());
news3.setPublishDate(new Date(System.currentTimeMillis() + 1000));
feed.addNews(news1);
feed.addNews(news2);
feed.addNews(news3);
NewsEvent event1 = new NewsEvent(news1, news2, true);
assertEquals(false, CoreUtils.isDateChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news1, news3, true);
assertEquals(true, CoreUtils.isDateChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
}
/**
* @throws Exception
*/
@Test
public void testIsPublishedDateChange() throws Exception {
Date now = new Date();
IFeed feed = new Feed(new URI("http://www.link.com"));
INews news1 = new News(null, feed, new Date());
news1.setPublishDate(now);
INews news2 = new News(null, feed, new Date());
news2.setPublishDate(now);
INews news3 = new News(null, feed, new Date());
news3.setPublishDate(new Date(System.currentTimeMillis() + 1000));
feed.addNews(news1);
feed.addNews(news2);
feed.addNews(news3);
NewsEvent event1 = new NewsEvent(news1, news2, true);
assertEquals(false, CoreUtils.isPublishedDateChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news1, news3, true);
assertEquals(true, CoreUtils.isPublishedDateChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
}
/**
* @throws Exception
*/
@Test
public void testIsModifiedDateChange() throws Exception {
Date now = new Date();
IFeed feed = new Feed(new URI("http://www.link.com"));
INews news1 = new News(null, feed, new Date());
news1.setModifiedDate(now);
INews news2 = new News(null, feed, new Date());
news2.setModifiedDate(now);
INews news3 = new News(null, feed, new Date());
news3.setModifiedDate(new Date(System.currentTimeMillis() + 1000));
feed.addNews(news1);
feed.addNews(news2);
feed.addNews(news3);
NewsEvent event1 = new NewsEvent(news1, news2, true);
assertEquals(false, CoreUtils.isModifiedDateChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news1, news3, true);
assertEquals(true, CoreUtils.isModifiedDateChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
}
/**
* @throws Exception
*/
@Test
public void testIsLocationChange() throws Exception {
IFolder root = fFactory.createFolder(null, null, "Root");
INewsBin bin1 = fFactory.createNewsBin(null, root, "A");
INewsBin bin2 = fFactory.createNewsBin(null, root, "B");
DynamicDAO.save(root);
IFeed feed = new Feed(new URI("http://www.link.com"));
INews news1 = new News(null, feed, new Date());
feed.addNews(news1);
INews news1Bin = fFactory.createNews(news1, bin1);
INews news2Bin = fFactory.createNews(news1, bin2);
NewsEvent event1 = new NewsEvent(news1, news1Bin, true);
assertEquals(false, CoreUtils.isLocationChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news1Bin, news2Bin, true);
assertEquals(true, CoreUtils.isLocationChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
}
/**
* @throws Exception
*/
@Test
public void testIsAuthorChange() throws Exception {
IPerson author1 = new Person((Long) null);
author1.setName("Foo");
IPerson author2 = new Person((Long) null);
author2.setName("Bar");
IFeed feed = new Feed(new URI("http://www.link.com"));
INews news1 = new News(null, feed, new Date());
news1.setAuthor(author1);
INews news2 = new News(null, feed, new Date());
news2.setAuthor(author1);
INews news3 = new News(null, feed, new Date());
news3.setPublishDate(new Date(System.currentTimeMillis() + 1000));
news3.setAuthor(author2);
INews news4 = new News(null, feed, new Date());
feed.addNews(news1);
feed.addNews(news2);
feed.addNews(news3);
feed.addNews(news4);
NewsEvent event1 = new NewsEvent(news1, news2, true);
assertEquals(false, CoreUtils.isAuthorChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news1, news3, true);
assertEquals(true, CoreUtils.isAuthorChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news1, news4, true);
assertEquals(true, CoreUtils.isAuthorChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news4, news1, true);
assertEquals(true, CoreUtils.isAuthorChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
}
/**
* @throws Exception
*/
@Test
public void testIsCategoryChange() throws Exception {
ICategory cat1 = new Category();
cat1.setName("Cat1");
ICategory cat2 = new Category();
cat2.setName("Cat2");
ICategory cat3 = new Category();
cat3.setName("Cat3");
IFeed feed = new Feed(new URI("http://www.link.com"));
INews news1 = new News(null, feed, new Date());
news1.addCategory(cat1);
INews news2 = new News(null, feed, new Date());
news2.addCategory(cat1);
INews news3 = new News(null, feed, new Date());
news3.setPublishDate(new Date(System.currentTimeMillis() + 1000));
news3.addCategory(cat2);
INews news4 = new News(null, feed, new Date());
news4.addCategory(cat1);
news4.addCategory(cat2);
INews news5 = new News(null, feed, new Date());
INews news6 = new News(null, feed, new Date());
news6.addCategory(cat1);
news6.addCategory(cat2);
news6.addCategory(cat3);
INews news7 = new News(null, feed, new Date());
news7.addCategory(cat1);
news7.addCategory(cat3);
feed.addNews(news1);
feed.addNews(news2);
feed.addNews(news3);
feed.addNews(news4);
feed.addNews(news5);
feed.addNews(news6);
feed.addNews(news7);
NewsEvent event1 = new NewsEvent(news1, news2, true);
assertEquals(false, CoreUtils.isCategoryChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news1, news3, true);
assertEquals(true, CoreUtils.isCategoryChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news1, news4, true);
assertEquals(true, CoreUtils.isCategoryChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news4, news1, true);
assertEquals(true, CoreUtils.isCategoryChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news5, news6, true);
assertEquals(true, CoreUtils.isCategoryChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news6, news5, true);
assertEquals(true, CoreUtils.isCategoryChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news7, news4, true);
assertEquals(true, CoreUtils.isCategoryChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
event1 = new NewsEvent(news4, news7, true);
assertEquals(true, CoreUtils.isCategoryChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event1 }))));
}
/**
* @throws Exception
*/
@Test
public void testIsLabelChangeSingle() throws Exception {
ILabel label1 = new Label(null, "Label1");
ILabel label2 = new Label(null, "Label2");
IFeed feed = new Feed(new URI("http://www.link.com"));
INews news1 = new News(null, feed, new Date());
news1.addLabel(label1);
INews news2 = new News(null, feed, new Date());
news2.addLabel(label1);
INews news3 = new News(null, feed, new Date());
news3.setPublishDate(new Date(System.currentTimeMillis() + 1000));
news3.addLabel(label2);
INews news4 = new News(null, feed, new Date());
feed.addNews(news1);
feed.addNews(news2);
feed.addNews(news3);
feed.addNews(news4);
NewsEvent event = new NewsEvent(news1, news2, true);
assertEquals(false, CoreUtils.isLabelChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event }))));
event = new NewsEvent(news1, news3, true);
assertEquals(true, CoreUtils.isLabelChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event }))));
event = new NewsEvent(news1, news4, true);
assertEquals(true, CoreUtils.isLabelChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event }))));
event = new NewsEvent(news4, news1, true);
assertEquals(true, CoreUtils.isLabelChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event }))));
}
/**
* @throws Exception
*/
@Test
public void testIsLabelChangeMulti() throws Exception {
ILabel label1 = new Label(null, "Label1");
ILabel label2 = new Label(null, "Label2");
ILabel label3 = new Label(null, "Label3");
IFeed feed = new Feed(new URI("http://www.link.com"));
INews news1 = new News(null, feed, new Date());
news1.addLabel(label1);
news1.addLabel(label3);
INews news2 = new News(null, feed, new Date());
news2.addLabel(label1);
INews news3 = new News(null, feed, new Date());
news3.setPublishDate(new Date(System.currentTimeMillis() + 1000));
news3.addLabel(label1);
news3.addLabel(label2);
INews news4 = new News(null, feed, new Date());
feed.addNews(news1);
feed.addNews(news2);
feed.addNews(news3);
feed.addNews(news4);
NewsEvent event = new NewsEvent(news1, news2, true);
assertEquals(true, CoreUtils.isLabelChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event }))));
event = new NewsEvent(news1, news3, true);
assertEquals(true, CoreUtils.isLabelChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event }))));
event = new NewsEvent(news1, news4, true);
assertEquals(true, CoreUtils.isLabelChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event }))));
event = new NewsEvent(news4, news1, true);
assertEquals(true, CoreUtils.isLabelChange(new HashSet<NewsEvent>(Arrays.asList(new NewsEvent[] { event }))));
}
/**
* @throws Exception
*/
@Test
public void testHasChildRelation() throws Exception {
IFolder root = new Folder(null, null, "Root");
FeedLinkReference feed = new FeedLinkReference(new URI("http://www.link.com"));
/* Sub Root 1 */
IFolder subRootFolder1 = new Folder(null, root, "SubRootFolder1");
root.addFolder(subRootFolder1, null, false);
IFolder subRoot1Folder1 = new Folder(null, subRootFolder1, "SubRoot1Folder1");
subRootFolder1.addFolder(subRoot1Folder1, null, false);
IFolder subRoot11Folder1 = new Folder(null, subRoot1Folder1, "SubRoot11Folder1");
subRoot1Folder1.addFolder(subRoot11Folder1, null, false);
IBookMark subRoot11Mark1 = new BookMark(null, subRoot1Folder1, feed, "SubRoot11Mark1");
subRoot1Folder1.addMark(subRoot11Mark1, null, false);
IBookMark subRoot1Mark1 = new BookMark(null, subRootFolder1, feed, "SubRoot1Mark1");
subRootFolder1.addMark(subRoot1Mark1, null, false);
IBookMark subRoot1Mark2 = new BookMark(null, subRootFolder1, feed, "SubRoot1Mark2");
subRootFolder1.addMark(subRoot1Mark2, null, false);
/* Begin Testing */
assertEquals(true, CoreUtils.hasChildRelation(root, subRootFolder1));
assertEquals(true, CoreUtils.hasChildRelation(root, subRoot1Folder1));
assertEquals(true, CoreUtils.hasChildRelation(root, subRoot11Folder1));
assertEquals(true, CoreUtils.hasChildRelation(root, subRoot11Mark1));
assertEquals(true, CoreUtils.hasChildRelation(root, subRoot1Mark1));
assertEquals(true, CoreUtils.hasChildRelation(root, subRoot1Mark2));
assertEquals(true, CoreUtils.hasChildRelation(subRootFolder1, subRoot11Folder1));
assertEquals(true, CoreUtils.hasChildRelation(subRootFolder1, subRoot11Mark1));
assertEquals(true, CoreUtils.hasChildRelation(subRootFolder1, subRoot1Mark1));
assertEquals(true, CoreUtils.hasChildRelation(subRootFolder1, subRoot1Mark2));
assertEquals(false, CoreUtils.hasChildRelation(subRootFolder1, root));
assertEquals(false, CoreUtils.hasChildRelation(subRoot11Folder1, root));
assertEquals(false, CoreUtils.hasChildRelation(subRoot11Folder1, root));
assertEquals(false, CoreUtils.hasChildRelation(subRoot11Folder1, subRoot1Mark2));
}
/**
* @throws Exception
*/
@Test
public void testNormalizeTitle() throws Exception {
String title = "Hello World";
assertEquals(title, CoreUtils.normalizeTitle(title));
title = "";
assertEquals("", CoreUtils.normalizeTitle(title));
title = null;
assertEquals(null, CoreUtils.normalizeTitle(title));
title = "Re: ";
assertEquals("", CoreUtils.normalizeTitle(title));
title = "Re[33]:";
assertEquals("", CoreUtils.normalizeTitle(title));
title = "Re Hello World";
assertEquals("Re Hello World", CoreUtils.normalizeTitle(title));
title = "Re:Hello World";
assertEquals("Hello World", CoreUtils.normalizeTitle(title));
title = "Re: Hello World";
assertEquals("Hello World", CoreUtils.normalizeTitle(title));
title = "Re: Re: Hello World";
assertEquals("Hello World", CoreUtils.normalizeTitle(title));
title = "Re:Re: Hello World";
assertEquals("Hello World", CoreUtils.normalizeTitle(title));
title = "Re:Re: Hello World Re:";
assertEquals("Hello World Re:", CoreUtils.normalizeTitle(title));
title = "Re: Hello World (re from)";
assertEquals("Hello World (re from)", CoreUtils.normalizeTitle(title));
title = "Re(33): Hello World";
assertEquals("Hello World", CoreUtils.normalizeTitle(title));
title = "Re[33]: Hello World";
assertEquals("Hello World", CoreUtils.normalizeTitle(title));
title = "Re(33: Hello World";
assertEquals("Re(33: Hello World", CoreUtils.normalizeTitle(title));
title = "Re[33: Hello World";
assertEquals("Re[33: Hello World", CoreUtils.normalizeTitle(title));
title = "Re(33): Hello World[]";
assertEquals("Hello World[]", CoreUtils.normalizeTitle(title));
title = "Re[33]: Hello World()";
assertEquals("Hello World()", CoreUtils.normalizeTitle(title));
title = "Re(33): Hello World(3)";
assertEquals("Hello World(3)", CoreUtils.normalizeTitle(title));
title = "Re[33]: Hello World[3]";
assertEquals("Hello World[3]", CoreUtils.normalizeTitle(title));
}
/**
* @throws Exception
*/
@Test
public void testGetLabelsForAll() throws Exception {
ILabel label1 = DynamicDAO.save(fFactory.createLabel(null, "Foo"));
ILabel label2 = DynamicDAO.save(fFactory.createLabel(null, "Bar"));
IFeed feed = fFactory.createFeed(null, new URI("feed"));
INews news1 = fFactory.createNews(null, feed, new Date());
INews news2 = fFactory.createNews(null, feed, new Date());
INews news3 = fFactory.createNews(null, feed, new Date());
news1.addLabel(label1);
news1.addLabel(label2);
news2.addLabel(label1);
news3.addLabel(label2);
Set<ILabel> labels = ModelUtils.getLabelsForAll(new StructuredSelection(news1));
assertEquals(2, labels.size());
labels = ModelUtils.getLabelsForAll(new StructuredSelection(new Object[] { news1, news2 }));
assertEquals(1, labels.size());
labels = ModelUtils.getLabelsForAll(new StructuredSelection(new Object[] { news1, news2, news3 }));
assertEquals(0, labels.size());
}
/**
* @throws Exception
*/
@Test
public void testGetAttachmentLinks() throws Exception {
IFeed feed = fFactory.createFeed(null, new URI("http://www.rssowl.org"));
INews news1 = fFactory.createNews(null, feed, new Date());
INews news2 = fFactory.createNews(null, feed, new Date());
IAttachment att = fFactory.createAttachment(null, news2);
att = fFactory.createAttachment(null, news2);
att.setLink(new URI("foobar"));
INews news3 = fFactory.createNews(null, feed, new Date());
att = fFactory.createAttachment(null, news3);
att.setLink(new URI("http://www.rssowl.org/download1.mp3"));
att = fFactory.createAttachment(null, news3);
att.setLink(new URI("/download2.mp3"));
att = fFactory.createAttachment(null, news3);
att.setLink(new URI("download3.mp3"));
List<INews> news = new ArrayList<INews>();
news.add(news1);
news.add(news2);
news.add(news3);
DynamicDAO.save(feed);
List<Pair<IAttachment, URI>> links = ModelUtils.getAttachmentLinks(new StructuredSelection(news));
assertEquals(4, links.size());
List<URI> uris = new ArrayList<URI>();
for (Pair<IAttachment, URI> pair : links) {
uris.add(pair.getSecond());
}
assertTrue(uris.contains(new URI("http://www.rssowl.org/foobar")));
assertTrue(uris.contains(new URI("http://www.rssowl.org/download1.mp3")));
assertTrue(uris.contains(new URI("http://www.rssowl.org/download2.mp3")));
assertTrue(uris.contains(new URI("http://www.rssowl.org/download3.mp3")));
}
/**
* @throws Exception
*/
@Test
public void testCountNews() throws Exception {
IFeed feed = fFactory.createFeed(Long.valueOf(0L), new URI("http://www.rssowl.org"));
INews newNews = fFactory.createNews(null, feed, new Date());
newNews.setState(INews.State.NEW);
INews unreadNews = fFactory.createNews(null, feed, new Date());
unreadNews.setState(INews.State.UNREAD);
INews readNews = fFactory.createNews(null, feed, new Date());
readNews.setState(INews.State.READ);
DynamicDAO.save(feed);
IFolder folder = fFactory.createFolder(null, null, "Folder");
IBookMark bm = fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "Bookmark");
DynamicDAO.save(folder);
/* Wait for Indexer */
waitForIndexer();
assertEquals(3, ModelUtils.countNews(bm));
}
private void waitForIndexer() throws InterruptedException {
Thread.sleep(500);
}
}