blob: 95e51783981c2f881181d79e3ddbc2701ab3e92f [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for common.gerrit's 'query.py'"""
import test_env # pylint: disable=W0611
import unittest
from common.gerrit.query import QueryBuilder
class QueryBuilderTestCase(unittest.TestCase):
def testEmptyQuery(self):
q = QueryBuilder.New()
self.assertEqual(str(q), "")
self.assertEqual(len(q), 0)
def testUnquoted(self):
self.assertEqual(
str(QueryBuilder.New().addUnquoted('Code-Review')),
'Code-Review')
self.assertEqual(
str(QueryBuilder.New().addUnquoted('Code-Review=+1')),
'Code-Review=+1')
self.assertEqual(
str(QueryBuilder.New().
addUnquoted('Code-Review=+1').
addUnquoted('Other=+2')),
'Code-Review=+1+Other=+2')
def testQuoted(self):
self.assertEqual(
str(QueryBuilder.New().addQuoted('Code-Review')),
'Code-Review')
self.assertEqual(
str(QueryBuilder.New().addQuoted('Code-Review=+1')),
'Code-Review%3D%2B1')
self.assertEqual(
str(QueryBuilder.New().
addQuoted('Code-Review=+1').
addQuoted('Other=+2')),
'Code-Review%3D%2B1+Other%3D%2B2')
def testTerms(self):
self.assertEqual(
str(QueryBuilder.New().addSelector('a', 'b')),
'a:b')
self.assertEqual(
str(QueryBuilder.New().addSelector('a+a', 'b+b')),
'a%2Ba:b%2Bb')
self.assertEqual(
str(QueryBuilder.New().
addSelector('a+a', 'b+b').
addSelector('label', 'Code-Review=+2')),
'a%2Ba:b%2Bb+label:Code-Review%3D%2B2')
def testMixed(self):
self.assertEqual(
str(QueryBuilder.New(
'label:Code-Review=+0',
'status:open',
'random-term',
)),
'label:Code-Review%3D%2B0+status:open+random-term')
def testOperator(self):
self.assertEqual(
str(QueryBuilder.NewOR()),
'')
self.assertEqual(
str(QueryBuilder.NewOR().
addUnquoted('test1')),
'test1')
self.assertEqual(
str(QueryBuilder.NewOR().
addUnquoted('test1').
addUnquoted('test2').
addUnquoted('test3')),
'test1+OR+test2+OR+test3')
def testNestedQueryBuilders(self):
self.assertEqual(
str(QueryBuilder.New(
'status:open',
QueryBuilder.NewOR(
'label:Code-Review=+0',
'status:open',
),
'test1',
'test2')),
'status:open+(label:Code-Review%3D%2B0+OR+status:open)+test1+test2')
self.assertEqual(
str(QueryBuilder.New(
'status:open',
QueryBuilder.NewOR(
'label:Code-Review=+0',
'status:open',
QueryBuilder.NewAND(
'status:new',
'label:Code-Review=-0',
),
),
'test1',
'test2')),
'status:open+(label:Code-Review%3D%2B0+OR+status:open+OR+'
'(status:new+AND+label:Code-Review%3D-0))+test1+test2')
# Empty nested QueryBuilder should add no terms
self.assertEqual(
str(QueryBuilder.New(
'status:open',
QueryBuilder.New(),
'test1',
'test2')),
'status:open+test1+test2')
#
# Empty nested QueryBuilder should add no terms
self.assertEqual(
str(QueryBuilder.New(
QueryBuilder.New(),
QueryBuilder.New(),
QueryBuilder.New(),
QueryBuilder.New(),
)),
'')
def testNestedLists(self):
self.assertEqual(
str(QueryBuilder.New(
'status:open',
[
'label:Code-Review=+0',
'status:open',
[
'status:new',
'label:Code-Review=-0',
],
],
'test1',
'test2')),
'status:open+(label:Code-Review%3D%2B0+status:open+'
'(status:new+label:Code-Review%3D-0))+test1+test2')
if __name__ == '__main__':
unittest.main()