1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2025-09-10 17:49:38 +02:00

Improve parsing. Add method for de-serializing Strings

Move some duplicate code from XMPP(TCP|BOSH)Connection to
PacketParserUtils. Remove TestUtils as the method now part of Smack's
public API in PacketParserUtils.
This commit is contained in:
Florian Schmaus 2014-05-25 23:31:58 +02:00
parent beecb8a675
commit 3647a7fce5
24 changed files with 215 additions and 291 deletions

View file

@ -19,7 +19,6 @@ package org.jivesoftware.smack.packet;
import static org.junit.Assert.*;
import org.jivesoftware.smack.packet.StreamError;
import org.jivesoftware.smack.test.util.TestUtils;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.junit.Test;
import org.xmlpull.v1.XmlPullParser;
@ -38,7 +37,7 @@ public class StreamErrorTest {
"</stream:error>" +
"</stream:stream>";
try {
XmlPullParser parser = TestUtils.getParser(xml, "error");
XmlPullParser parser = PacketParserUtils.getParserFor(xml, "error");
error = PacketParserUtils.parseStreamError(parser);
} catch (Exception e) {
fail(e.getMessage());
@ -62,7 +61,7 @@ public class StreamErrorTest {
"</stream:error>" +
"</stream:stream>";
try {
XmlPullParser parser = TestUtils.getParser(xml, "error");
XmlPullParser parser = PacketParserUtils.getParserFor(xml, "error");
error = PacketParserUtils.parseStreamError(parser);
} catch (Exception e) {
fail(e.getMessage());
@ -90,7 +89,7 @@ public class StreamErrorTest {
"</stream:error>" +
"</stream:stream>";
try {
XmlPullParser parser = TestUtils.getParser(xml, "error");
XmlPullParser parser = PacketParserUtils.getParserFor(xml, "error");
error = PacketParserUtils.parseStreamError(parser);
} catch (Exception e) {
fail(e.getMessage());

View file

@ -23,7 +23,6 @@ import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smack.test.util.TestUtils;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.junit.After;
import org.junit.Before;
@ -52,7 +51,7 @@ public class ParsingExceptionTest {
@Test
public void consumeUnparsedInput() throws Exception {
XmlPullParser parser = TestUtils.getMessageParser(
XmlPullParser parser = PacketParserUtils.getParserFor(
"<message from='user@server.example' to='francisco@denmark.lit' id='foo'>" +
"<" + ThrowException.ELEMENT + " xmlns='" + ThrowException.NAMESPACE + "'>" +
"<nothingInHere>" +

View file

@ -1,66 +0,0 @@
/**
*
* Copyright 2013 Robin Collier
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.smack.test.util;
import java.io.IOException;
import java.io.StringReader;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
final public class TestUtils {
private TestUtils() {
}
public static XmlPullParser getIQParser(String stanza) {
return getParser(stanza, "iq");
}
public static XmlPullParser getMessageParser(String stanza) {
return getParser(stanza, "message");
}
public static XmlPullParser getPresenceParser(String stanza) {
return getParser(stanza, "presence");
}
public static XmlPullParser getParser(String stanza, String startTag) {
XmlPullParser parser;
try {
parser = XmlPullParserFactory.newInstance().newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
parser.setInput(new StringReader(stanza));
boolean found = false;
while (!found) {
if ((parser.next() == XmlPullParser.START_TAG) && parser.getName().equals(startTag))
found = true;
}
if (!found)
throw new IllegalArgumentException("Cannot parse start tag [" + startTag + "] from stanza [" + stanza
+ "]");
} catch (XmlPullParserException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
return parser;
}
}

View file

@ -33,7 +33,6 @@ import org.custommonkey.xmlunit.examples.RecursiveElementNameAndTextQualifier;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.test.util.TestUtils;
import org.junit.Test;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@ -69,7 +68,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
Message message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getBody());
assertTrue(message.getBodyLanguages().isEmpty());
@ -88,7 +87,7 @@ public class PacketParserUtilsTest {
.t(otherLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(otherLanguage, message.getBody());
assertTrue(message.getBodyLanguages().isEmpty());
@ -106,7 +105,7 @@ public class PacketParserUtilsTest {
.t(defaultLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getBody());
assertTrue(message.getBodyLanguages().isEmpty());
@ -125,7 +124,7 @@ public class PacketParserUtilsTest {
.t(defaultLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getBody());
assertTrue(message.getBodyLanguages().isEmpty());
@ -146,7 +145,7 @@ public class PacketParserUtilsTest {
.t(otherLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertNull(message.getBody());
assertFalse(message.getBodyLanguages().isEmpty());
@ -167,7 +166,7 @@ public class PacketParserUtilsTest {
.t(otherLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertNull(message.getBody());
assertFalse(message.getBodyLanguages().isEmpty());
@ -188,7 +187,7 @@ public class PacketParserUtilsTest {
.t(defaultLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertNull(message.getBody());
assertFalse(message.getBodyLanguages().isEmpty());
@ -218,7 +217,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
Message message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getSubject());
assertTrue(message.getSubjectLanguages().isEmpty());
@ -237,7 +236,7 @@ public class PacketParserUtilsTest {
.t(otherLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(otherLanguage, message.getSubject());
assertTrue(message.getSubjectLanguages().isEmpty());
@ -255,7 +254,7 @@ public class PacketParserUtilsTest {
.t(defaultLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getSubject());
assertTrue(message.getSubjectLanguages().isEmpty());
@ -274,7 +273,7 @@ public class PacketParserUtilsTest {
.t(defaultLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getSubject());
assertTrue(message.getSubjectLanguages().isEmpty());
@ -295,7 +294,7 @@ public class PacketParserUtilsTest {
.t(otherLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertNull(message.getSubject());
assertFalse(message.getSubjectLanguages().isEmpty());
@ -316,7 +315,7 @@ public class PacketParserUtilsTest {
.t(otherLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertNull(message.getSubject());
assertFalse(message.getSubjectLanguages().isEmpty());
@ -337,7 +336,7 @@ public class PacketParserUtilsTest {
.t(defaultLanguage)
.asString(outputProperties);
message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
assertNull(message.getSubject());
assertFalse(message.getSubjectLanguages().isEmpty());
@ -372,7 +371,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getBody());
assertEquals(otherLanguage, message.getBody(otherLanguage));
@ -397,7 +396,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getBody());
assertEquals(defaultLanguage, message.getBody(defaultLanguage));
@ -421,7 +420,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(otherLanguage, message.getBody());
assertEquals(defaultLanguage, message.getBody(defaultLanguage));
@ -445,7 +444,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getBody());
assertEquals(defaultLanguage, message.getBody(defaultLanguage));
@ -468,7 +467,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getBody());
assertEquals(defaultLanguage, message.getBody(defaultLanguage));
@ -491,7 +490,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getBody());
assertEquals(defaultLanguage, message.getBody(defaultLanguage));
@ -525,7 +524,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getSubject());
assertEquals(otherLanguage, message.getSubject(otherLanguage));
@ -550,7 +549,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getSubject());
assertEquals(defaultLanguage, message.getSubject(defaultLanguage));
@ -574,7 +573,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(otherLanguage, message.getSubject());
assertEquals(defaultLanguage, message.getSubject(defaultLanguage));
@ -598,7 +597,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getSubject());
assertEquals(defaultLanguage, message.getSubject(defaultLanguage));
@ -621,7 +620,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getSubject());
assertEquals(defaultLanguage, message.getSubject(defaultLanguage));
@ -644,7 +643,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
message = (Message) PacketParserUtils
.parseMessage(TestUtils.getMessageParser(control));
.parseMessage(PacketParserUtils.getParserFor(control));
assertEquals(defaultLanguage, message.getSubject());
assertEquals(defaultLanguage, message.getSubject(defaultLanguage));
@ -670,7 +669,7 @@ public class PacketParserUtilsTest {
.asString(outputProperties);
try {
Message message = (Message) PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
Message message = (Message) PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(control));
String body = "<span style=\"font-weight: bold;\">"
+ "Bad Message Body</span>";
assertEquals(body, message.getBody());
@ -702,7 +701,7 @@ public class PacketParserUtilsTest {
String invalidControl = validControl.replace("Good Message Body", "Bad </span> Body");
try {
PacketParserUtils.parseMessage(TestUtils.getMessageParser(invalidControl));
PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(invalidControl));
fail("Exception should be thrown");
} catch(XmlPullParserException e) {
assertTrue(e.getMessage().contains("end tag name </span>"));
@ -711,7 +710,7 @@ public class PacketParserUtilsTest {
invalidControl = validControl.replace("Good Message Body", "Bad </body> Body");
try {
PacketParserUtils.parseMessage(TestUtils.getMessageParser(invalidControl));
PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(invalidControl));
fail("Exception should be thrown");
} catch(XmlPullParserException e) {
assertTrue(e.getMessage().contains("end tag name </body>"));
@ -720,7 +719,7 @@ public class PacketParserUtilsTest {
invalidControl = validControl.replace("Good Message Body", "Bad </message> Body");
try {
PacketParserUtils.parseMessage(TestUtils.getMessageParser(invalidControl));
PacketParserUtils.parseMessage(PacketParserUtils.getParserFor(invalidControl));
fail("Exception should be thrown");
} catch(XmlPullParserException e) {
assertTrue(e.getMessage().contains("end tag name </message>"));
@ -748,7 +747,7 @@ public class PacketParserUtilsTest {
.t("This is a test of the emergency broadcast system, 3.")
.asString(outputProperties);
Packet message = PacketParserUtils.parseMessage(TestUtils.getMessageParser(control));
Packet message = PacketParserUtils.parseStanza(control);
Diff xmlDiff = new Diff(control, message.toXML().toString());
xmlDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
assertTrue(xmlDiff.similar());
@ -758,7 +757,7 @@ public class PacketParserUtilsTest {
public void validateSimplePresence() throws Exception {
String stanza = "<presence from='juliet@example.com/balcony' to='romeo@example.net'/>";
Presence presence = PacketParserUtils.parsePresence(TestUtils.getPresenceParser(stanza));
Presence presence = PacketParserUtils.parsePresence(PacketParserUtils.getParserFor(stanza));
assertXMLEqual(stanza, presence.toXML().toString());
}
@ -767,7 +766,7 @@ public class PacketParserUtilsTest {
public void validatePresenceProbe() throws Exception {
String stanza = "<presence from='mercutio@example.com' id='xv291f38' to='juliet@example.com' type='unsubscribed'/>";
Presence presence = PacketParserUtils.parsePresence(TestUtils.getPresenceParser(stanza));
Presence presence = PacketParserUtils.parsePresence(PacketParserUtils.getParserFor(stanza));
assertXMLEqual(stanza, presence.toXML().toString());
assertEquals(Presence.Type.unsubscribed, presence.getType());
@ -781,7 +780,7 @@ public class PacketParserUtilsTest {
+ "<priority>1</priority>"
+ "</presence>";
Presence presence = PacketParserUtils.parsePresence(TestUtils.getPresenceParser(stanza));
Presence presence = PacketParserUtils.parsePresence(PacketParserUtils.getParserFor(stanza));
assertXMLEqual(stanza, presence.toXML().toString());
assertEquals(Presence.Type.unsubscribed, presence.getType());
assertEquals("dnd", presence.getMode().name());
@ -793,7 +792,7 @@ public class PacketParserUtilsTest {
@Test
public void parseContentDepthTest() throws Exception {
final String stanza = "<iq type='result' to='foo@bar.com' from='baz.com' id='42'/>";
XmlPullParser parser = TestUtils.getParser(stanza, "iq");
XmlPullParser parser = PacketParserUtils.getParserFor(stanza, "iq");
String content = PacketParserUtils.parseContentDepth(parser, 1);
assertEquals("", content);
}