diff --git a/test/net/java/sip/communicator/slick/contactlist/MetaContactListServiceLick.java b/test/net/java/sip/communicator/slick/contactlist/MetaContactListServiceLick.java
index f6d06992c..b9082abc9 100644
--- a/test/net/java/sip/communicator/slick/contactlist/MetaContactListServiceLick.java
+++ b/test/net/java/sip/communicator/slick/contactlist/MetaContactListServiceLick.java
@@ -48,6 +48,10 @@ public class MetaContactListServiceLick
static MockContact subsubContact = null;
+ static MockContact mockContactToRename = null;
+
+ static MockContact mockContactToReorder = null;
+
/**
* Start, init and register the SLICK. Create the mock protocol provider
* and register it as a service.
@@ -139,6 +143,12 @@ private void fillMockContactList(MockProvider provider)
root.addContact( new MockContact("Martin Dupont", provider) );
root.addContact( new MockContact("Joe Bloggs", provider) );
+ mockContactToRename = new MockContact("Jane Doe", provider) ;
+ root.addContact( mockContactToRename );
+
+ mockContactToReorder = new MockContact("I'llChangeMyStatus", provider);
+ root.addContact(mockContactToReorder);
+
topLevelMockGroup = new MockContactGroup(topLevelGroupName, provider);
subLevelContact = new MockContact(subLevelContactName, provider);
@@ -159,5 +169,6 @@ private void fillMockContactList(MockProvider provider)
topLevelMockGroup.addSubGroup(subLevelGroup);
root.addSubGroup(topLevelMockGroup);
+
}
}
diff --git a/test/net/java/sip/communicator/slick/contactlist/TestMetaContact.java b/test/net/java/sip/communicator/slick/contactlist/TestMetaContact.java
index 79e981328..e3ef0633f 100644
--- a/test/net/java/sip/communicator/slick/contactlist/TestMetaContact.java
+++ b/test/net/java/sip/communicator/slick/contactlist/TestMetaContact.java
@@ -150,6 +150,9 @@ public void testGetDisplayName()
metaContact.getDisplayName());
}
+ /**
+ * Very light test of the existance and the uniqueness of meta UIDs
+ */
public void testGetMetaUID()
{
String metaUID = metaContact.getMetaUID();
@@ -159,4 +162,78 @@ public void testGetMetaUID()
assertTrue( "getMetaUID() did not seem to return a valid UID"
, metaUID.trim().length() > 0);
}
+
+ /**
+ * Verifies whether the compare method in meta contacts takes into account
+ * all important details: i.e. contact status, alphabetical order.
+ */
+ public void testCompareTo()
+ {
+ verifyCompareToForAllContactsInGroupAndSubgroups(
+ fixture.metaClService.getRoot());
+ }
+
+ /**
+ * compare all neighbour contacts in group and its subgroups and
+ * try to determine whether they'reproperly ordered.
+ *
+ * @param group the MetaContactGroup to walk through
+ */
+ public void verifyCompareToForAllContactsInGroupAndSubgroups(
+ MetaContactGroup group)
+ {
+ //first check order of contacts in this group
+ Iterator contacts = group.getChildContacts();
+
+ MetaContact previousContact = null;
+ int previousContactStatusSum = 0;
+
+ while(contacts.hasNext())
+ {
+ MetaContact currentContact = (MetaContact)contacts.next();
+
+ //calculate the total status for this contact
+ Iterator protoContacts = currentContact.getContacts();
+ int currentContactStatusSum = 0;
+ while(protoContacts.hasNext())
+ {
+ currentContactStatusSum
+ += ((Contact)protoContacts.next()).getPresenceStatus()
+ .getStatus();
+ }
+
+ if (previousContact != null)
+ {
+ assertTrue( previousContact + " with status="
+ + previousContactStatusSum
+ + " was wrongfully before "
+ + currentContact+ " with status="
+ + currentContactStatusSum
+ , previousContactStatusSum <= currentContactStatusSum);
+
+ //if both were equal then assert alphabetical order.
+ if (previousContactStatusSum == currentContactStatusSum)
+ assertTrue( "The display name: "
+ + previousContact.getDisplayName()
+ + " should be considered less than "
+ + currentContact.getDisplayName()
+ ,previousContact.getDisplayName()
+ .compareToIgnoreCase(
+ currentContact.getDisplayName())
+ <= 0);
+ }
+ previousContact = currentContact;
+ previousContactStatusSum = currentContactStatusSum;
+ }
+
+ //now go over the subgroups
+ Iterator subgroups = group.getSubgroups();
+
+ while(subgroups.hasNext())
+ {
+ verifyCompareToForAllContactsInGroupAndSubgroups(
+ (MetaContactGroup)subgroups.next());
+ }
+ }
+
}
diff --git a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactGroup.java b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactGroup.java
index 40b68726c..0d96e7c38 100644
--- a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactGroup.java
+++ b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactGroup.java
@@ -368,5 +368,4 @@ public void testIndexOf2()
}
}
-
}
diff --git a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java
index 854f4dfe3..f46a38357 100644
--- a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java
+++ b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java
@@ -168,7 +168,7 @@ private void assertGroupEquals(MockContactGroup expectedGroup,
//go over the subgroups and check that they've been all added to the
//meta contact list.
- Iterator expectedSubgroups = expectedGroup.subGroups();
+ Iterator expectedSubgroups = expectedGroup.subgroups();
while (expectedSubgroups.hasNext() ){
MockContactGroup expectedSubGroup
= (MockContactGroup)expectedSubgroups.next();
@@ -214,6 +214,132 @@ private void assertGroupEquals(MockContactGroup expectedGroup,
}
}
+
+ /**
+ * Verifies whether contacts are properly ordered according to their
+ * current status and name Checks whether reordered events are issued
+ * once a contact inside this group changes its status or is added
+ * removed a contact.
+ */
+ public void testContactsOrder()
+ {
+ //first assert initial order.
+ assertContactsOrder(fixture.metaClService.getRoot());
+
+ MclEventCollector evtCollector = new MclEventCollector();
+
+ //change a status
+ fixture.metaClService.addContactListListener(evtCollector);
+
+ ((MockPersistentPresenceOperationSet)opSetPersPresence)
+ .changePresenceStatusForContact(MetaContactListServiceLick
+ .mockContactToReorder
+ , MockStatusEnum.MOCK_STATUS_100);
+
+ fixture.metaClService.removeContactListListener(evtCollector);
+
+ //check whether a reordered event is dispatchect
+ assertEquals("Number of evts dispatched after a contact changed its status"
+ , 1
+ , evtCollector.collectedMetaContactGroupEvents.size());
+ MetaContactGroupEvent evt = (MetaContactGroupEvent)evtCollector
+ .collectedMetaContactGroupEvents.remove(0);
+
+ assertEquals("ID of the generated event",
+ MetaContactGroupEvent.CHILD_CONTACTS_REORDERED,
+ evt.getEventID());
+
+ assertEquals("Source meta contact."
+ , fixture.metaClService.getRoot()
+ , evt.getSourceMetaContactGroup());
+
+ //then check wether the contact is has been moved to the top of the list
+ MetaContact theReorderedContact
+ = fixture.metaClService.getRoot().getMetaContact(0);
+ assertEquals(MetaContactListServiceLick.mockContactToReorder
+ + " was not moved to the top of the list after being "
+ +"assigned the highest possible presence status"
+ , MetaContactListServiceLick.mockContactToReorder
+ .getDisplayName()
+ , theReorderedContact.getDisplayName());
+
+ //then check the general order
+ assertContactsOrder(fixture.metaClService.getRoot());
+
+ //restore the contacts original status
+ ((MockPersistentPresenceOperationSet)opSetPersPresence)
+ .changePresenceStatusForContact(MetaContactListServiceLick
+ .mockContactToReorder
+ , MockStatusEnum.MOCK_STATUS_50);
+
+
+ //repeat order tests but this time after changing the display name of a
+ //contact.
+ fixture.metaClService.addContactListListener(evtCollector);
+ fixture.metaClService.renameMetaContact(theReorderedContact, "zzzzzz");
+
+ fixture.metaClService.removeContactListListener(evtCollector);
+
+ //check whether a reordered event is dispatchect
+ assertEquals("Number of evts dispatched after a contact changed its "
+ +"display name"
+ , 1
+ , evtCollector.collectedMetaContactGroupEvents.size());
+ evt = (MetaContactGroupEvent)evtCollector
+ .collectedMetaContactGroupEvents.remove(0);
+
+ assertEquals("ID of the generated event",
+ MetaContactGroupEvent.CHILD_CONTACTS_REORDERED,
+ evt.getEventID());
+
+ assertEquals("Source meta contact."
+ , fixture.metaClService.getRoot()
+ , evt.getSourceMetaContactGroup());
+
+ //then check wether the contact is has been moved to the top of the list
+ assertSame(MetaContactListServiceLick.mockContactToReorder
+ + " was not moved to the bottom of the list after being "
+ +"assigned an equal to all status and a heavy name."
+ , theReorderedContact
+ , fixture.metaClService.getRoot().getMetaContact(
+ fixture.metaClService.getRoot().countChildContacts()-1));
+ }
+
+ /**
+ * Makes sure that all child contacs (both direct and children of subgroups)
+ * are properly ordered.
+ * @param group a ref to the MetaContactGroup where we'd like to
+ * confirm order.
+ */
+ public void assertContactsOrder(MetaContactGroup group)
+ {
+ //first check order of contacts in this group
+ Iterator contacts = group.getChildContacts();
+
+ MetaContact previousContact = null;
+ while(contacts.hasNext())
+ {
+ MetaContact currentContact = (MetaContact)contacts.next();
+
+ if (previousContact != null)
+ {
+ assertTrue( previousContact
+ + " was wrongfully before "
+ + currentContact
+ , previousContact.compareTo(currentContact) <= 0);
+ }
+ previousContact = currentContact;
+ }
+
+ //now go over the subgroups
+ Iterator subgroups = group.getSubgroups();
+
+ while(subgroups.hasNext())
+ {
+ assertContactsOrder((MetaContactGroup)subgroups.next());
+ }
+ }
+
/**
* Performs several tests in order to verify that the findMetaContactByID
* method of the tested implementation is working properly. We'll first
@@ -411,9 +537,9 @@ public void testSubscriptionHandling() throws Exception
assertEquals("Number of evts dispatched while adding a contact"
, 1
- , mclEvtCollector.collectedEvents.size());
+ , mclEvtCollector.collectedMetaContactEvents.size());
MetaContactEvent evt = (MetaContactEvent)mclEvtCollector
- .collectedEvents.get(0);
+ .collectedMetaContactEvents.remove(0);
assertEquals("ID of the generated event",
MetaContactEvent.META_CONTACT_ADDED,
@@ -426,12 +552,6 @@ public void testSubscriptionHandling() throws Exception
assertEquals("Source meta contact."
, newMetaContact, evt.getSourceContact());
- assertEquals("Source provider"
- , fixture.mockProvider, evt.getSourceProvider());
-
- //remove the subscirption and check for the event
- mclEvtCollector.collectedEvents.clear();
-
fixture.metaClService.addContactListListener(mclEvtCollector);
opSetPersPresence.unsubscribe(newProtoContact);
@@ -445,8 +565,8 @@ public void testSubscriptionHandling() throws Exception
assertEquals("Number of evts dispatched while adding a contact"
, 1
- , mclEvtCollector.collectedEvents.size());
- evt = (MetaContactEvent)mclEvtCollector.collectedEvents.get(0);
+ , mclEvtCollector.collectedMetaContactEvents.size());
+ evt = (MetaContactEvent)mclEvtCollector.collectedMetaContactEvents.remove(0);
assertEquals("ID of the generated event",
MetaContactEvent.META_CONTACT_REMOVED,
@@ -459,9 +579,6 @@ public void testSubscriptionHandling() throws Exception
assertEquals("Source meta contact."
, newMetaContact, evt.getSourceContact());
- assertEquals("Source provider"
- , fixture.mockProvider, evt.getSourceProvider());
-
}
@@ -475,33 +592,55 @@ public void testSubscriptionHandling() throws Exception
public void testGroupChangeEventHandling() throws Exception
{
String newGroupName = "testGroupChangeEventHandling.NewContactGroup";
- //add a group and check for the event
+ String newInnerGroupName
+ = "testGroupChangeEventHandling.NewInnderContactGroup";
+ //add 2 nested groups and check for the event
MclEventCollector mclEvtCollector = new MclEventCollector();
+ MockContactGroup newContactGroup
+ = new MockContactGroup(newGroupName, fixture.mockProvider);
+ MockContactGroup newInnerContactGroup
+ = new MockContactGroup(newGroupName, fixture.mockProvider);
+
+ newContactGroup.addSubGroup(newInnerContactGroup);
+
fixture.metaClService.addContactListListener(mclEvtCollector);
- opSetPersPresence.createServerStoredContactGroup(
- opSetPersPresence.getServerStoredContactListRoot(), newGroupName);
+ ((MockPersistentPresenceOperationSet)opSetPersPresence)
+ .addMockGroupAndFireEvent(
+ (MockContactGroup)opSetPersPresence
+ .getServerStoredContactListRoot()
+ , newContactGroup);
fixture.metaClService.removeContactListListener(mclEvtCollector);
// first check whether event delivery went ok.
assertEquals("Number of evts dispatched while adding a contact group"
, 1
- , mclEvtCollector.collectedEvents.size());
+ , mclEvtCollector.collectedMetaContactGroupEvents.size());
MetaContactGroupEvent evt = (MetaContactGroupEvent)mclEvtCollector
- .collectedEvents.get(0);
+ .collectedMetaContactGroupEvents.remove(0);
assertEquals("ID of the generated event",
MetaContactGroupEvent.META_CONTACT_GROUP_ADDED,
evt.getEventID());
- assertEquals("Source group of the AddEvent."
- , newGroupName
+ assertEquals("Name of the source group of the AddEvent."
+ , newContactGroup.getGroupName()
, evt.getSourceMetaContactGroup().getGroupName());
- //first check that the newly created group was really added
MetaContactGroup newMetaGroup = evt.getSourceMetaContactGroup();
+ assertSame("Contact group in the newly added meta group."
+ , newContactGroup
+ , newMetaGroup.getContactGroup(
+ newContactGroup.getGroupName()
+ , fixture.mockProvider));
+
+ assertEquals("Subgroups were not imported in the MetaContactList."
+ , newContactGroup.countSubgroups()
+ , evt.getSourceMetaContactGroup().countSubgroups());
+
+ //first check that the newly created group was really added
assertEquals("Source provider for the add event."
, fixture.mockProvider, evt.getSourceProvider());
@@ -522,7 +661,6 @@ public void testGroupChangeEventHandling() throws Exception
, fixture.mockProvider);
- mclEvtCollector.collectedEvents.clear();
//rename the group and see that the corresponding events are handled
//properly
fixture.metaClService.addContactListListener(mclEvtCollector);
@@ -534,9 +672,10 @@ public void testGroupChangeEventHandling() throws Exception
//first check that the group was really renamed
assertEquals("Number of evts dispatched while renaming a contact group"
, 1
- , mclEvtCollector.collectedEvents.size());
+ , mclEvtCollector.collectedMetaContactGroupEvents.size());
- evt = (MetaContactGroupEvent)mclEvtCollector.collectedEvents.get(0);
+ evt = (MetaContactGroupEvent)mclEvtCollector
+ .collectedMetaContactGroupEvents.remove(0);
assertEquals("ID of the generated event",
MetaContactGroupEvent.CONTACT_GROUP_RENAMED_IN_META_GROUP,
@@ -560,9 +699,6 @@ public void testGroupChangeEventHandling() throws Exception
, renamedGroupName
, ((MockContactGroup)groupsIter.next()).getGroupName());
-
- mclEvtCollector.collectedEvents.clear();
-
//remove the group and check for the event.
fixture.metaClService.addContactListListener(mclEvtCollector);
opSetPersPresence.removeServerStoredContactGroup(newProtoGroup);
@@ -572,8 +708,9 @@ public void testGroupChangeEventHandling() throws Exception
//first check that the group was really removed
assertEquals("Number of evts dispatched while removing a contact group"
, 1
- , mclEvtCollector.collectedEvents.size());
- evt = (MetaContactGroupEvent)mclEvtCollector.collectedEvents.get(0);
+ , mclEvtCollector.collectedMetaContactGroupEvents.size());
+ evt = (MetaContactGroupEvent)mclEvtCollector
+ .collectedMetaContactGroupEvents.remove(0);
assertEquals("ID of the generated event",
MetaContactGroupEvent.CONTACT_GROUP_REMOVED_FROM_META_GROUP,
@@ -585,8 +722,6 @@ public void testGroupChangeEventHandling() throws Exception
assertEquals("Source provider for the remove event."
, fixture.mockProvider, evt.getSourceProvider());
-
- mclEvtCollector.collectedEvents.clear();
}
/**
@@ -633,20 +768,21 @@ public void testAddMoveRemoveContactToMetaContact()
//verify that events have been properly delivered.
assertEquals("Events delivered while adding a new contact to a "
- + "meta contact", 1, evtCollector.collectedEvents.size());
+ + "meta contact", 1, evtCollector.collectedMetaContactEvents.size());
- MetaContactEvent event = (MetaContactEvent)evtCollector
- .collectedEvents.get(0);
- evtCollector.collectedEvents.clear();
+ ProtoContactEvent event = (ProtoContactEvent)evtCollector
+ .collectedMetaContactEvents.remove(0);
- assertSame ( "Source contact in MetaContactEvent gen. upon add."
- , metaContact , event.getSourceContact());
+ assertSame ( "Source contact in ProtoContactEvent gen. upon add."
+ , newContact , event.getProtoContact());
- assertSame ( "Source provider in MetaContactEvent gen. upon add."
- , fixture.mockProvider, event.getSourceProvider());
+ assertSame ( "Source provider in ProtoContactEvent gen. upon add."
+ , fixture.mockProvider
+ , event.getProtoContact().getProtocolProvider());
assertEquals ( "Event ID in MetaContactEvent gen. upon add."
- , MetaContactEvent.PROTO_CONTACT_ADDED, event.getEventID());
+ , ProtoContactEvent.PROTO_CONTACT_ADDED
+ , event.getPropertyName());
//move the mock contact to another meta contact
fixture.metaClService.addContactListListener(evtCollector);
@@ -674,19 +810,23 @@ public void testAddMoveRemoveContactToMetaContact()
//verify that events have been properly delivered.
assertEquals("Events delivered while adding a moving a proto contact. "
- , 1, evtCollector.collectedEvents.size());
+ , 1, evtCollector.collectedMetaContactEvents.size());
- event = (MetaContactEvent) evtCollector.collectedEvents.get(0);
- evtCollector.collectedEvents.clear();
+ event = (ProtoContactEvent) evtCollector.collectedMetaContactEvents.remove(0);
- assertSame("Source contact in MetaContactEvent gen. upon move."
- , dstMetaContact, event.getSourceContact());
+ assertSame("Source contact in ProtoContactEvent gen. upon move."
+ , newContact, event.getProtoContact());
- assertSame("Source provider in MetaContactEvent gen. upon move."
- , fixture.mockProvider, event.getSourceProvider());
+ assertSame("Parent meta contact in ProtoContactEvent gen. upon move."
+ , dstMetaContact, event.getParent());
- assertEquals("Event ID in MetaContactEvent gen. upon add."
- , MetaContactEvent.PROTO_CONTACT_MOVED, event.getEventID());
+ assertSame("Source provider in ProtoContactEvent gen. upon move."
+ , fixture.mockProvider
+ , event.getProtoContact().getProtocolProvider());
+
+ assertEquals("Event ID in ProtoContactEvent gen. upon add."
+ , ProtoContactEvent.PROTO_CONTACT_MOVED
+ , event.getPropertyName());
//remove the meta contact
fixture.metaClService.addContactListListener(evtCollector);
@@ -709,21 +849,24 @@ public void testAddMoveRemoveContactToMetaContact()
//verify that events have been properly delivered.
assertEquals("Events delivered while adding a new contact to a "
- +"meta contact", 1, evtCollector.collectedEvents.size());
+ +"meta contact", 1, evtCollector.collectedMetaContactEvents.size());
- event = (MetaContactEvent)evtCollector
- .collectedEvents.get(0);
- evtCollector.collectedEvents.clear();
+ event = (ProtoContactEvent)evtCollector
+ .collectedMetaContactEvents.remove(0);
- assertSame ( "Source contact in MetaContactEvent gen. upon remove."
- , dstMetaContact, event.getSourceContact());
+ assertSame ( "Source contact in ProtoContactEvent gen. upon remove."
+ , newContact, event.getProtoContact());
- assertSame ( "Source provider in MetaContactEvent gen. upon remove."
- , fixture.mockProvider, event.getSourceProvider());
+ assertSame ( "Parent meta contact in ProtoContactEvent gen. upon remove."
+ , dstMetaContact, event.getParent());
- assertEquals ( "Event ID in MetaContactEvent gen. upon remove."
- , MetaContactEvent.PROTO_CONTACT_REMOVED
- , event.getEventID());
+ assertSame ( "Source provider in ProtoContactEvent gen. upon remove."
+ , fixture.mockProvider
+ , event.getProtoContact().getProtocolProvider());
+
+ assertEquals ( "Event ID in ProtoContactEvent gen. upon remove."
+ , ProtoContactEvent.PROTO_CONTACT_REMOVED
+ , event.getPropertyName());
}
@@ -761,18 +904,14 @@ public void testCreateMoveRemoveMetaContact()
//verify that events have been properly delivered.
assertEquals("Events delivered while creating a new meta contact"
- , 1, evtCollector.collectedEvents.size());
+ , 1, evtCollector.collectedMetaContactEvents.size());
MetaContactEvent event = (MetaContactEvent)evtCollector
- .collectedEvents.get(0);
- evtCollector.collectedEvents.clear();
+ .collectedMetaContactEvents.remove(0);
assertSame ( "Source contact in MetaContactEvent gen. upon create."
, newMetaContact, event.getSourceContact());
- assertSame ( "Source provider in MetaContactEvent gen. upon create."
- , fixture.mockProvider, event.getSourceProvider());
-
assertEquals ( "Event ID in MetaContactEvent gen. upon create."
, MetaContactEvent.META_CONTACT_ADDED
, event.getEventID());
@@ -813,18 +952,25 @@ public void testCreateMoveRemoveMetaContact()
//verify that events have been properly delivered.
assertEquals("Events delivered while moving a meta contact"
- , 1, evtCollector.collectedEvents.size());
+ , 1, evtCollector.collectedMetaContactEvents.size());
- event = (MetaContactEvent)evtCollector
- .collectedEvents.get(0);
- evtCollector.collectedEvents.clear();
+ MetaContactMovedEvent movedEvent = (MetaContactMovedEvent)evtCollector
+ .collectedMetaContactEvents.remove(0);
assertSame ( "Source contact in MetaContactEvent gen. upon move."
- , newMetaContact, event.getSourceContact());
+ , newMetaContact, movedEvent.getSourceMetaContact());
- assertEquals ( "Event ID in MetaContactEvent gen. upon move."
- , MetaContactEvent.META_CONTACT_MOVED
- , event.getEventID());
+ assertEquals ( "Event Property Name in MetaContactEvent gen. upon move."
+ , MetaContactMovedEvent.META_CONTACT_MOVED
+ , movedEvent.getPropertyName());
+
+ assertEquals ( "Old Parent in MetaContactEvent gen. upon move."
+ , parentMetaGroup
+ , movedEvent.getOldParent());
+
+ assertEquals ( "Old Parent in MetaContactEvent gen. upon move."
+ , fixture.metaClService.getRoot()
+ , movedEvent.getNewParent());
//remove the contact
fixture.metaClService.addContactListListener(evtCollector);
@@ -849,18 +995,14 @@ public void testCreateMoveRemoveMetaContact()
//verify that events have been properly delivered.
assertEquals("Events delivered while removing a meta contact"
- , 1, evtCollector.collectedEvents.size());
+ , 1, evtCollector.collectedMetaContactEvents.size());
event = (MetaContactEvent)evtCollector
- .collectedEvents.get(0);
- evtCollector.collectedEvents.clear();
+ .collectedMetaContactEvents.remove(0);
assertSame ( "Source contact in MetaContactEvent gen. upon remove."
, newMetaContact, event.getSourceContact());
- assertSame ( "Source provider in MetaContactEvent gen. upon remove."
- , fixture.mockProvider, event.getSourceProvider());
-
assertEquals ( "Event ID in MetaContactEvent gen. upon remove."
, MetaContactEvent.META_CONTACT_REMOVED
, event.getEventID());
@@ -978,6 +1120,55 @@ public void testFindParentMetaContactGroup()
, metaGroup.getGroupName());
}
+ /**
+ * Renames a contact in the contact list and verifies whether the new name
+ * has taken effect and whether the corresponding event has been dispatched.
+ */
+ public void testRenameMetaContact()
+ {
+ String newName = "testRenameMetaContact.AyNewName";
+ MockContact mockContact
+ = MetaContactListServiceLick.mockContactToRename;
+
+ //keep the name to later verify that it's untouched.
+ String oldMockContactDisplayName = mockContact.getDisplayName();
+
+ MetaContact contactToRename
+ = fixture.metaClService.findMetaContactByContact(mockContact);
+
+ MclEventCollector evtCollector = new MclEventCollector();
+
+ //rename the meta contact
+ fixture.metaClService.addContactListListener(evtCollector);
+ fixture.metaClService.renameMetaContact(contactToRename, newName);
+ fixture.metaClService.removeContactListListener(evtCollector);
+
+ //check that an event has been dispatched
+ assertEquals("Events delivered while renaming a meta contact"
+ , 1, evtCollector.collectedMetaContactEvents.size());
+
+ MetaContactRenamedEvent event = (MetaContactRenamedEvent)evtCollector
+ .collectedMetaContactEvents.remove(0);
+
+ assertSame ( "Source contact in MetaContactRenamedEvent gen. upon remove."
+ , contactToRename, event.getSourceMetaContact());
+
+ assertEquals ( "Event ID in MetaContactEvent gen. upon remove."
+ , MetaContactRenamedEvent.META_CONTACT_RENAMED
+ , event.getPropertyName());
+
+ //check that the meta contact has been renamed
+ assertEquals( "DisplayName of a MetaContact unchanged after renaming"
+ , newName
+ , contactToRename.getDisplayName() );
+
+ //verify that the underlying mock contact has not been changed
+ assertEquals( "Proto Contact modified after renaming a MetaContact"
+ , oldMockContactDisplayName
+ , mockContact.getDisplayName() );
+
+ }
+
/**
* Tests the MetaContactListService
* .findParentMetaContactGroup(MetaContactGroup)
@@ -1015,7 +1206,9 @@ public void testFindParentMetaContactGroup2()
private class MclEventCollector implements MetaContactListListener
{
- public Vector collectedEvents = new Vector();
+ public Vector collectedMetaContactEvents = new Vector();
+ public Vector collectedMetaContactGroupEvents = new Vector();
+
/**
* Indicates that a MetaContact has been successfully added
* to the MetaContact list.
@@ -1023,76 +1216,118 @@ private class MclEventCollector implements MetaContactListListener
*/
public void metaContactAdded(MetaContactEvent evt)
{
- collectedEvents.add(evt);
+ collectedMetaContactEvents.add(evt);
}
+
/**
* Indicates that a MetaContactGroup has been successfully added
* to the MetaContact list.
- * @param evt the MetaContactListEvent containing the corresponding
- * contact
+ * @param evt the MetaContactListEvent containing the corresponding contact
*/
public void metaContactGroupAdded(MetaContactGroupEvent evt)
{
- collectedEvents.add(evt);
+ collectedMetaContactGroupEvents.add(evt);
}
+
/**
- * Indicates that a MetaContactGroup has been removed from the
- * MetaContact list.
- * @param evt the MetaContactListEvent containing the corresponding
- * contact
+ * Indicates that a MetaContact has been moved inside the MetaContact list.
+ * @param evt the MetaContactListEvent containing the corresponding contact
*/
- public void metaContactGroupRemoved(MetaContactGroupEvent evt)
+ public void metaContactMoved(MetaContactMovedEvent evt)
{
- collectedEvents.add(evt);
+ collectedMetaContactEvents.add(evt);
}
+
/**
- * Indicates that a MetaContact has been removed from the MetaContact
- * list.
- * @param evt the MetaContactListEvent containing the corresponding
- * contact
+ * Indicates that a MetaContact has been modified.
+ * @param evt the MetaContactListEvent containing the corresponding contact
*/
- public void metaContactRemoved(MetaContactEvent evt)
+ public void metaContactRenamed(MetaContactRenamedEvent evt)
{
- collectedEvents.add(evt);
+ collectedMetaContactEvents.add(evt);
}
+
/**
- * Indicates that a MetaContact has been moved inside the MetaContact
- * list.
- * @param evt the MetaContactListEvent containing the corresponding
- * contact
+ * Indicates that a protocol specific Contact instance has been
+ * moved from within one MetaContact to another.
+ * @param evt a reference to the ProtoContactMovedEvent instance.
*/
- public void metaContactMoved(MetaContactEvent evt)
+ public void protoContactMoved(ProtoContactEvent evt)
{
- collectedEvents.add(evt);
+ collectedMetaContactEvents.add(evt);
}
/**
- * Indicates that a MetaContact has been modified.
- * @param evt the MetaContactListEvent containing the corresponding
- * contact
+ * Indicates that a protocol specific Contact instance has been
+ * removed from the list of protocol specific buddies in this
+ * MetaContact
+ * @param evt a reference to the corresponding
+ * ProtoContactEvent
*/
- public void metaContactModified(MetaContactEvent evt)
+ public void protoContactRemoved(ProtoContactEvent evt)
{
- collectedEvents.add(evt);
+ collectedMetaContactEvents.add(evt);
}
/**
- * Indicates that a MetaContactGroup has been modified (e.g. a proto
- * contact group was removed).
+ * Indicates that a MetaContactGroup has been modified (e.g. a proto contact
+ * group was removed).
*
- * @param evt the MetaContactListEvent containing the corresponding
- * contact
+ * @param evt the MetaContactListEvent containing the corresponding contact
*/
public void metaContactGroupModified(MetaContactGroupEvent evt)
{
- collectedEvents.add(evt);
+ collectedMetaContactGroupEvents.add(evt);
}
- }
+ /**
+ * Indicates that a MetaContactGroup has been removed from the MetaContact
+ * list.
+ * @param evt the MetaContactListEvent containing the corresponding contact
+ */
+ public void metaContactGroupRemoved(MetaContactGroupEvent evt)
+ {
+ collectedMetaContactGroupEvents.add(evt);
+ }
+
+
+ /**
+ * Indicates that a MetaContact has been removed from the MetaContact list.
+ * @param evt the MetaContactListEvent containing the corresponding contact
+ */
+ public void metaContactRemoved(MetaContactEvent evt)
+ {
+ collectedMetaContactEvents.add(evt);
+ }
+
+
+ /**
+ * Indicates that a protocol specific Contact instance has been
+ * added to the list of protocol specific buddies in this
+ * MetaContact
+ * @param evt a reference to the corresponding
+ * ProtoContactEvent
+ */
+ public void protoContactAdded(ProtoContactEvent evt)
+ {
+ collectedMetaContactEvents.add(evt);
+ }
+
+ /**
+ * Indicates that the order under which the child contacts were ordered
+ * inside the source group has changed.
+ * @param evt the MetaContactGroupEvent containind details of this
+ * event.
+ */
+ public void childContactsReordered(MetaContactGroupEvent evt)
+ {
+ collectedMetaContactGroupEvents.add(evt);
+ }
+ }
}
diff --git a/test/net/java/sip/communicator/slick/contactlist/mockprovider/MockContact.java b/test/net/java/sip/communicator/slick/contactlist/mockprovider/MockContact.java
index 6b484af4e..096e158e8 100644
--- a/test/net/java/sip/communicator/slick/contactlist/mockprovider/MockContact.java
+++ b/test/net/java/sip/communicator/slick/contactlist/mockprovider/MockContact.java
@@ -7,7 +7,6 @@
package net.java.sip.communicator.slick.contactlist.mockprovider;
import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.service.protocol.icqconstants.*;
/**
* A simple, straightforward mock implementation of the Contact interface
@@ -22,6 +21,7 @@ public class MockContact
private String contactID = null;
private MockProvider parentProvider = null;
private MockContactGroup parentGroup = null;
+ private PresenceStatus presenceStatus = MockStatusEnum.MOCK_STATUS_50;
/**
* Creates an instance of a meta contact with the specified string used
@@ -88,7 +88,18 @@ public byte[] getImage()
*/
public PresenceStatus getPresenceStatus()
{
- return IcqStatusEnum.ONLINE;
+ return this.presenceStatus;
+ }
+
+ /**
+ * Sets mockPresenceStatus as the PresenceStatus that this contact
+ * is currently in.
+ * @param mockPresenceStatus the MockPresenceStatus currently valid
+ * for this contact.
+ */
+ public void setPresenceStatus(MockStatusEnum mockPresenceStatus)
+ {
+ this.presenceStatus = mockPresenceStatus;
}
/**
@@ -129,7 +140,7 @@ public MockContactGroup getParentGroup()
*/
public String toString()
{
- StringBuffer buff = new StringBuffer("MetaContact[ DisplayName=")
+ StringBuffer buff = new StringBuffer("MockContact[ DisplayName=")
.append(getDisplayName()).append("]");
return buff.toString();
diff --git a/test/net/java/sip/communicator/slick/contactlist/mockprovider/MockContactGroup.java b/test/net/java/sip/communicator/slick/contactlist/mockprovider/MockContactGroup.java
index fb6f89750..1bba1a846 100644
--- a/test/net/java/sip/communicator/slick/contactlist/mockprovider/MockContactGroup.java
+++ b/test/net/java/sip/communicator/slick/contactlist/mockprovider/MockContactGroup.java
@@ -23,6 +23,7 @@ public class MockContactGroup
private Vector contacts = new Vector();
private Vector subGroups = new Vector();
+ private MockContactGroup parentGroup = null;
private MockProvider parentProvider = null;
@@ -106,18 +107,40 @@ public int countSubgroups()
* Adds the specified contact group to the contained by this group.
* @param subGroup the MockContactGroup to add as a subgroup to this group.
*/
- public void addSubGroup(MockContactGroup subGroup)
+ public void addSubGroup(MockContactGroup subgroup)
{
- this.subGroups.add(subGroup);
+ this.subGroups.add(subgroup);
+ subgroup.setParentGroup(this);
+ }
+
+ /**
+ * Sets the group that is the new parent of this group
+ * @param parent MockContactGroup
+ */
+ void setParentGroup(MockContactGroup parent)
+ {
+ this.parentGroup = parent;
+ }
+
+ /**
+ * Returns the MockContactGroup that is currently parent og this
+ * group.
+ * @return a reference to the MockContactGroup that is currently
+ * the parent of this group.
+ */
+ public MockContactGroup getParentGroup()
+ {
+ return this.parentGroup;
}
/**
* Removes the specified contact group from the this group's subgroups.
* @param subGroup the MockContactGroup subgroup to remove.
*/
- public void removeSubGroup(MockContactGroup subGroup)
+ public void removeSubGroup(MockContactGroup subgroup)
{
- this.subGroups.remove(subGroup);
+ this.subGroups.remove(subgroup);
+ subgroup.setParentGroup(null);
}
@@ -144,7 +167,7 @@ public MockContactGroup findGroupParent(MockContactGroup mockGroup)
if ( subGroups.contains(mockGroup) )
return this;
- Iterator subGroupsIter = subGroups();
+ Iterator subGroupsIter = subgroups();
while (subGroupsIter.hasNext())
{
MockContactGroup subgroup = (MockContactGroup) subGroupsIter.next();
@@ -168,7 +191,7 @@ public MockContactGroup findContactParent(MockContact mockContact)
if ( contacts.contains(mockContact) )
return this;
- Iterator subGroupsIter = subGroups();
+ Iterator subGroupsIter = subgroups();
while (subGroupsIter.hasNext())
{
MockContactGroup subgroup = (MockContactGroup) subGroupsIter.next();
@@ -221,7 +244,7 @@ public ContactGroup getGroup(int index)
*/
public ContactGroup getGroup(String groupName)
{
- Iterator groupsIter = subGroups();
+ Iterator groupsIter = subgroups();
while (groupsIter.hasNext())
{
MockContactGroup contactGroup
@@ -260,7 +283,7 @@ public void setGroupName(String newGrpName)
* @return a java.util.Iterator over the ContactGroup children
* of this group (i.e. subgroups).
*/
- public Iterator subGroups()
+ public Iterator subgroups()
{
return subGroups.iterator();
}
@@ -294,7 +317,7 @@ public MockContact findContactByID(String id)
}
//if we didn't find it here, let's try in the subougroups
- Iterator groupsIter = subGroups();
+ Iterator groupsIter = subgroups();
while( groupsIter.hasNext() )
{
@@ -321,7 +344,7 @@ public String toString()
StringBuffer buff = new StringBuffer(getGroupName());
buff.append(".subGroups=" + countSubgroups() + ":\n");
- Iterator subGroups = subGroups();
+ Iterator subGroups = subgroups();
while (subGroups.hasNext())
{
MockContactGroup group = (MockContactGroup)subGroups.next();