import py import fodb from cStringIO import StringIO udir = py.path.local.make_numbered_dir(prefix='usession-', keep=3) class MyClass(object): pass def test_new(): db = fodb.open(str(udir.join('test_new.fodb')), {}) assert db.getroot() is None def test_store_load_str(): db = fodb.open(str(udir.join('test_store_load_str.fodb')), {}) f = StringIO() fodb.store1(f, db, 'hello world') fodb.store1(f, db, 'hello, world!') fodb.store1(f, db, 'hello world') print repr(f.getvalue()) assert f.tell() < 32 f.seek(0) res = fodb.load1(f, db) assert res == 'hello world' res = fodb.load1(f, db) assert res == 'hello, world!' res = fodb.load1(f, db) assert res == 'hello world' db = fodb.open(str(udir.join('test_store_load_str.fodb')), {}) f.seek(0) res = fodb.load1(f, db) assert res == 'hello world' res = fodb.load1(f, db) assert res == 'hello, world!' res = fodb.load1(f, db) assert res == 'hello world' def run_store_test(lst): db = fodb.open(str(udir.join('test_store_load.fodb')), globals()) f = StringIO() for x in lst: fodb.store1(f, db, x) size = f.tell() print repr(f.getvalue()) f.seek(0) for x in lst: res = fodb.load1(f, db) assert res == x assert type(res) == type(x) return size def test_store_load_ints(): run_store_test(range(-300, 300)) def test_store_load_floats(): import math lst = [0.0, -0.25, 0.5, 0.75, 1.0, -1.01, math.pi, 1E100] size = run_store_test(lst) assert size < 8 * lst def test_store_load_containers(): run_store_test([[], [5], range(100), (), (-2,), ([(2, 3)], [4, "hi"]), {'a': 5, ('foo', 1): [5, 4, 3, {}, 1]}]) def test_store_load_objects(): db = fodb.open(str(udir.join('test_store_load_objects.fodb')), globals()) x = MyClass() x.hello = [2, 3, 4] x.y = MyClass() x.y.foo = 5 #x.y.backref = x ref = db._putobj(x) res = db._getobj(ref) assert res is x db.close() db = fodb.open(str(udir.join('test_store_load_objects.fodb')), globals()) res = db._getobj(ref) assert res.__class__ is MyClass assert res.hello == [2, 3, 4] assert res.y.__class__ is MyClass assert res.y.foo == 5 def test_root(): db = fodb.open(str(udir.join('test_root.fodb')), globals()) assert db.getroot() is None x = MyClass() x.hello = "world" x.value = 1 db.setroot(x) assert db.getroot() is x db.close() db = fodb.open(str(udir.join('test_root.fodb')), globals()) x = db.getroot() assert x.hello == "world" assert x.value == 1 assert x.__class__ is MyClass y = MyClass() y.prev = x y.hello = "world" y.value = 2 db.setroot(y) db.close() db = fodb.open(str(udir.join('test_root.fodb')), globals()) y = db.getroot() assert y.hello == "world" assert y.value == 2 assert y.prev.hello == "world" assert y.prev.value == 1