diff options
Diffstat (limited to 'test/com')
31 files changed, 2452 insertions, 0 deletions
diff --git a/test/com/isode/stroke/parser/AttributeMapTest.java b/test/com/isode/stroke/parser/AttributeMapTest.java new file mode 100644 index 0000000..45f5a4c --- /dev/null +++ b/test/com/isode/stroke/parser/AttributeMapTest.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import com.isode.stroke.parser.AttributeMap; + +public class AttributeMapTest { + + public AttributeMapTest() { + + } + + @Test + public void testGetAttribute_Namespaced() { + AttributeMap testling = new AttributeMap(); + testling.addAttribute("lang", "", "nl"); + testling.addAttribute("lang", "http://www.w3.org/XML/1998/namespace", "en"); + testling.addAttribute("lang", "", "fr"); + + assertEquals("en", testling.getAttribute("lang", "http://www.w3.org/XML/1998/namespace")); + } + + @Test + public void testGetBoolAttribute_True() { + AttributeMap testling = new AttributeMap(); + testling.addAttribute("foo", "", "true"); + + assertTrue(testling.getBoolAttribute("foo")); + } + + @Test + public void testGetBoolAttribute_1() { + AttributeMap testling = new AttributeMap(); + testling.addAttribute("foo", "", "1"); + + assertTrue(testling.getBoolAttribute("foo")); + } + + @Test + public void testGetBoolAttribute_False() { + AttributeMap testling = new AttributeMap(); + testling.addAttribute("foo", "", "false"); + + assertFalse(testling.getBoolAttribute("foo", true)); + } + + @Test + public void testGetBoolAttribute_0() { + AttributeMap testling = new AttributeMap(); + testling.addAttribute("foo", "", "0"); + + assertFalse(testling.getBoolAttribute("foo", true)); + } + + @Test + public void testGetBoolAttribute_Invalid() { + AttributeMap testling = new AttributeMap(); + testling.addAttribute("foo", "", "bla"); + + assertFalse(testling.getBoolAttribute("foo", true)); + } + + @Test + public void testGetBoolAttribute_UnknownWithDefaultTrue() { + AttributeMap testling = new AttributeMap(); + + assertTrue(testling.getBoolAttribute("foo", true)); + } + + @Test + public void testGetBoolAttribute_UnknownWithDefaultFalse() { + AttributeMap testling = new AttributeMap(); + + assertFalse(testling.getBoolAttribute("foo", false)); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/ElementParserTester.java b/test/com/isode/stroke/parser/ElementParserTester.java new file mode 100644 index 0000000..d8a0252 --- /dev/null +++ b/test/com/isode/stroke/parser/ElementParserTester.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import com.isode.stroke.parser.XMLParser; +import com.isode.stroke.eventloop.EventLoop; +import com.isode.stroke.parser.XMLParserClient; +import com.isode.stroke.parser.AttributeMap; +import com.isode.stroke.parser.ElementParser; +import com.isode.stroke.parser.PlatformXMLParserFactory; + +public class ElementParserTester<ParserType extends ElementParser> implements XMLParserClient { + + private XMLParser xmlParser_; + private ParserType parser_; + + public ElementParserTester(ParserType parser) { + this.parser_ = parser; + xmlParser_ = PlatformXMLParserFactory.createXMLParser(this); + } + + public boolean parse(String data) { + return xmlParser_.parse(data); + } + + public void handleStartElement(String element, String ns, AttributeMap attributes) { + parser_.handleStartElement(element, ns, attributes); + } + + public void handleEndElement(String element, String ns) { + parser_.handleEndElement(element, ns); + } + + public void handleCharacterData(String data) { + parser_.handleCharacterData(data); + } +} + diff --git a/test/com/isode/stroke/parser/EnumParserTest.java b/test/com/isode/stroke/parser/EnumParserTest.java new file mode 100644 index 0000000..aa20873 --- /dev/null +++ b/test/com/isode/stroke/parser/EnumParserTest.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2013 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import com.isode.stroke.parser.EnumParser; + +public class EnumParserTest { + + public EnumParserTest() { + + } + + public enum MyEnum { + MyValue1, + MyValue2, + MyValue3 + }; + + @Test + public void testParse() { + EnumParser parser = new EnumParser<MyEnum>(); + parser.addValue(MyEnum.MyValue1, "my-value-1"); + parser.addValue(MyEnum.MyValue2, "my-value-2"); + parser.addValue(MyEnum.MyValue3, "my-value-3"); + assertEquals(MyEnum.MyValue2, parser.parse("my-value-2")); + } + + @Test + public void testParse_NoValue() { + EnumParser parser = new EnumParser<MyEnum>(); + parser.addValue(MyEnum.MyValue1, "my-value-1"); + parser.addValue(MyEnum.MyValue2, "my-value-2"); + parser.addValue(MyEnum.MyValue3, "my-value-3"); + assertNull(parser.parse("my-value-4")); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/GenericPayloadTreeParserTest.java b/test/com/isode/stroke/parser/GenericPayloadTreeParserTest.java new file mode 100644 index 0000000..1021eae --- /dev/null +++ b/test/com/isode/stroke/parser/GenericPayloadTreeParserTest.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2011 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import com.isode.stroke.parser.GenericPayloadTreeParser; +import com.isode.stroke.elements.RawXMLPayload; +import com.isode.stroke.parser.tree.ParserElement; +import com.isode.stroke.parser.tree.NullParserElement; +import com.isode.stroke.parser.payloadparsers.PayloadParserTester; + +public class GenericPayloadTreeParserTest { + + public GenericPayloadTreeParserTest() { + + } + + private class MyParser extends GenericPayloadTreeParser<RawXMLPayload> { + + public MyParser() { + super(new RawXMLPayload()); + } + + public void handleTree(ParserElement root) { + tree = root; + } + + public ParserElement tree; + } + + @Test + public void testTree() { + MyParser testling = new MyParser(); + + String data = "<topLevel xmlns='urn:test:top'><firstLevelInheritedEmpty/><firstLevelInherited><secondLevelMultiChildren num='1'/><secondLevelMultiChildren num='2'/></firstLevelInherited><firstLevelNS xmlns='urn:test:first'/></topLevel>"; + + PayloadParserTester tester = new PayloadParserTester(testling); + tester.parse(data); + + ParserElement tree = testling.tree; + + assertEquals("topLevel", tree.getName()); + assertEquals("urn:test:top", tree.getNamespace()); + assertNotNull(tree.getChild("firstLevelInheritedEmpty", "urn:test:top")); + assertTrue(tree.getChild("firstLevelInheritedEmpty", "") instanceof NullParserElement); + assertNotNull(tree.getChild("firstLevelInherited", "urn:test:top")); + assertEquals(2, tree.getChild("firstLevelInherited", "urn:test:top").getChildren("secondLevelMultiChildren", "urn:test:top").size()); + assertEquals("1", tree.getChild("firstLevelInherited", "urn:test:top").getChildren("secondLevelMultiChildren", "urn:test:top").get(0).getAttributes().getAttribute("num")); + assertEquals("2", tree.getChild("firstLevelInherited", "urn:test:top").getChildren("secondLevelMultiChildren", "urn:test:top").get(1).getAttributes().getAttribute("num")); + assertNotNull(tree.getChild("firstLevelNS", "urn:test:first")); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/IQParserTest.java b/test/com/isode/stroke/parser/IQParserTest.java new file mode 100644 index 0000000..603caec --- /dev/null +++ b/test/com/isode/stroke/parser/IQParserTest.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import org.junit.Before; +import com.isode.stroke.parser.PayloadParserFactoryCollection; +import com.isode.stroke.parser.StanzaParserTester; +import com.isode.stroke.parser.IQParser; +import com.isode.stroke.elements.IQ; + +public class IQParserTest { + + private PayloadParserFactoryCollection factoryCollection_; + + public IQParserTest() { + + } + + @Before + public void setUp() { + factoryCollection_ = new PayloadParserFactoryCollection(); + } + + @Test + public void testParse_Set() { + IQParser testling = new IQParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<iq type=\"set\"/>")); + + assertEquals(IQ.Type.Set, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Get() { + IQParser testling = new IQParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<iq type=\"get\"/>")); + + assertEquals(IQ.Type.Get, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Result() { + IQParser testling = new IQParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<iq type=\"result\"/>")); + + assertEquals(IQ.Type.Result, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Error() { + IQParser testling = new IQParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<iq type=\"error\"/>")); + + assertEquals(IQ.Type.Error, testling.getStanzaGeneric().getType()); + } + +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/MessageParserTest.java b/test/com/isode/stroke/parser/MessageParserTest.java new file mode 100644 index 0000000..5b5e08a --- /dev/null +++ b/test/com/isode/stroke/parser/MessageParserTest.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import org.junit.Before; +import com.isode.stroke.parser.PayloadParserFactoryCollection; +import com.isode.stroke.parser.StanzaParserTester; +import com.isode.stroke.parser.MessageParser; +import com.isode.stroke.elements.Message; + +public class MessageParserTest { + + private PayloadParserFactoryCollection factoryCollection_; + + public MessageParserTest() { + + } + + @Before + public void setUp() { + factoryCollection_ = new PayloadParserFactoryCollection(); + } + + @Test + public void testParse_Chat() { + MessageParser testling = new MessageParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<message type=\"chat\"/>")); + + assertEquals(Message.Type.Chat, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Groupchat() { + MessageParser testling = new MessageParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<message type=\"groupchat\"/>")); + + assertEquals(Message.Type.Groupchat, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Error() { + MessageParser testling = new MessageParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<message type=\"error\"/>")); + + assertEquals(Message.Type.Error, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Headline() { + MessageParser testling = new MessageParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<message type=\"headline\"/>")); + + assertEquals(Message.Type.Headline, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Normal() { + MessageParser testling = new MessageParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<message/>")); + + assertEquals(Message.Type.Normal, testling.getStanzaGeneric().getType()); + } + +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/ParserTester.java b/test/com/isode/stroke/parser/ParserTester.java new file mode 100644 index 0000000..90c9586 --- /dev/null +++ b/test/com/isode/stroke/parser/ParserTester.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import com.isode.stroke.parser.XMLParser; +import com.isode.stroke.eventloop.EventLoop; +import com.isode.stroke.parser.XMLParserClient; +import com.isode.stroke.parser.AttributeMap; +import com.isode.stroke.parser.ElementParser; +import com.isode.stroke.parser.PlatformXMLParserFactory; + +public class ParserTester<ParserType extends XMLParserClient> implements XMLParserClient { + + private XMLParser xmlParser_; + private ParserType parser_; + + public ParserTester(ParserType parser) { + this.parser_ = parser; + xmlParser_ = PlatformXMLParserFactory.createXMLParser(this); + } + + public boolean parse(String data) { + return xmlParser_.parse(data); + } + + public void handleStartElement(String element, String ns, AttributeMap attributes) { + parser_.handleStartElement(element, ns, attributes); + } + + public void handleEndElement(String element, String ns) { + parser_.handleEndElement(element, ns); + } + + public void handleCharacterData(String data) { + parser_.handleCharacterData(data); + } +} + diff --git a/test/com/isode/stroke/parser/PresenceParserTest.java b/test/com/isode/stroke/parser/PresenceParserTest.java new file mode 100644 index 0000000..bcd617a --- /dev/null +++ b/test/com/isode/stroke/parser/PresenceParserTest.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import org.junit.Before; +import com.isode.stroke.parser.PayloadParserFactoryCollection; +import com.isode.stroke.parser.StanzaParserTester; +import com.isode.stroke.parser.PresenceParser; +import com.isode.stroke.elements.Presence; + +public class PresenceParserTest { + + private PayloadParserFactoryCollection factoryCollection_; + + public PresenceParserTest() { + + } + + @Before + public void setUp() { + factoryCollection_ = new PayloadParserFactoryCollection(); + } + + @Test + public void testParse_Available() { + PresenceParser testling = new PresenceParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<presence/>")); + + assertEquals(Presence.Type.Available, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Unavailable() { + PresenceParser testling = new PresenceParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<presence type=\"unavailable\"/>")); + + assertEquals(Presence.Type.Unavailable, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Probe() { + PresenceParser testling = new PresenceParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<presence type=\"probe\"/>")); + + assertEquals(Presence.Type.Probe, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Subscribe() { + PresenceParser testling = new PresenceParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<presence type=\"subscribe\"/>")); + + assertEquals(Presence.Type.Subscribe, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Subscribed() { + PresenceParser testling = new PresenceParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<presence type=\"subscribed\"/>")); + + assertEquals(Presence.Type.Subscribed, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Unsubscribe() { + PresenceParser testling = new PresenceParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<presence type=\"unsubscribe\"/>")); + + assertEquals(Presence.Type.Unsubscribe, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Unsubscribed() { + PresenceParser testling = new PresenceParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<presence type=\"unsubscribed\"/>")); + + assertEquals(Presence.Type.Unsubscribed, testling.getStanzaGeneric().getType()); + } + + @Test + public void testParse_Error() { + PresenceParser testling = new PresenceParser(factoryCollection_); + StanzaParserTester parser = new StanzaParserTester(testling); + + assertTrue(parser.parse("<presence type=\"error\"/>")); + + assertEquals(Presence.Type.Error, testling.getStanzaGeneric().getType()); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/SerializingParserTest.java b/test/com/isode/stroke/parser/SerializingParserTest.java new file mode 100644 index 0000000..eff8d6a --- /dev/null +++ b/test/com/isode/stroke/parser/SerializingParserTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ + /* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import com.isode.stroke.parser.SerializingParser; +import com.isode.stroke.parser.XMLParserClient; +import com.isode.stroke.parser.ParserTester; +import com.isode.stroke.parser.AttributeMap; + +public class SerializingParserTest { + + private class ToTestSerializingParser extends SerializingParser implements XMLParserClient { + + } + + public SerializingParserTest() { + + } + + @Test + public void testParse() { + ToTestSerializingParser testling = new ToTestSerializingParser(); + ParserTester parser = new ParserTester(testling); + + assertTrue(parser.parse( + "<message type=\"chat\" to=\"me@foo.com\">" + + "<body>Hello<&World</body>" + + "<html xmlns=\"http://www.w3.org/1999/xhtml\">" + + "foo<b>bar</b>baz" + + "</html>" + + "</message>")); + + assertEquals( + "<message to=\"me@foo.com\" type=\"chat\">" + + "<body>Hello<&World</body>" + + "<html xmlns=\"http://www.w3.org/1999/xhtml\">foo<b xmlns=\"http://www.w3.org/1999/xhtml\">bar</b>baz</html>" + + "</message>", testling.getResult()); + } + + @Test + public void testParse_Empty() { + ToTestSerializingParser testling = new ToTestSerializingParser(); + + assertEquals("", testling.getResult()); + } + + @Test + public void testParse_ToplevelCharacterData() { + ToTestSerializingParser testling = new ToTestSerializingParser(); + + AttributeMap attributes = new AttributeMap(); + testling.handleCharacterData("foo"); + testling.handleStartElement("message", "", attributes); + testling.handleEndElement("message", ""); + testling.handleCharacterData("bar"); + + assertEquals("<message/>", testling.getResult()); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/StanzaAckParserTest.java b/test/com/isode/stroke/parser/StanzaAckParserTest.java new file mode 100644 index 0000000..ad6b951 --- /dev/null +++ b/test/com/isode/stroke/parser/StanzaAckParserTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import com.isode.stroke.parser.StanzaAckParser; +import com.isode.stroke.parser.PayloadParserFactoryCollection; +import com.isode.stroke.parser.ElementParserTester; + +public class StanzaAckParserTest { + + public StanzaAckParserTest() { + + } + + @Test + public void testParse() { + StanzaAckParser testling = new StanzaAckParser(); + ElementParserTester parser = new ElementParserTester(testling); + + assertTrue(parser.parse("<a h=\"12\" xmlns=\"urn:xmpp:sm:2\"/>")); + + assertTrue(testling.getElementGeneric().isValid()); + assertEquals(12, testling.getElementGeneric().getHandledStanzasCount()); + } + + @Test + public void testParse_Invalid() { + StanzaAckParser testling = new StanzaAckParser(); + ElementParserTester parser = new ElementParserTester(testling); + + assertTrue(parser.parse("<a h=\"invalid\" xmlns=\"urn:xmpp:sm:2\"/>")); + + assertFalse(testling.getElementGeneric().isValid()); + } + + @Test + public void testParse_Empty() { + StanzaAckParser testling = new StanzaAckParser(); + ElementParserTester parser = new ElementParserTester(testling); + + assertTrue(parser.parse("<a xmlns=\"urn:xmpp:sm:2\"/>")); + + assertFalse(testling.getElementGeneric().isValid()); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/StanzaParserTest.java b/test/com/isode/stroke/parser/StanzaParserTest.java new file mode 100644 index 0000000..de10d44 --- /dev/null +++ b/test/com/isode/stroke/parser/StanzaParserTest.java @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2010-2014 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import org.junit.Before; +import com.isode.stroke.parser.StanzaParser; +import com.isode.stroke.parser.PayloadParserFactory; +import com.isode.stroke.parser.PayloadParserFactoryCollection; +import com.isode.stroke.elements.Stanza; +import com.isode.stroke.elements.Payload; +import com.isode.stroke.elements.Element; +import com.isode.stroke.parser.GenericPayloadParser; +import com.isode.stroke.parser.AttributeMap; +import com.isode.stroke.jid.JID; + +public class StanzaParserTest { + + public StanzaParserTest() { + + } + + private class MyPayload1 extends Payload { + + public MyPayload1() { + this.hasChild = false; + } + + public boolean hasChild; + } + + private class MyPayload1Parser extends GenericPayloadParser<MyPayload1> { + + public MyPayload1Parser() { + super(new MyPayload1()); + } + + public void handleStartElement(String element, String ns, AttributeMap attributes) { + if (!element.equals("mypayload1")) { + getPayloadInternal().hasChild = true; + } + } + + public void handleEndElement(String element, String ns) {} + public void handleCharacterData(String data) {} + } + + private class MyPayload1ParserFactory implements PayloadParserFactory { + + public MyPayload1ParserFactory() { + + } + + public PayloadParser createPayloadParser() { + return new MyPayload1Parser(); + } + + public boolean canParse(String element, String ns, AttributeMap attributes) { + return element.equals("mypayload1"); + } + } + + private class MyPayload2 extends Payload { + + public MyPayload2() { + + } + } + + private class MyPayload2Parser extends GenericPayloadParser<MyPayload2> { + + public MyPayload2Parser() { + super(new MyPayload2()); + } + + public void handleStartElement(String element, String ns, AttributeMap attributes) {} + public void handleEndElement(String element, String ns) {} + public void handleCharacterData(String data) {} + } + + private class MyPayload2ParserFactory implements PayloadParserFactory { + + public MyPayload2ParserFactory() { + + } + + public PayloadParser createPayloadParser() { + return new MyPayload2Parser(); + } + + public boolean canParse(String element, String ns, AttributeMap attributes) { + return element.equals("mypayload2"); + } + } + + + private class MyStanza extends Stanza { + + public MyStanza() {} + } + + private class MyStanzaParser extends StanzaParser { + + public MyStanzaParser(PayloadParserFactoryCollection collection) { + super(collection); + stanza_ = new MyStanza(); + } + + public Element getElement() { + return stanza_; + } + + private MyStanza stanza_; + } + + private MyPayload1ParserFactory factory1_ = new MyPayload1ParserFactory(); + private MyPayload2ParserFactory factory2_ = new MyPayload2ParserFactory(); + private PayloadParserFactoryCollection factoryCollection_; + + @Before + public void setUp() { + factoryCollection_ = new PayloadParserFactoryCollection(); + factoryCollection_.addFactory(factory1_); + factoryCollection_.addFactory(factory2_); + } + + @Test + public void testHandleEndElement_OnePayload() { + MyStanzaParser testling = new MyStanzaParser(factoryCollection_); + + AttributeMap attributes = new AttributeMap(); + attributes.addAttribute("foo", "", "fum"); + attributes.addAttribute("bar", "", "baz"); + testling.handleStartElement("mystanza", "", attributes); + testling.handleStartElement("mypayload1", "", attributes); + testling.handleStartElement("child", "", attributes); + testling.handleEndElement("child", ""); + testling.handleEndElement("mypayload1", ""); + testling.handleEndElement("mystanza", ""); + + assertNotNull(testling.getStanza().getPayload(new MyPayload1())); + assertTrue(testling.getStanza().getPayload(new MyPayload1()).hasChild); + } + + @Test + public void testHandleEndElement_MultiplePayloads() { + MyStanzaParser testling = new MyStanzaParser(factoryCollection_); + + AttributeMap attributes = new AttributeMap(); + testling.handleStartElement("mystanza", "", attributes); + testling.handleStartElement("mypayload1", "", attributes); + testling.handleEndElement("mypayload1", ""); + testling.handleStartElement("mypayload2", "", attributes); + testling.handleEndElement("mypayload2", ""); + testling.handleEndElement("mystanza", ""); + + assertNotNull(testling.getStanza().getPayload(new MyPayload1())); + assertNotNull(testling.getStanza().getPayload(new MyPayload2())); + } + + @Test + public void testHandleEndElement_StrayCharacterData() { + MyStanzaParser testling = new MyStanzaParser(factoryCollection_); + + AttributeMap attributes = new AttributeMap(); + testling.handleStartElement("mystanza", "", attributes); + testling.handleStartElement("mypayload1", "", attributes); + testling.handleEndElement("mypayload1", ""); + testling.handleCharacterData("bla"); + testling.handleStartElement("mypayload2", "", attributes); + testling.handleEndElement("mypayload2", ""); + testling.handleEndElement("mystanza", ""); + + assertNotNull(testling.getStanza().getPayload(new MyPayload1())); + assertNotNull(testling.getStanza().getPayload(new MyPayload2())); + } + + @Test + public void testHandleEndElement_UnknownPayload() { + MyStanzaParser testling = new MyStanzaParser(factoryCollection_); + + AttributeMap attributes = new AttributeMap(); + testling.handleStartElement("mystanza", "", attributes); + testling.handleStartElement("mypayload1", "", attributes); + testling.handleEndElement("mypayload1", ""); + testling.handleStartElement("unknown-payload", "", attributes); + testling.handleStartElement("unknown-payload-child", "", attributes); + testling.handleEndElement("unknown-payload-child", ""); + testling.handleEndElement("unknown-payload", ""); + testling.handleStartElement("mypayload2", "", attributes); + testling.handleEndElement("mypayload2", ""); + testling.handleEndElement("mystanza", ""); + + assertNotNull(testling.getStanza().getPayload(new MyPayload1())); + assertNotNull(testling.getStanza().getPayload(new MyPayload2())); + } + + @Test + public void testHandleParse_BasicAttributes() { + MyStanzaParser testling = new MyStanzaParser(factoryCollection_); + + AttributeMap attributes = new AttributeMap(); + attributes.addAttribute("to", "", "foo@example.com/blo"); + attributes.addAttribute("from", "", "bar@example.com/baz"); + attributes.addAttribute("id", "", "id-123"); + testling.handleStartElement("mystanza", "", attributes); + testling.handleEndElement("mypayload1", ""); + + assertEquals(new JID("foo@example.com/blo"), testling.getStanza().getTo()); + assertEquals(new JID("bar@example.com/baz"), testling.getStanza().getFrom()); + assertEquals("id-123", testling.getStanza().getID()); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/StanzaParserTester.java b/test/com/isode/stroke/parser/StanzaParserTester.java new file mode 100644 index 0000000..09adcbb --- /dev/null +++ b/test/com/isode/stroke/parser/StanzaParserTester.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import com.isode.stroke.parser.XMLParser; +import com.isode.stroke.eventloop.EventLoop; +import com.isode.stroke.parser.XMLParserClient; +import com.isode.stroke.parser.AttributeMap; +import com.isode.stroke.parser.StanzaParser; +import com.isode.stroke.parser.PlatformXMLParserFactory; + +public class StanzaParserTester<ParserType extends StanzaParser> implements XMLParserClient { + + private XMLParser xmlParser_; + private ParserType parser_; + + public StanzaParserTester(ParserType parser) { + this.parser_ = parser; + xmlParser_ = PlatformXMLParserFactory.createXMLParser(this); + } + + public boolean parse(String data) { + return xmlParser_.parse(data); + } + + public void handleStartElement(String element, String ns, AttributeMap attributes) { + parser_.handleStartElement(element, ns, attributes); + } + + public void handleEndElement(String element, String ns) { + parser_.handleEndElement(element, ns); + } + + public void handleCharacterData(String data) { + parser_.handleCharacterData(data); + } +} + diff --git a/test/com/isode/stroke/parser/StreamFeaturesParserTest.java b/test/com/isode/stroke/parser/StreamFeaturesParserTest.java new file mode 100644 index 0000000..1a32a72 --- /dev/null +++ b/test/com/isode/stroke/parser/StreamFeaturesParserTest.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2013 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import com.isode.stroke.parser.StreamFeaturesParser; +import com.isode.stroke.elements.StreamFeatures; +import com.isode.stroke.parser.ElementParserTester; + +public class StreamFeaturesParserTest { + + public StreamFeaturesParserTest() { + + } + + @Test + public void testParse() { + StreamFeaturesParser testling = new StreamFeaturesParser(); + ElementParserTester parser = new ElementParserTester(testling); + + assertTrue(parser.parse( + "<stream:features xmlns:stream='http://etherx.jabber.org/streams'>" + + "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>" + + "<compression xmlns=\"http://jabber.org/features/compress\">" + + "<method>zlib</method>" + + "<method>lzw</method>" + + "</compression>" + + "<mechanisms xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "<mechanism>DIGEST-MD5</mechanism>" + + "<mechanism>PLAIN</mechanism>" + + "</mechanisms>" + + "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"/>" + + "<sm xmlns='urn:xmpp:sm:2'/>" + + "<session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/>" + + "<ver xmlns=\"urn:xmpp:features:rosterver\"/>" + + "</stream:features>")); + + StreamFeatures element = (StreamFeatures)(testling.getElement()); + assertTrue(element.hasStartTLS()); + assertTrue(element.hasSession()); + assertTrue(element.hasResourceBind()); + assertTrue(element.hasCompressionMethod("zlib")); + assertTrue(element.hasCompressionMethod("lzw")); + assertTrue(element.hasAuthenticationMechanisms()); + assertTrue(element.hasAuthenticationMechanism("DIGEST-MD5")); + assertTrue(element.hasAuthenticationMechanism("PLAIN")); + assertNull(element.getAuthenticationHostname()); + assertTrue(element.hasStreamManagement()); + assertTrue(element.hasRosterVersioning()); + } + + @Test + public void testParse_Empty() { + StreamFeaturesParser testling = new StreamFeaturesParser(); + ElementParserTester parser = new ElementParserTester(testling); + + assertTrue(parser.parse("<stream:features xmlns:stream='http://etherx.jabber.org/streams'/>")); + + StreamFeatures element = (StreamFeatures)(testling.getElement()); + assertFalse(element.hasStartTLS()); + assertFalse(element.hasSession()); + assertFalse(element.hasResourceBind()); + assertFalse(element.hasAuthenticationMechanisms()); + } + + + @Test + public void testParse_AuthenticationHostname() { + StreamFeaturesParser testling = new StreamFeaturesParser(); + ElementParserTester parser = new ElementParserTester(testling); + String hostname = "auth42.us.example.com"; + + assertTrue(parser.parse( + "<stream:features xmlns:stream='http://etherx.jabber.org/streams'>" + + "<mechanisms xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "<mechanism>GSSAPI</mechanism>" + + "<hostname xmlns=\"urn:xmpp:domain-based-name:1\">auth42.us.example.com</hostname>" + + "</mechanisms>" + + "</stream:features>")); + + StreamFeatures element = (StreamFeatures)(testling.getElement()); + assertTrue(element.hasAuthenticationMechanism("GSSAPI")); + assertEquals(element.getAuthenticationHostname(), hostname); + } + + + @Test + public void testParse_AuthenticationHostnameEmpty() { + StreamFeaturesParser testling = new StreamFeaturesParser(); + ElementParserTester parser = new ElementParserTester(testling); + + assertTrue(parser.parse( + "<stream:features xmlns:stream='http://etherx.jabber.org/streams'>" + + "<mechanisms xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "<mechanism>GSSAPI</mechanism>" + + "<hostname xmlns=\"urn:xmpp:domain-based-name:1\"></hostname>" + + "</mechanisms>" + + "</stream:features>")); + + StreamFeatures element = (StreamFeatures)(testling.getElement()); + assertTrue(element.hasAuthenticationMechanism("GSSAPI")); + assertTrue(element.getAuthenticationHostname().isEmpty()); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/StreamManagementEnabledParserTest.java b/test/com/isode/stroke/parser/StreamManagementEnabledParserTest.java new file mode 100644 index 0000000..1ec3d30 --- /dev/null +++ b/test/com/isode/stroke/parser/StreamManagementEnabledParserTest.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2013 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import com.isode.stroke.parser.StreamManagementEnabledParser; +import com.isode.stroke.elements.StreamManagementEnabled; +import com.isode.stroke.parser.ElementParserTester; + +public class StreamManagementEnabledParserTest { + + public StreamManagementEnabledParserTest() { + + } + + @Test + public void testParse() { + StreamManagementEnabledParser testling = new StreamManagementEnabledParser(); + ElementParserTester parser = new ElementParserTester(testling); + + assertTrue(parser.parse( + "<enabled xmlns=\"urn:xmpp:sm:3\" id=\"some-long-sm-id\" resume=\"true\"/>")); + + StreamManagementEnabled element = (StreamManagementEnabled)(testling.getElement()); + assertTrue(element.getResumeSupported()); + assertEquals("some-long-sm-id", element.getResumeID()); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/payloadparsers/BodyParserTest.java b/test/com/isode/stroke/parser/payloadparsers/BodyParserTest.java new file mode 100644 index 0000000..12c67ac --- /dev/null +++ b/test/com/isode/stroke/parser/payloadparsers/BodyParserTest.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser.payloadparsers; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import org.junit.Test; +import com.isode.stroke.elements.Body; +import com.isode.stroke.parser.payloadparsers.BodyParser; +import com.isode.stroke.parser.payloadparsers.PayloadsParserTester; +import com.isode.stroke.eventloop.DummyEventLoop; + +public class BodyParserTest { + + public BodyParserTest() { + + } + + @Test + public void testParse() { + DummyEventLoop eventLoop = new DummyEventLoop(); + PayloadsParserTester parser = new PayloadsParserTester(eventLoop); + + assertNotNull(parser.parse("<body>foo<baz>bar</baz>fum</body>")); + + Body payload = (Body)(parser.getPayload()); + assertEquals("foobarfum", payload.getText()); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/payloadparsers/PayloadParserTester.java b/test/com/isode/stroke/parser/payloadparsers/PayloadParserTester.java new file mode 100644 index 0000000..d903b3b --- /dev/null +++ b/test/com/isode/stroke/parser/payloadparsers/PayloadParserTester.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser.payloadparsers; + +import com.isode.stroke.parser.XMLParser; +import com.isode.stroke.eventloop.EventLoop; +import com.isode.stroke.parser.XMLParserClient; +import com.isode.stroke.parser.AttributeMap; +import com.isode.stroke.parser.PayloadParser; +import com.isode.stroke.parser.PlatformXMLParserFactory; + +public class PayloadParserTester<ParserType extends PayloadParser> implements XMLParserClient { + + private XMLParser xmlParser_; + private ParserType parser_; + + public PayloadParserTester(ParserType parser) { + this.parser_ = parser; + xmlParser_ = PlatformXMLParserFactory.createXMLParser(this); + } + + public boolean parse(String data) { + return xmlParser_.parse(data); + } + + public void handleStartElement(String element, String ns, AttributeMap attributes) { + parser_.handleStartElement(element, ns, attributes); + } + + public void handleEndElement(String element, String ns) { + parser_.handleEndElement(element, ns); + } + + public void handleCharacterData(String data) { + parser_.handleCharacterData(data); + } +} + diff --git a/test/com/isode/stroke/parser/payloadparsers/PrivateStorageParserTest.java b/test/com/isode/stroke/parser/payloadparsers/PrivateStorageParserTest.java new file mode 100644 index 0000000..004f68f --- /dev/null +++ b/test/com/isode/stroke/parser/payloadparsers/PrivateStorageParserTest.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser.payloadparsers; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import org.junit.Test; +import com.isode.stroke.elements.PrivateStorage; +import com.isode.stroke.elements.Storage; +import com.isode.stroke.parser.payloadparsers.PrivateStorageParser; +import com.isode.stroke.parser.payloadparsers.PayloadsParserTester; +import com.isode.stroke.parser.payloadparsers.PayloadParserTester; +import com.isode.stroke.parser.PayloadParserFactoryCollection; +import com.isode.stroke.eventloop.DummyEventLoop; +import com.isode.stroke.jid.JID; + +public class PrivateStorageParserTest { + + public PrivateStorageParserTest() { + + } + + @Test + public void testParse() { + DummyEventLoop eventLoop = new DummyEventLoop(); + PayloadsParserTester parser = new PayloadsParserTester(eventLoop); + + assertNotNull(parser.parse( + "<query xmlns='jabber:iq:private'>" + + "<storage xmlns='storage:bookmarks'>" + + "<conference name='Swift' jid='swift@rooms.swift.im'>" + + "<nick>Alice</nick>" + + "</conference>" + + "</storage>" + + "</query>")); + + PrivateStorage payload = (PrivateStorage)(parser.getPayload()); + assertNotNull(payload); + Storage storage = (Storage)(payload.getPayload()); + assertNotNull(storage); + assertEquals("Alice", storage.getRooms().get(0).nick); + assertEquals(new JID("swift@rooms.swift.im"), storage.getRooms().get(0).jid); + } + + @Test + public void testParse_NoPayload() { + DummyEventLoop eventLoop = new DummyEventLoop(); + PayloadsParserTester parser = new PayloadsParserTester(eventLoop); + + assertNotNull(parser.parse("<query xmlns='jabber:iq:private'/>")); + + PrivateStorage payload = (PrivateStorage)(parser.getPayload()); + assertNotNull(payload); + assertNull(payload.getPayload()); + } + + @Test + public void testParse_MultiplePayloads() { + DummyEventLoop eventLoop = new DummyEventLoop(); + PayloadsParserTester parser = new PayloadsParserTester(eventLoop); + + assertNotNull(parser.parse( + "<query xmlns='jabber:iq:private'>" + + "<storage xmlns='storage:bookmarks'>" + + "<conference name='Swift' jid='swift@rooms.swift.im'>" + + "<nick>Alice</nick>" + + "</conference>" + + "</storage>" + + "<storage xmlns='storage:bookmarks'>" + + "<conference name='Swift' jid='swift@rooms.swift.im'>" + + "<nick>Rabbit</nick>" + + "</conference>" + + "</storage>" + + "</query>")); + + PrivateStorage payload = (PrivateStorage)(parser.getPayload()); + assertNotNull(payload); + Storage storage = (Storage)(payload.getPayload()); + assertNotNull(storage); + assertEquals("Rabbit", storage.getRooms().get(0).nick); + } + + @Test + public void testParse_UnsupportedPayload() { + PayloadParserFactoryCollection factories = new PayloadParserFactoryCollection(); + PrivateStorageParser testling = new PrivateStorageParser(factories); + PayloadParserTester parser = new PayloadParserTester(testling); + + assertNotNull(parser.parse( + "<query xmlns='jabber:iq:private'>" + + "<foo>Bar</foo>" + + "</query>")); + + assertNull(((PrivateStorage)(testling.getPayload())).getPayload()); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/payloadparsers/RawXMLPayloadParserTest.java b/test/com/isode/stroke/parser/payloadparsers/RawXMLPayloadParserTest.java new file mode 100644 index 0000000..e416066 --- /dev/null +++ b/test/com/isode/stroke/parser/payloadparsers/RawXMLPayloadParserTest.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser.payloadparsers; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import com.isode.stroke.elements.RawXMLPayload; +import com.isode.stroke.parser.payloadparsers.RawXMLPayloadParser; +import com.isode.stroke.parser.payloadparsers.PayloadParserTester; +import com.isode.stroke.eventloop.DummyEventLoop; + +public class RawXMLPayloadParserTest { + + public RawXMLPayloadParserTest() { + + } + + @Test + public void testParse() { + RawXMLPayloadParser testling = new RawXMLPayloadParser(); + PayloadParserTester parser = new PayloadParserTester(testling); + + String xml = + "<foo foo-attr=\"foo-val\" xmlns=\"ns:foo\">" + + "<bar bar-attr=\"bar-val\" xmlns=\"ns:bar\"/>" + + "<baz baz-attr=\"baz-val\" xmlns=\"ns:baz\"/>" + + "</foo>"; + assertTrue(parser.parse(xml)); + + RawXMLPayload payload = (RawXMLPayload)(testling.getPayload()); + assertNotNull(xml, payload.getRawXML()); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/parser/payloadparsers/StorageParserTest.java b/test/com/isode/stroke/parser/payloadparsers/StorageParserTest.java new file mode 100644 index 0000000..d9e254c --- /dev/null +++ b/test/com/isode/stroke/parser/payloadparsers/StorageParserTest.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2010-2012 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.parser.payloadparsers; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import com.isode.stroke.elements.Storage; +import com.isode.stroke.parser.payloadparsers.StorageParser; +import com.isode.stroke.parser.payloadparsers.PayloadsParserTester; +import com.isode.stroke.eventloop.DummyEventLoop; +import com.isode.stroke.jid.JID; +import java.util.Vector; + +public class StorageParserTest { + + public StorageParserTest() { + + } + + @Test + public void testParse_Room() { + DummyEventLoop eventloop = new DummyEventLoop(); + PayloadsParserTester parser = new PayloadsParserTester(eventloop); + + assertNotNull(parser.parse( + "<storage xmlns='storage:bookmarks'>" + + "<conference " + + "name='Council of Oberon' " + + "autojoin='true' jid='council@conference.underhill.org'>" + + "<nick>Puck</nick>" + + "<password>MyPass</password>" + + "</conference>" + + "</storage>")); + + Storage payload = (Storage)(parser.getPayload()); + Vector<Storage.Room> rooms = payload.getRooms(); + assertEquals(1, rooms.size()); + assertEquals("Council of Oberon", rooms.get(0).name); + assertEquals(new JID("council@conference.underhill.org"), rooms.get(0).jid); + assertTrue(rooms.get(0).autoJoin); + assertEquals("Puck", rooms.get(0).nick); + assertEquals("MyPass", rooms.get(0).password); + } + + @Test + public void testParse_MultipleRooms() { + DummyEventLoop eventloop = new DummyEventLoop(); + PayloadsParserTester parser = new PayloadsParserTester(eventloop); + + assertNotNull(parser.parse( + "<storage xmlns='storage:bookmarks'>" + + "<conference " + + "name='Council of Oberon' " + + "jid='council@conference.underhill.org' />" + + "<conference " + + "name='Tea & jam party' " + + "jid='teaparty@wonderland.lit' />" + + "</storage>")); + + Storage payload = (Storage)(parser.getPayload()); + Vector<Storage.Room> rooms = payload.getRooms(); + assertEquals(2, rooms.size()); + assertEquals("Council of Oberon", rooms.get(0).name); + assertEquals(new JID("council@conference.underhill.org"), rooms.get(0).jid); + assertEquals("Tea & jam party", rooms.get(1).name); + assertEquals(new JID("teaparty@wonderland.lit"), rooms.get(1).jid); + } + + @Test + public void testParse_URL() { + DummyEventLoop eventloop = new DummyEventLoop(); + PayloadsParserTester parser = new PayloadsParserTester(eventloop); + + assertNotNull(parser.parse( + "<storage xmlns='storage:bookmarks'>" + + "<url name='Complete Works of Shakespeare' url='http://the-tech.mit.edu/Shakespeare/'/>" + + "</storage>")); + + Storage payload = (Storage)(parser.getPayload()); + Vector<Storage.URL> urls = payload.getURLs(); + assertEquals(1, urls.size()); + assertEquals("Complete Works of Shakespeare", urls.get(0).name); + assertEquals("http://the-tech.mit.edu/Shakespeare/", urls.get(0).url); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/AuthChallengeSerializerTest.java b/test/com/isode/stroke/serializer/AuthChallengeSerializerTest.java new file mode 100644 index 0000000..44ed1b8 --- /dev/null +++ b/test/com/isode/stroke/serializer/AuthChallengeSerializerTest.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import com.isode.stroke.serializer.AuthChallengeSerializer; +import com.isode.stroke.elements.AuthChallenge; +import com.isode.stroke.base.ByteArray; + +public class AuthChallengeSerializerTest { + + /** + * Default Constructor. + */ + public AuthChallengeSerializerTest() { + + } + + @Test + public void testSerialize() { + AuthChallengeSerializer testling = new AuthChallengeSerializer(); + AuthChallenge authChallenge = new AuthChallenge(); + authChallenge.setValue(new ByteArray("foo")); + + assertEquals( + "<challenge xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "Zm9v" + + "</challenge>", testling.serialize(authChallenge)); + } + + @Test + public void testSerialize_NoMessage() { + AuthChallengeSerializer testling = new AuthChallengeSerializer(); + AuthChallenge authChallenge = new AuthChallenge(); + + assertEquals( + "<challenge xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\"></challenge>", testling.serialize(authChallenge)); + } + + @Test + public void testSerialize_EmptyMessage() { + AuthChallengeSerializer testling = new AuthChallengeSerializer(); + AuthChallenge authChallenge = new AuthChallenge(); + authChallenge.setValue(new ByteArray()); + + assertEquals( + "<challenge xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "=" + + "</challenge>", testling.serialize(authChallenge)); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/AuthRequestSerializerTest.java b/test/com/isode/stroke/serializer/AuthRequestSerializerTest.java new file mode 100644 index 0000000..eae4354 --- /dev/null +++ b/test/com/isode/stroke/serializer/AuthRequestSerializerTest.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import com.isode.stroke.serializer.AuthRequestSerializer; +import com.isode.stroke.elements.AuthRequest; +import com.isode.stroke.base.ByteArray; + +public class AuthRequestSerializerTest { + + /** + * Default Constructor. + */ + public AuthRequestSerializerTest() { + + } + + @Test + public void testSerialize() { + AuthRequestSerializer testling = new AuthRequestSerializer(); + AuthRequest authRequest = new AuthRequest("PLAIN"); + authRequest.setMessage(new ByteArray("foo")); + + assertEquals( + "<auth xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\" mechanism=\"PLAIN\">" + + "Zm9v" + + "</auth>", testling.serialize(authRequest)); + } + + @Test + public void testSerialize_NoMessage() { + AuthRequestSerializer testling = new AuthRequestSerializer(); + AuthRequest authRequest = new AuthRequest("PLAIN"); + + assertEquals( + "<auth xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\" mechanism=\"PLAIN\">" + + "</auth>", testling.serialize(authRequest)); + } + + @Test + public void testSerialize_EmptyMessage() { + AuthRequestSerializer testling = new AuthRequestSerializer(); + AuthRequest authRequest = new AuthRequest("PLAIN"); + authRequest.setMessage(new ByteArray()); + + assertEquals( + "<auth xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\" mechanism=\"PLAIN\">" + + "=" + + "</auth>", testling.serialize(authRequest)); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/AuthResponseSerializerTest.java b/test/com/isode/stroke/serializer/AuthResponseSerializerTest.java new file mode 100644 index 0000000..9b0fe71 --- /dev/null +++ b/test/com/isode/stroke/serializer/AuthResponseSerializerTest.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import com.isode.stroke.serializer.AuthResponseSerializer; +import com.isode.stroke.elements.AuthResponse; +import com.isode.stroke.base.ByteArray; + +public class AuthResponseSerializerTest { + + /** + * Default Constructor. + */ + public AuthResponseSerializerTest() { + + } + + @Test + public void testSerialize() { + AuthResponseSerializer testling = new AuthResponseSerializer(); + AuthResponse authResponse = new AuthResponse(); + authResponse.setValue(new ByteArray("foo")); + + assertEquals( + "<response xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "Zm9v" + + "</response>", testling.serialize(authResponse)); + } + + @Test + public void testSerialize_NoMessage() { + AuthResponseSerializer testling = new AuthResponseSerializer(); + AuthResponse authResponse = new AuthResponse(); + + assertEquals( + "<response xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "</response>", testling.serialize(authResponse)); + } + + @Test + public void testSerialize_EmptyMessage() { + AuthResponseSerializer testling = new AuthResponseSerializer(); + AuthResponse authResponse = new AuthResponse(); + authResponse.setValue(new ByteArray()); + + assertEquals( + "<response xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "" + + "</response>", testling.serialize(authResponse)); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/AuthSuccessSerializerTest.java b/test/com/isode/stroke/serializer/AuthSuccessSerializerTest.java new file mode 100644 index 0000000..ee9b595 --- /dev/null +++ b/test/com/isode/stroke/serializer/AuthSuccessSerializerTest.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import com.isode.stroke.serializer.AuthSuccessSerializer; +import com.isode.stroke.elements.AuthSuccess; +import com.isode.stroke.base.ByteArray; + +public class AuthSuccessSerializerTest { + + /** + * Default Constructor. + */ + public AuthSuccessSerializerTest() { + + } + + @Test + public void testSerialize() { + AuthSuccessSerializer testling = new AuthSuccessSerializer(); + AuthSuccess authSuccess = new AuthSuccess(); + authSuccess.setValue(new ByteArray("foo")); + + assertEquals( + "<success xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "Zm9v" + + "</success>", testling.serialize(authSuccess)); + } + + @Test + public void testSerialize_NoMessage() { + AuthSuccessSerializer testling = new AuthSuccessSerializer(); + AuthSuccess authSuccess = new AuthSuccess(); + + assertEquals( + "<success xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "</success>", testling.serialize(authSuccess)); + } + + @Test + public void testSerialize_EmptyMessage() { + AuthSuccessSerializer testling = new AuthSuccessSerializer(); + AuthSuccess authSuccess = new AuthSuccess(); + authSuccess.setValue(new ByteArray()); + + assertEquals( + "<success xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "=" + + "</success>", testling.serialize(authSuccess)); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/StreamFeaturesSerializerTest.java b/test/com/isode/stroke/serializer/StreamFeaturesSerializerTest.java new file mode 100644 index 0000000..67d9bb0 --- /dev/null +++ b/test/com/isode/stroke/serializer/StreamFeaturesSerializerTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import com.isode.stroke.serializer.StreamFeaturesSerializer; +import com.isode.stroke.elements.StreamFeatures; + +public class StreamFeaturesSerializerTest { + + /** + * Default Constructor. + */ + public StreamFeaturesSerializerTest() { + + } + + @Test + public void testSerialize() { + StreamFeaturesSerializer testling = new StreamFeaturesSerializer(); + StreamFeatures streamFeatures = new StreamFeatures(); + streamFeatures.setHasStartTLS(); + streamFeatures.addCompressionMethod("zlib"); + streamFeatures.addCompressionMethod("lzw"); + streamFeatures.addAuthenticationMechanism("DIGEST-MD5"); + streamFeatures.addAuthenticationMechanism("PLAIN"); + streamFeatures.setHasResourceBind(); + streamFeatures.setHasSession(); + streamFeatures.setHasStreamManagement(); + streamFeatures.setHasRosterVersioning(); + + assertEquals( + "<stream:features>" + + "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>" + + "<compression xmlns=\"http://jabber.org/features/compress\">" + + "<method>zlib</method>" + + "<method>lzw</method>" + + "</compression>" + + "<mechanisms xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">" + + "<mechanism>DIGEST-MD5</mechanism>" + + "<mechanism>PLAIN</mechanism>" + + "</mechanisms>" + + "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"/>" + + "<session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/>" + + "<sm xmlns=\"urn:xmpp:sm:2\"/>" + + "<ver xmlns=\"urn:xmpp:features:rosterver\"/>" + + "</stream:features>", testling.serialize(streamFeatures)); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/payloadserializers/ErrorSerializerTest.java b/test/com/isode/stroke/serializer/payloadserializers/ErrorSerializerTest.java new file mode 100644 index 0000000..42b9904 --- /dev/null +++ b/test/com/isode/stroke/serializer/payloadserializers/ErrorSerializerTest.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2010-2012 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import org.junit.BeforeClass; +import com.isode.stroke.serializer.payloadserializers.ErrorSerializer; +import com.isode.stroke.serializer.payloadserializers.FullPayloadSerializerCollection; +import com.isode.stroke.elements.ErrorPayload; +import com.isode.stroke.elements.Delay; + +public class ErrorSerializerTest { + + @BeforeClass + public static void init() throws Exception { + } + + private FullPayloadSerializerCollection serializers = new FullPayloadSerializerCollection(); + + /** + * Default Constructor. + */ + public ErrorSerializerTest() { + + } + + @Test + public void testSerialize() { + ErrorSerializer testling = new ErrorSerializer(serializers); + ErrorPayload error = new ErrorPayload(ErrorPayload.Condition.BadRequest, ErrorPayload.Type.Cancel, "My Error"); + + assertEquals("<error type=\"cancel\"><bad-request xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"/><text xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\">My Error</text></error>", testling.serialize(error)); + } + + @Test + public void testSerialize_Payload() { + ErrorSerializer testling = new ErrorSerializer(serializers); + ErrorPayload error = new ErrorPayload(); + error.setPayload(new Delay()); + + assertEquals( + "<error type=\"cancel\"><undefined-condition xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"/><delay xmlns=\"urn:xmpp:delay\"/></error>" + , testling.serialize(error)); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/payloadserializers/JingleSerializersTest.java b/test/com/isode/stroke/serializer/payloadserializers/JingleSerializersTest.java new file mode 100644 index 0000000..ca9c5a8 --- /dev/null +++ b/test/com/isode/stroke/serializer/payloadserializers/JingleSerializersTest.java @@ -0,0 +1,287 @@ +/* + * Copyright (c) 2011 Tobias Markmann + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ +/* + * Copyright (c) 2015 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import com.isode.stroke.serializer.payloadserializers.JingleFileTransferDescriptionSerializer; +import com.isode.stroke.serializer.payloadserializers.StreamInitiationFileInfoSerializer; +import com.isode.stroke.serializer.payloadserializers.JinglePayloadSerializer; +import com.isode.stroke.serializer.payloadserializers.FullPayloadSerializerCollection; +import com.isode.stroke.elements.JingleFileTransferDescription; +import com.isode.stroke.elements.JingleFileTransferFileInfo; +import com.isode.stroke.elements.JingleIBBTransportPayload; +import com.isode.stroke.elements.JingleS5BTransportPayload; +import com.isode.stroke.elements.JingleFileTransferHash; +import com.isode.stroke.elements.JinglePayload; +import com.isode.stroke.elements.HashElement; +import com.isode.stroke.elements.JingleContentPayload; +import com.isode.stroke.elements.StreamInitiationFileInfo; +import com.isode.stroke.base.DateTime; +import com.isode.stroke.stringcodecs.Base64; +import com.isode.stroke.jid.JID; +import com.isode.stroke.network.HostAddress; +import com.isode.stroke.network.HostAddressPort; +import java.net.InetAddress; +import java.net.UnknownHostException; + +public class JingleSerializersTest { + + private FullPayloadSerializerCollection collection = new FullPayloadSerializerCollection(); + + /** + * Default Constructor. + */ + public JingleSerializersTest() { + + } + + public JinglePayloadSerializer createTestling() { + return new JinglePayloadSerializer(collection); + } + + @Test + public void testSerialize_StreamInitiationFileInfo() { + String expected = "<file date=\"1969-07-21T02:56:15Z\" hash=\"552da749930852c69ae5d2141d3766b1\" name=\"test.txt\" size=\"1022\" xmlns=\"http://jabber.org/protocol/si/profile/file-transfer\"><desc>This is a test. If this were a real file...</desc><range/></file>"; + + StreamInitiationFileInfo fileInfo = new StreamInitiationFileInfo(); + fileInfo.setDate(DateTime.stringToDate("1969-07-21T02:56:15Z")); + fileInfo.setHash("552da749930852c69ae5d2141d3766b1"); + fileInfo.setSize(1022); + fileInfo.setName("test.txt"); + fileInfo.setDescription("This is a test. If this were a real file..."); + fileInfo.setSupportsRangeRequests(true); + + StreamInitiationFileInfoSerializer serializer = new StreamInitiationFileInfoSerializer(); + assertEquals(expected, serializer.serializePayload(fileInfo)); + } + + + @Test + public void testSerialize_StreamInitiationFileInfoRange() { + String expected = "<file hash=\"552da749930852c69ae5d2141d3766b1\" xmlns=\"http://jabber.org/protocol/si/profile/file-transfer\"><range offset=\"270336\"/></file>"; + + StreamInitiationFileInfo fileInfo = new StreamInitiationFileInfo(); + fileInfo.setHash("552da749930852c69ae5d2141d3766b1"); + fileInfo.setSupportsRangeRequests(true); + fileInfo.setRangeOffset(270336); + + StreamInitiationFileInfoSerializer serializer = new StreamInitiationFileInfoSerializer(); + assertEquals(expected, serializer.serializePayload(fileInfo)); + } + + + // IBB Transport Method Examples + + // http://xmpp.org/extensions/xep-0261.html#example-1 + @Test + public void testSerialize_Xep0261_Example1() { + String expected = "<jingle action=\"session-initiate\" initiator=\"romeo@montague.lit/orchard\" sid=\"a73sjjvkla37jfea\" xmlns=\"urn:xmpp:jingle:1\"><content creator=\"initiator\" name=\"ex\"><transport block-size=\"4096\" sid=\"ch3d9s71\" xmlns=\"urn:xmpp:jingle:transports:ibb:1\"/></content></jingle>"; + + JinglePayload payload = new JinglePayload(); + payload.setAction(JinglePayload.Action.SessionInitiate); + payload.setSessionID("a73sjjvkla37jfea"); + payload.setInitiator(new JID("romeo@montague.lit/orchard")); + + JingleIBBTransportPayload transport = new JingleIBBTransportPayload(); + transport.setBlockSize(4096); + transport.setSessionID("ch3d9s71"); + + JingleContentPayload content = new JingleContentPayload(); + content.setCreator(JingleContentPayload.Creator.InitiatorCreator); + content.setName("ex"); + content.addTransport(transport); + + payload.addPayload(content); + + assertEquals(expected, createTestling().serialize(payload)); + } + + // http://xmpp.org/extensions/xep-0261.html#example-9 + @Test + public void testSerialize_Xep0261_Example9() { + String expected = "<jingle action=\"transport-info\" initiator=\"romeo@montague.lit/orchard\" sid=\"a73sjjvkla37jfea\" xmlns=\"urn:xmpp:jingle:1\"><content creator=\"initiator\" name=\"ex\"><transport block-size=\"2048\" sid=\"bt8a71h6\" xmlns=\"urn:xmpp:jingle:transports:ibb:1\"/></content></jingle>"; + + JinglePayload payload = new JinglePayload(); + payload.setAction(JinglePayload.Action.TransportInfo); + payload.setInitiator(new JID("romeo@montague.lit/orchard")); + payload.setSessionID("a73sjjvkla37jfea"); + + JingleContentPayload content = new JingleContentPayload(); + content.setCreator(JingleContentPayload.Creator.InitiatorCreator); + content.setName("ex"); + + JingleIBBTransportPayload transport = new JingleIBBTransportPayload(); + transport.setBlockSize(2048); + transport.setSessionID("bt8a71h6"); + + content.addTransport(transport); + payload.addPayload(content); + + assertEquals(expected, createTestling().serialize(payload)); + } + + // http://xmpp.org/extensions/xep-0261.html#example-13 + @Test + public void testSerialize_Xep0261_Example13() { + String expected = "<jingle action=\"session-terminate\" initiator=\"romeo@montague.lit/orchard\" sid=\"a73sjjvkla37jfea\" xmlns=\"urn:xmpp:jingle:1\"><reason><success/></reason></jingle>"; + + JinglePayload payload = new JinglePayload(); + payload.setAction(JinglePayload.Action.SessionTerminate); + payload.setInitiator(new JID("romeo@montague.lit/orchard")); + payload.setSessionID("a73sjjvkla37jfea"); + payload.setReason(new JinglePayload.Reason(JinglePayload.Reason.Type.Success)); + + assertEquals(expected, createTestling().serialize(payload)); + } + + // http://xmpp.org/extensions/xep-0234.html#example-1 + @Test + public void testSerialize_Xep0234_Example1() { + String expected = "<description xmlns=\"urn:xmpp:jingle:apps:file-transfer:4\"><file><date>1969-07-21T02:56:15Z</date><desc>This is a test. If this were a real file...</desc><name>test.txt</name><range/><size>1022</size><hash algo=\"sha-1\" xmlns=\"urn:xmpp:hashes:1\">VS2nSZMIUsaa5dIUHTdmsQ==</hash></file></description>"; + + JingleFileTransferDescription desc = new JingleFileTransferDescription(); + JingleFileTransferFileInfo fileInfo = new JingleFileTransferFileInfo(); + + fileInfo.setDate(DateTime.stringToDate("1969-07-21T02:56:15Z")); + fileInfo.addHash(new HashElement("sha-1", Base64.decode("VS2nSZMIUsaa5dIUHTdmsQ=="))); + fileInfo.setSize(1022); + fileInfo.setName("test.txt"); + fileInfo.setDescription("This is a test. If this were a real file..."); + fileInfo.setSupportsRangeRequests(true); + + desc.setFileInfo(fileInfo); + + assertEquals(expected, new JingleFileTransferDescriptionSerializer().serialize(desc)); + } + + // http://xmpp.org/extensions/xep-0234.html#example-3 + @Test + public void testSerialize_Xep0234_Example3() { + String expected = "<jingle action=\"session-accept\" initiator=\"romeo@montague.lit/orchard\" sid=\"851ba2\" xmlns=\"urn:xmpp:jingle:1\"><content creator=\"initiator\" name=\"a-file-offer\"><description xmlns=\"urn:xmpp:jingle:apps:file-transfer:4\"><file><date>1969-07-21T02:56:15Z</date><desc>This is a test. If this were a real file...</desc><name>test.txt</name><range/><size>1022</size><hash algo=\"sha-1\" xmlns=\"urn:xmpp:hashes:1\">VS2nSZMIUsaa5dIUHTdmsQ==</hash></file></description></content></jingle>"; + + JinglePayload payload = new JinglePayload(); + payload.setAction(JinglePayload.Action.SessionAccept); + payload.setInitiator(new JID("romeo@montague.lit/orchard")); + payload.setSessionID("851ba2"); + + JingleContentPayload content = new JingleContentPayload(); + content.setCreator(JingleContentPayload.Creator.InitiatorCreator); + content.setName("a-file-offer"); + + JingleFileTransferDescription description = new JingleFileTransferDescription(); + JingleFileTransferFileInfo fileInfo = new JingleFileTransferFileInfo(); + fileInfo.setName("test.txt"); + fileInfo.setSize(1022); + fileInfo.addHash(new HashElement("sha-1", Base64.decode("VS2nSZMIUsaa5dIUHTdmsQ=="))); + fileInfo.setDate(DateTime.stringToDate("1969-07-21T02:56:15Z")); + fileInfo.setDescription("This is a test. If this were a real file..."); + fileInfo.setSupportsRangeRequests(true); + + description.setFileInfo(fileInfo); + content.addDescription(description); + payload.addPayload(content); + + assertEquals(expected, createTestling().serialize(payload)); + } + + // http://xmpp.org/extensions/xep-0234.html#example-5 + @Test + public void testSerialize_Xep0234_Example5() { + String expected = "<jingle action=\"transport-info\" initiator=\"romeo@montague.lit/orchard\" sid=\"a73sjjvkla37jfea\" xmlns=\"urn:xmpp:jingle:1\"><content creator=\"initiator\" name=\"ex\"/></jingle>"; + + JinglePayload payload = new JinglePayload(); + payload.setAction(JinglePayload.Action.TransportInfo); + payload.setInitiator(new JID("romeo@montague.lit/orchard")); + payload.setSessionID("a73sjjvkla37jfea"); + + JingleContentPayload content = new JingleContentPayload(); + content.setCreator(JingleContentPayload.Creator.InitiatorCreator); + content.setName("ex"); + payload.addPayload(content); + + assertEquals(expected, createTestling().serialize(payload)); + } + + // http://xmpp.org/extensions/xep-0234.html#example-8 + @Test + public void testSerialize_Xep0234_Example8() { + String expected = "<jingle action=\"session-info\" initiator=\"romeo@montague.lit/orchard\" sid=\"a73sjjvkla37jfea\" xmlns=\"urn:xmpp:jingle:1\"><checksum xmlns=\"urn:xmpp:jingle:apps:file-transfer:4\"><file><hash algo=\"sha-1\" xmlns=\"urn:xmpp:hashes:1\">VS2nSZMIUsaa5dIUHTdmsQ==</hash></file></checksum></jingle>"; + + JinglePayload payload = new JinglePayload(); + payload.setAction(JinglePayload.Action.SessionInfo); + payload.setInitiator(new JID("romeo@montague.lit/orchard")); + payload.setSessionID("a73sjjvkla37jfea"); + + JingleFileTransferHash hash = new JingleFileTransferHash(); + hash.getFileInfo().addHash(new HashElement("sha-1", Base64.decode("VS2nSZMIUsaa5dIUHTdmsQ=="))); + + payload.addPayload(hash); + + assertEquals(expected, createTestling().serialize(payload)); + } + + // http://xmpp.org/extensions/xep-0260.html#example-1 + @Test + public void testSerialize_Xep0260_Example1() { + String expected = "<jingle action=\"session-initiate\" initiator=\"romeo@montague.lit/orchard\" sid=\"a73sjjvkla37jfea\" xmlns=\"urn:xmpp:jingle:1\"><content creator=\"initiator\" name=\"ex\"><transport dstaddr=\"1a12fb7bc625e55f3ed5b29a53dbe0e4aa7d80ba\" mode=\"tcp\" sid=\"vj3hs98y\" xmlns=\"urn:xmpp:jingle:transports:s5b:1\"><candidate cid=\"hft54dqy\" host=\"192.168.4.1\" jid=\"romeo@montague.lit/orchard\" port=\"5086\" priority=\"8257636\" type=\"direct\"/><candidate cid=\"hutr46fe\" host=\"24.24.24.1\" jid=\"romeo@montague.lit/orchard\" port=\"5087\" priority=\"8258636\" type=\"direct\"/></transport></content></jingle>"; + + JinglePayload payload = new JinglePayload(); + payload.setAction(JinglePayload.Action.SessionInitiate); + payload.setInitiator(new JID("romeo@montague.lit/orchard")); + payload.setSessionID("a73sjjvkla37jfea"); + + JingleContentPayload content = new JingleContentPayload(); + content.setCreator(JingleContentPayload.Creator.InitiatorCreator); + content.setName("ex"); + + JingleS5BTransportPayload transport = new JingleS5BTransportPayload(); + transport.setMode(JingleS5BTransportPayload.Mode.TCPMode); + transport.setDstAddr("1a12fb7bc625e55f3ed5b29a53dbe0e4aa7d80ba"); + transport.setSessionID("vj3hs98y"); + + JingleS5BTransportPayload.Candidate candidate1 = new JingleS5BTransportPayload.Candidate(); + candidate1.cid = "hft54dqy"; + try { + candidate1.hostPort = new HostAddressPort(new HostAddress(InetAddress.getByName("192.168.4.1")), 5086); + } catch (UnknownHostException e) { + + } + candidate1.jid = new JID("romeo@montague.lit/orchard"); + candidate1.priority = 8257636; + candidate1.type = JingleS5BTransportPayload.Candidate.Type.DirectType; + transport.addCandidate(candidate1); + + JingleS5BTransportPayload.Candidate candidate2 = new JingleS5BTransportPayload.Candidate(); + candidate2.cid = "hutr46fe"; + try { + candidate2.hostPort = new HostAddressPort(new HostAddress(InetAddress.getByName("24.24.24.1")), 5087); + } catch (UnknownHostException e) { + + } + candidate2.jid = new JID("romeo@montague.lit/orchard"); + candidate2.priority = 8258636; + candidate2.type = JingleS5BTransportPayload.Candidate.Type.DirectType; + transport.addCandidate(candidate2); + + content.addTransport(transport); + + payload.addPayload(content); + + assertEquals(expected, createTestling().serialize(payload)); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/payloadserializers/PayloadsSerializer.java b/test/com/isode/stroke/serializer/payloadserializers/PayloadsSerializer.java new file mode 100644 index 0000000..2008373 --- /dev/null +++ b/test/com/isode/stroke/serializer/payloadserializers/PayloadsSerializer.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.serializer.payloadserializers.FullPayloadSerializerCollection; +import com.isode.stroke.serializer.PayloadSerializer; +import com.isode.stroke.elements.Payload; + +public class PayloadsSerializer { + + private FullPayloadSerializerCollection serializers = new FullPayloadSerializerCollection(); + + public String serialize(Payload payload) { + PayloadSerializer serializer = serializers.getPayloadSerializer(payload); + if (serializer != null) { + return serializer.serialize(payload); + } + else { + assert(false); + return ""; + } + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/payloadserializers/PrivateStorageSerializerTest.java b/test/com/isode/stroke/serializer/payloadserializers/PrivateStorageSerializerTest.java new file mode 100644 index 0000000..9ef2762 --- /dev/null +++ b/test/com/isode/stroke/serializer/payloadserializers/PrivateStorageSerializerTest.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import com.isode.stroke.serializer.payloadserializers.PayloadsSerializer; +import com.isode.stroke.elements.PrivateStorage; +import com.isode.stroke.elements.Storage; +import com.isode.stroke.jid.JID; + +public class PrivateStorageSerializerTest { + + /** + * Default Constructor. + */ + public PrivateStorageSerializerTest() { + + } + + @Test + public void testSerialize() { + PayloadsSerializer serializer = new PayloadsSerializer(); + + PrivateStorage privateStorage = new PrivateStorage(); + Storage storage = new Storage(); + Storage.Room room = new Storage.Room(); + room.name = "Swift"; + room.jid = new JID("swift@rooms.swift.im"); + room.nick = "Alice"; + storage.addRoom(room); + privateStorage.setPayload(storage); + + assertEquals( + "<query xmlns=\"jabber:iq:private\">" + + "<storage xmlns=\"storage:bookmarks\">" + + "<conference " + + "autojoin=\"0\" " + + "jid=\"swift@rooms.swift.im\" " + + "name=\"Swift\">" + + "<nick>Alice</nick>" + + "</conference>" + + "</storage>" + + "</query>", serializer.serialize(privateStorage)); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/payloadserializers/PubSubItemSerializerTest.java b/test/com/isode/stroke/serializer/payloadserializers/PubSubItemSerializerTest.java new file mode 100644 index 0000000..af19175 --- /dev/null +++ b/test/com/isode/stroke/serializer/payloadserializers/PubSubItemSerializerTest.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2014 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ + +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import com.isode.stroke.serializer.payloadserializers.PubSubItemSerializer; +import com.isode.stroke.serializer.payloadserializers.FullPayloadSerializerCollection; +import com.isode.stroke.serializer.PayloadSerializerCollection; +import com.isode.stroke.elements.PubSubItem; +import com.isode.stroke.elements.RawXMLPayload; + +public class PubSubItemSerializerTest { + + private FullPayloadSerializerCollection serializers = new FullPayloadSerializerCollection(); + + /** + * Default Constructor. + */ + public PubSubItemSerializerTest() { + + } + + @Test + public void testSerialize() { + PubSubItemSerializer serializer = new PubSubItemSerializer(serializers); + + RawXMLPayload payload = new RawXMLPayload(); + payload.setRawXML("<payload xmlns=\"tmp\"/>"); + + PubSubItem item = new PubSubItem(); + item.addData(payload); + item.setID("pubsub-item-1"); + + String expectedResult = + "<item id=\"pubsub-item-1\" xmlns=\"http://jabber.org/protocol/pubsub\">" + + "<payload xmlns=\"tmp\"/>" + + "</item>"; + + assertEquals(expectedResult, serializer.serialize(item)); + } + + @Test + public void testSerializeEmptyID() { + PubSubItemSerializer serializer = new PubSubItemSerializer(serializers); + + PubSubItem item = new PubSubItem(); + + String expectedResult = + "<item xmlns=\"http://jabber.org/protocol/pubsub\"/>"; + + assertEquals(expectedResult, serializer.serialize(item)); + } + +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/payloadserializers/PubSubItemsSerializerTest.java b/test/com/isode/stroke/serializer/payloadserializers/PubSubItemsSerializerTest.java new file mode 100644 index 0000000..9745dac --- /dev/null +++ b/test/com/isode/stroke/serializer/payloadserializers/PubSubItemsSerializerTest.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ + +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import com.isode.stroke.serializer.payloadserializers.PubSubItemsSerializer; +import com.isode.stroke.serializer.payloadserializers.FullPayloadSerializerCollection; +import com.isode.stroke.serializer.PayloadSerializerCollection; +import com.isode.stroke.elements.PubSubItem; +import com.isode.stroke.elements.PubSubItems; +import com.isode.stroke.elements.RawXMLPayload; + +public class PubSubItemsSerializerTest { + + private FullPayloadSerializerCollection serializers = new FullPayloadSerializerCollection(); + + /** + * Default Constructor. + */ + public PubSubItemsSerializerTest() { + + } + + @Test + public void testSerialize() { + PubSubItemsSerializer serializer = new PubSubItemsSerializer(serializers); + + RawXMLPayload payload1 = new RawXMLPayload(); + payload1.setRawXML("<payload xmlns=\"tmp\"/>"); + + PubSubItem item1 = new PubSubItem(); + item1.addData(payload1); + item1.setID("pubsub-item-1"); + + RawXMLPayload payload2 = new RawXMLPayload(); + payload2.setRawXML("<payload xmlns=\"other-tmp\"/>"); + + PubSubItem item2 = new PubSubItem(); + item2.addData(payload2); + item2.setID("pubsub-item-2"); + + PubSubItems items = new PubSubItems(); + items.setNode("test-node"); + items.setSubscriptionID("sub-id"); + items.addItem(item1); + items.addItem(item2); + + String expectedResult = + "<items node=\"test-node\" subid=\"sub-id\" xmlns=\"http://jabber.org/protocol/pubsub\">" + + "<item id=\"pubsub-item-1\" xmlns=\"http://jabber.org/protocol/pubsub\">" + + "<payload xmlns=\"tmp\"/>" + + "</item>" + + "<item id=\"pubsub-item-2\" xmlns=\"http://jabber.org/protocol/pubsub\">" + + "<payload xmlns=\"other-tmp\"/>" + + "</item>" + + "</items>"; + + assertEquals(expectedResult, serializer.serialize(items)); + } + + @Test + public void testSerializeEmptyItems() { + PubSubItemsSerializer serializer = new PubSubItemsSerializer(serializers); + + PubSubItems items = new PubSubItems(); + + // Swiften code doesn't check for node being null in serializer and therefore will have extra node=\"\", + // BUT since it is being check in serializer here, there will be no node. + String expectedResult = + "<items xmlns=\"http://jabber.org/protocol/pubsub\"/>"; + + assertEquals(expectedResult, serializer.serialize(items)); + } + +}
\ No newline at end of file diff --git a/test/com/isode/stroke/serializer/payloadserializers/StorageSerializerTest.java b/test/com/isode/stroke/serializer/payloadserializers/StorageSerializerTest.java new file mode 100644 index 0000000..036b366 --- /dev/null +++ b/test/com/isode/stroke/serializer/payloadserializers/StorageSerializerTest.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import com.isode.stroke.serializer.payloadserializers.PayloadsSerializer; +import com.isode.stroke.elements.Storage; +import com.isode.stroke.jid.JID; + +public class StorageSerializerTest { + + /** + * Default Constructor. + */ + public StorageSerializerTest() { + + } + + @Test + public void testSerialize() { + PayloadsSerializer serializer = new PayloadsSerializer(); + Storage storage = new Storage(); + Storage.Room room = new Storage.Room(); + room.name = "Council of Oberon"; + room.autoJoin = true; + room.jid = new JID("council@conference.underhill.org"); + room.nick = "Puck"; + room.password = "MyPass"; + storage.addRoom(room); + Storage.URL url = new Storage.URL(); + url.name = "Complete Works of Shakespeare"; + url.url = "http://the-tech.mit.edu/Shakespeare/"; + storage.addURL(url); + + assertEquals( + "<storage xmlns=\"storage:bookmarks\">" + + "<conference " + + "autojoin=\"1\" " + + "jid=\"council@conference.underhill.org\" " + + "name=\"Council of Oberon\">" + + "<nick>Puck</nick>" + + "<password>MyPass</password>" + + "</conference>" + + "<url name=\"Complete Works of Shakespeare\" url=\"http://the-tech.mit.edu/Shakespeare/\"/>" + + "</storage>", serializer.serialize(storage)); + } + + @Test + public void testSerialize_NoNickOrPassword() { + PayloadsSerializer serializer = new PayloadsSerializer(); + Storage storage = new Storage(); + Storage.Room room = new Storage.Room(); + room.name = "Council of Oberon"; + room.autoJoin = true; + room.jid = new JID("council@conference.underhill.org"); + storage.addRoom(room); + + assertEquals( + "<storage xmlns=\"storage:bookmarks\">" + + "<conference " + + "autojoin=\"1\" " + + "jid=\"council@conference.underhill.org\" " + + "name=\"Council of Oberon\"/>" + + "</storage>", serializer.serialize(storage)); + } +}
\ No newline at end of file |