// 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: TestDirectFeedEvents.java,v 1.8 2007/08/29 14:29:53 spyromus Exp $
//
package com.salas.bb.domain;
import com.salas.bb.tags.TestUtils;
import org.jmock.Mock;
import org.jmock.MockObjectTestCase;
import java.net.URL;
/**
* This suite contains the tests for <code>DirectFeed</code> class which
* are targeted on checking of correct event firing and handling.
*/
public class TestDirectFeedEvents extends MockObjectTestCase
{
private static URL testURL1;
private static URL testURL2;
private Mock listener;
private DirectFeed feed;
private static final String METHOD_PROPERTY_CHANGED = "propertyChanged";
protected void setUp()
throws Exception
{
super.setUp();
listener = new Mock(IFeedListener.class);
feed = new DirectFeed();
feed.addListener((IFeedListener)listener.proxy());
synchronized (TestDirectFeedEvents.class)
{
if (testURL1 == null) testURL1 = new URL("file://test1");
if (testURL2 == null) testURL2 = new URL("file://test2");
}
}
// ---------------------------------------------------------------------------------------------
// Tests
// ---------------------------------------------------------------------------------------------
/**
* Tests firing change in XML URL property.
* Tests avoing of duplicate events.
*/
public void testXmlURLPC()
{
// Setting URL
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_XML_URL), NULL, eq(testURL1));
feed.setXmlURL(testURL1);
feed.setXmlURL(testURL1);
// Reseting URL
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_XML_URL), eq(testURL1), NULL);
feed.setXmlURL(null);
feed.setXmlURL(null);
listener.verify();
}
/**
* Tests firing change in Rating property.
* Tests avoing of duplicate events.
*/
public void testRatingPC()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_RATING), eq(DirectFeed.RATING_NOT_SET), eq(DirectFeed.RATING_MIN));
expectFirstChange();
feed.setRating(DirectFeed.RATING_MIN);
feed.setRating(DirectFeed.RATING_MIN);
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_RATING), eq(DirectFeed.RATING_MIN), eq(DirectFeed.RATING_MAX));
feed.setRating(DirectFeed.RATING_MAX);
feed.setRating(DirectFeed.RATING_MAX);
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_RATING), eq(DirectFeed.RATING_MAX), eq(DirectFeed.RATING_NOT_SET));
feed.setRating(DirectFeed.RATING_NOT_SET);
feed.setRating(DirectFeed.RATING_NOT_SET);
listener.verify();
}
private void expectFirstChange()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_LAST_UPDATE_TIME), eq(-1l), not(eq(-1l)));
}
private void expectSecondChange()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_LAST_UPDATE_TIME), not(eq(-1l)), not(eq(-1l)));
}
/**
* Tests firing change in Dead flag.
* Tests avoing of duplicate events.
*/
public void testDeadPC()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_DEAD), eq(Boolean.valueOf(DirectFeed.DEFAULT_DEAD)),
eq(Boolean.valueOf(!DirectFeed.DEFAULT_DEAD)));
feed.setDead(!DirectFeed.DEFAULT_DEAD);
feed.setDead(!DirectFeed.DEFAULT_DEAD);
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_DEAD), eq(Boolean.valueOf(!DirectFeed.DEFAULT_DEAD)),
eq(Boolean.valueOf(DirectFeed.DEFAULT_DEAD)));
feed.setDead(DirectFeed.DEFAULT_DEAD);
feed.setDead(DirectFeed.DEFAULT_DEAD);
listener.verify();
}
/**
* Tests firing change in Title property on custom title setting.
*/
public void testSetCustomTitle()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_CUSTOM_TITLE), NULL, eq("A"));
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_TITLE), NULL, eq("A"));
expectFirstChange();
feed.setCustomTitle("A");
feed.setCustomTitle("A");
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_CUSTOM_TITLE), eq("A"), NULL);
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_TITLE), eq("A"), NULL);
feed.setCustomTitle(null);
feed.setCustomTitle(null);
listener.verify();
}
/**
* Tests firing change in Description property on custom description setting.
*/
public void testSetCustomDescription()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_CUSTOM_DESCRIPTION), NULL, eq("A"));
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_DESCRIPTION), NULL, eq("A"));
expectFirstChange();
feed.setCustomDescription("A");
feed.setCustomDescription("A");
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_CUSTOM_DESCRIPTION), eq("A"), NULL);
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_DESCRIPTION), eq("A"), NULL);
feed.setCustomDescription(null);
feed.setCustomDescription(null);
listener.verify();
}
/**
* Tests firing change in Author property on custom author setting.
*/
public void testSetCustomAuthor()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_AUTHOR), NULL, eq("A"));
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_CUSTOM_AUTHOR), NULL, eq("A"));
expectFirstChange();
feed.setCustomAuthor("A");
feed.setCustomAuthor("A");
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_AUTHOR), eq("A"), NULL);
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_CUSTOM_AUTHOR), eq("A"), NULL);
expectSecondChange();
TestUtils.sleepABit();
feed.setCustomAuthor(null);
feed.setCustomAuthor(null);
listener.verify();
}
/**
* Tests setting base title.
*/
public void testSetBaseTitle()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_BASE_TITLE), NULL, eq("A"));
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_TITLE), NULL, eq("A"));
feed.setBaseTitle("A");
feed.setBaseTitle("A");
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_BASE_TITLE), eq("A"), NULL);
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_TITLE), eq("A"), NULL);
feed.setBaseTitle(null);
feed.setBaseTitle(null);
listener.verify();
}
/**
* Tests setting base title which the custom title is set -- no events for title property
* change should be fired.
*/
public void testSetBaseTitleNonOverriding()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_CUSTOM_TITLE), NULL, eq("B"));
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_TITLE), NULL, eq("B"));
expectFirstChange();
feed.setCustomTitle("B");
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_BASE_TITLE), NULL, eq("A"));
feed.setBaseTitle("A");
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_BASE_TITLE), eq("A"), NULL);
feed.setBaseTitle(null);
listener.verify();
}
/**
* Tests setting the base description.
*/
public void testSetBaseDescription()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_BASE_DESCRIPTION), NULL, eq("A"));
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_DESCRIPTION), NULL, eq("A"));
feed.setBaseDescription("A");
feed.setBaseDescription("A");
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_BASE_DESCRIPTION), eq("A"), NULL);
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_DESCRIPTION), eq("A"), NULL);
feed.setBaseDescription(null);
feed.setBaseDescription(null);
listener.verify();
}
/**
* Tests setting the base author.
*/
public void testSetBaseAuthor()
{
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_AUTHOR), NULL, eq("A"));
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_BASE_AUTHOR), NULL, eq("A"));
feed.setBaseAuthor("A");
feed.setBaseAuthor("A");
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_AUTHOR), eq("A"), NULL);
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_BASE_AUTHOR), eq("A"), NULL);
feed.setBaseAuthor(null);
feed.setBaseAuthor(null);
listener.verify();
}
/**
* Tests setting the last meta-data update time directly at feed.
*/
public void testChangeMetaDataUpdateTimeDirect()
{
long time = 1;
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_LAST_METADATA_UPDATE_TIME), eq(new Long(-1)), eq(new Long(time)));
feed.setLastMetaDataUpdateTime(time);
listener.verify();
}
/**
* Tests setting the last meta-data update time at meta-data object associate with feed.
*/
public void testChangeMetaDataUpdateTimeIndirect()
{
long time = 1;
listener.expects(once()).method(METHOD_PROPERTY_CHANGED).with(same(feed),
eq(DirectFeed.PROP_LAST_METADATA_UPDATE_TIME), eq(new Long(-1)), eq(new Long(time)));
feed.getMetaDataHolder().setLastUpdateTime(time);
listener.verify();
}
}