def test_filters(self): xq = Xquery(xpath='/el') xq.add_filter('.', 'contains', 'dog') self.assertEquals('/el[contains(., "dog")]', xq.getQuery()) # filters are additive xq.add_filter('.', 'startswith', 'S') self.assertEquals('/el[contains(., "dog")][starts-with(., "S")]', xq.getQuery())
def test_filter_exists(self): xq = Xquery(xpath='/el') xq.add_filter('@id', 'exists', True) self.assertEquals('/el[@id]', xq.getQuery()) xq = Xquery(xpath='/el') xq.add_filter('@id', 'exists', False) self.assertEquals('/el[not(@id)]', xq.getQuery())
def test_not_filters(self): xq = Xquery(xpath='/el') xq.add_filter('.', 'contains', 'dog', mode='NOT') self.assertEquals('/el[not(contains(., "dog"))]', xq.getQuery()) xq = Xquery(xpath='/el') xq.add_filter('.', 'contains', 'dog', mode='NOT') xq.add_filter('.', 'startswith', 'S', mode='NOT') self.assertEquals('/el[not(contains(., "dog") or starts-with(., "S"))]', xq.getQuery())
def test_filter_in(self): xq = Xquery(xpath='/el') xq.add_filter('@id', 'in', ['a', 'b', 'c']) self.assertEquals('/el[contains(("a","b","c"), @id)]', xq.getQuery()) # filter on a 'special' field - requires let & where statements xq = Xquery(xpath='/el') xq.add_filter('document_name', 'in', ['a.xml', 'b.xml']) self.assert_('let $document_name' in xq.getQuery()) self.assert_('where contains(("a.xml","b.xml"), $document_name)' in xq.getQuery())
def test_filter_in(self): xq = Xquery(xpath='/el') xq.add_filter('@id', 'in', ['a', 'b', 'c']) self.assertEquals('/el[@id="a" or @id="b" or @id="c"]', xq.getQuery()) # filter on a 'special' field - requires let & where statements xq = Xquery(xpath='/el') xq.add_filter('document_name', 'in', ['a.xml', 'b.xml']) self.assert_('let $document_name' in xq.getQuery()) self.assert_('where $document_name="a.xml" or $document_name="b.xml"' in xq.getQuery())
def test_filter_gtlt(self): xq = Xquery(xpath='/el') xq.add_filter('@id', 'gt', 5) self.assert_('where $n/@id > 5' in xq.getQuery()) xq = Xquery(xpath='/el') xq.add_filter('@id', 'gte', 5) self.assert_('where $n/@id >= 5' in xq.getQuery()) xq.add_filter('@id', 'lt', '5') self.assert_('where $n/@id < 5' in xq.getQuery()) xq.add_filter('@id', 'lte', 3) self.assert_('where $n/@id <= 3' in xq.getQuery())
def test_filter_gtlt(self): xq = Xquery(xpath='/el') xq.add_filter('@id', 'gt', 5) self.assert_('el[@id > 5]' in xq.getQuery()) xq = Xquery(xpath='/el') xq.add_filter('@id', 'gte', 5) self.assert_('/el[@id >= 5]' in xq.getQuery()) xq.add_filter('@id', 'lt', '10') self.assert_('el[@id >= 5]' in xq.getQuery()) self.assert_('[@id < "10"]' in xq.getQuery()) xq.add_filter('@id', 'lte', 3) self.assert_('[@id <= 3]' in xq.getQuery())
def test_return_also__highlight(self): xq = Xquery(xpath='/el') xq.xq_var = '$n' xq.return_also({'fulltext_score': ''}) xq.add_filter('.', 'highlight', 'dog star') self.assert_('(/el[ft:query(., "dog star")]|/el)' in xq.getQuery())
def test_filter_escaping(self): xq = Xquery(xpath='/el') xq.add_filter('.', 'contains', '"&') self.assertEquals('/el[contains(., """&")]', xq.getQuery())
def test_filters_highlight(self): xq = Xquery(xpath='/el') xq.add_filter('.', 'highlight', 'dog star') self.assertEquals('(/el[ft:query(., "dog star")]|/el)', xq.getQuery())
def test_fulltext_options(self): # pass in options for a full-text query xq = Xquery(xpath='/el', fulltext_options={'default-operator': 'and'}) xq.add_filter('.', 'fulltext_terms', 'dog') self.assert_('<default-operator>and</default-operator>' in xq.getQuery()) self.assert_('/el[ft:query(., "dog", $ft_options)]', xq.getQuery())
def test_filters_fulltext(self): xq = Xquery(xpath='/el') xq.add_filter('.', 'fulltext_terms', 'dog') self.assertEquals('/el[ft:query(., "dog")]', xq.getQuery())