From 7bdfde50fb709b0f6eb6ab66c547bb877b47cb6b Mon Sep 17 00:00:00 2001 From: Oleg Iarygin Date: Sun, 30 Oct 2022 20:39:06 +0400 Subject: [PATCH 1/8] Fix wrong type of ctypes.wintypes.BYTE Created from a patch file attached to an issue, by Anatoly Techtonik. --- Lib/ctypes/wintypes.py | 2 +- .../next/Library/2022-09-26-21-18-47.gh-issue-60580.0hBgde.rst | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2022-09-26-21-18-47.gh-issue-60580.0hBgde.rst diff --git a/Lib/ctypes/wintypes.py b/Lib/ctypes/wintypes.py index c619d27596d40b..9c4e721438aad5 100644 --- a/Lib/ctypes/wintypes.py +++ b/Lib/ctypes/wintypes.py @@ -1,7 +1,7 @@ # The most useful windows datatypes import ctypes -BYTE = ctypes.c_byte +BYTE = ctypes.c_ubyte WORD = ctypes.c_ushort DWORD = ctypes.c_ulong diff --git a/Misc/NEWS.d/next/Library/2022-09-26-21-18-47.gh-issue-60580.0hBgde.rst b/Misc/NEWS.d/next/Library/2022-09-26-21-18-47.gh-issue-60580.0hBgde.rst new file mode 100644 index 00000000000000..4c3d1c3a23a108 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-09-26-21-18-47.gh-issue-60580.0hBgde.rst @@ -0,0 +1,3 @@ +:data:`ctypes.wintypes.BYTE` definition changed from +:data:`~ctypes.c_byte` to :data:`~ctypes.c_ubyte` to match Windows +SDK. Patch by Anatoly Techtonik. From 8a809b3d93c8871223b3615855aa97b247b05ea8 Mon Sep 17 00:00:00 2001 From: Oleg Iarygin Date: Thu, 26 Jan 2023 16:07:58 +0400 Subject: [PATCH 2/8] Add signess tests --- Lib/test/test_ctypes/test_wintypes.py | 19 +++++++++++++++++++ ...2-09-26-21-18-47.gh-issue-60580.0hBgde.rst | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_ctypes/test_wintypes.py b/Lib/test/test_ctypes/test_wintypes.py index 243d5962ffa7f1..dcf39b6ca5bf43 100644 --- a/Lib/test/test_ctypes/test_wintypes.py +++ b/Lib/test/test_ctypes/test_wintypes.py @@ -1,3 +1,6 @@ +# See +# for reference. + import unittest # also work on POSIX @@ -38,6 +41,22 @@ def test_variant_bool(self): vb.value = [] self.assertIs(vb.value, False) + def test_signess(self): + # Unsigned aliases with octet sie in their name + for type in (wintypes.BYTE, wintypes.WORD, wintypes.DWORD): + with self.subTest(type=type): + self.assertEqual(type(200).value, 128) + + # Unsigned aliases with generic name + for type in (wintypes.BOOLEAN, wintypes.UINT, wintypes.ULONG): + with self.subTest(type=type): + self.assertLess(type(200).value, 200) + + #Signed types with generic names + for type in (wintypes.BOOL, wintypes.INT, wintypes.LONG): + with self.subTest(type=type): + self.assertLess(type(200).value, 200) + if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS.d/next/Library/2022-09-26-21-18-47.gh-issue-60580.0hBgde.rst b/Misc/NEWS.d/next/Library/2022-09-26-21-18-47.gh-issue-60580.0hBgde.rst index 4c3d1c3a23a108..630e56cd2f7b87 100644 --- a/Misc/NEWS.d/next/Library/2022-09-26-21-18-47.gh-issue-60580.0hBgde.rst +++ b/Misc/NEWS.d/next/Library/2022-09-26-21-18-47.gh-issue-60580.0hBgde.rst @@ -1,3 +1,3 @@ :data:`ctypes.wintypes.BYTE` definition changed from :data:`~ctypes.c_byte` to :data:`~ctypes.c_ubyte` to match Windows -SDK. Patch by Anatoly Techtonik. +SDK. Patch by Anatoly Techtonik and Oleg Iarygin. From 4a2b11979afbba50ae7c531457ab21ea7b5c2182 Mon Sep 17 00:00:00 2001 From: Oleg Iarygin Date: Thu, 26 Jan 2023 16:13:36 +0400 Subject: [PATCH 3/8] Improve the tests --- Lib/test/test_ctypes/test_wintypes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_ctypes/test_wintypes.py b/Lib/test/test_ctypes/test_wintypes.py index dcf39b6ca5bf43..4897ed9dc6355f 100644 --- a/Lib/test/test_ctypes/test_wintypes.py +++ b/Lib/test/test_ctypes/test_wintypes.py @@ -42,17 +42,17 @@ def test_variant_bool(self): self.assertIs(vb.value, False) def test_signess(self): - # Unsigned aliases with octet sie in their name + # Unsigned aliases with octet sizw in their name for type in (wintypes.BYTE, wintypes.WORD, wintypes.DWORD): with self.subTest(type=type): self.assertEqual(type(200).value, 128) - # Unsigned aliases with generic name + # Unsigned aliases with generic names for type in (wintypes.BOOLEAN, wintypes.UINT, wintypes.ULONG): with self.subTest(type=type): - self.assertLess(type(200).value, 200) + self.assertEqual(type(200).value, 128) - #Signed types with generic names + # Signed types with generic names for type in (wintypes.BOOL, wintypes.INT, wintypes.LONG): with self.subTest(type=type): self.assertLess(type(200).value, 200) From 5bd61d6c4b8b24f98a2f5c777f2d4b950a04b9cf Mon Sep 17 00:00:00 2001 From: Oleg Iarygin Date: Thu, 26 Jan 2023 16:15:17 +0400 Subject: [PATCH 4/8] Fix the tests --- Lib/test/test_ctypes/test_wintypes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_ctypes/test_wintypes.py b/Lib/test/test_ctypes/test_wintypes.py index 4897ed9dc6355f..3742d7b981dbae 100644 --- a/Lib/test/test_ctypes/test_wintypes.py +++ b/Lib/test/test_ctypes/test_wintypes.py @@ -42,20 +42,20 @@ def test_variant_bool(self): self.assertIs(vb.value, False) def test_signess(self): - # Unsigned aliases with octet sizw in their name + # Unsigned aliases with octet size in their names for type in (wintypes.BYTE, wintypes.WORD, wintypes.DWORD): with self.subTest(type=type): - self.assertEqual(type(200).value, 128) + self.assertEqual(type(200).value, 200) # Unsigned aliases with generic names for type in (wintypes.BOOLEAN, wintypes.UINT, wintypes.ULONG): with self.subTest(type=type): - self.assertEqual(type(200).value, 128) + self.assertEqual(type(200).value, 200) # Signed types with generic names for type in (wintypes.BOOL, wintypes.INT, wintypes.LONG): with self.subTest(type=type): - self.assertLess(type(200).value, 200) + self.assertLess(type(200).value, 128) if __name__ == "__main__": From 12593bef5a8b0c2ec793522ee49063d40b6a2d19 Mon Sep 17 00:00:00 2001 From: Oleg Iarygin Date: Thu, 26 Jan 2023 16:16:35 +0400 Subject: [PATCH 5/8] Address the review --- Lib/test/test_ctypes/test_wintypes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_ctypes/test_wintypes.py b/Lib/test/test_ctypes/test_wintypes.py index 3742d7b981dbae..cbab45f285569a 100644 --- a/Lib/test/test_ctypes/test_wintypes.py +++ b/Lib/test/test_ctypes/test_wintypes.py @@ -41,7 +41,7 @@ def test_variant_bool(self): vb.value = [] self.assertIs(vb.value, False) - def test_signess(self): + def test_signedness(self): # Unsigned aliases with octet size in their names for type in (wintypes.BYTE, wintypes.WORD, wintypes.DWORD): with self.subTest(type=type): From 5f2e4164f46739b6fd14b6cd9b5517a88d51f37d Mon Sep 17 00:00:00 2001 From: Oleg Iarygin Date: Thu, 26 Jan 2023 16:44:39 +0400 Subject: [PATCH 6/8] Address the review-2 --- Lib/test/test_ctypes/test_wintypes.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Lib/test/test_ctypes/test_wintypes.py b/Lib/test/test_ctypes/test_wintypes.py index cbab45f285569a..1d948f992149fe 100644 --- a/Lib/test/test_ctypes/test_wintypes.py +++ b/Lib/test/test_ctypes/test_wintypes.py @@ -41,21 +41,18 @@ def test_variant_bool(self): vb.value = [] self.assertIs(vb.value, False) - def test_signedness(self): - # Unsigned aliases with octet size in their names - for type in (wintypes.BYTE, wintypes.WORD, wintypes.DWORD): - with self.subTest(type=type): - self.assertEqual(type(200).value, 200) + def assertIsSigned(self, ctype): + self.assertLess(ctype(-1).value, 0) - # Unsigned aliases with generic names - for type in (wintypes.BOOLEAN, wintypes.UINT, wintypes.ULONG): + def test_signedness(self): + for type in (wintypes.BYTE, wintypes.WORD, wintypes.DWORD, + wintypes.BOOLEAN, wintypes.UINT, wintypes.ULONG): with self.subTest(type=type): - self.assertEqual(type(200).value, 200) + self.assertFalse(assertIsSigned(type)) - # Signed types with generic names for type in (wintypes.BOOL, wintypes.INT, wintypes.LONG): with self.subTest(type=type): - self.assertLess(type(200).value, 128) + self.assertTrue(assertIsSigned(type)) if __name__ == "__main__": From 2174d7bdb9ef9e910b9336441f76332caa9dd2fb Mon Sep 17 00:00:00 2001 From: Oleg Iarygin Date: Thu, 26 Jan 2023 17:29:40 +0400 Subject: [PATCH 7/8] Add `assertIsUnsigned()` --- Lib/test/test_ctypes/test_wintypes.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_ctypes/test_wintypes.py b/Lib/test/test_ctypes/test_wintypes.py index 1d948f992149fe..ad44474790502a 100644 --- a/Lib/test/test_ctypes/test_wintypes.py +++ b/Lib/test/test_ctypes/test_wintypes.py @@ -44,15 +44,18 @@ def test_variant_bool(self): def assertIsSigned(self, ctype): self.assertLess(ctype(-1).value, 0) + def assertIsUnsigned(self, ctype): + self.assertGreater(ctype(-1).value, 0) + def test_signedness(self): for type in (wintypes.BYTE, wintypes.WORD, wintypes.DWORD, wintypes.BOOLEAN, wintypes.UINT, wintypes.ULONG): with self.subTest(type=type): - self.assertFalse(assertIsSigned(type)) + self.assertIsUnsigned(type) for type in (wintypes.BOOL, wintypes.INT, wintypes.LONG): with self.subTest(type=type): - self.assertTrue(assertIsSigned(type)) + self.assertIsSigned(type) if __name__ == "__main__": From 057c9250fed188069104195584308f19408b8204 Mon Sep 17 00:00:00 2001 From: Oleg Iarygin Date: Thu, 26 Jan 2023 17:33:53 +0400 Subject: [PATCH 8/8] Rename `type` to `ctype` --- Lib/test/test_ctypes/test_wintypes.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_ctypes/test_wintypes.py b/Lib/test/test_ctypes/test_wintypes.py index ad44474790502a..a01b9b1d0f3109 100644 --- a/Lib/test/test_ctypes/test_wintypes.py +++ b/Lib/test/test_ctypes/test_wintypes.py @@ -48,14 +48,14 @@ def assertIsUnsigned(self, ctype): self.assertGreater(ctype(-1).value, 0) def test_signedness(self): - for type in (wintypes.BYTE, wintypes.WORD, wintypes.DWORD, + for ctype in (wintypes.BYTE, wintypes.WORD, wintypes.DWORD, wintypes.BOOLEAN, wintypes.UINT, wintypes.ULONG): - with self.subTest(type=type): - self.assertIsUnsigned(type) + with self.subTest(ctype=ctype): + self.assertIsUnsigned(ctype) - for type in (wintypes.BOOL, wintypes.INT, wintypes.LONG): - with self.subTest(type=type): - self.assertIsSigned(type) + for ctype in (wintypes.BOOL, wintypes.INT, wintypes.LONG): + with self.subTest(ctype=ctype): + self.assertIsSigned(ctype) if __name__ == "__main__":