From c06cf72337c0ef439f2ab4a21ab461e28b083b46 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 29 Jan 2022 21:47:04 +0100 Subject: [PATCH] [core] Support IqProvider in SmackTestUtil --- .../smack/test/util/SmackTestUtil.java | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/smack-core/src/testFixtures/java/org/jivesoftware/smack/test/util/SmackTestUtil.java b/smack-core/src/testFixtures/java/org/jivesoftware/smack/test/util/SmackTestUtil.java index a81c11c97..d7555d048 100644 --- a/smack-core/src/testFixtures/java/org/jivesoftware/smack/test/util/SmackTestUtil.java +++ b/smack-core/src/testFixtures/java/org/jivesoftware/smack/test/util/SmackTestUtil.java @@ -1,6 +1,6 @@ /** * - * Copyright 2019 Florian Schmaus + * Copyright 2019-2022 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,8 +28,13 @@ import java.util.function.Predicate; import javax.xml.namespace.QName; import org.jivesoftware.smack.packet.Element; +import org.jivesoftware.smack.packet.IqData; import org.jivesoftware.smack.parsing.SmackParsingException; +import org.jivesoftware.smack.provider.AbstractProvider; +import org.jivesoftware.smack.provider.IqProvider; import org.jivesoftware.smack.provider.Provider; +import org.jivesoftware.smack.util.PacketParserUtils; +import org.jivesoftware.smack.util.ParserUtils; import org.jivesoftware.smack.xml.XmlPullParser; import org.jivesoftware.smack.xml.XmlPullParserException; import org.jivesoftware.smack.xml.XmlPullParserFactory; @@ -57,41 +62,56 @@ public class SmackTestUtil { } } - public static > E parse(CharSequence xml, Class

providerClass, XmlPullParserKind parserKind) + public static > E parse(CharSequence xml, Class

providerClass, XmlPullParserKind parserKind) throws XmlPullParserException, IOException, SmackParsingException { P provider = providerClassToProvider(providerClass); return parse(xml, provider, parserKind); } - public static > E parse(InputStream inputStream, Class

providerClass, XmlPullParserKind parserKind) + public static > E parse(InputStream inputStream, Class

providerClass, XmlPullParserKind parserKind) throws XmlPullParserException, IOException, SmackParsingException { P provider = providerClassToProvider(providerClass); return parse(inputStream, provider, parserKind); } - public static > E parse(Reader reader, Class

providerClass, XmlPullParserKind parserKind) + public static > E parse(Reader reader, Class

providerClass, XmlPullParserKind parserKind) throws XmlPullParserException, IOException, SmackParsingException { P provider = providerClassToProvider(providerClass); return parse(reader, provider, parserKind); } - public static E parse(CharSequence xml, Provider provider, XmlPullParserKind parserKind) + public static E parse(CharSequence xml, AbstractProvider provider, XmlPullParserKind parserKind) throws XmlPullParserException, IOException, SmackParsingException { String xmlString = xml.toString(); Reader reader = new StringReader(xmlString); return parse(reader, provider, parserKind); } - public static E parse(InputStream inputStream, Provider provider, XmlPullParserKind parserKind) + public static E parse(InputStream inputStream, AbstractProvider provider, XmlPullParserKind parserKind) throws XmlPullParserException, IOException, SmackParsingException { InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); return parse(inputStreamReader, provider, parserKind); } - public static E parse(Reader reader, Provider provider, XmlPullParserKind parserKind) + @SuppressWarnings("unchecked") + public static E parse(Reader reader, AbstractProvider abstractProvider, XmlPullParserKind parserKind) throws XmlPullParserException, IOException, SmackParsingException { XmlPullParser parser = getParserFor(reader, parserKind); - E element = provider.parse(parser); + + final E element; + if (abstractProvider instanceof Provider) { + Provider provider = (Provider) abstractProvider; + element = provider.parse(parser); + } else if (abstractProvider instanceof IqProvider) { + IqData iqData = PacketParserUtils.parseIqData(parser); + parser.next(); + ParserUtils.forwardToStartElement(parser); + IqProvider iqProvider = (IqProvider) abstractProvider; + element = (E) iqProvider.parse(parser, iqData); + } else { + throw new AssertionError(); + } + return element; } @@ -126,7 +146,7 @@ public class SmackTestUtil { } @SuppressWarnings("unchecked") - private static > P providerClassToProvider(Class

providerClass) { + private static > P providerClassToProvider(Class

providerClass) { P provider; try {