summaryrefslogtreecommitdiff
path: root/bubbob/test_statesaver.py
diff options
context:
space:
mode:
Diffstat (limited to 'bubbob/test_statesaver.py')
-rw-r--r--bubbob/test_statesaver.py127
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']