IFeed feed = new Feed(new URI("inmemory://rss_2_0.xml")); //$NON-NLS-1$
feed = DynamicDAO.save(feed);
assertEquals(0, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
FeedReference feedRef = new FeedReference(feed.getId());
IBookMark bookmark = createBookMark(feed);
final int addedCounter[] = new int[] { 0 };
final int updatedCounter[] = new int[] { 0 };
newsListener = new NewsListener() {
public void entitiesAdded(Set<NewsEvent> events) {
addedCounter[0] += events.size();
}
public void entitiesDeleted(Set<NewsEvent> events) {
fail("Did not expect this Event");
}
public void entitiesUpdated(Set<NewsEvent> events) {
updatedCounter[0] += events.size();
}
};
DynamicDAO.addEntityListener(INews.class, newsListener);
long now = System.currentTimeMillis();
/* First Reload */
InMemoryProtocolHandler.FEED = generateFeed("Title", "http://www.link.de", "http://www.guid.de", fDateFormat.format(now));
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(1, getUnreadCount(feed));
assertEquals(1, getNewCount(feed));
assertEquals(INews.State.NEW, feedRef.resolve().getNews().get(0).getState());
/* Set to Unread */
fNewsDao.setState(feedRef.resolve().getNews(), INews.State.UNREAD, true, false);
/* Second Reload with updated Title */
InMemoryProtocolHandler.FEED = generateFeed("Title *updated*", "http://www.link.de", "http://www.guid.de", fDateFormat.format(now));
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(1, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.UPDATED, feedRef.resolve().getNews().get(0).getState());
/* Set to Read and Reload */
fNewsDao.setState(feedRef.resolve().getNews(), INews.State.READ, true, false);
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(0, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.READ, feedRef.resolve().getNews().get(0).getState());
/* Fourth Reload with updated Link */
InMemoryProtocolHandler.FEED = generateFeed("Title *updated*", "http://www.link_updated.de", "http://www.guid.de", fDateFormat.format(now));
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(0, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.READ, feedRef.resolve().getNews().get(0).getState());
/* Set to Read and Reload */
fNewsDao.setState(feedRef.resolve().getNews(), INews.State.READ, true, false);
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(0, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.READ, feedRef.resolve().getNews().get(0).getState());
/* Reload with updated description */
String updatedDescription = "updatedDescription";
InMemoryProtocolHandler.FEED = generateFeed("Title *updated*", "http://www.link_updated.de", "http://www.guid.de", fDateFormat.format(now), updatedDescription);
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(0, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.READ, feedRef.resolve().getNews().get(0).getState());
/* Set to Read and Reload */
fNewsDao.setState(feedRef.resolve().getNews(), INews.State.READ, true, false);
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(0, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.READ, feedRef.resolve().getNews().get(0).getState());
/* Fifth Reload with updated Title and Link */
InMemoryProtocolHandler.FEED = generateFeed("Title *updated #2*", "http://www.link_updated_again.de", "http://www.guid.de", fDateFormat.format(now), updatedDescription);
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(1, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.UPDATED, feedRef.resolve().getNews().get(0).getState());
/* Set to Read and Reload */
fNewsDao.setState(feedRef.resolve().getNews(), INews.State.READ, true, false);
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(0, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.READ, feedRef.resolve().getNews().get(0).getState());
/* Reload with updated Title and Publish Date */
long ms2 = now + 200000;
InMemoryProtocolHandler.FEED = generateFeed("Title *updated #2 #3*", "http://www.link_updated_again.de", "http://www.guid.de", fDateFormat.format(ms2), updatedDescription + " again");
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(1, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.UPDATED, feedRef.resolve().getNews().get(0).getState());
/* Set to Read and Reload */
fNewsDao.setState(feedRef.resolve().getNews(), INews.State.READ, true, false);
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(0, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.READ, feedRef.resolve().getNews().get(0).getState());
/* Reload with updated Title, Link and Publish Date */
long ms3 = now + 500000;
InMemoryProtocolHandler.FEED = generateFeed("Title *updated #2 #3 #4*", "http://www.link_updated_again_again.de", "http://www.guid.de", fDateFormat.format(ms3));
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(1, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.UPDATED, feedRef.resolve().getNews().get(0).getState());
/* Set to Read and Reload */
fNewsDao.setState(feedRef.resolve().getNews(), INews.State.READ, true, false);
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(1, feedRef.resolve().getNews().size());
assertEquals(0, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.READ, feedRef.resolve().getNews().get(0).getState());
/* Sixth Reload with added News */
InMemoryProtocolHandler.FEED = generateFeed("Title *updated #2 #3 #4*", "http://www.link_updated_again_again.de", "http://www.guid_other.de", fDateFormat.format(ms3));
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(2, feedRef.resolve().getNews().size());
assertEquals(1, getUnreadCount(feed));
assertEquals(1, getNewCount(feed));
List<INews> news = feedRef.resolve().getNews();
for (INews newsItem : news) {
if ("http://www.guid.de".equals(newsItem.getGuid().getValue()))
assertEquals(INews.State.READ, newsItem.getState());
else if ("http://www.guid_other.de".equals(newsItem.getGuid().getValue()))
assertEquals(INews.State.NEW, newsItem.getState());
}
/* Set to Read */
fNewsDao.setState(feedRef.resolve().getNews(), INews.State.READ, true, false);
fController.reload(bookmark, null, new NullProgressMonitor());
assertEquals(2, feedRef.resolve().getNews().size());
assertEquals(0, getUnreadCount(feed));
assertEquals(0, getNewCount(feed));
assertEquals(INews.State.READ, feedRef.resolve().getNews().get(0).getState());
assertEquals(INews.State.READ, feedRef.resolve().getNews().get(1).getState());
/* Test Event Counter */
assertEquals(2, addedCounter[0]);
assertEquals(12, updatedCounter[0]);
} finally {