Package org.rssowl.core.tests.ui

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

/*   **********************************************************************  **
**   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.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.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 {
    Owl.getPersistenceService().recreateSchema();
    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 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<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news1, news3, true);
    assertEquals(true, CoreUtils.isDateChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { 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<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news1, news3, true);
    assertEquals(true, CoreUtils.isAuthorChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news1, news4, true);
    assertEquals(true, CoreUtils.isAuthorChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news4, news1, true);
    assertEquals(true, CoreUtils.isAuthorChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { 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<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news1, news3, true);
    assertEquals(true, CoreUtils.isCategoryChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news1, news4, true);
    assertEquals(true, CoreUtils.isCategoryChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news4, news1, true);
    assertEquals(true, CoreUtils.isCategoryChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news5, news6, true);
    assertEquals(true, CoreUtils.isCategoryChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news6, news5, true);
    assertEquals(true, CoreUtils.isCategoryChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news7, news4, true);
    assertEquals(true, CoreUtils.isCategoryChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event1 }))));

    event1 = new NewsEvent(news4, news7, true);
    assertEquals(true, CoreUtils.isCategoryChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { 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<ModelEvent>(Arrays.asList(new ModelEvent[] { event }))));

    event = new NewsEvent(news1, news3, true);
    assertEquals(true, CoreUtils.isLabelChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event }))));

    event = new NewsEvent(news1, news4, true);
    assertEquals(true, CoreUtils.isLabelChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event }))));

    event = new NewsEvent(news4, news1, true);
    assertEquals(true, CoreUtils.isLabelChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { 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<ModelEvent>(Arrays.asList(new ModelEvent[] { event }))));

    event = new NewsEvent(news1, news3, true);
    assertEquals(true, CoreUtils.isLabelChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event }))));

    event = new NewsEvent(news1, news4, true);
    assertEquals(true, CoreUtils.isLabelChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { event }))));

    event = new NewsEvent(news4, news1, true);
    assertEquals(true, CoreUtils.isLabelChange(new HashSet<ModelEvent>(Arrays.asList(new ModelEvent[] { 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")));
  }
}
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.