Exemple #1
0
class TestQuery(unittest.TestCase):
    def setUp(self):
        self.discodb = DiscoDB(
            (('alice', ('blue',)),
            ('bob', ('red',)),
            ('carol', ('blue', 'red'))),
        )

    def q(self, s):
        return self.discodb.query(Q.parse(s))

    def test_empty(self):
        self.assertEqual(list(self.q('')), [])
        self.assertEqual(len(self.q('')), 0)

    def test_get_len(self):
        self.assertEqual(len(self.discodb.get('alice')), 1)
        self.assertEquals(len(self.discodb.get('bob')), 1)
        self.assertEquals(len(self.discodb.get('carol')), 2)

    def test_query_len(self):
        self.assertEquals(len(self.q('alice')), 1)
        self.assertEquals(len(self.q('bob')), 1)
        self.assertEquals(len(self.q('carol')), 2)
        self.assertEquals(len(self.q('alice & bob')), 0)
        self.assertEquals(len(self.q('alice | bob')), 2)
        self.assertEquals(len(self.q('alice & carol')), 1)
        self.assertEquals(len(self.q('alice | carol')), 2)
        self.assertEquals(len(self.q('alice|bob|carol')), 2)
        self.assertEquals(len(self.q('alice&bob&carol')), 0)

    def test_query_len_doesnt_advance_iter(self):
        # check that calling len() doesn't advance the iterator
        res = self.q('alice')
        self.assertEquals(len(res), 1)
        self.assertEquals(len(res), 1)

    def test_query_results(self):
        self.assertEquals(set(self.q('alice')), set(['blue']))
        self.assertEquals(set(self.q('bob')), set(['red']))
        self.assertEquals(set(self.q('carol')), set(['blue', 'red']))
        self.assertEquals(set(self.q('alice & bob')), set())
        self.assertEquals(set(self.q('alice | bob')), set(['blue', 'red']))
        self.assertEquals(set(self.q('alice & carol')), set(['blue']))
        self.assertEquals(set(self.q('alice | carol')), set(['blue', 'red']))
        self.assertEquals(set(self.q('alice|bob|carol')), set(['blue', 'red']))
        self.assertEquals(set(self.q('alice&bob&carol')), set())

    def test_query_len_nonkey(self):
        self.assertEquals(len(self.q('nonkey')), 0)
        self.assertEquals(len(self.q('~nonkey')), 2)
        self.assertEquals(len(self.q('nonkey & alice')), 0)
        self.assertEquals(len(self.q('nonkey | alice')), 1)

    def test_query_results_nonkey(self):
        self.assertEquals(set(self.q('nonkey')), set())
        self.assertEquals(set(self.q('~nonkey')), set(['blue', 'red']))
        self.assertEquals(set(self.q('nonkey & alice')), set())
        self.assertEquals(set(self.q('nonkey | alice')), set(['blue']))
Exemple #2
0
class TestMappingProtocol(unittest.TestCase):
    numkeys = 1000

    def setUp(self):
        self.discodb = DiscoDB(k_vs_iter(self.numkeys))

    def test_contains(self):
        assert "0" in self.discodb
        assert "key" not in self.discodb

    def test_length(self):
        self.assertEquals(len(self.discodb), self.numkeys)

    def test_get(self):
        len(list(self.discodb.get('0')))
        self.assertEquals(self.discodb.get('X'), None)
        self.assertEquals(self.discodb.get('X', 'Y'), 'Y')

    def test_getitem(self):
        for x in xrange(self.numkeys):
            try:
                list(self.discodb[str(x)])
            except KeyError:
                self.assertEquals(x, self.numkeys)

    def test_iter(self):
        self.assertEquals(list(self.discodb), list(self.discodb.keys()))

    def test_items(self):
        for key, values in self.discodb.items():
            key, list(values)

    def test_keys(self):
        len(list(self.discodb.keys()))

    def test_values(self):
        len(list(self.discodb.values()))

    def test_unique_values(self):
        len(list(self.discodb.unique_values()))

    def test_peek(self):
        self.assertNotEquals(self.discodb.peek('0'), None)
        self.assertEquals(self.discodb.peek('X'), None)
        self.assert_(int(self.discodb.peek('0', '1')) >= 0)

    def test_query(self):
        q = Q.parse('5 & 10 & (15 | 30)')
        list(self.discodb.query(q))

    def test_str(self):
        repr(self.discodb)
        str(self.discodb)