コード例 #1
0
ファイル: test_query.py プロジェクト: ali01/datastore
    def test_cursor(self):

        k = Key("/")

        self.assertRaises(ValueError, Cursor, None, None)
        self.assertRaises(ValueError, Cursor, Query(Key("/")), None)
        self.assertRaises(ValueError, Cursor, None, [1])
        c = Cursor(Query(k), [1, 2, 3, 4, 5])  # should not raise

        self.assertEqual(c.skipped, 0)
        self.assertEqual(c.returned, 0)
        self.assertEqual(c._iterable, [1, 2, 3, 4, 5])

        c.skipped = 1
        c.returned = 2
        self.assertEqual(c.skipped, 1)
        self.assertEqual(c.returned, 2)

        c._skipped_inc(None)
        c._skipped_inc(None)
        self.assertEqual(c.skipped, 3)

        c._returned_inc(None)
        c._returned_inc(None)
        c._returned_inc(None)
        self.assertEqual(c.returned, 5)

        self.subtest_cursor(Query(k), [5, 4, 3, 2, 1], [5, 4, 3, 2, 1])
        self.subtest_cursor(Query(k, limit=3), [5, 4, 3, 2, 1], [5, 4, 3])
        self.subtest_cursor(Query(k, limit=0), [5, 4, 3, 2, 1], [])
        self.subtest_cursor(Query(k, offset=2), [5, 4, 3, 2, 1], [3, 2, 1])
        self.subtest_cursor(Query(k, offset=5), [5, 4, 3, 2, 1], [])
        self.subtest_cursor(Query(k, limit=2, offset=2), [5, 4, 3, 2, 1], [3, 2])

        v1, v2, v3 = version_objects()
        vs = [v1, v2, v3]

        t1 = v1["committed"]
        t2 = v2["committed"]
        t3 = v3["committed"]

        self.subtest_cursor(Query(k), vs, vs)
        self.subtest_cursor(Query(k, limit=2), vs, [v1, v2])
        self.subtest_cursor(Query(k, offset=1), vs, [v2, v3])
        self.subtest_cursor(Query(k, offset=1, limit=1), vs, [v2])

        self.subtest_cursor(Query(k).filter("committed", ">=", t2), vs, [v2, v3])
        self.subtest_cursor(Query(k).filter("committed", "<=", t1), vs, [v1])

        self.subtest_cursor(Query(k).order("+committed"), vs, [v1, v2, v3])
        self.subtest_cursor(Query(k).order("-created"), vs, [v3, v2, v1])
コード例 #2
0
ファイル: test_query.py プロジェクト: ali01/datastore
    def subtest_cursor(self, query, iterable, expected_results):

        self.assertRaises(ValueError, Cursor, None, None)
        self.assertRaises(ValueError, Cursor, query, None)
        self.assertRaises(ValueError, Cursor, None, iterable)
        cursor = Cursor(query, iterable)
        self.assertEqual(cursor.skipped, 0)
        self.assertEqual(cursor.returned, 0)

        cursor._ensure_modification_is_safe()
        cursor.apply_filter()
        cursor.apply_order()
        cursor.apply_offset()
        cursor.apply_limit()

        cursor_results = []
        for i in cursor:
            self.assertRaises(AssertionError, cursor._ensure_modification_is_safe)
            self.assertRaises(AssertionError, cursor.apply_filter)
            self.assertRaises(AssertionError, cursor.apply_order)
            self.assertRaises(AssertionError, cursor.apply_offset)
            self.assertRaises(AssertionError, cursor.apply_limit)
            cursor_results.append(i)

        # ensure iteration happens only once.
        self.assertRaises(RuntimeError, iter, cursor)

        self.assertEqual(cursor_results, expected_results)
        self.assertEqual(cursor.returned, len(expected_results))
        self.assertEqual(cursor.skipped, query.offset)
        if query.limit:
            self.assertTrue(cursor.returned <= query.limit)