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.
104 lines
3.2 KiB
104 lines
3.2 KiB
"""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()
|