Package org.rssowl.core.tests.ui

Source Code of org.rssowl.core.tests.ui.ModelUtilsTest

/*   **********************************************************************  **
**   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));
    }
  }
}
TOP

Related Classes of org.rssowl.core.tests.ui.ModelUtilsTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.