From e600fb02f5ed3b053540f4169fccae5939aa15af Mon Sep 17 00:00:00 2001 From: rcollier Date: Fri, 29 Jan 2010 13:50:23 +0000 Subject: [PATCH] SMACK-288 - Parser is now advanced correctly to the end tag when parsing multiple items. git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@11574 b35dd754-fafc-0310-a699-88a17e54d16e --- .../smackx/pubsub/provider/ItemProvider.java | 17 ++++++---------- .../smackx/pubsub/SubscriberUseCases.java | 20 ++++++++++++------- .../smackx/pubsub/TestEvents.java | 4 +++- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/source/org/jivesoftware/smackx/pubsub/provider/ItemProvider.java b/source/org/jivesoftware/smackx/pubsub/provider/ItemProvider.java index ccf85efc7..f8b59427e 100644 --- a/source/org/jivesoftware/smackx/pubsub/provider/ItemProvider.java +++ b/source/org/jivesoftware/smackx/pubsub/provider/ItemProvider.java @@ -51,24 +51,19 @@ public class ItemProvider implements PacketExtensionProvider if (ProviderManager.getInstance().getExtensionProvider(payloadElemName, payloadNS) == null) { boolean done = false; - String payloadText = null; + StringBuilder payloadText = new StringBuilder(); while (!done) { if (tag == XmlPullParser.END_TAG && parser.getName().equals(elem)) - { done = true; - } else if (!((tag == XmlPullParser.START_TAG) && parser.isEmptyElementTag())) - { - if (payloadText == null) - payloadText = parser.getText(); - else - payloadText += parser.getText(); - } - tag = parser.next(); + payloadText.append(parser.getText()); + + if (!done) + tag = parser.next(); } - return new PayloadItem(id, new SimplePayload(payloadElemName, payloadNS, payloadText)); + return new PayloadItem(id, new SimplePayload(payloadElemName, payloadNS, payloadText.toString())); } else { diff --git a/test/org/jivesoftware/smackx/pubsub/SubscriberUseCases.java b/test/org/jivesoftware/smackx/pubsub/SubscriberUseCases.java index da9f6712f..461728222 100644 --- a/test/org/jivesoftware/smackx/pubsub/SubscriberUseCases.java +++ b/test/org/jivesoftware/smackx/pubsub/SubscriberUseCases.java @@ -7,11 +7,9 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; -import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smackx.FormField; import org.jivesoftware.smackx.pubsub.test.SingleUserTestCase; @@ -180,12 +178,20 @@ public class SubscriberUseCases extends SingleUserTestCase } payloadNode.send(new PayloadItem("6-" + curTime, new SimplePayload("a", "pubsub:test", ""))); - payloadNode.send(new PayloadItem("7-" + curTime, new SimplePayload("a", "pubsub:test", ""))); - payloadNode.send(new PayloadItem("8-" + curTime, new SimplePayload("entity", "pubsub:test", "text"))); - payloadNode.send(new PayloadItem("9-" + curTime, new SimplePayload("entity", "pubsub:test", ""))); + payloadNode.send(new PayloadItem("7-" + curTime, new SimplePayload("a", "pubsub:test", ""))); + payloadNode.send(new PayloadItem("8-" + curTime, new SimplePayload("entity", "pubsub:test", "texta"))); + payloadNode.send(new PayloadItem("9-" + curTime, new SimplePayload("entity", "pubsub:test", "b"))); - Collection> payloadItems = payloadNode.getItems(); + List> payloadItems = payloadNode.getItems(); assertTrue(payloadItems.size() == 4); + assertEquals(payloadItems.get(0).getId(), "6-" + curTime); + assertEquals("", payloadItems.get(0).getPayload().toXML().replace('\"', '\'')); + assertEquals(payloadItems.get(1).getId(), "7-" + curTime); + assertEquals("", payloadItems.get(1).getPayload().toXML().replace('\"', '\'')); + assertEquals(payloadItems.get(2).getId(), "8-" + curTime); + assertEquals("texta", payloadItems.get(2).getPayload().toXML().replace('\"', '\'')); + assertEquals(payloadItems.get(3).getId(), "9-" + curTime); + assertEquals("b", payloadItems.get(3).getPayload().toXML().replace('\"', '\'')); } public void testGetSpecifiedItems() throws XMPPException @@ -210,7 +216,7 @@ public class SubscriberUseCases extends SingleUserTestCase assertEquals(items.get(1).getId(), "3"); assertEquals("", items.get(1).getPayload().toXML().replace('\"', '\'')); assertEquals(items.get(2).getId(), "4"); - assertEquals("", items.get(3).getPayload().toXML().replace('\"', '\'')); + assertEquals("", items.get(2).getPayload().toXML().replace('\"', '\'')); } public void testGetLastNItems() throws XMPPException diff --git a/test/org/jivesoftware/smackx/pubsub/TestEvents.java b/test/org/jivesoftware/smackx/pubsub/TestEvents.java index e0424cf4c..d8f30e2b1 100644 --- a/test/org/jivesoftware/smackx/pubsub/TestEvents.java +++ b/test/org/jivesoftware/smackx/pubsub/TestEvents.java @@ -199,6 +199,7 @@ public class TestEvents extends SmackTestCase * org.jivesoftware.smackx.pubsub.CarExtensionProvider * */ + /* public void testSendAndReceiveCarPayload() throws Exception { // Setup event source @@ -231,7 +232,8 @@ public class TestEvents extends SmackTestCase assertEquals("green", car.getColor()); assertEquals(4, car.getNumTires()); } - +*/ + public void testSendAndReceiveMultipleSubs() throws Exception { // Setup event source