/* ********************************************************************** **
** Copyright notice **
** **
** (c) 2005-2006 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.model.NewsModel;
import org.rssowl.core.model.dao.IModelDAO;
import org.rssowl.core.model.events.ModelEvent;
import org.rssowl.core.model.events.NewsEvent;
import org.rssowl.core.model.reference.FeedReference;
import org.rssowl.core.model.types.IBookMark;
import org.rssowl.core.model.types.IEntity;
import org.rssowl.core.model.types.IFeed;
import org.rssowl.core.model.types.IFolder;
import org.rssowl.core.model.types.ILabel;
import org.rssowl.core.model.types.IModelTypesFactory;
import org.rssowl.core.model.types.INews;
import org.rssowl.ui.internal.EntityGroup;
import org.rssowl.ui.internal.EntityGroupItem;
import org.rssowl.ui.internal.util.ModelUtils;
import java.net.URL;
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 class of the UI Plugin.
*
* @author bpasero
*/
public class ModelUtilsTest {
private IModelTypesFactory fFactory;
private IModelDAO fDao;
/**
* @throws Exception
*/
@Before
public void setUp() throws Exception {
NewsModel.getDefault().getPersistenceLayer().getModelSearch().stopIndexer();
NewsModel.getDefault().getPersistenceLayer().recreateSchema();
fFactory = NewsModel.getDefault().getTypesFactory();
fDao = NewsModel.getDefault().getPersistenceLayer().getModelDAO();
}
/**
* @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 testRelax() throws Exception {
IFeed feed = fFactory.createFeed(null, new URL("http://www.link.com"));
feed = fDao.saveFeed(feed);
IFolder root1 = fFactory.createFolder(null, null, "Root 1");
IFolder subRoot = fFactory.createFolder(null, root1, "Sub Root 1");
IBookMark mark1 = fFactory.createBookMark(null, root1, feed.getLink(),
new FeedReference(feed.getId()), "Mark 1");
IBookMark mark2 = fFactory.createBookMark(null, root1, feed.getLink(),
new FeedReference(feed.getId()), "Mark 2");
IBookMark mark3 = fFactory.createBookMark(null, subRoot, feed.getLink(),
new FeedReference(feed.getId()), "Mark 3");
IBookMark mark4 = fFactory.createBookMark(null, subRoot, feed.getLink(),
new FeedReference(feed.getId()), "Mark 4");
IFolder root2 = fFactory.createFolder(null, null, "Root 2");
IBookMark mark5 = fFactory.createBookMark(null, root2, feed.getLink(),
new FeedReference(feed.getId()), "Mark 5");
IBookMark mark6 = fFactory.createBookMark(null, root2, feed.getLink(),
new FeedReference(feed.getId()), "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);
ModelUtils.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);
ModelUtils.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);
ModelUtils.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 URL("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, ModelUtils.isNewStateChange(events));
events.add(event4);
assertEquals(false, ModelUtils.isNewStateChange(events));
events.add(event5);
assertEquals(false, ModelUtils.isNewStateChange(events));
events.add(event6);
assertEquals(false, ModelUtils.isNewStateChange(events));
events.add(event2);
assertEquals(true, ModelUtils.isNewStateChange(events));
events.add(event3);
assertEquals(true, ModelUtils.isNewStateChange(events));
events.clear();
events.add(event7);
assertEquals(true, ModelUtils.isNewStateChange(events));
events.clear();
events.add(event8);
assertEquals(true, ModelUtils.isNewStateChange(events));
}
/**
* @throws Exception
*/
@Test
public void testIsReadStateChange() throws Exception {
IFeed feed = fFactory.createFeed(Long.valueOf(0L), new URL("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, ModelUtils.isReadStateChange(events));
events.add(event4);
assertEquals(true, ModelUtils.isReadStateChange(events));
events.add(event5);
assertEquals(true, ModelUtils.isReadStateChange(events));
events.clear();
events.add(event7);
assertEquals(true, ModelUtils.isReadStateChange(events));
events.clear();
events.add(event8);
assertEquals(true, ModelUtils.isReadStateChange(events));
events.clear();
events.add(event2);
assertEquals(true, ModelUtils.isReadStateChange(events));
events.clear();
events.add(event3);
assertEquals(true, ModelUtils.isReadStateChange(events));
events.clear();
events.add(event6);
assertEquals(false, ModelUtils.isReadStateChange(events));
}
/**
* @throws Exception
*/
@Test
public void testIsNewOrReadStateChange() throws Exception {
{
IFeed feed = fFactory.createFeed(Long.valueOf(0L), new URL("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, ModelUtils.isNewOrReadStateChange(events));
events.add(event4);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.add(event5);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.add(event6);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.add(event2);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.add(event3);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event7);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event8);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
}
{
IFeed feed = fFactory.createFeed(Long.valueOf(0L), new URL("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, ModelUtils.isNewOrReadStateChange(events));
events.add(event4);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.add(event5);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event7);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event8);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event2);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event3);
assertEquals(true, ModelUtils.isNewOrReadStateChange(events));
events.clear();
events.add(event6);
assertEquals(false, ModelUtils.isNewOrReadStateChange(events));
}
}
}