// BlogBridge -- RSS feed reader, manager, and web based service // Copyright (C) 2002-2006 by R. Pito Salas // // This program is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free Software Foundation; // either version 2 of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; // without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along with this program; // if not, write to the Free Software Foundation, Inc., 59 Temple Place, // Suite 330, Boston, MA 02111-1307 USA // // Contact: R. Pito Salas // mailto:pitosalas@users.sourceforge.net // More information: about BlogBridge // http://www.blogbridge.com // http://sourceforge.net/projects/blogbridge // // $Id: TestFeedDisplayModel.java,v 1.7 2008/02/28 15:59:53 spyromus Exp $ // package com.salas.bb.views.feeds; import com.salas.bb.domain.DirectFeed; import com.salas.bb.domain.IArticle; import com.salas.bb.domain.StandardArticle; import com.salas.bb.utils.Constants; /** * This suite contains tests for {@link FeedDisplayModel} unit. */ public class TestFeedDisplayModel extends AbstractFeedDisplayTestCase { private FeedDisplayModel model; private DirectFeed feed; private IArticle articleTomorrow; private IArticle articleYesterday; private IArticle articleNow; private IArticle article6DaysAgo; private IArticle article13DaysAgo; private IArticle article30DaysAgo; /** Initializes the tests. */ protected void setUp() throws Exception { super.setUp(); model = new FeedDisplayModel(); feed = new DirectFeed(); articleTomorrow = appendArticle(feed, DELTA_TOMORROW); article13DaysAgo = appendArticle(feed, DELTA_13_DAYS_AGO); articleYesterday = appendArticle(feed, DELTA_YESTERDAY); articleNow = appendArticle(feed, DELTA_NOW); article6DaysAgo = appendArticle(feed, DELTA_6_DAYS_AGO); article30DaysAgo = appendArticle(feed, DELTA_30_DAYS_AGO); } /** * Tests straight sorting order. */ public void testStraightSorting() { model.setFeed(feed); assertEquals(6, model.getArticlesCount()); assertTrue(model.getArticle(0) == articleTomorrow); assertTrue(model.getArticle(1) == articleNow); assertTrue(model.getArticle(2) == articleYesterday); assertTrue(model.getArticle(3) == article6DaysAgo); assertTrue(model.getArticle(4) == article13DaysAgo); assertTrue(model.getArticle(5) == article30DaysAgo); assertGrouping(false); } /** * Tests reverse sorting order. */ public void testReverseSorting() { model.setFeed(feed); model.setAscending(true); assertEquals(6, model.getArticlesCount()); assertTrue(model.getArticle(5) == articleTomorrow); assertTrue(model.getArticle(4) == articleNow); assertTrue(model.getArticle(3) == articleYesterday); assertTrue(model.getArticle(2) == article6DaysAgo); assertTrue(model.getArticle(1) == article13DaysAgo); assertTrue(model.getArticle(0) == article30DaysAgo); assertGrouping(true); // Once again to see how the order is taken when feed changes model.setFeed(feed); assertEquals(6, model.getArticlesCount()); assertTrue(model.getArticle(5) == articleTomorrow); assertTrue(model.getArticle(4) == articleNow); assertTrue(model.getArticle(3) == articleYesterday); assertTrue(model.getArticle(2) == article6DaysAgo); assertTrue(model.getArticle(1) == article13DaysAgo); assertTrue(model.getArticle(0) == article30DaysAgo); assertGrouping(true); } /** * Checks grouping. */ private void assertGrouping(boolean asc) { int group = asc ? model.getGroupsCount() - 1 : 0; int delta = asc ? -1 : 1; IArticle[] grpFuture = model.getGroup(group); assertEquals(GroupsSetup.getGroupTitle(0), model.getGroupName(group)); assertEquals(1, grpFuture.length); assertTrue(grpFuture[0] == articleTomorrow); group += delta; IArticle[] grpToday = model.getGroup(group); assertEquals(GroupsSetup.getGroupTitle(1), model.getGroupName(group)); assertEquals(1, grpToday.length); assertTrue(grpToday[0] == articleNow); group += delta; IArticle[] grpYesterday = model.getGroup(group); assertEquals(GroupsSetup.getGroupTitle(2), model.getGroupName(group)); assertEquals(1, grpYesterday.length); assertTrue(grpYesterday[0] == articleYesterday); group += delta; IArticle[] grpWeekAgo = model.getGroup(group); assertEquals(GroupsSetup.getGroupTitle(3), model.getGroupName(group)); assertEquals(1, grpWeekAgo.length); assertTrue(grpWeekAgo[0] == article6DaysAgo); group += delta; IArticle[] grp2WeeksAgo = model.getGroup(group); assertEquals(GroupsSetup.getGroupTitle(4), model.getGroupName(group)); assertEquals(1, grp2WeeksAgo.length); assertTrue(grp2WeeksAgo[0] == article13DaysAgo); group += delta; IArticle[] grpOlder = model.getGroup(group); assertEquals(GroupsSetup.getGroupTitle(5), model.getGroupName(group)); assertEquals(1, grpOlder.length); assertTrue(grpOlder[0] == article30DaysAgo); } /** * Tests inserting article in the array. */ public void testInsertArticle() { IArticle[] emptyArticles = new IArticle[0]; StandardArticle a1 = new StandardArticle("1"); StandardArticle a2 = new StandardArticle("2"); IArticle[] resultArticles; resultArticles = FeedDisplayModel.insertArticle(emptyArticles, a1, 0); assertEquals("Nothing has been added.", 1, resultArticles.length); assertTrue("Wrong article added.", a1 == resultArticles[0]); resultArticles = FeedDisplayModel.insertArticle(resultArticles, a2, 0); assertEquals("Nothing has been added.", 2, resultArticles.length); assertTrue("Wrong article added.", a2 == resultArticles[0]); assertTrue("Wrong article added.", a1 == resultArticles[1]); resultArticles = FeedDisplayModel.insertArticle(emptyArticles, a1, 0); resultArticles = FeedDisplayModel.insertArticle(resultArticles, a2, 1); assertEquals("Nothing has been added.", 2, resultArticles.length); assertTrue("Wrong article added.", a2 == resultArticles[1]); assertTrue("Wrong article added.", a1 == resultArticles[0]); } /** * Tests removing article from the array. */ public void testRemoveArticle() { IArticle[] emptyArticles = new IArticle[0]; IArticle[] result; result = FeedDisplayModel.removeArticle(emptyArticles, articleNow); assertEquals(0, result.length); IArticle[] someArticles = new IArticle[] { articleNow, articleTomorrow, articleYesterday }; // Removing missing article result = FeedDisplayModel.removeArticle(someArticles, article13DaysAgo); assertEquals(3, result.length); // Removing article from the head result = FeedDisplayModel.removeArticle(someArticles, articleNow); assertEquals(2, result.length); assertTrue(articleTomorrow == result[0]); assertTrue(articleYesterday == result[1]); // Removing article from the middle result = FeedDisplayModel.removeArticle(someArticles, articleTomorrow); assertEquals(2, result.length); assertTrue(articleNow == result[0]); assertTrue(articleYesterday == result[1]); // Removing article from the tail result = FeedDisplayModel.removeArticle(someArticles, articleYesterday); assertEquals(2, result.length); assertTrue(articleNow == result[0]); assertTrue(articleTomorrow == result[1]); } /** * Tests sorting the articles in groups. */ public void testSortingInGroupsDesc() { IArticle article5DaysAgo = createArticle(DELTA_6_DAYS_AGO + DAY); // Set newest top order model.setAscending(false); model.onArticleAdded(article6DaysAgo); model.onArticleAdded(article5DaysAgo); IArticle[] lastWeekGroup = model.getGroup(3); assertEquals(2, lastWeekGroup.length); assertTrue("Wrong order.", article5DaysAgo == lastWeekGroup[0]); } /** * Tests sorting the articles in groups. */ public void testSortingInGroupsAsc() { IArticle article5DaysAgo = createArticle(DELTA_6_DAYS_AGO + DAY); // Set newest top order model.setAscending(true); model.onArticleAdded(article6DaysAgo); model.onArticleAdded(article5DaysAgo); IArticle[] lastWeekGroup = model.getGroup(2); assertEquals(2, lastWeekGroup.length); assertTrue("Wrong order.", article6DaysAgo == lastWeekGroup[0]); } /** * Testing switching between various modes. */ public void testSwitchingModes() { // Model is in Full mode when all articles are visible model.onArticleAdded(articleNow); articleNow.setRead(true); IArticle[] todayGroup = model.getGroup(1); assertEquals(1, todayGroup.length); // Switching to Unread only mode model.setFilter(IFeedDisplayConstants.FILTER_UNREAD); todayGroup = model.getGroup(1); assertEquals(0, todayGroup.length); // Switching to all mode model.setFilter(IFeedDisplayConstants.FILTER_ALL); todayGroup = model.getGroup(1); assertEquals(1, todayGroup.length); } /** * Tests suppression of old articles. */ public void testSuppression() { model.setMaxArticleAge(2 * Constants.MILLIS_IN_DAY); model.setFeed(feed); int articles = 0; for (int i = 0; i < model.getGroupsCount(); i++) { articles += model.getGroup(i).length; } assertEquals("Only future, today's and yesterday's articles should be visible.", 3, articles); } }