123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- import array
- import unittest
-
- import pythoncom
- import win32con
- import win32gui
- import win32gui_struct
-
-
- class TestBase(unittest.TestCase):
- def assertDictEquals(self, d, **kw):
- checked = dict()
- for n, v in kw.items():
- self.assertEqual(v, d[n], "'%s' doesn't match: %r != %r" % (n, v, d[n]))
- checked[n] = True
- checked_keys = list(checked.keys())
- passed_keys = list(kw.keys())
- checked_keys.sort()
- passed_keys.sort()
- self.assertEqual(checked_keys, passed_keys)
-
-
- class TestMenuItemInfo(TestBase):
- def _testPackUnpack(self, text):
- vals = dict(
- fType=win32con.MFT_MENUBARBREAK,
- fState=win32con.MFS_CHECKED,
- wID=123,
- hSubMenu=1234,
- hbmpChecked=12345,
- hbmpUnchecked=123456,
- dwItemData=1234567,
- text=text,
- hbmpItem=321,
- )
- mii, extras = win32gui_struct.PackMENUITEMINFO(**vals)
- (
- fType,
- fState,
- wID,
- hSubMenu,
- hbmpChecked,
- hbmpUnchecked,
- dwItemData,
- text,
- hbmpItem,
- ) = win32gui_struct.UnpackMENUITEMINFO(mii)
- self.assertDictEquals(
- vals,
- fType=fType,
- fState=fState,
- wID=wID,
- hSubMenu=hSubMenu,
- hbmpChecked=hbmpChecked,
- hbmpUnchecked=hbmpUnchecked,
- dwItemData=dwItemData,
- text=text,
- hbmpItem=hbmpItem,
- )
-
- def testPackUnpack(self):
- self._testPackUnpack("Hello")
-
- def testPackUnpackNone(self):
- self._testPackUnpack(None)
-
- def testEmptyMenuItemInfo(self):
- mii, extra = win32gui_struct.EmptyMENUITEMINFO()
- (
- fType,
- fState,
- wID,
- hSubMenu,
- hbmpChecked,
- hbmpUnchecked,
- dwItemData,
- text,
- hbmpItem,
- ) = win32gui_struct.UnpackMENUITEMINFO(mii)
- self.assertEqual(fType, 0)
- self.assertEqual(fState, 0)
- self.assertEqual(wID, 0)
- self.assertEqual(hSubMenu, 0)
- self.assertEqual(hbmpChecked, 0)
- self.assertEqual(hbmpUnchecked, 0)
- self.assertEqual(dwItemData, 0)
- self.assertEqual(hbmpItem, 0)
- # it's not clear if UnpackMENUITEMINFO() should ignore cch, instead
- # assuming it is a buffer size rather than 'current length' - but it
- # never has (and this gives us every \0 in the string), and actually
- # helps us test the unicode/str semantics.
- self.assertEqual(text, "\0" * len(text))
-
-
- class TestMenuInfo(TestBase):
- def testPackUnpack(self):
- vals = dict(dwStyle=1, cyMax=2, hbrBack=3, dwContextHelpID=4, dwMenuData=5)
-
- mi = win32gui_struct.PackMENUINFO(**vals)
- (
- dwStyle,
- cyMax,
- hbrBack,
- dwContextHelpID,
- dwMenuData,
- ) = win32gui_struct.UnpackMENUINFO(mi)
-
- self.assertDictEquals(
- vals,
- dwStyle=dwStyle,
- cyMax=cyMax,
- hbrBack=hbrBack,
- dwContextHelpID=dwContextHelpID,
- dwMenuData=dwMenuData,
- )
-
- def testEmptyMenuItemInfo(self):
- mi = win32gui_struct.EmptyMENUINFO()
- (
- dwStyle,
- cyMax,
- hbrBack,
- dwContextHelpID,
- dwMenuData,
- ) = win32gui_struct.UnpackMENUINFO(mi)
- self.assertEqual(dwStyle, 0)
- self.assertEqual(cyMax, 0)
- self.assertEqual(hbrBack, 0)
- self.assertEqual(dwContextHelpID, 0)
- self.assertEqual(dwMenuData, 0)
-
-
- class TestTreeViewItem(TestBase):
- def _testPackUnpack(self, text):
- vals = dict(
- hitem=1,
- state=2,
- stateMask=3,
- text=text,
- image=4,
- selimage=5,
- citems=6,
- param=7,
- )
-
- ti, extra = win32gui_struct.PackTVITEM(**vals)
- (
- hitem,
- state,
- stateMask,
- text,
- image,
- selimage,
- citems,
- param,
- ) = win32gui_struct.UnpackTVITEM(ti)
-
- self.assertDictEquals(
- vals,
- hitem=hitem,
- state=state,
- stateMask=stateMask,
- text=text,
- image=image,
- selimage=selimage,
- citems=citems,
- param=param,
- )
-
- def testPackUnpack(self):
- self._testPackUnpack("Hello")
-
- def testPackUnpackNone(self):
- self._testPackUnpack(None)
-
- def testEmpty(self):
- ti, extras = win32gui_struct.EmptyTVITEM(0)
- (
- hitem,
- state,
- stateMask,
- text,
- image,
- selimage,
- citems,
- param,
- ) = win32gui_struct.UnpackTVITEM(ti)
- self.assertEqual(hitem, 0)
- self.assertEqual(state, 0)
- self.assertEqual(stateMask, 0)
- self.assertEqual(text, "")
- self.assertEqual(image, 0)
- self.assertEqual(selimage, 0)
- self.assertEqual(citems, 0)
- self.assertEqual(param, 0)
-
-
- class TestListViewItem(TestBase):
- def _testPackUnpack(self, text):
- vals = dict(
- item=None,
- subItem=None,
- state=1,
- stateMask=2,
- text=text,
- image=3,
- param=4,
- indent=5,
- )
-
- ti, extra = win32gui_struct.PackLVITEM(**vals)
- (
- item,
- subItem,
- state,
- stateMask,
- text,
- image,
- param,
- indent,
- ) = win32gui_struct.UnpackLVITEM(ti)
-
- # patch expected values.
- vals["item"] = 0
- vals["subItem"] = 0
- self.assertDictEquals(
- vals,
- item=item,
- subItem=subItem,
- state=state,
- stateMask=stateMask,
- text=text,
- image=image,
- param=param,
- indent=indent,
- )
-
- def testPackUnpack(self):
- self._testPackUnpack("Hello")
-
- def testPackUnpackNone(self):
- self._testPackUnpack(None)
-
- def testEmpty(self):
- ti, extras = win32gui_struct.EmptyLVITEM(1, 2)
- (
- item,
- subItem,
- state,
- stateMask,
- text,
- image,
- param,
- indent,
- ) = win32gui_struct.UnpackLVITEM(ti)
- self.assertEqual(item, 1)
- self.assertEqual(subItem, 2)
- self.assertEqual(state, 0)
- self.assertEqual(stateMask, 0)
- self.assertEqual(text, "")
- self.assertEqual(image, 0)
- self.assertEqual(param, 0)
- self.assertEqual(indent, 0)
-
-
- class TestLVColumn(TestBase):
- def _testPackUnpack(self, text):
- vals = dict(fmt=1, cx=2, text=text, subItem=3, image=4, order=5)
-
- ti, extra = win32gui_struct.PackLVCOLUMN(**vals)
- fmt, cx, text, subItem, image, order = win32gui_struct.UnpackLVCOLUMN(ti)
-
- self.assertDictEquals(
- vals, fmt=fmt, cx=cx, text=text, subItem=subItem, image=image, order=order
- )
-
- def testPackUnpack(self):
- self._testPackUnpack("Hello")
-
- def testPackUnpackNone(self):
- self._testPackUnpack(None)
-
- def testEmpty(self):
- ti, extras = win32gui_struct.EmptyLVCOLUMN()
- fmt, cx, text, subItem, image, order = win32gui_struct.UnpackLVCOLUMN(ti)
- self.assertEqual(fmt, 0)
- self.assertEqual(cx, 0)
- self.assertEqual(text, "")
- self.assertEqual(subItem, 0)
- self.assertEqual(image, 0)
- self.assertEqual(order, 0)
-
-
- class TestDEV_BROADCAST_HANDLE(TestBase):
- def testPackUnpack(self):
- s = win32gui_struct.PackDEV_BROADCAST_HANDLE(123)
- c = array.array("b", s)
- got = win32gui_struct.UnpackDEV_BROADCAST(c.buffer_info()[0])
- self.assertEqual(got.handle, 123)
-
- def testGUID(self):
- s = win32gui_struct.PackDEV_BROADCAST_HANDLE(123, guid=pythoncom.IID_IUnknown)
- c = array.array("b", s)
- got = win32gui_struct.UnpackDEV_BROADCAST(c.buffer_info()[0])
- self.assertEqual(got.handle, 123)
- self.assertEqual(got.eventguid, pythoncom.IID_IUnknown)
-
-
- class TestDEV_BROADCAST_DEVICEINTERFACE(TestBase):
- def testPackUnpack(self):
- s = win32gui_struct.PackDEV_BROADCAST_DEVICEINTERFACE(
- pythoncom.IID_IUnknown, "hello"
- )
- c = array.array("b", s)
- got = win32gui_struct.UnpackDEV_BROADCAST(c.buffer_info()[0])
- self.assertEqual(got.classguid, pythoncom.IID_IUnknown)
- self.assertEqual(got.name, "hello")
-
-
- class TestDEV_BROADCAST_VOLUME(TestBase):
- def testPackUnpack(self):
- s = win32gui_struct.PackDEV_BROADCAST_VOLUME(123, 456)
- c = array.array("b", s)
- got = win32gui_struct.UnpackDEV_BROADCAST(c.buffer_info()[0])
- self.assertEqual(got.unitmask, 123)
- self.assertEqual(got.flags, 456)
-
-
- if __name__ == "__main__":
- unittest.main()
|