You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/test/test_urlhistory.py

49 lines
1.6 KiB

import unittest, os
from copy import copy
from ctypes import *
from comtypes.client import GetModule, CreateObject
from comtypes.patcher import Patch
# ./urlhist.tlb was downloaded somewhere from the internet (?)
GetModule(os.path.join(os.path.dirname(__file__), "urlhist.tlb"))
from comtypes.gen import urlhistLib
# The pwcsTitle and pwcsUrl fields of the _STATURL structure must be
# freed by the caller. The only way to do this without patching the
# generated code directly is to monkey-patch the
# _STATURL.__ctypes_from_outparam__ method like this.
@Patch(urlhistlib._STATURL)
class _(object):
def __ctypes_from_outparam__(self):
from comtypes.util import cast_field
result = type(self)()
for n, _ in self._fields_:
setattr(result, n, getattr(self, n))
url, title = self.pwcsUrl, self.pwcsTitle
windll.ole32.CoTaskMemFree(cast_field(self, "pwcsUrl", c_void_p))
windll.ole32.CoTaskMemFree(cast_field(self, "pwcsTitle", c_void_p))
return result
from comtypes.test.find_memleak import find_memleak
class Test(unittest.TestCase):
def check_leaks(self, func):
bytes = find_memleak(func, (5, 10))
self.assertFalse(bytes, "Leaks %d bytes" % bytes)
def test_creation(self):
hist = CreateObject(urlhistLib.UrlHistory)
for x in hist.EnumURLS():
x.pwcsUrl, x.pwcsTitle
## print (x.pwcsUrl, x.pwcsTitle)
## print x
def doit():
for x in hist.EnumURLs():
pass
doit()
self.check_leaks(doit)
if __name__ == "__main__":
unittest.main()