diff --git a/test/org/jivesoftware/smack/PrivacyClient.java b/test/org/jivesoftware/smack/PrivacyClient.java new file mode 100644 index 000000000..4f31c76ef --- /dev/null +++ b/test/org/jivesoftware/smack/PrivacyClient.java @@ -0,0 +1,41 @@ +package org.jivesoftware.smack; + +import java.util.List; + +import org.jivesoftware.smack.packet.Privacy; + +/** + * This class supports automated tests about privacy communication from the + * server to the client. + * + * @author Francisco Vives + */ + +public class PrivacyClient implements PrivacyListListener { + /** + * holds if the receiver list was modified + */ + private boolean wasModified = false; + + /** + * holds a privacy to hold server requests Clients should not use Privacy + * class since it is private for the smack framework. + */ + private Privacy privacy = new Privacy(); + + public PrivacyClient(PrivacyListManager manager) { + super(); + } + + public void setPrivacyList(String listName, List listItem) { + privacy.setPrivacyList(listName, listItem); + } + + public void updatedPrivacyList(String listName) { + this.wasModified = true; + } + + public boolean wasModified() { + return this.wasModified; + } +} diff --git a/test/org/jivesoftware/smack/PrivacyTest.java b/test/org/jivesoftware/smack/PrivacyTest.java new file mode 100644 index 000000000..0e41d5f4f --- /dev/null +++ b/test/org/jivesoftware/smack/PrivacyTest.java @@ -0,0 +1,455 @@ +package org.jivesoftware.smack; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.jivesoftware.smack.packet.PrivacyItem; +import org.jivesoftware.smack.packet.PrivacyItem.PrivacyRule; +import org.jivesoftware.smack.test.SmackTestCase; + +public class PrivacyTest extends SmackTestCase { + + public PrivacyTest(String arg0) { + super(arg0); + } + + + /** + * Check when a client set a new active list. + */ + public void testCreateActiveList() { + try { + String listName = "testCreateActiveList"; + + PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(getConnection(0)); + PrivacyClient client = new PrivacyClient(privacyManager); + privacyManager.addListener(client); + + // Add the list that will be set as the active + ArrayList items = new ArrayList(); + PrivacyItem item = new PrivacyItem(PrivacyRule.JID, true, 1); + item.setValue(getConnection(0).getUser()); + items.add(item); + privacyManager.createPrivacyList(listName, items); + + Thread.sleep(500); + + // Set the active list + privacyManager.setActiveListName(listName); + + Thread.sleep(500); + + // Assert the list composition. + assertEquals(listName, privacyManager.getActiveList().toString()); + List privacyItems = privacyManager.getPrivacyList(listName).getItems(); + assertEquals(1, privacyItems.size()); + + // Assert the privacy item composition + PrivacyItem receivedItem = (PrivacyItem) privacyItems.get(0); + assertEquals(1, receivedItem.getOrder()); + assertEquals(PrivacyRule.JID, receivedItem.getType()); + assertEquals(true, receivedItem.isAllow()); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + /** + * Check when a client set more than one list. + */ + public void testCreateTwoLists() { + try { + String listName1 = "1testCreateTwoLists"; + String listName2 = "2testCreateTwoLists"; + String groupName = "testCreateTwoListsGroup"; + + PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(getConnection(0)); + PrivacyClient client = new PrivacyClient(privacyManager); + privacyManager.addListener(client); + + // Add a list + ArrayList items = new ArrayList(); + PrivacyItem item = new PrivacyItem(PrivacyRule.JID, true, 1); + item.setValue(getConnection(0).getUser()); + items.add(item); + privacyManager.createPrivacyList(listName1, items); + + // Add the another list + ArrayList itemsList2 = new ArrayList(); + item = new PrivacyItem(PrivacyRule.GROUP, false, 2); + item.setValue(groupName); + item.setFilterMessage(true); + itemsList2.add(item); + privacyManager.createPrivacyList(listName2, itemsList2); + + Thread.sleep(500); + + // Assert the list composition. + PrivacyList[] privacyItems = privacyManager.getPrivacyLists(); + PrivacyList receivedList1 = null; + PrivacyList receivedList2 = null; + for (int i = 0; i < privacyItems.length; i++) { + if (listName1.equals(privacyItems[i].toString())) { + receivedList1 = privacyItems[i]; + } + if (listName2.equals(privacyItems[i].toString())) { + receivedList2 = privacyItems[i]; + } + } + + + PrivacyItem receivedItem; + // Assert the list 1 + assertNotNull(receivedList1); + assertEquals(1, receivedList1.getItems().size()); + receivedItem = (PrivacyItem) receivedList1.getItems().get(0); + assertEquals(1, receivedItem.getOrder()); + assertEquals(PrivacyRule.JID, receivedItem.getType()); + assertEquals(true, receivedItem.isAllow()); + + // Assert the list 2 + assertNotNull(receivedList2); + assertEquals(1, receivedList2.getItems().size()); + receivedItem = (PrivacyItem) receivedList2.getItems().get(0); + assertEquals(2, receivedItem.getOrder()); + assertEquals(PrivacyRule.GROUP, receivedItem.getType()); + assertEquals(false, receivedItem.isAllow()); + assertEquals(groupName, receivedItem.getValue()); + assertEquals(false, receivedItem.isFilterEverything()); + assertEquals(true, receivedItem.isFilterMessage()); + assertEquals(false, receivedItem.isFilterPresence_in()); + assertEquals(false, receivedItem.isFilterPresence_out()); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + /** + * Check when a client set a new list and then update its content. + */ + public void testCreateAndUpdateList() { + try { + String listName = "testCreateAndUpdateList"; + String user = "tybalt@example.com"; + + PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(getConnection(0)); + PrivacyClient client = new PrivacyClient(privacyManager); + privacyManager.addListener(client); + + // Add the list that will be set as the active + ArrayList items = new ArrayList(); + PrivacyItem item = new PrivacyItem(PrivacyRule.JID, true, 1); + item.setValue(getConnection(0).getUser()); + items.add(item); + privacyManager.createPrivacyList(listName, items); + + Thread.sleep(500); + + // Remove the existing item and add a new one. + items.remove(item); + item = new PrivacyItem(PrivacyRule.JID, false, 2); + item.setValue(user); + item.setFilterPresence_out(true); + item.setFilterPresence_in(true); + item.setFilterMessage(true); + items.add(item); + + // Update the list on server + privacyManager.updatePrivacyList(listName, items); + + Thread.sleep(500); + + // Assert the list composition. + PrivacyList list = privacyManager.getPrivacyList(listName); + assertEquals(1, list.getItems().size()); + + // Assert the privacy item composition + PrivacyItem receivedItem = (PrivacyItem) list.getItems().get(0); + assertEquals(2, receivedItem.getOrder()); + assertEquals(PrivacyRule.JID, receivedItem.getType()); + assertEquals(false, receivedItem.isAllow()); + assertEquals(user, receivedItem.getValue()); + assertEquals(false, receivedItem.isFilterEverything()); + assertEquals(true, receivedItem.isFilterMessage()); + assertEquals(true, receivedItem.isFilterPresence_in()); + assertEquals(true, receivedItem.isFilterPresence_out()); + assertEquals(true, client.wasModified()); + + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + /** + * Check when a client denies the use of a default list. + */ + public void testDenyDefaultList() { + try { + PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(getConnection(0)); + PrivacyClient client = new PrivacyClient(privacyManager); + privacyManager.addListener(client); + + privacyManager.declineDefaultList(); + + Thread.sleep(500); + + try { + // The list should not exist and an error will be raised + privacyManager.getDefaultList(); + } catch (XMPPException xmppException) { + assertEquals(404, xmppException.getXMPPError().getCode()); + } + + assertEquals(null, null); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + /** + * Check when a client denies the use of the active list. + */ + public void testDenyActiveList() { + try { + PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(getConnection(0)); + PrivacyClient client = new PrivacyClient(privacyManager); + privacyManager.addListener(client); + + privacyManager.declineActiveList(); + + Thread.sleep(500); + + try { + // The list should not exist and an error will be raised + privacyManager.getActiveList(); + } catch (XMPPException xmppException) { + assertEquals(404, xmppException.getXMPPError().getCode()); + } + + assertEquals(null, null); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + /** + * Check when a client set a new default list. + */ + public void testCreateDefaultList() { + try { + String listName = "testCreateDefaultList"; + + PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(getConnection(0)); + PrivacyClient client = new PrivacyClient(privacyManager); + privacyManager.addListener(client); + + // Add the list that will be set as the Default + ArrayList items = new ArrayList(); + PrivacyItem item = new PrivacyItem(PrivacyRule.JID, true, 1); + item.setValue(getConnection(0).getUser()); + items.add(item); + privacyManager.createPrivacyList(listName, items); + + Thread.sleep(500); + + // Set the Default list + privacyManager.setDefaultListName(listName); + + Thread.sleep(500); + + // Assert the list composition. + assertEquals(listName, privacyManager.getDefaultList().toString()); + List privacyItems = privacyManager.getPrivacyList(listName).getItems(); + assertEquals(1, privacyItems.size()); + + // Assert the privacy item composition + PrivacyItem receivedItem = (PrivacyItem) privacyItems.get(0); + assertEquals(1, receivedItem.getOrder()); + assertEquals(PrivacyRule.JID, receivedItem.getType()); + assertEquals(true, receivedItem.isAllow()); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + /** + * Check when a client add a new list and then remove it. + */ + public void testRemoveList() { + try { + String listName = "testRemoveList"; + + PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(getConnection(0)); + PrivacyClient client = new PrivacyClient(privacyManager); + privacyManager.addListener(client); + + // Add the list that will be set as the Default + ArrayList items = new ArrayList(); + PrivacyItem item = new PrivacyItem(PrivacyRule.JID, true, 1); + item.setValue(getConnection(0).getUser()); + items.add(item); + privacyManager.createPrivacyList(listName, items); + + Thread.sleep(500); + + // Set the Default list + privacyManager.setDefaultListName(listName); + + Thread.sleep(500); + + privacyManager.deletePrivacyList(listName); + + Thread.sleep(500); + + try { + // The list should not exist and an error will be raised + privacyManager.getPrivacyList(listName); + } catch (XMPPException xmppException) { + assertEquals(404, xmppException.getXMPPError().getCode()); + } + + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + /** + * Check different types of privacy items. + */ + public void testPrivacyItems() { + try { + String listName = "testPrivacyItems"; + String user = "tybalt@example.com"; + String groupName = "enemies"; + + PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(getConnection(0)); + PrivacyClient client = new PrivacyClient(privacyManager); + privacyManager.addListener(client); + + PrivacyItem[] originalPrivacyItems = new PrivacyItem[12]; + int i=0; + + // Items to test JID + PrivacyItem item = new PrivacyItem(PrivacyRule.JID, true, i); + item.setValue(i + "_" + user); + originalPrivacyItems[i] = item; + i = i + 1; + + item = new PrivacyItem(PrivacyRule.JID, false, i); + item.setValue(i + "_" + user); + originalPrivacyItems[i] = item; + i = i + 1; + + // Items to test suscription + item = new PrivacyItem(PrivacyRule.SUBSCRIPTION, true, i); + item.setValue(PrivacyRule.SUBSCRIPTION_BOTH); + originalPrivacyItems[i] = item; + i = i + 1; + + item = new PrivacyItem(PrivacyRule.SUBSCRIPTION, false, i); + item.setValue(PrivacyRule.SUBSCRIPTION_FROM); + originalPrivacyItems[i] = item; + i = i + 1; + + item = new PrivacyItem(PrivacyRule.SUBSCRIPTION, true, i); + item.setValue(PrivacyRule.SUBSCRIPTION_TO); + originalPrivacyItems[i] = item; + i = i + 1; + + item = new PrivacyItem(PrivacyRule.SUBSCRIPTION, false, i); + item.setValue(PrivacyRule.SUBSCRIPTION_NONE); + originalPrivacyItems[i] = item; + i = i + 1; + + // Items to test Group + item = new PrivacyItem(PrivacyRule.GROUP, false, i); + item.setValue(groupName); + originalPrivacyItems[i] = item; + i = i + 1; + + // Items to test messages + item = new PrivacyItem(PrivacyRule.GROUP, false, i); + item.setValue(groupName); + item.setFilterMessage(true); + originalPrivacyItems[i] = item; + i = i + 1; + + // Items to test presence notifications + item = new PrivacyItem(PrivacyRule.GROUP, false, i); + item.setValue(groupName); + item.setFilterMessage(true); + originalPrivacyItems[i] = item; + i = i + 1; + + item = new PrivacyItem(null, false, i); + item.setFilterPresence_in(true); + originalPrivacyItems[i] = item; + i = i + 1; + + item = new PrivacyItem(PrivacyRule.SUBSCRIPTION, false, i); + item.setValue(PrivacyRule.SUBSCRIPTION_TO); + item.setFilterPresence_out(true); + originalPrivacyItems[i] = item; + i = i + 1; + + item = new PrivacyItem(PrivacyRule.JID, false, i); + item.setValue(i + "_" + user); + item.setFilterPresence_out(true); + item.setFilterPresence_in(true); + item.setFilterMessage(true); + originalPrivacyItems[i] = item; + i = i + 1; + + + // Set the new privacy list + privacyManager.createPrivacyList(listName, Arrays.asList(originalPrivacyItems)); + + Thread.sleep(500); + + // Assert the server list composition. + List privacyItems = privacyManager.getPrivacyList(listName).getItems(); + assertEquals(originalPrivacyItems.length, privacyItems.size()); + + // Assert the local and server privacy item composition + PrivacyItem originalItem; + PrivacyItem receivedItem; + int index = 0; + for (int j = 0; j < originalPrivacyItems.length; j++) { + // Look for the same server and original items + receivedItem = (PrivacyItem) privacyItems.get(j); + index = 0; + while ((index < originalPrivacyItems.length) + && (originalPrivacyItems[index].getOrder() != receivedItem.getOrder())) { + index++; + } + originalItem = originalPrivacyItems[index]; + + // Assert the items + assertEquals(originalItem.getOrder(), receivedItem.getOrder()); + assertEquals(originalItem.getType(), receivedItem.getType()); + assertEquals(originalItem.isAllow(), receivedItem.isAllow()); + assertEquals(originalItem.getValue(), receivedItem.getValue()); + assertEquals(originalItem.isFilterEverything(), receivedItem.isFilterEverything()); + assertEquals(originalItem.isFilterIQ(), receivedItem.isFilterIQ()); + assertEquals(originalItem.isFilterMessage(), receivedItem.isFilterMessage()); + assertEquals(originalItem.isFilterPresence_in(), receivedItem.isFilterPresence_in()); + assertEquals(originalItem.isFilterPresence_out(), receivedItem.isFilterPresence_out()); + } + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + protected int getMaxConnections() { + return 1; + } +} diff --git a/test/org/jivesoftware/smack/packet/PrivacyProviderTest.java b/test/org/jivesoftware/smack/packet/PrivacyProviderTest.java new file mode 100644 index 000000000..9e5a0ca91 --- /dev/null +++ b/test/org/jivesoftware/smack/packet/PrivacyProviderTest.java @@ -0,0 +1,370 @@ +package org.jivesoftware.smack.packet; + +import java.io.StringReader; + +import org.jivesoftware.smack.provider.PrivacyProvider; +import org.jivesoftware.smack.test.SmackTestCase; +import org.xmlpull.mxp1.MXParser; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +/** + * Test the PrivacyProvider class with valids privacy xmls + * + * @author Francisco Vives + */ +public class PrivacyProviderTest extends SmackTestCase { + + /** + * Constructor for PrivacyTest. + * @param arg0 + */ + public PrivacyProviderTest(String arg0) { + super(arg0); + } + + public static void main(String args[]) { + try { + new PrivacyProviderTest(null).testFull(); + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + } + + /** + * Check the parser with an xml with all kind of stanzas. + * To create the xml string based from an xml file, replace:\n with: "\n + " + */ + public void testFull() { + // Make the XML to test + String xml = "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " "; + + try { + // Create the xml parser + XmlPullParser parser = getParserFromXML(xml); + // Create a packet from the xml + Privacy packet = (Privacy) (new PrivacyProvider()).parseIQ(parser); + + // check if it exist + assertNotNull(packet); + // assertEquals(xml, packet.getChildElementXML()); + + // check the default and active names + assertEquals("testFilter", packet.getActiveName()); + assertEquals("testSubscription", packet.getDefaultName()); + + // check the list + assertEquals(2, packet.getPrivacyList("testFilter").size()); + assertEquals(5, packet.getPrivacyList("testSubscription").size()); + assertEquals(4, packet.getPrivacyList("testJID").size()); + assertEquals(2, packet.getPrivacyList("testGroup").size()); + assertEquals(0, packet.getPrivacyList("testEmpty").size()); + + // check each privacy item + PrivacyItem item = packet.getItem("testGroup", 4); + assertEquals("Enemies", item.getValue()); + assertEquals("group", item.getType()); + assertEquals(false, item.isAllow()); + assertEquals(true, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(false, item.isFilterEverything()); + + item = packet.getItem("testFilter", 1); + assertEquals("tybalt@example.com", item.getValue()); + assertEquals("jid", item.getType()); + assertEquals(false, item.isAllow()); + assertEquals(false, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(true, item.isFilterEverything()); + + item = packet.getItem("testFilter", 2); + assertEquals(null, item.getValue()); + assertEquals(null, item.getType()); + assertEquals(true, item.isAllow()); + assertEquals(true, item.isFilterMessage()); + assertEquals(true, item.isFilterIQ()); + assertEquals(true, item.isFilterPresence_in()); + assertEquals(true, item.isFilterPresence_out()); + assertEquals(false, item.isFilterEverything()); + + // TEST THE testSubscription LIST + item = packet.getItem("testSubscription", 10); + assertEquals("both", item.getValue()); + assertEquals("subscription", item.getType()); + assertEquals(true, item.isAllow()); + assertEquals(false, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(true, item.isFilterEverything()); + + item = packet.getItem("testSubscription", 11); + assertEquals("to", item.getValue()); + assertEquals("subscription", item.getType()); + assertEquals(true, item.isAllow()); + assertEquals(false, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(true, item.isFilterEverything()); + + item = packet.getItem("testSubscription", 12); + assertEquals("from", item.getValue()); + assertEquals("subscription", item.getType()); + assertEquals(true, item.isAllow()); + assertEquals(false, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(true, item.isFilterEverything()); + + item = packet.getItem("testSubscription", 5); + assertEquals("none", item.getValue()); + assertEquals("subscription", item.getType()); + assertEquals(false, item.isAllow()); + assertEquals(true, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(false, item.isFilterEverything()); + + item = packet.getItem("testSubscription", 15); + assertEquals(null, item.getValue()); + assertEquals(null, item.getType()); + assertEquals(false, item.isAllow()); + assertEquals(false, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(true, item.isFilterEverything()); + + // TEST THE testJID LIST + + item = packet.getItem("testJID", 6); + assertEquals("juliet@example.com", item.getValue()); + assertEquals("jid", item.getType()); + assertEquals(true, item.isAllow()); + assertEquals(false, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(true, item.isFilterEverything()); + + item = packet.getItem("testJID", 7); + assertEquals("benvolio@example.org/palm", item.getValue()); + assertEquals("jid", item.getType()); + assertEquals(false, item.isAllow()); + assertEquals(false, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(true, item.isFilterEverything()); + + item = packet.getItem("testJID", 42); + assertEquals(null, item.getValue()); + assertEquals("jid", item.getType()); + assertEquals(true, item.isAllow()); + assertEquals(false, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(true, item.isFilterEverything()); + + item = packet.getItem("testJID", 666); + assertEquals(null, item.getValue()); + assertEquals(null, item.getType()); + assertEquals(false, item.isAllow()); + assertEquals(false, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(true, item.isFilterEverything()); + + // TEST THE testGroup LIST + + item = packet.getItem("testGroup", 4); + assertEquals("Enemies", item.getValue()); + assertEquals("group", item.getType()); + assertEquals(false, item.isAllow()); + assertEquals(true, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(false, item.isFilterEverything()); + + item = packet.getItem("testGroup", 666); + assertEquals(null, item.getValue()); + assertEquals(null, item.getType()); + assertEquals(false, item.isAllow()); + assertEquals(false, item.isFilterMessage()); + assertEquals(false, item.isFilterIQ()); + assertEquals(false, item.isFilterPresence_in()); + assertEquals(false, item.isFilterPresence_out()); + assertEquals(true, item.isFilterEverything()); + + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + + /** + * Check the parser with an xml with empty lists. It includes the active, + * default and special list. + * To create the xml string based from an xml file, replace:\n with: "\n + " + */ + public void testEmptyLists() { + // Make the XML to test + String xml = "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " "; + + try { + // Create the xml parser + XmlPullParser parser = getParserFromXML(xml); + // Create a packet from the xml + Privacy packet = (Privacy) (new PrivacyProvider()).parseIQ(parser); + + assertNotNull(packet); + assertNotNull(packet.getChildElementXML()); + + assertEquals("public", packet.getDefaultName()); + assertEquals(null, packet.getActiveName()); + + assertEquals(0, packet.getPrivacyList("public").size()); + assertEquals(0, packet.getPrivacyList("private").size()); + assertEquals(0, packet.getPrivacyList("special").size()); + + assertEquals(true, packet.isDeclineActiveList()); + assertEquals(false, packet.isDeclineDefaultList()); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + /** + * Check the parser with an xml with empty lists. It includes the active, + * default and special list. + * To create the xml string based from an xml file, replace:\n with: "\n + " + */ + public void testDeclineLists() { + // Make the XML to test + String xml = "" + + " " + + " " + + " " + + " " + + " " + + " "; + + try { + // Create the xml parser + XmlPullParser parser = getParserFromXML(xml); + // Create a packet from the xml + Privacy packet = (Privacy) (new PrivacyProvider()).parseIQ(parser); + + assertNotNull(packet); + + assertEquals(null, packet.getDefaultName()); + assertEquals(null, packet.getActiveName()); + + assertEquals(true, packet.isDeclineActiveList()); + assertEquals(true, packet.isDeclineDefaultList()); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + private XmlPullParser getParserFromXML(String xml) throws XmlPullParserException { + MXParser parser = new MXParser(); + parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); + parser.setInput(new StringReader(xml)); + return parser; + } + + protected int getMaxConnections() { + return 0; + } +} diff --git a/test/org/jivesoftware/smack/util/XMPPErrorTest.java b/test/org/jivesoftware/smack/util/XMPPErrorTest.java new file mode 100644 index 000000000..0468f3a59 --- /dev/null +++ b/test/org/jivesoftware/smack/util/XMPPErrorTest.java @@ -0,0 +1,187 @@ +package org.jivesoftware.smack.util; + +import java.io.StringReader; + +import org.jivesoftware.smack.packet.XMPPError; +import org.jivesoftware.smack.test.SmackTestCase; +import org.xmlpull.mxp1.MXParser; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +public class XMPPErrorTest extends SmackTestCase { + + public XMPPErrorTest(String arg0) { + super(arg0); + } + + /** + * Check the creation of a new xmppError locally. + */ + public void testLocalErrorCreation() { + XMPPError error = new XMPPError(XMPPError.Condition.item_not_found); + error.toXML(); + + assertEquals(error.getCondition(), "item-not-found"); + assertEquals(error.getCode(), 404); + assertEquals(error.getType(), XMPPError.Type.CANCEL); + assertNull(error.getMessage()); + } + + /** + * Check the creation of a new xmppError locally. + */ + public void testLocalErrorWithCommentCreation() { + String message = "Error Message"; + XMPPError error = new XMPPError(XMPPError.Condition.item_not_found, message); + error.toXML(); + + assertEquals(error.getCondition(), "item-not-found"); + assertEquals(error.getCode(), 404); + assertEquals(error.getType(), XMPPError.Type.CANCEL); + assertEquals(error.getMessage(), message); + } + + /** + * Check the creation of a new xmppError locally where there is not a default defined. + */ + public void testUserDefinedErrorWithCommentCreation() { + String message = "Error Message"; + XMPPError error = new XMPPError(new XMPPError.Condition("my_own_error"), message); + error.toXML(); + + assertEquals(error.getCondition(), "my_own_error"); + assertEquals(error.getCode(), 0); + assertNull(error.getType()); + assertEquals(error.getMessage(), message); + } + + /** + * Check the parser with an xml with the 404 error. + */ + public void test404() { + // Make the XML to test + String xml = "" + + "" + + ""; + try { + // Create the xml parser + XmlPullParser parser = getParserFromXML(xml); + // Create a packet from the xml + XMPPError packet = parseError(parser); + + assertNotNull(packet); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + /** + * Check the parser with an xml with the 404 error. + */ + public void testCancel() { + // Make the XML to test + String xml = "" + + "" + + ""; + try { + // Create the xml parser + XmlPullParser parser = getParserFromXML(xml); + // Create a packet from the xml + XMPPError error = parseError(parser); + + assertNotNull(error); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + public void testMessageAndApplicationDefinedError() { + String xml = "" + + "" + + "" + + "Some special application diagnostic information..." + + "" + + "" + + ""; + try { + // Create the xml parser + XmlPullParser parser = getParserFromXML(xml); + // Create a packet from the xml + XMPPError error = parseError(parser); + + String sendingXML = error.toXML(); + + assertNotNull(error); + assertNotNull(sendingXML); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + /** + * Check the parser with an xml with the 404 error. + */ + public void testCancelWithMessage() { + // Make the XML to test + String xml = "" + + "" + + "" + + "Some special application diagnostic information!" + + "" + + ""; + try { + // Create the xml parser + XmlPullParser parser = getParserFromXML(xml); + // Create a packet from the xml + XMPPError error = parseError(parser); + + assertNotNull(error); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + /** + * Check the parser with an xml with the 404 error. + */ + public void testCancelWithMessageAndApplicationError() { + // Make the XML to test + String xml = "" + + "" + + "" + + "Some special application diagnostic information!" + + "" + + "" + + ""; + try { + // Create the xml parser + XmlPullParser parser = getParserFromXML(xml); + // Create a packet from the xml + XMPPError error = parseError(parser); + + assertNotNull(error); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + private XMPPError parseError(XmlPullParser parser) throws Exception { + parser.next(); + return PacketParserUtils.parseError(parser); + } + + private XmlPullParser getParserFromXML(String xml) throws XmlPullParserException { + MXParser parser = new MXParser(); + parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); + parser.setInput(new StringReader(xml)); + return parser; + } + + protected int getMaxConnections() { + return 0; + } +}