1 # test_pickle and test_cpickle both use this.
3 # break into multiple strings to please font-lock-mode
38 BINDATA
= ']q\000(K\000L1L\012G@\000\000\000\000\000\000\000c__builtin__\012complex\012q\001(G@\010\000\000\000\000\000\000G\000\000\000\000\000\000\000\000tq\002Rq\003(U\003abcq\004h\004(c__main__\012C\012q\005oq\006}q\007(U\003fooq\010K\001U\003barq\011K\002ubh\006tq\012h\012K\005e.'
41 def __cmp__(self
, other
):
42 return cmp(self
.__dict
__, other
.__dict
__)
47 # Call this with the module to be tested (pickle or cPickle).
53 x
= [0, 1L, 2.0, 3.0+0j
]
54 y
= ('abc', 'abc', c
, c
)
64 if x2
== x
: print "ok"
67 x2
= pickle
.loads(DATA
)
68 if x2
== x
: print "ok"
70 print "dumps() binary"
71 s
= pickle
.dumps(x
, 1)
72 print "loads() binary"
74 if x2
== x
: print "ok"
76 print "loads() BINDATA"
77 x2
= pickle
.loads(BINDATA
)
78 if x2
== x
: print "ok"
81 print "dumps() RECURSIVE"
83 if x2
== r
: print "ok"
85 # don't create cyclic garbage
89 # Test protection against closed files
91 fn
= tempfile
.mktemp()
99 print "dump to closed file should raise ValueError"
107 print "load from closed file should raise ValueError"
110 # Test specific bad cases
113 x
= pickle
.loads('garyp')
117 except pickle
.BadPickleGet
, y
:
121 print "unexpected success!"
124 # Test insecure strings
125 insecure
= ["abc", "2 + 2", # not quoted
126 "'abc' + 'def'", # not a single quoted string
127 "'abc", # quote is not closed
128 "'abc\"", # open quote and close quote don't match
129 "'abc' ?", # junk after close quote
130 # some tests of the quoting rules
132 "'\\\\a\'\'\'\\\'\\\\\''",
135 buf
= "S" + s
+ "\012p0\012."
137 x
= pickle
.loads(buf
)
141 print "accepted insecure string: %s" % repr(buf
)
143 # Test some Unicode end cases
144 endcases
= [u
'', u
'<\\u>', u
'<\\\u1234>', u
'<\n>', u
'<\\>']
147 u2
= pickle
.loads(pickle
.dumps(u
))
148 except Exception, msg
:
149 print "Endcase exception: %s => %s(%s)" % \
150 (`u`
, msg
.__class
__.__name
__, str(msg
))
153 print "Endcase failure: %s => %s" % (`u`
, `u2`
)