if __name__ == "__main__": TOTAL_ITEMS = 1000 SCREEN_SIZE = 10 def mock_find(query, sorting=None, limit=None, offset=None, properties=[]): if limit is None or offset is None: raise RuntimeError("Unimplemented test.") result = [] for index in range(offset, offset + limit): obj = datastore.DSObject(index, datastore.DSMetadata({}), '') result.append(obj) return result, TOTAL_ITEMS datastore.find = mock_find result_set = find({}) print "Get first page" objects = result_set.read(SCREEN_SIZE) print [obj.object_id for obj in objects] assert range(0, SCREEN_SIZE) == [obj.object_id for obj in objects] print "" print "Scroll to 5th item" result_set.seek(5) objects = result_set.read(SCREEN_SIZE) print [obj.object_id for obj in objects] assert range(5, SCREEN_SIZE + 5) == [obj.object_id for obj in objects] print "" print "Scroll back to beginning" result_set.seek(0) objects = result_set.read(SCREEN_SIZE) print [obj.object_id for obj in objects] assert range(0, SCREEN_SIZE) == [obj.object_id for obj in objects] print "" print "Hit PgDn five times" for i in range(0, 5): result_set.seek((i + 1) * SCREEN_SIZE) objects = result_set.read(SCREEN_SIZE) print [obj.object_id for obj in objects] assert range((i + 1) * SCREEN_SIZE, (i + 2) * SCREEN_SIZE) == [obj.object_id for obj in objects] print "" print "Hit PgUp five times" for i in range(0, 5)[::-1]: result_set.seek(i * SCREEN_SIZE) objects = result_set.read(SCREEN_SIZE) print [obj.object_id for obj in objects] assert range(i * SCREEN_SIZE, (i + 1) * SCREEN_SIZE) == [obj.object_id for obj in objects] print ""