summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEzio Melotti <ezio.melotti@gmail.com>2013-05-04 14:46:23 (GMT)
committerEzio Melotti <ezio.melotti@gmail.com>2013-05-04 14:46:23 (GMT)
commit28faf03d4474d184b30a8013c70845b6600d456d (patch)
tree990c34f6d2b4c5b0ed8a47690f7dcf8665d2a940
parent59115aa7c9488baae1b706f077dcd84a558c0097 (diff)
downloadcpython-28faf03d4474d184b30a8013c70845b6600d456d.zip
cpython-28faf03d4474d184b30a8013c70845b6600d456d.tar.gz
cpython-28faf03d4474d184b30a8013c70845b6600d456d.tar.bz2
#7855: Add tests for ctypes/winreg for issues found in IronPython. Initial patch by Dino Viehland.
-rw-r--r--Lib/ctypes/test/__init__.py2
-rw-r--r--Lib/ctypes/test/test_wintypes.py43
-rw-r--r--Lib/test/test_winreg.py3
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
5 files changed, 51 insertions, 1 deletions
diff --git a/Lib/ctypes/test/__init__.py b/Lib/ctypes/test/__init__.py
index 82dc9e3..cc5fe02 100644
--- a/Lib/ctypes/test/__init__.py
+++ b/Lib/ctypes/test/__init__.py
@@ -62,7 +62,7 @@ def get_tests(package, mask, verbosity, exclude=()):
continue
try:
mod = __import__(modname, globals(), locals(), ['*'])
- except ResourceDenied as detail:
+ except (ResourceDenied, unittest.SkipTest) as detail:
skipped.append(modname)
if verbosity > 1:
print("Skipped %s: %s" % (modname, detail), file=sys.stderr)
diff --git a/Lib/ctypes/test/test_wintypes.py b/Lib/ctypes/test/test_wintypes.py
new file mode 100644
index 0000000..806fcce
--- /dev/null
+++ b/Lib/ctypes/test/test_wintypes.py
@@ -0,0 +1,43 @@
+import sys
+import unittest
+
+if not sys.platform.startswith('win'):
+ raise unittest.SkipTest('Windows-only test')
+
+from ctypes import *
+from ctypes import wintypes
+
+class WinTypesTest(unittest.TestCase):
+ def test_variant_bool(self):
+ # reads 16-bits from memory, anything non-zero is True
+ for true_value in (1, 32767, 32768, 65535, 65537):
+ true = POINTER(c_int16)(c_int16(true_value))
+ value = cast(true, POINTER(wintypes.VARIANT_BOOL))
+ self.assertEqual(repr(value.contents), 'VARIANT_BOOL(True)')
+
+ vb = wintypes.VARIANT_BOOL()
+ self.assertIs(vb.value, False)
+ vb.value = True
+ self.assertIs(vb.value, True)
+ vb.value = true_value
+ self.assertIs(vb.value, True)
+
+ for false_value in (0, 65536, 262144, 2**33):
+ false = POINTER(c_int16)(c_int16(false_value))
+ value = cast(false, POINTER(wintypes.VARIANT_BOOL))
+ self.assertEqual(repr(value.contents), 'VARIANT_BOOL(False)')
+
+ # allow any bool conversion on assignment to value
+ for set_value in (65536, 262144, 2**33):
+ vb = wintypes.VARIANT_BOOL()
+ vb.value = set_value
+ self.assertIs(vb.value, True)
+
+ vb = wintypes.VARIANT_BOOL()
+ vb.value = [2, 3]
+ self.assertIs(vb.value, True)
+ vb.value = []
+ self.assertIs(vb.value, False)
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py
index 354826c..cb4cde9 100644
--- a/Lib/test/test_winreg.py
+++ b/Lib/test/test_winreg.py
@@ -457,6 +457,9 @@ class Win64WinregTests(BaseWinregTests):
DeleteKeyEx(HKEY_CURRENT_USER, test_reflect_key_name,
KEY_WOW64_32KEY, 0)
+ def test_exception_numbers(self):
+ with self.assertRaises(FileNotFoundError) as ctx:
+ QueryValue(HKEY_CLASSES_ROOT, 'some_value_that_does_not_exist')
def test_main():
support.run_unittest(LocalWinregTests, RemoteWinregTests,
diff --git a/Misc/ACKS b/Misc/ACKS
index 6a0d16f..328af13 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1259,6 +1259,7 @@ Nikita Vetoshkin
Al Vezza
Jacques A. Vidrine
John Viega
+Dino Viehland
Kannan Vijayan
Kurt Vile
Norman Vine
diff --git a/Misc/NEWS b/Misc/NEWS
index 554278b..1bb7355 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -158,6 +158,9 @@ IDLE
Tests
-----
+- Issue #7855: Add tests for ctypes/winreg for issues found in IronPython.
+ Initial patch by Dino Viehland.
+
- Issue #17712: Fix test_gdb failures on Ubuntu 13.04.
- Issue #17835: Fix test_io when the default OS pipe buffer size is larger