From 844345188e377daa7855f984a115f3db9ced480c Mon Sep 17 00:00:00 2001 From: Kalmat Date: Mon, 28 Feb 2022 10:36:02 +0100 Subject: [PATCH] Added tests for parent-related methods --- README.md | 18 ++++++++++-------- dist/PyWinCtl-0.0.17-py3-none-any.whl | Bin 0 -> 34402 bytes src/pywinctl/__init__.py | 2 +- src/pywinctl/_pywinctl_macos.py | 4 ++-- tests/test_pywinctl.py | 15 --------------- 5 files changed, 13 insertions(+), 26 deletions(-) create mode 100644 dist/PyWinCtl-0.0.17-py3-none-any.whl diff --git a/README.md b/README.md index 00914b1..ad243d1 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ Cross-Platform module to gather information on and control windows opened on screen. -This module is a fork from asweigart's PyGetWindow module (https://github.com/asweigart/PyGetWindow), which adds Linux and macOS experimental support to the MS Windows-only original module, in the hope others can use it, test it or contribute +This module is a Python 3 fork from [asweigart's PyGetWindow module](https://github.com/asweigart/PyGetWindow), which adds Linux and macOS experimental support to the MS Windows-only original module, in the hope others can use it, test it or contribute -My most sincere thanks and acknowledgement to macdeport (https://github.com/macdeport) and holychowders (https://github.com/holychowders) for their help and moral boost. +My most sincere thanks and acknowledgement to [macdeport](https://github.com/macdeport) and [holychowders](https://github.com/holychowders) for their help and moral boost. ## Window Features @@ -87,27 +87,29 @@ To install this module on your system, you can use pip: pip install pywinctl -Alternatively, you can download the wheel file (.whl) located in "dist" folder, and run this (don't forget to replace 'x.x.xx' with proper version number): +Alternatively, you can download the wheel file (.whl) available in the [Donwnload page](https://pypi.org/project/pywin32/#files) and the [dist folder](https://github.com/Kalmat/PyWinCtl/tree/master/dist), and run this (don't forget to replace 'x.x.xx' with proper version number): pip install PyWinCtl-x.x.xx-py3-none-any.whl -You may want to add '--force-reinstall' option to be sure you are installing the right dependencies version. +You may want to add `--force-reinstall` option to be sure you are installing the right dependencies version. Then, you can use it on your own projects just importing it: import pywinctl +## SUPPORT + +In case you have a problem, comments or suggestions, do not hesitate to [open issues](https://github.com/Kalmat/PyWinCtl/issues) on the [project homepage](https://github.com/Kalmat/PyWinCtl) + ## USING THIS CODE If you want to use this code or contribute, you can either: -* Create a fork of this repository, or -* Download the repository, uncompress, and open it on your IDE of choice (e.g. PyCharm) +* Create a fork of the [repository](https://github.com/Kalmat/PyWinCtl), or +* [Download the repository](https://github.com/Kalmat/PyWinCtl/archive/refs/heads/master.zip), uncompress, and open it on your IDE of choice (e.g. PyCharm) Be sure you install all dependencies described on "docs/requirements.txt" by using pip -In case you have any issues, comments or suggestions, do not hesitate to open an issue, or contact me (palookjones@gmail.com) - ## TEST To test this module on your own system, cd to "tests" folder and run: diff --git a/dist/PyWinCtl-0.0.17-py3-none-any.whl b/dist/PyWinCtl-0.0.17-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..e2c6a724fa0fe6e565da370d425765cd2cce2b6e GIT binary patch literal 34402 zcmZ^~Q>-vt%wTs#1bIP2@v*?a70DLQSjA^EP= z^;0HA@R}sQ-X55GJKSZ<)V+{6ILh5_vtyDFLb8h11DHqsytG04lSn9%kUmx94ucJh zg#Eap_X7<>KbEu~U3le8>%~(eNfs<$(G+-+9;aH1W|K#o3$Dr_=hlKCQWjXq5G7br zB0UZ-Y4B8xz+{?%^8DP?Q8=1a$(BI)MU8K$ruyt}Hvh=WmHZyzoV2ohexnxq%DS8H zHk93f>3bhr^k&VNPMr`ZMMgPykfa&^{v3Xd!29LRnR;hIRzy�CbW-MzKH)2&+j@ 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 bool: ''parent'' title/handle (role:title) of the window/app you want to check if the current window is child of """ currParent = self.getParent() - if ":" not in parent: + if SEP not in parent: part = currParent.split(SEP) if len(part) > 1: currParent = part[1] @@ -1502,7 +1502,7 @@ def sendBehind(self, sb: bool = True) -> bool: def getParent(self): """Returns the handle of the window parent""" - return self._hWnd.hWnd.parentWindow() + return self._hWnd.parentWindow() def getHandle(self): """Returns the handle of the window""" diff --git a/tests/test_pywinctl.py b/tests/test_pywinctl.py index e12ad8c..4f427ac 100644 --- a/tests/test_pywinctl.py +++ b/tests/test_pywinctl.py @@ -205,8 +205,6 @@ def basic_win32(npw): # Test parent methods parent = npw.getParent() assert npw.isChild(parent) - parentObj = pywinctl.Win32Window(parent) - assert parentObj.isParent(npw.getHandle()) # Test menu options menu = npw.menu.getMenu() @@ -380,8 +378,6 @@ def basic_linux(npw): # Test parent methods parent = npw.getParent() assert npw.isChild(parent) - parentObj = pywinctl.LinuxWindow(parent) - assert parentObj.isParent(npw.getHandle()) # Test closing npw.close() @@ -538,17 +534,6 @@ def basic_macOS(npw): # Test parent methods parent = npw.getParent() assert parent and npw.isChild(parent) - part = parent.split(pywinctl._pywinctl_macos.SEP) - parentName = None - if len(part) > 1: - parentName = part[1] - windows = [] - if parentName: - windows = pywinctl.getWindowsWithTitle(parentName) - parentObj = None - if windows: - parentObj = windows[0] - assert parentObj and parentObj.isChild(npw.getHandle()) # Test menu options menu = npw.menu.getMenu()