neverJids, DefaultBehavior defaultBehavior)
- throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException,
- NotLoggedInException {
- Objects.requireNonNull(defaultBehavior, "Default behavior must be set");
- MamPrefsIQ mamPrefIQ = new MamPrefsIQ(alwaysJids, neverJids, defaultBehavior);
- return queryMamPrefs(mamPrefIQ);
- }
-
- /**
- * Update the preferences in the server.
- *
- * @param mamPrefs TODO javadoc me please
+ * @param mamPrefs the MAM preferences to set the archive to
* @return the currently active preferences after the operation.
* @throws NoResponseException if there was no response from the remote entity.
* @throws XMPPErrorException if there was an XMPP error returned.
diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/attention/packet/AttentionExtension.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/attention/packet/AttentionExtension.java
index cdc47d2cc..c107fe5c3 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/attention/packet/AttentionExtension.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/attention/packet/AttentionExtension.java
@@ -19,6 +19,7 @@ package org.jivesoftware.smackx.attention.packet;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.provider.ExtensionElementProvider;
+import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smack.xml.XmlPullParser;
/**
@@ -69,11 +70,8 @@ public class AttentionExtension implements ExtensionElement {
* @see org.jivesoftware.smack.packet.PacketExtension#toXML()
*/
@Override
- public String toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
- final StringBuilder sb = new StringBuilder();
- sb.append('<').append(getElementName()).append(" xmlns=\"").append(
- getNamespace()).append("\"/>");
- return sb.toString();
+ public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
+ return new XmlStringBuilder(this).closeEmptyElement();
}
/**
diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/usertune/element/UserTuneElement.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/usertune/element/UserTuneElement.java
index 3208557bb..36daa66af 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/usertune/element/UserTuneElement.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/usertune/element/UserTuneElement.java
@@ -161,11 +161,16 @@ public final class UserTuneElement implements ExtensionElement {
/**
* This class defines a Builder class for {@link UserTuneElement}.
- * {@link UserTuneElement} instance can be obtained using the {@link #build()} method as follows.
- * UserTuneElement.Builder builder = new UserTuneElement.Builder();
- * builder.setSource("Yessongs"); builder.setTitle("Heart of the Sunrise");
- * UserTuneElement userTuneElement = builder.build();
- * Values such as title, source, artist, length, source, track and uri can be set using their respective setters through {@link Builder}
+ * {@link UserTuneElement} instance can be obtained using the {@link #build()} method as follows.
+ *
+ * {@code
+ * UserTuneElement.Builder builder = UserTuneElement.getBuilder();
+ * builder.setSource("Yessongs");
+ * builder.setTitle("Heart of the Sunrise");
+ * UserTuneElement userTuneElement = builder.build();
+ * }
+ *
+ * Values such as title, source, artist, length, source, track and uri can be set using their respective setters through {@link Builder}.
*/
public static final class Builder {
private String artist;
diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/attention/AttentionElementTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/attention/AttentionElementTest.java
new file mode 100644
index 000000000..52be8b713
--- /dev/null
+++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/attention/AttentionElementTest.java
@@ -0,0 +1,38 @@
+/**
+ *
+ * Copyright 2020 Paul Schaub
+ *
+ * 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.smackx.attention;
+
+import static org.jivesoftware.smack.test.util.XmlUnitUtils.assertXmlSimilar;
+
+import org.jivesoftware.smackx.attention.packet.AttentionExtension;
+
+import org.junit.Test;
+
+public class AttentionElementTest {
+
+ /**
+ * Serialized Attention element.
+ * @see XEP-0224: Attention - Example 2
+ */
+ private static final String XML = "";
+
+ @Test
+ public void serializationTest() {
+ AttentionExtension extension = new AttentionExtension();
+ assertXmlSimilar(XML, extension.toXML());
+ }
+}
diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/nick/NickTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/nick/NickTest.java
new file mode 100644
index 000000000..9819642f0
--- /dev/null
+++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/nick/NickTest.java
@@ -0,0 +1,83 @@
+/**
+ *
+ * Copyright 2020 Paul Schaub
+ *
+ * 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.smackx.nick;
+
+import static org.jivesoftware.smack.test.util.XmlUnitUtils.assertXmlSimilar;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
+
+import java.io.IOException;
+
+import org.jivesoftware.smack.parsing.SmackParsingException;
+import org.jivesoftware.smack.test.util.SmackTestUtil;
+import org.jivesoftware.smack.xml.XmlPullParserException;
+import org.jivesoftware.smackx.nick.packet.Nick;
+import org.jivesoftware.smackx.nick.provider.NickProvider;
+
+import org.junit.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.EnumSource;
+
+public class NickTest {
+ /**
+ * see XEP-0172: User Nickname - Example 3
+ */
+ private static final String XML = "Ishmael";
+
+ @Test
+ public void disallowEmptyNickTest() {
+ assertThrows("Empty String as argument MUST cause IllegalArgumentException.",
+ IllegalArgumentException.class, () -> new Nick(""));
+ }
+
+ @Test
+ public void disallowNullNickTest() {
+ assertThrows("Null argument MUST cause IllegalArgumentException.",
+ IllegalArgumentException.class, () -> new Nick(null));
+ }
+
+
+ @Test
+ public void serializationTest() {
+ Nick nick = new Nick("Ishmael");
+
+ assertXmlSimilar(XML, nick.toXML());
+ }
+
+ @ParameterizedTest
+ @EnumSource(SmackTestUtil.XmlPullParserKind.class)
+ public void deserializationTest(SmackTestUtil.XmlPullParserKind parserKind)
+ throws XmlPullParserException, IOException, SmackParsingException {
+ Nick nick = SmackTestUtil.parse(XML, NickProvider.class, parserKind);
+
+ assertNotNull(nick);
+ assertEquals("Ishmael", nick.getName());
+ }
+
+ @Test
+ public void nicksAreEscapedTest() {
+ String name = "\"'&";
+
+ Nick nick = new Nick(name);
+
+ assertXmlSimilar("" +
+ "</nick>"'&" +
+ "", nick.toXML());
+ assertEquals(name, nick.getName());
+ }
+}
diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smack/tcp/XmppNioTcpConnectionLowLevelIntegrationTest.java b/smack-integration-test/src/main/java/org/jivesoftware/smack/c2s/ModularXmppClientToServerConnectionLowLevelIntegrationTest.java
similarity index 64%
rename from smack-integration-test/src/main/java/org/jivesoftware/smack/tcp/XmppNioTcpConnectionLowLevelIntegrationTest.java
rename to smack-integration-test/src/main/java/org/jivesoftware/smack/c2s/ModularXmppClientToServerConnectionLowLevelIntegrationTest.java
index 5971ceda6..c5a1564c6 100644
--- a/smack-integration-test/src/main/java/org/jivesoftware/smack/tcp/XmppNioTcpConnectionLowLevelIntegrationTest.java
+++ b/smack-integration-test/src/main/java/org/jivesoftware/smack/c2s/ModularXmppClientToServerConnectionLowLevelIntegrationTest.java
@@ -14,23 +14,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jivesoftware.smack.tcp;
+package org.jivesoftware.smack.c2s;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import org.jivesoftware.smack.SmackException;
+import org.jivesoftware.smack.SmackException.NoResponseException;
+import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnection;
+import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.igniterealtime.smack.inttest.AbstractSmackSpecificLowLevelIntegrationTest;
import org.igniterealtime.smack.inttest.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
-public class XmppNioTcpConnectionLowLevelIntegrationTest extends AbstractSmackSpecificLowLevelIntegrationTest {
+public class ModularXmppClientToServerConnectionLowLevelIntegrationTest extends AbstractSmackSpecificLowLevelIntegrationTest {
- public XmppNioTcpConnectionLowLevelIntegrationTest(SmackIntegrationTestEnvironment environment) {
+ public ModularXmppClientToServerConnectionLowLevelIntegrationTest(SmackIntegrationTestEnvironment environment) {
super(environment, ModularXmppClientToServerConnection.class);
}
@@ -44,4 +46,11 @@ public class XmppNioTcpConnectionLowLevelIntegrationTest extends AbstractSmackSp
connection.disconnect();
}
+ @SmackIntegrationTest
+ public void testDisconnectNeverConnected()
+ throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException {
+ ModularXmppClientToServerConnection connection = getSpecificUnconnectedConnection();
+
+ connection.disconnect();
+ }
}
diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smack/c2s/package-info.java b/smack-integration-test/src/main/java/org/jivesoftware/smack/c2s/package-info.java
new file mode 120000
index 000000000..b79177a68
--- /dev/null
+++ b/smack-integration-test/src/main/java/org/jivesoftware/smack/c2s/package-info.java
@@ -0,0 +1 @@
+../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/c2s/package-info.java
\ No newline at end of file
diff --git a/smack-legacy/src/main/resources/org.jivesoftware.smack.legacy/legacy.providers b/smack-legacy/src/main/resources/org.jivesoftware.smack.legacy/legacy.providers
index 76b426839..5c8fe3104 100644
--- a/smack-legacy/src/main/resources/org.jivesoftware.smack.legacy/legacy.providers
+++ b/smack-legacy/src/main/resources/org.jivesoftware.smack.legacy/legacy.providers
@@ -16,4 +16,214 @@
org.jivesoftware.smackx.xroster.provider.RosterExchangeProvider
+
+
+ offer
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.OfferRequestProvider
+
+
+
+ offer-revoke
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.OfferRevokeProvider
+
+
+
+ agent-status-request
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.AgentStatusRequest$Provider
+
+
+
+ transcripts
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.TranscriptsProvider
+
+
+
+ transcript
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.TranscriptProvider
+
+
+
+ workgroups
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.AgentWorkgroups$Provider
+
+
+
+ agent-info
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.AgentInfo$Provider
+
+
+
+ transcript-search
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.TranscriptSearch$Provider
+
+
+
+ occupants-info
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.OccupantsInfo$Provider
+
+
+
+ chat-settings
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.settings.ChatSettings$InternalProvider
+
+
+
+ chat-notes
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.ext.notes.ChatNotes$Provider
+
+
+
+ chat-sessions
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.ext.history.AgentChatHistory$InternalProvider
+
+
+
+ offline-settings
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.settings.OfflineSettings$InternalProvider
+
+
+
+ sound-settings
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.settings.SoundSettings$InternalProvider
+
+
+
+ workgroup-properties
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.settings.WorkgroupProperties$InternalProvider
+
+
+
+
+ search-settings
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.settings.SearchSettings$InternalProvider
+
+
+
+ workgroup-form
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.ext.forms.WorkgroupForm$InternalProvider
+
+
+
+ macros
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.ext.macros.Macros$InternalProvider
+
+
+
+ chat-metadata
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.ext.history.ChatMetadata$Provider
+
+
+
+ generic-metadata
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.settings.GenericSettings$InternalProvider
+
+
+
+ monitor
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.MonitorPacket$InternalProvider
+
+
+
+
+ queue-status
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.QueueUpdate$Provider
+
+
+
+ workgroup
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.WorkgroupInformation$Provider
+
+
+
+ metadata
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.MetaDataProvider
+
+
+
+ session
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.SessionID$Provider
+
+
+
+ user
+ http://jivesoftware.com/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.UserID$Provider
+
+
+
+ agent-status
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.AgentStatus$Provider
+
+
+
+ notify-queue-details
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.QueueDetails$Provider
+
+
+
+ notify-queue
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.QueueOverview$Provider
+
+
+
+ invite
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.RoomInvitation$Provider
+
+
+
+ transfer
+ http://jabber.org/protocol/workgroup
+ org.jivesoftware.smackx.workgroup.packet.RoomTransfer$Provider
+
+
diff --git a/smack-legacy/src/main/resources/org.jivesoftware.smack.legacy/workgroup.providers b/smack-legacy/src/main/resources/org.jivesoftware.smack.legacy/workgroup.providers
deleted file mode 100644
index 2c7025210..000000000
--- a/smack-legacy/src/main/resources/org.jivesoftware.smack.legacy/workgroup.providers
+++ /dev/null
@@ -1,215 +0,0 @@
-
-
-
-
-
-
- offer
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.OfferRequestProvider
-
-
-
- offer-revoke
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.OfferRevokeProvider
-
-
-
- agent-status-request
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.AgentStatusRequest$Provider
-
-
-
- transcripts
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.TranscriptsProvider
-
-
-
- transcript
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.TranscriptProvider
-
-
-
- workgroups
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.AgentWorkgroups$Provider
-
-
-
- agent-info
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.AgentInfo$Provider
-
-
-
- transcript-search
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.TranscriptSearch$Provider
-
-
-
- occupants-info
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.OccupantsInfo$Provider
-
-
-
- chat-settings
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.settings.ChatSettings$InternalProvider
-
-
-
- chat-notes
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.ext.notes.ChatNotes$Provider
-
-
-
- chat-sessions
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.ext.history.AgentChatHistory$InternalProvider
-
-
-
- offline-settings
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.settings.OfflineSettings$InternalProvider
-
-
-
- sound-settings
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.settings.SoundSettings$InternalProvider
-
-
-
- workgroup-properties
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.settings.WorkgroupProperties$InternalProvider
-
-
-
-
- search-settings
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.settings.SearchSettings$InternalProvider
-
-
-
- workgroup-form
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.ext.forms.WorkgroupForm$InternalProvider
-
-
-
- macros
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.ext.macros.Macros$InternalProvider
-
-
-
- chat-metadata
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.ext.history.ChatMetadata$Provider
-
-
-
- generic-metadata
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.settings.GenericSettings$InternalProvider
-
-
-
- monitor
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.MonitorPacket$InternalProvider
-
-
-
-
- queue-status
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.QueueUpdate$Provider
-
-
-
- workgroup
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.WorkgroupInformation$Provider
-
-
-
- metadata
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.MetaDataProvider
-
-
-
- session
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.SessionID$Provider
-
-
-
- user
- http://jivesoftware.com/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.UserID$Provider
-
-
-
- agent-status
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.AgentStatus$Provider
-
-
-
- notify-queue-details
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.QueueDetails$Provider
-
-
-
- notify-queue
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.QueueOverview$Provider
-
-
-
- invite
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.RoomInvitation$Provider
-
-
-
- transfer
- http://jabber.org/protocol/workgroup
- org.jivesoftware.smackx.workgroup.packet.RoomTransfer$Provider
-
-
-