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_collections.py

158 lines
4.9 KiB

import unittest
from comtypes.client import CreateObject
from ctypes import ArgumentError
from comtypes.test.find_memleak import find_memleak
class Test(unittest.TestCase):
def test_IEnumVARIANT(self):
# The XP firewall manager.
fwmgr = CreateObject('HNetCfg.FwMgr')
# apps has a _NewEnum property that implements IEnumVARIANT
services = fwmgr.LocalPolicy.CurrentProfile.Services
self.assertEqual(services.Count, len(services))
cv = iter(services)
names = [p.Name for p in cv]
self.assertEqual(len(services), len(names))
# The iterator is consumed now:
self.assertEqual([p.Name for p in cv], [])
# But we can reset it:
cv.Reset()
self.assertEqual([p.Name for p in cv], names)
# Reset, then skip:
cv.Reset()
cv.Skip(3)
self.assertEqual([p.Name for p in cv], names[3:])
# Reset, then skip:
cv.Reset()
cv.Skip(300)
self.assertEqual([p.Name for p in cv], names[300:])
# Hm, do we want to allow random access to the iterator?
# Should the iterator support __getitem__ ???
self.assertEqual(cv[0].Name, names[0])
self.assertEqual(cv[0].Name, names[0])
self.assertEqual(cv[0].Name, names[0])
if len(names) > 1:
self.assertEqual(cv[1].Name, names[1])
self.assertEqual(cv[1].Name, names[1])
self.assertEqual(cv[1].Name, names[1])
# We can now call Next(celt) with celt != 1, the call always returns a
# list:
cv.Reset()
self.assertEqual(names[:3],
[p.Name for p in cv.Next(3)])
# calling Next(0) makes no sense, but should work anyway:
self.assertEqual(cv.Next(0), [])
cv.Reset()
self.assertEqual(len(cv.Next(len(names) * 2)), len(names))
# slicing is not (yet?) supported
cv.Reset()
self.assertRaises(ArgumentError, lambda: cv[:])
def test_leaks_1(self):
# The XP firewall manager.
fwmgr = CreateObject('HNetCfg.FwMgr')
# apps has a _NewEnum property that implements IEnumVARIANT
apps = fwmgr.LocalPolicy.CurrentProfile.AuthorizedApplications
def doit():
for item in iter(apps):
item.ProcessImageFileName
bytes = find_memleak(doit, (20, 20))
self.assertFalse(bytes, "Leaks %d bytes" % bytes)
def test_leaks_2(self):
# The XP firewall manager.
fwmgr = CreateObject('HNetCfg.FwMgr')
# apps has a _NewEnum property that implements IEnumVARIANT
apps = fwmgr.LocalPolicy.CurrentProfile.AuthorizedApplications
def doit():
iter(apps).Next(99)
bytes = find_memleak(doit, (20, 20))
self.assertFalse(bytes, "Leaks %d bytes" % bytes)
def test_leaks_3(self):
# The XP firewall manager.
fwmgr = CreateObject('HNetCfg.FwMgr')
# apps has a _NewEnum property that implements IEnumVARIANT
apps = fwmgr.LocalPolicy.CurrentProfile.AuthorizedApplications
def doit():
for i in range(2):
for what in iter(apps):
pass
bytes = find_memleak(doit, (20, 20))
self.assertFalse(bytes, "Leaks %d bytes" % bytes)
class TestCollectionInterface(unittest.TestCase):
""" Test the early-bound collection interface. """
def setUp(self):
self.d = CreateObject("Scripting.Dictionary", dynamic=False)
def tearDown(self):
del self.d
def assertAccessInterface(self, d):
""" Asserts access via indexing and named property """
self.assertEqual(d.CompareMode, 42)
self.assertEqual(d["foo"], 1)
self.assertEqual(d.Item["foo"], d["foo"])
self.assertEqual(d.Item("foo"), d["foo"])
self.assertEqual(d["bar"], "spam foo")
self.assertEqual(d.Item("bar"), "spam foo")
self.assertEqual(d["baz"], 3.14)
self.assertEqual(d.Item("baz"), d["baz"])
self.assertIsNone(d["asdlfkj"])
self.assertIsNone(d.Item["asdlfkj"])
self.assertIsNone(d.Item("asdlfkj"))
items = iter(d)
self.assertEqual(items[0], "foo")
self.assertEqual(items[1], "bar")
self.assertEqual(items[2], "baz")
self.assertEqual(items[3], "asdlfkj")
def test_index_setter(self):
d = self.d
d.CompareMode = 42
d["foo"] = 1
d["bar"] = "spam foo"
d["baz"] = 3.14
self.assertAccessInterface(d)
def test_named_property_setter(self):
d = self.d
d.CompareMode = 42
d.Item["foo"] = 1
d.Item["bar"] = "spam foo"
d.Item["baz"] = 3.14
self.assertAccessInterface(d)
def test_named_property_no_length(self):
self.assertRaises(TypeError, len, self.d.Item)
def test_named_property_not_iterable(self):
self.assertRaises(TypeError, list, self.d.Item)
if __name__ == "__main__":
unittest.main()