2 # -*- coding: iso-8859-1 -*-
11 # need Python 2.2 or better for garbage collection
12 from gc import get_objects
19 from StringIO import StringIO
29 # update sys.path when running in the build directory
30 from util import get_sys_path
31 sys.path = get_sys_path()
34 from pycurl import Curl, CurlMulti
41 opts.verbose = opts.verbose - 1
44 print "Python", sys.version
45 print "PycURL %s (compiled against 0x%x)" % (pycurl.version, pycurl.COMPILE_LIBCURL_VERSION_NUM)
46 print "PycURL version info", pycurl.version_info()
47 print " %s, compiled %s" % (pycurl.__file__, pycurl.COMPILE_DATE)
50 # /***********************************************************************
52 # ************************************************************************/
56 assert c.URL is pycurl.URL
60 # /***********************************************************************
62 # ************************************************************************/
64 # remove an invalid handle: this should fail
73 assert 0, "internal error"
77 # remove an invalid but closed handle
86 # add a closed handle: this should fail
96 assert 0, "internal error"
101 # add a handle twice: this should fail
111 assert 0, "internal error"
115 # add a handle on multiple stacks: this should fail
126 assert 0, "internal error"
141 # /***********************************************************************
142 # // test copying and pickling - copying and pickling of
143 # // instances of Curl and CurlMulti is not allowed
144 # ************************************************************************/
154 assert 0, "internal error - copying should fail"
160 assert 0, "internal error - copying should fail"
166 p = pickle.Pickler(fp, 1)
169 except pickle.PicklingError:
172 assert 0, "internal error - pickling should fail"
175 except pickle.PicklingError:
178 assert 0, "internal error - pickling should fail"
185 p = cPickle.Pickler(fp, 1)
188 except cPickle.PicklingError:
191 assert 0, "internal error - pickling should fail"
194 except cPickle.PicklingError:
197 assert 0, "internal error - pickling should fail"
201 # /***********************************************************************
203 # ************************************************************************/
205 # basic check of reference counting (use a memory checker like valgrind)
215 # basic check of cyclic garbage collection
221 # create some nasty cyclic references
232 flags = gc.DEBUG_COLLECTABLE | gc.DEBUG_UNCOLLECTABLE | gc.DEBUG_OBJECTS
233 if opts.verbose >= 1:
234 flags = flags | gc.DEBUG_STATS
237 ##print gc.get_referrers(c)
238 ##print gc.get_objects()
239 if opts.verbose >= 1:
240 print "Tracked objects:", len(gc.get_objects())
241 # The `del' below should delete these 4 objects:
242 # Curl + internal dict, CurlMulti + internal dict
245 if opts.verbose >= 1:
246 print "Tracked objects:", len(gc.get_objects())
249 # /***********************************************************************
251 # ************************************************************************/
253 print "All tests passed."