From 9fd6a51a96a104194a5489a43d70bec80facb4fd Mon Sep 17 00:00:00 2001 From: Symphorien Wanko Date: Fri, 13 Mar 2009 18:44:41 +0000 Subject: [PATCH] additional checks for testInviteJoin complete testRoomSubject avoid possible null pointer exception in ChatRoomPropertyChangeFailedEvent --- .../ChatRoomPropertyChangeFailedEvent.java | 6 +- .../TestOperationSetMultiUserChat2.java | 107 ++++++++++++++---- 2 files changed, 88 insertions(+), 25 deletions(-) diff --git a/src/net/java/sip/communicator/service/protocol/event/ChatRoomPropertyChangeFailedEvent.java b/src/net/java/sip/communicator/service/protocol/event/ChatRoomPropertyChangeFailedEvent.java index e6a21400d..37265c60c 100644 --- a/src/net/java/sip/communicator/service/protocol/event/ChatRoomPropertyChangeFailedEvent.java +++ b/src/net/java/sip/communicator/service/protocol/event/ChatRoomPropertyChangeFailedEvent.java @@ -121,11 +121,11 @@ public String toString() return "ChatRoomPropertyChangeEvent[type=" + this.getPropertyName() + " sourceRoom=" - + this.getSource().toString() + + this.getSource() + "oldValue=" - + this.getOldValue().toString() + + this.getOldValue() + "newValue=" - + this.getNewValue().toString() + + this.getNewValue() + "]"; } } diff --git a/test/net/java/sip/communicator/slick/protocol/jabber/TestOperationSetMultiUserChat2.java b/test/net/java/sip/communicator/slick/protocol/jabber/TestOperationSetMultiUserChat2.java index a73d0b4da..3a378b0d9 100644 --- a/test/net/java/sip/communicator/slick/protocol/jabber/TestOperationSetMultiUserChat2.java +++ b/test/net/java/sip/communicator/slick/protocol/jabber/TestOperationSetMultiUserChat2.java @@ -241,9 +241,9 @@ public static Test suite() new TestOperationSetMultiUserChat2("testNickName")); // following test are not yet commplete -// -// suite.addTest( -// new TestOperationSetMultiUserChat2("testRoomSubject")); + + suite.addTest( + new TestOperationSetMultiUserChat2("testRoomSubject")); // // // suite.addTest( @@ -511,10 +511,14 @@ public void testInviteJoin() MUCEventCollector opSet2RoomCollector = new MUCEventCollector(opSet2Room, MUCEventCollector.EVENT_PRESENCE); + opSet2Collector = + new MUCEventCollector(opSetMUC2, MUCEventCollector.EVENT_PRESENCE); + opSet2Room.join(); - opSet2RoomCollector.waitForEvent(10000); - opSet1RoomCollector.waitForEvent(10000); + opSet2Collector.waitForEvent(10000); // listening for user2 own join + opSet2RoomCollector.waitForEvent(10000); // listening for user1 join + opSet1RoomCollector.waitForEvent(10000); // listening for user2 join // we know check if both member received events assertEquals("a room member has not been notified that someone " + @@ -540,6 +544,18 @@ public void testInviteJoin() assertEquals("there is not exactly two members in the room" , 2, opSet1Room.getMembersCount()); + // is user2 notified of its own join + assertEquals("user hasn't been notified of its own join" + , 1, opSet2Collector.collectedEvents.size()); + + LocalUserChatRoomPresenceChangeEvent localEvent = + (LocalUserChatRoomPresenceChangeEvent) + opSet2Collector.collectedEvents.get(0); + + assertEquals("the event user2 received is not LOCAL_USER_JOINED" + , LocalUserChatRoomPresenceChangeEvent.LOCAL_USER_JOINED + , localEvent.getEventType()); + // both sides should report the same members number. // here we use opSet2Room.getMembers().size() rather than // opSet2Room.getMembersCount() because the last method will not @@ -746,33 +762,66 @@ public void testRoomSubject() throws OperationFailedException, OperationNotSupportedException { - if (true) // just to avoid the not reacheable statement when compiling - throw new OperationNotSupportedException("not yet implemented"); String testRoomName = testRoomBaseName + roomID++; + String oldSubject; + String newSubjet = "bingo"; + // we create the test room ChatRoom opSet1Room = opSetMUC1.createChatRoom(testRoomName, null); opSet1Room.join(); - String subject1 = "one"; - String subject2 = "two"; - ChatRoom opSet2Room = opSetMUC2.findRoom(testRoomName); + opSet2Room.join(); + + MUCEventCollector opSet2RoomCollector = + new MUCEventCollector(opSet2Room, MUCEventCollector.EVENT_PROPERTY); + + MUCEventCollector opSet1RoomCollector = + new MUCEventCollector(opSet2Room, MUCEventCollector.EVENT_PROPERTY); + + oldSubject = opSet1Room.getSubject(); - opSet1Room.setSubject(subject1); - assertEquals("failed to change room subject" - , subject1, opSet1Room.getSubject()); + opSet1Room.setSubject(newSubjet); - assertEquals("subject change not seen on peer side" - , subject1, opSet2Room.getSubject()); + opSet1RoomCollector.waitForEvent(10000); + opSet2RoomCollector.waitForEvent(10000); + + assertEquals("user1 didnt received an event for room subject change" + , 1, opSet1RoomCollector.collectedEvents.size()); + + assertEquals("user2 didnt received an event for room subject change" + , 1, opSet2RoomCollector.collectedEvents.size()); + + assertEquals("the room subject is not up to date " + , newSubjet, opSet1Room.getSubject()); + + assertEquals("the room subject is not up to date " + + "from peer side" + , newSubjet, opSet2Room.getSubject()); + + ChatRoomPropertyChangeEvent changeEvent = + (ChatRoomPropertyChangeEvent) + opSet1RoomCollector.collectedEvents.get(0); + + assertEquals("the old subject provided by the change event " + + "is not the good one" + , oldSubject, changeEvent.getOldValue()); - opSet1Room.setSubject(subject2); - assertEquals("failed to change room subject" - , subject2, opSet1Room.getSubject()); + assertEquals("the new subject provided by the change event " + + "is not the good one" + , newSubjet, changeEvent.getNewValue()); - assertEquals("subject change not seem on peer side" - , subject2, opSet2Room.getSubject()); + ChatRoomPropertyChangeEvent peerEvent = + (ChatRoomPropertyChangeEvent) + opSet2RoomCollector.collectedEvents.get(0); + + assertEquals("both sides didn't received similar change event ", + changeEvent.getOldValue(), peerEvent.getOldValue()); + + assertEquals("both sides didn't received similar change event ", + changeEvent.getNewValue(), peerEvent.getNewValue()); } /** @@ -952,7 +1001,8 @@ class MUCEventCollector LocalUserChatRoomPresenceListener, ChatRoomMemberPresenceListener, ChatRoomMessageListener, - ChatRoomMemberPropertyChangeListener + ChatRoomMemberPropertyChangeListener, + ChatRoomPropertyChangeListener { private final ArrayList collectedEvents = new ArrayList(); @@ -1012,6 +1062,7 @@ public MUCEventCollector(ChatRoom room, int eventType) break; case EVENT_PROPERTY: room.addMemberPropertyChangeListener(this); + room.addPropertyChangeListener(this); break; default: throw new IllegalArgumentException( @@ -1028,7 +1079,7 @@ public MUCEventCollector(ChatRoom room, int eventType) */ public void waitForEvent(long waitFor) { - logger.trace("Waiting for a CallEvent"); + logger.trace("Waiting for a MUC Event"); synchronized (this) { @@ -1122,5 +1173,17 @@ public void chatRoomPropertyChanged( { collectEvent(evt); } + + public void chatRoomPropertyChanged( + ChatRoomPropertyChangeEvent evt) + { + collectEvent(evt); + } + + public void chatRoomPropertyChangeFailed( + ChatRoomPropertyChangeFailedEvent evt) + { + collectEvent(evt); + } } }