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

104 lines
3.2 KiB

5 years ago
"""Use Scripting.Dictionary to test the lazybind module."""
import unittest
from comtypes import COMError
from comtypes.client import CreateObject
from comtypes.client.lazybind import Dispatch
from comtypes.automation import VARIANT
class Test(unittest.TestCase):
def test_dict(self):
d = CreateObject("Scripting.Dictionary", dynamic=True)
self.assertEqual(type(d), Dispatch)
# Count is a normal propget, no propput
self.assertEqual(d.Count, 0)
self.assertRaises(AttributeError, lambda: setattr(d, "Count", -1))
# HashVal is a 'named' propget, no propput
##d.HashVal
# Add(Key, Item) -> None
self.assertEqual(d.Add("one", 1), None)
self.assertEqual(d.Count, 1)
# RemoveAll() -> None
self.assertEqual(d.RemoveAll(), None)
self.assertEqual(d.Count, 0)
# CompareMode: propget, propput
# (Can only be set when dict is empty!)
self.assertEqual(d.CompareMode, 0)
d.CompareMode = 1
self.assertEqual(d.CompareMode, 1)
d.CompareMode = 0
# Exists(key) -> bool
self.assertEqual(d.Exists(42), False)
d.Add(42, "foo")
self.assertEqual(d.Exists(42), True)
# Keys() -> array
# Items() -> array
self.assertEqual(d.Keys(), (42,))
self.assertEqual(d.Items(), ("foo",))
d.Remove(42)
self.assertEqual(d.Exists(42), False)
self.assertEqual(d.Keys(), ())
self.assertEqual(d.Items(), ())
# Item[key] : propget
d.Add(42, "foo")
self.assertEqual(d.Item[42], "foo")
d.Add("spam", "bar")
self.assertEqual(d.Item["spam"], "bar")
# Item[key] = value: propput, propputref
d.Item["key"] = "value"
self.assertEqual(d.Item["key"], "value")
d.Item[42] = 73, 48
self.assertEqual(d.Item[42], (73, 48))
################################################################
# part 2, testing propput and propputref
s = CreateObject("Scripting.Dictionary", dynamic=True)
s.CompareMode = 42
# This calls propputref, since we assign an Object
d.Item["object"] = s
# This calls propput, since we assing a Value
d.Item["value"] = s.CompareMode
a = d.Item["object"]
self.assertEqual(d.Item["object"], s)
self.assertEqual(d.Item["object"].CompareMode, 42)
self.assertEqual(d.Item["value"], 42)
# Changing a property of the object
s.CompareMode = 5
self.assertEqual(d.Item["object"], s)
self.assertEqual(d.Item["object"].CompareMode, 5)
self.assertEqual(d.Item["value"], 42)
# This also calls propputref since we assign an Object
d.Item["var"] = VARIANT(s)
self.assertEqual(d.Item["var"], s)
# iter(d)
keys = [x for x in d]
self.assertEqual(d.Keys(),
tuple([x for x in d]))
# d[key] = value
# d[key] -> value
d["blah"] = "blarg"
self.assertEqual(d["blah"], "blarg")
# d(key) -> value
self.assertEqual(d("blah"), "blarg")
if __name__ == "__main__":
unittest.main()