Fixed ElementBase.match to match using sub_interface elements.
This commit is contained in:
parent
998741b87e
commit
3749c1b88c
2 changed files with 25 additions and 1 deletions
|
@ -614,6 +614,12 @@ class ElementBase(object):
|
||||||
if self[name] != value:
|
if self[name] != value:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# Check sub interfaces.
|
||||||
|
if len(xpath) > 1:
|
||||||
|
next_tag = xpath[1]
|
||||||
|
if next_tag in self.sub_interfaces and self[next_tag]:
|
||||||
|
return True
|
||||||
|
|
||||||
# Attempt to continue matching the XPath using the stanza's plugins.
|
# Attempt to continue matching the XPath using the stanza's plugins.
|
||||||
if not matched_substanzas and len(xpath) > 1:
|
if not matched_substanzas and len(xpath) > 1:
|
||||||
# Convert {namespace}tag@attribs to just tag
|
# Convert {namespace}tag@attribs to just tag
|
||||||
|
|
|
@ -454,9 +454,16 @@ class TestElementBase(SleekTest):
|
||||||
class TestStanza(ElementBase):
|
class TestStanza(ElementBase):
|
||||||
name = "foo"
|
name = "foo"
|
||||||
namespace = "foo"
|
namespace = "foo"
|
||||||
interfaces = set(('bar','baz'))
|
interfaces = set(('bar','baz', 'qux'))
|
||||||
|
sub_interfaces = set(('qux',))
|
||||||
subitem = (TestSubStanza,)
|
subitem = (TestSubStanza,)
|
||||||
|
|
||||||
|
def setQux(self, value):
|
||||||
|
self._setSubText('qux', text=value)
|
||||||
|
|
||||||
|
def getQux(self):
|
||||||
|
return self._getSubText('qux')
|
||||||
|
|
||||||
class TestStanzaPlugin(ElementBase):
|
class TestStanzaPlugin(ElementBase):
|
||||||
name = "plugin"
|
name = "plugin"
|
||||||
namespace = "http://test/slash/bar"
|
namespace = "http://test/slash/bar"
|
||||||
|
@ -479,6 +486,17 @@ class TestElementBase(SleekTest):
|
||||||
self.failUnless(stanza.match("foo@bar=a@baz=b"),
|
self.failUnless(stanza.match("foo@bar=a@baz=b"),
|
||||||
"Stanza did not match its own name with multiple attributes.")
|
"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'
|
stanza['plugin']['attrib'] = 'c'
|
||||||
self.failUnless(stanza.match("foo/plugin@attrib=c"),
|
self.failUnless(stanza.match("foo/plugin@attrib=c"),
|
||||||
"Stanza did not match with plugin and attribute.")
|
"Stanza did not match with plugin and attribute.")
|
||||||
|
|
Loading…
Reference in a new issue