diff options
Diffstat (limited to 'bubbob/test_statesaver.py')
-rw-r--r-- | bubbob/test_statesaver.py | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/bubbob/test_statesaver.py b/bubbob/test_statesaver.py new file mode 100644 index 0000000..3fadcd7 --- /dev/null +++ b/bubbob/test_statesaver.py @@ -0,0 +1,127 @@ +import py +import statesaver +import new + +def test_list(): + lst = [None, 12, "hello", 3.4, ("foo", (), [])] + lst1 = statesaver.copy(lst) + assert lst1 == lst + assert lst1 is not lst + assert lst1[-1][-1] is not lst[-1][-1] + +def test_dict(): + dct = {1: "hi", 2: {}} + dct1 = statesaver.copy(dct) + assert dct1 == dct + assert dct1 is not dct + assert dct1[2] is not dct[2] + +def test_instance(): + class Foo: + def inst_build(self): + return Bar() + class Bar: + pass + x = Foo() + x.attr = [1, 2, 3] + y = statesaver.copy(x) + assert y.__class__ is Bar + assert y.attr == [1, 2, 3] + assert y.attr is not x.attr + +glob = 2 +def test_function(): + # XXX closures not supported + def func(x, y=[]): + assert glob == 2 + y.append(x) + return y + l = func(5) + l = func(6) + assert l == [5, 6] + func1 = statesaver.copy(func) + l = func(7) + l = func(8) + assert l == [5, 6, 7, 8] + l = func1(9) + l = func1(10) + assert l == [5, 6, 9, 10] + +def test_method(): + def func(x, y=[]): + assert glob == 2 + y.append(x) + return y + m = new.instancemethod(func, {}) + assert m() == [{}] + m1 = statesaver.copy(m) + assert m() == [{}, {}] + assert m() == [{}, {}, {}] + assert m1() == [{}, {}] + assert m1() == [{}, {}, {}] + l = m1() + assert l[0] is l[1] is l[2] is l[3] + +def test_generator(): + def gfunc(): + lst = [5, 6] + yield lst.pop() + yield lst.pop() + g = gfunc() + assert g.next() == 6 + g1 = statesaver.copy(g) + assert g.next() == 5 + py.test.raises(StopIteration, g.next) + assert g1.next() == 5 + py.test.raises(StopIteration, g1.next) + +def test_exhausted_gen(): + def gfunc(): + yield 5 + g = gfunc() + for i in g: + print i + g1 = statesaver.copy(g) + assert iter(g1) is g1 + py.test.raises(StopIteration, g1.next) + g2 = statesaver.copy(g1) + assert iter(g2) is g2 + py.test.raises(StopIteration, g2.next) + +def test_seqiter(): + from UserList import UserList + seq = UserList([2, 4, 6, 8]) + it = iter(seq) + assert it.next() == 2 + assert it.next() == 4 + it1 = statesaver.copy(it) + assert list(it) == [6, 8] + assert list(it1) == [6, 8] + +def test_tupleiter(): + tup = (2, 4, 6, 8) + it = iter(tup) + assert it.next() == 2 + assert it.next() == 4 + it1 = statesaver.copy(it) + assert list(it) == [6, 8] + assert list(it1) == [6, 8] + +def test_listiter(): + lst = [2, 4, 6, 8] + it = iter(lst) + assert it.next() == 2 + assert it.next() == 4 + it1 = statesaver.copy(it) + lst.append(10) + assert list(it) == [6, 8, 10] + assert list(it1) == [6, 8] + +def test_stringiter(): + s = "hello" + it = iter(s) + assert it.next() == 'h' + assert it.next() == 'e' + it1 = statesaver.copy(it) + assert list(it) == ['l', 'l', 'o'] + assert list(it1) == ['l', 'l', 'o'] |