1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
"""Test for the spickle module.
"""
# Author: Prabhu Ramachandran <prabhu@aero.iitb.ac.in>
# Copyright (c) 2007, Enthought, Inc.
# License: BSD Style.
import unittest
import numpy
from pickle import dumps
try:
from apptools.persistence import spickle
except ImportError:
import nose
raise nose.SkipTest('spickle is not supported with Python3')
from traits.api import HasTraits, Float, Int
class A:
def __init__(self):
self.a = 100
self.array = numpy.linspace(0, 1, 5)
class B(HasTraits):
i = Int(10)
f = Float(1.0)
class Foo(object):
def __init__(self, a=1):
self.a = A()
self.a.b = 200
self.ref = self.a
self.b = B()
self.b.set(i=20, f=2.0)
class TestStatePickler(unittest.TestCase):
def _test_object(self, x):
assert x.a.a == 100
assert numpy.all(x.a.array == numpy.linspace(0, 1, 5))
assert x.a.b == 200
assert x.a == x.ref
assert x.b.i == 20
assert x.b.f == 2.0
def test_dump_state(self):
"Test if we are able to dump the state to a string."
f = Foo()
str = dumps(f)
st = spickle.get_state(f)
str1 = spickle.dumps_state(st)
self.assertEqual(str, str1)
st = spickle.loads_state(str)
self.assertEqual(str, spickle.dumps_state(st))
def test_state2object(self):
"Test if we can convert a state to an object."
f = Foo()
str = dumps(f)
st = spickle.get_state(f)
g = spickle.state2object(st)
self._test_object(g)
if __name__ == "__main__":
unittest.main()
|