// 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: TestUnreadStats.java,v 1.3 2006/01/08 05:28:35 kyank Exp $ // package com.salas.bb.views.mainframe; import java.util.Calendar; import java.util.Date; import junit.framework.TestCase; import com.salas.bb.views.mainframe.UnreadStats.DayCount; /** * This suite contains tests for <code>UnreadStats</code> unit. */ public class TestUnreadStats extends TestCase { private UnreadStats stats; private DayCount dayCount; private Calendar cal; /** * Initialize the tests. * @see junit.framework.TestCase#setUp() */ public void setUp() { stats = new UnreadStats(); dayCount = new DayCount(); cal = Calendar.getInstance(); } /** * Test an empty DayCount. */ public void testEmptyDayCount() { checkDayCount("empty daycount", dayCount, 0, 0); } /** * Test an empty UnreadStats. */ public void testEmptyStats() { for (int i = 0; i < UnreadStats.MAX_DAYS; ++i) { dayCount = stats.getDayCount(i); checkDayCount("empty daily DayCount", dayCount, 0, 0); } checkDayCount("empty older DayCount", stats.getOlderCount(), 0, 0); checkTotalDayCount("empty UnreadStats", 0, 0); } /** * Test a DayCount with one read, one unread. */ public void testSimpleDayCount() { dayCount.increment(true); dayCount.increment(false); checkDayCount("simple daycount", dayCount, 1, 1); } /** * Test multiple DayCounts. */ public void testMultiUnreadCount() { for (int i = 0; i < UnreadStats.MAX_DAYS + 1; ++i) { Date prevDate = cal.getTime(); // set up so that today has 0/0 read/unread, // yesterday has 2/1, day before 4/2, etc. for (int j = 0; j < i; ++j) { stats.increment(prevDate, true); stats.increment(prevDate, true); stats.increment(prevDate, false); } cal.add(Calendar.DATE, -1); } int expectedRead = 0, expectedUnread = 0, totalRead = 0, totalUnread = 0; for (int i = 0; i < UnreadStats.MAX_DAYS; ++i) { DayCount dc = stats.getDayCount(i); checkDayCount("multi unread count", dc, expectedRead, expectedUnread); expectedRead += 2; expectedUnread += 1; totalRead += expectedRead; totalUnread += expectedUnread; } DayCount dc = stats.getOlderCount(); checkDayCount("multi unread count", dc, expectedRead, expectedUnread); checkTotalDayCount("multi unread count", totalRead, totalUnread); } /** * Test an old date in the past. */ public void testOldDates() { // add something at 12am yesterday cal.add(Calendar.DATE, -1); cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); stats.increment(cal.getTime(), true); // add some dates in far past cal.set(1950, 4, 15); stats.increment(cal.getTime(), true); cal.set(1143, 4, 15); stats.increment(cal.getTime(), false); cal.set(0, 4, 15); stats.increment(cal.getTime(), false); checkDayCount("old dates", stats.getDayCount(1), 1, 0); checkDayCount("old dates", stats.getOlderCount(), 1, 2); checkTotalDayCount("old dates", 2, 2); } /** * Test present future dates. */ public void testPresentAndFutureDates() { stats.increment(cal.getTime(), true); for (int i = 0; i < 30; ++i) { cal.add(Calendar.HOUR, 1); stats.increment(cal.getTime(), false); } cal.add(Calendar.WEEK_OF_YEAR, 3); stats.increment(cal.getTime(), true); cal.set(2345, 1, 1); stats.increment(cal.getTime(), true); checkDayCount("present and future dates", stats.getDayCount(0), 3, 30); checkTotalDayCount("present and future dates", 3, 30); } /** * Utility function to test a DayCount. * @param desc string for error * @param dc DayCount to test * @param read expected read count * @param unread expected unread count; */ void checkDayCount(String desc, DayCount dc, int read, int unread) { int total = read + unread; assertEquals(desc + ": read count wrong", read, dc.getRead()); assertEquals(desc + ": unread count wrong", unread, dc.getUnread()); assertEquals(desc + ": total count wrong", total, dc.getTotal()); } /** * Utility function to test that total values are correct. * @param desc string for error * @param read expected read count * @param unread expected unread count */ void checkTotalDayCount(String desc, int read, int unread) { int totalRead = 0; int totalUnread = 0; DayCount dc; for (int i = 0; i < UnreadStats.MAX_DAYS; ++i) { dc = stats.getDayCount(i); totalRead += dc.getRead(); totalUnread += dc.getUnread(); } dc = stats.getOlderCount(); totalRead += dc.getRead(); totalUnread += dc.getUnread(); assertEquals(desc + ": total read error", totalRead, read); assertEquals(desc + ": total unread error", totalUnread, unread); dc = stats.getTotalCount(); assertEquals(desc + ": total read error", dc.getRead(), read); assertEquals(desc + ": total unread error", dc.getUnread(), unread); } }