From 8a8b8ccd794fbacdde78e59d2d55d25599b3ed8c Mon Sep 17 00:00:00 2001 From: rcollier Date: Tue, 29 Mar 2011 00:44:38 +0000 Subject: [PATCH] SMACK-163 Fixed NPE in accessing form field information. git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@12200 b35dd754-fafc-0310-a699-88a17e54d16e --- .../org/jivesoftware/smackx/muc/RoomInfo.java | 20 ++++---- .../jivesoftware/smackx/muc/RoomInfoTest.java | 50 +++++++++++++++++++ 2 files changed, 59 insertions(+), 11 deletions(-) create mode 100644 test-unit/org/jivesoftware/smackx/muc/RoomInfoTest.java diff --git a/source/org/jivesoftware/smackx/muc/RoomInfo.java b/source/org/jivesoftware/smackx/muc/RoomInfo.java index 1e2c655b7..7a632cfa0 100644 --- a/source/org/jivesoftware/smackx/muc/RoomInfo.java +++ b/source/org/jivesoftware/smackx/muc/RoomInfo.java @@ -21,6 +21,7 @@ package org.jivesoftware.smackx.muc; import org.jivesoftware.smackx.Form; +import org.jivesoftware.smackx.FormField; import org.jivesoftware.smackx.packet.DiscoverInfo; import java.util.Iterator; @@ -88,17 +89,14 @@ public class RoomInfo { // Get the information based on the discovered extended information Form form = Form.getFormFrom(info); if (form != null) { - this.description = - form.getField("muc#roominfo_description").getValues().next(); - Iterator values = form.getField("muc#roominfo_subject").getValues(); - if (values.hasNext()) { - this.subject = values.next(); - } - else { - this.subject = ""; - } - this.occupantsCount = - Integer.parseInt(form.getField("muc#roominfo_occupants").getValues() + FormField descField = form.getField("muc#roominfo_description"); + this.description = descField == null ? "" : descField.getValues().next(); + + FormField subjField = form.getField("muc#roominfo_subject"); + this.subject = subjField == null ? "" : subjField.getValues().next(); + + FormField occCountField = form.getField("muc#roominfo_occupants"); + this.occupantsCount = occCountField == null ? -1 : Integer.parseInt(occCountField.getValues() .next()); } } diff --git a/test-unit/org/jivesoftware/smackx/muc/RoomInfoTest.java b/test-unit/org/jivesoftware/smackx/muc/RoomInfoTest.java new file mode 100644 index 000000000..09e2b6d37 --- /dev/null +++ b/test-unit/org/jivesoftware/smackx/muc/RoomInfoTest.java @@ -0,0 +1,50 @@ +package org.jivesoftware.smackx.muc; + +import org.jivesoftware.smackx.FormField; +import org.jivesoftware.smackx.muc.RoomInfo; +import org.jivesoftware.smackx.packet.DataForm; +import org.jivesoftware.smackx.packet.DiscoverInfo; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class RoomInfoTest +{ + @Test + public void validateRoomWithEmptyForm() + { + DataForm dataForm = new DataForm("result"); + + DiscoverInfo discoInfo = new DiscoverInfo(); + discoInfo.addExtension(dataForm); + RoomInfo roomInfo = new RoomInfo(discoInfo); + assertTrue(roomInfo.getDescription().isEmpty()); + assertTrue(roomInfo.getSubject().isEmpty()); + assertEquals(-1, roomInfo.getOccupantsCount()); + } + + @Test + public void validateRoomWithForm() + { + DataForm dataForm = new DataForm("result"); + + FormField desc = new FormField("muc#roominfo_description"); + desc.addValue("The place for all good witches!"); + dataForm.addField(desc); + + FormField subject = new FormField("muc#roominfo_subject"); + subject.addValue("Spells"); + dataForm.addField(subject); + + FormField occupants = new FormField("muc#roominfo_occupants"); + occupants.addValue("3"); + dataForm.addField(occupants); + + DiscoverInfo discoInfo = new DiscoverInfo(); + discoInfo.addExtension(dataForm); + RoomInfo roomInfo = new RoomInfo(discoInfo); + assertEquals("The place for all good witches!", roomInfo.getDescription()); + assertEquals("Spells", roomInfo.getSubject()); + assertEquals(3, roomInfo.getOccupantsCount()); + } +}