diff options
Diffstat (limited to 'tests/test_elementbase.py')
-rw-r--r-- | tests/test_elementbase.py | 659 |
1 files changed, 0 insertions, 659 deletions
diff --git a/tests/test_elementbase.py b/tests/test_elementbase.py deleted file mode 100644 index 19794c90..00000000 --- a/tests/test_elementbase.py +++ /dev/null @@ -1,659 +0,0 @@ -from . sleektest import * -from sleekxmpp.xmlstream.stanzabase import ElementBase - -class TestElementBase(SleekTest): - - def testFixNs(self): - """Test fixing namespaces in an XPath expression.""" - - e = ElementBase() - ns = "http://jabber.org/protocol/disco#items" - result = e._fix_ns("{%s}foo/bar/{abc}baz/{%s}more" % (ns, ns)) - - expected = "/".join(["{%s}foo" % ns, - "{%s}bar" % ns, - "{abc}baz", - "{%s}more" % ns]) - self.failUnless(expected == result, - "Incorrect namespace fixing result: %s" % str(result)) - - - def testExtendedName(self): - """Test element names of the form tag1/tag2/tag3.""" - - class TestStanza(ElementBase): - name = "foo/bar/baz" - namespace = "test" - - stanza = TestStanza() - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="test"> - <bar> - <baz /> - </bar> - </foo> - """) - - def testGetStanzaValues(self): - """Test getStanzaValues using plugins and substanzas.""" - - class TestStanzaPlugin(ElementBase): - name = "foo2" - namespace = "foo" - interfaces = set(('bar', 'baz')) - plugin_attrib = "foo2" - - class TestSubStanza(ElementBase): - name = "subfoo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - subitem = set((TestSubStanza,)) - - registerStanzaPlugin(TestStanza, TestStanzaPlugin) - - stanza = TestStanza() - stanza['bar'] = 'a' - stanza['foo2']['baz'] = 'b' - substanza = TestSubStanza() - substanza['bar'] = 'c' - stanza.append(substanza) - - values = stanza.getStanzaValues() - expected = {'bar': 'a', - 'baz': '', - 'foo2': {'bar': '', - 'baz': 'b'}, - 'substanzas': [{'__childtag__': '{foo}subfoo', - 'bar': 'c', - 'baz': ''}]} - self.failUnless(values == expected, - "Unexpected stanza values:\n%s\n%s" % (str(expected), str(values))) - - - def testSetStanzaValues(self): - """Test using setStanzaValues with substanzas and plugins.""" - - class TestStanzaPlugin(ElementBase): - name = "pluginfoo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - plugin_attrib = "plugin_foo" - - class TestStanzaPlugin2(ElementBase): - name = "pluginfoo2" - namespace = "foo" - interfaces = set(('bar', 'baz')) - plugin_attrib = "plugin_foo2" - - class TestSubStanza(ElementBase): - name = "subfoo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - subitem = set((TestSubStanza,)) - - registerStanzaPlugin(TestStanza, TestStanzaPlugin) - registerStanzaPlugin(TestStanza, TestStanzaPlugin2) - - stanza = TestStanza() - values = {'bar': 'a', - 'baz': '', - 'plugin_foo': {'bar': '', - 'baz': 'b'}, - 'plugin_foo2': {'bar': 'd', - 'baz': 'e'}, - 'substanzas': [{'__childtag__': '{foo}subfoo', - 'bar': 'c', - 'baz': ''}]} - stanza.setStanzaValues(values) - - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo" bar="a"> - <pluginfoo baz="b" /> - <pluginfoo2 bar="d" baz="e" /> - <subfoo bar="c" /> - </foo> - """) - - def testGetItem(self): - """Test accessing stanza interfaces.""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz', 'qux')) - sub_interfaces = set(('baz',)) - - def getQux(self): - return 'qux' - - class TestStanzaPlugin(ElementBase): - name = "foobar" - namespace = "foo" - plugin_attrib = "foobar" - interfaces = set(('fizz',)) - - TestStanza.subitem = (TestStanza,) - registerStanzaPlugin(TestStanza, TestStanzaPlugin) - - stanza = TestStanza() - substanza = TestStanza() - stanza.append(substanza) - stanza.setStanzaValues({'bar': 'a', - 'baz': 'b', - 'qux': 42, - 'foobar': {'fizz': 'c'}}) - - # Test non-plugin interfaces - expected = {'substanzas': [substanza], - 'bar': 'a', - 'baz': 'b', - 'qux': 'qux', - 'meh': ''} - for interface, value in expected.items(): - result = stanza[interface] - self.failUnless(result == value, - "Incorrect stanza interface access result: %s" % result) - - # Test plugin interfaces - self.failUnless(isinstance(stanza['foobar'], TestStanzaPlugin), - "Incorrect plugin object result.") - self.failUnless(stanza['foobar']['fizz'] == 'c', - "Incorrect plugin subvalue result.") - - def testSetItem(self): - """Test assigning to stanza interfaces.""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz', 'qux')) - sub_interfaces = set(('baz',)) - - def setQux(self, value): - pass - - class TestStanzaPlugin(ElementBase): - name = "foobar" - namespace = "foo" - plugin_attrib = "foobar" - interfaces = set(('foobar',)) - - registerStanzaPlugin(TestStanza, TestStanzaPlugin) - - stanza = TestStanza() - - stanza['bar'] = 'attribute!' - stanza['baz'] = 'element!' - stanza['qux'] = 'overridden' - stanza['foobar'] = 'plugin' - - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo" bar="attribute!"> - <baz>element!</baz> - <foobar foobar="plugin" /> - </foo> - """) - - def testDelItem(self): - """Test deleting stanza interface values.""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz', 'qux')) - sub_interfaces = set(('bar',)) - - def delQux(self): - pass - - class TestStanzaPlugin(ElementBase): - name = "foobar" - namespace = "foo" - plugin_attrib = "foobar" - interfaces = set(('foobar',)) - - registerStanzaPlugin(TestStanza, TestStanzaPlugin) - - stanza = TestStanza() - stanza['bar'] = 'a' - stanza['baz'] = 'b' - stanza['qux'] = 'c' - stanza['foobar']['foobar'] = 'd' - - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo" baz="b" qux="c"> - <bar>a</bar> - <foobar foobar="d" /> - </foo> - """) - - del stanza['bar'] - del stanza['baz'] - del stanza['qux'] - del stanza['foobar'] - - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo" qux="c" /> - """) - - def testModifyingAttributes(self): - """Test modifying top level attributes of a stanza's XML object.""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - - stanza = TestStanza() - - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo" /> - """) - - self.failUnless(stanza._getAttr('bar') == '', - "Incorrect value returned for an unset XML attribute.") - - stanza._setAttr('bar', 'a') - stanza._setAttr('baz', 'b') - - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo" bar="a" baz="b" /> - """) - - self.failUnless(stanza._getAttr('bar') == 'a', - "Retrieved XML attribute value is incorrect.") - - stanza._setAttr('bar', None) - stanza._delAttr('baz') - - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo" /> - """) - - self.failUnless(stanza._getAttr('bar', 'c') == 'c', - "Incorrect default value returned for an unset XML attribute.") - - def testGetSubText(self): - """Test retrieving the contents of a sub element.""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar',)) - - def setBar(self, value): - wrapper = ET.Element("{foo}wrapper") - bar = ET.Element("{foo}bar") - bar.text = value - wrapper.append(bar) - self.xml.append(wrapper) - - def getBar(self): - return self._getSubText("wrapper/bar", default="not found") - - stanza = TestStanza() - self.failUnless(stanza['bar'] == 'not found', - "Default _getSubText value incorrect.") - - stanza['bar'] = 'found' - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo"> - <wrapper> - <bar>found</bar> - </wrapper> - </foo> - """) - self.failUnless(stanza['bar'] == 'found', - "_getSubText value incorrect: %s." % stanza['bar']) - - def testSubElement(self): - """Test setting the contents of a sub element.""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - - def setBaz(self, value): - self._setSubText("wrapper/baz", text=value) - - def getBaz(self): - return self._getSubText("wrapper/baz") - - def setBar(self, value): - self._setSubText("wrapper/bar", text=value) - - def getBar(self): - return self._getSubText("wrapper/bar") - - stanza = TestStanza() - stanza['bar'] = 'a' - stanza['baz'] = 'b' - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo"> - <wrapper> - <bar>a</bar> - <baz>b</baz> - </wrapper> - </foo> - """) - stanza._setSubText('wrapper/bar', text='', keep=True) - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo"> - <wrapper> - <bar /> - <baz>b</baz> - </wrapper> - </foo> - """, use_values=False) - - stanza['bar'] = 'a' - stanza._setSubText('wrapper/bar', text='') - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo"> - <wrapper> - <baz>b</baz> - </wrapper> - </foo> - """) - - def testDelSub(self): - """Test removing sub elements.""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - - def setBar(self, value): - self._setSubText("path/to/only/bar", value); - - def getBar(self): - return self._getSubText("path/to/only/bar") - - def delBar(self): - self._delSub("path/to/only/bar") - - def setBaz(self, value): - self._setSubText("path/to/just/baz", value); - - def getBaz(self): - return self._getSubText("path/to/just/baz") - - def delBaz(self): - self._delSub("path/to/just/baz") - - stanza = TestStanza() - stanza['bar'] = 'a' - stanza['baz'] = 'b' - - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo"> - <path> - <to> - <only> - <bar>a</bar> - </only> - <just> - <baz>b</baz> - </just> - </to> - </path> - </foo> - """) - - del stanza['bar'] - del stanza['baz'] - - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo"> - <path> - <to> - <only /> - <just /> - </to> - </path> - </foo> - """, use_values=False) - - stanza['bar'] = 'a' - stanza['baz'] = 'b' - - stanza._delSub('path/to/only/bar', all=True) - - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo"> - <path> - <to> - <just> - <baz>b</baz> - </just> - </to> - </path> - </foo> - """) - - def testMatch(self): - """Test matching a stanza against an XPath expression.""" - - class TestSubStanza(ElementBase): - name = "sub" - namespace = "baz" - interfaces = set(('attrib',)) - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar','baz', 'qux')) - sub_interfaces = set(('qux',)) - subitem = (TestSubStanza,) - - def setQux(self, value): - self._setSubText('qux', text=value) - - def getQux(self): - return self._getSubText('qux') - - class TestStanzaPlugin(ElementBase): - name = "plugin" - namespace = "http://test/slash/bar" - interfaces = set(('attrib',)) - - registerStanzaPlugin(TestStanza, TestStanzaPlugin) - - stanza = TestStanza() - self.failUnless(stanza.match("foo"), - "Stanza did not match its own tag name.") - - self.failUnless(stanza.match("{foo}foo"), - "Stanza did not match its own namespaced name.") - - stanza['bar'] = 'a' - self.failUnless(stanza.match("foo@bar=a"), - "Stanza did not match its own name with attribute value check.") - - stanza['baz'] = 'b' - self.failUnless(stanza.match("foo@bar=a@baz=b"), - "Stanza did not match its own name with multiple attributes.") - - stanza['qux'] = 'c' - self.failUnless(stanza.match("foo/qux"), - "Stanza did not match with subelements.") - - stanza['qux'] = '' - self.failUnless(stanza.match("foo/qux") == False, - "Stanza matched missing subinterface element.") - - self.failUnless(stanza.match("foo/bar") == False, - "Stanza matched nonexistent element.") - - stanza['plugin']['attrib'] = 'c' - self.failUnless(stanza.match("foo/plugin@attrib=c"), - "Stanza did not match with plugin and attribute.") - - self.failUnless(stanza.match("foo/{http://test/slash/bar}plugin"), - "Stanza did not match with namespaced plugin.") - - substanza = TestSubStanza() - substanza['attrib'] = 'd' - stanza.append(substanza) - self.failUnless(stanza.match("foo/sub@attrib=d"), - "Stanza did not match with substanzas and attribute.") - - self.failUnless(stanza.match("foo/{baz}sub"), - "Stanza did not match with namespaced substanza.") - - def testComparisons(self): - """Test comparing ElementBase objects.""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - - stanza1 = TestStanza() - stanza1['bar'] = 'a' - - self.failUnless(stanza1, - "Stanza object does not evaluate to True") - - stanza2 = TestStanza() - stanza2['baz'] = 'b' - - self.failUnless(stanza1 != stanza2, - "Different stanza objects incorrectly compared equal.") - - stanza1['baz'] = 'b' - stanza2['bar'] = 'a' - - self.failUnless(stanza1 == stanza2, - "Equal stanzas incorrectly compared inequal.") - - def testKeys(self): - """Test extracting interface names from a stanza object.""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - plugin_attrib = 'qux' - - registerStanzaPlugin(TestStanza, TestStanza) - - stanza = TestStanza() - - self.failUnless(set(stanza.keys()) == set(('bar', 'baz')), - "Returned set of interface keys does not match expected.") - - stanza.enable('qux') - - self.failUnless(set(stanza.keys()) == set(('bar', 'baz', 'qux')), - "Incorrect set of interface and plugin keys.") - - def testGet(self): - """Test accessing stanza interfaces using get().""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - - stanza = TestStanza() - stanza['bar'] = 'a' - - self.failUnless(stanza.get('bar') == 'a', - "Incorrect value returned by stanza.get") - - self.failUnless(stanza.get('baz', 'b') == 'b', - "Incorrect default value returned by stanza.get") - - def testSubStanzas(self): - """Test manipulating substanzas of a stanza object.""" - - class TestSubStanza(ElementBase): - name = "foobar" - namespace = "foo" - interfaces = set(('qux',)) - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - subitem = (TestSubStanza,) - - stanza = TestStanza() - substanza1 = TestSubStanza() - substanza2 = TestSubStanza() - substanza1['qux'] = 'a' - substanza2['qux'] = 'b' - - # Test appending substanzas - self.failUnless(len(stanza) == 0, - "Incorrect empty stanza size.") - - stanza.append(substanza1) - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo"> - <foobar qux="a" /> - </foo> - """) - self.failUnless(len(stanza) == 1, - "Incorrect stanza size with 1 substanza.") - - stanza.append(substanza2) - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo"> - <foobar qux="a" /> - <foobar qux="b" /> - </foo> - """) - self.failUnless(len(stanza) == 2, - "Incorrect stanza size with 2 substanzas.") - - # Test popping substanzas - stanza.pop(0) - self.check_stanza(TestStanza, stanza, """ - <foo xmlns="foo"> - <foobar qux="b" /> - </foo> - """) - - # Test iterating over substanzas - stanza.append(substanza1) - results = [] - for substanza in stanza: - results.append(substanza['qux']) - self.failUnless(results == ['b', 'a'], - "Iteration over substanzas failed: %s." % str(results)) - - def testCopy(self): - """Test copying stanza objects.""" - - class TestStanza(ElementBase): - name = "foo" - namespace = "foo" - interfaces = set(('bar', 'baz')) - - stanza1 = TestStanza() - stanza1['bar'] = 'a' - - stanza2 = stanza1.__copy__() - - self.failUnless(stanza1 == stanza2, - "Copied stanzas are not equal to each other.") - - stanza1['baz'] = 'b' - self.failUnless(stanza1 != stanza2, - "Divergent stanza copies incorrectly compared equal.") - -suite = unittest.TestLoader().loadTestsFromTestCase(TestElementBase) |