Commit 5cea09d2 authored by Ezio Melotti's avatar Ezio Melotti

#7855: Add tests for ctypes/winreg for issues found in IronPython. Initial patch by Dino Viehland.

parent 6aca7652
...@@ -62,7 +62,7 @@ def get_tests(package, mask, verbosity, exclude=()): ...@@ -62,7 +62,7 @@ def get_tests(package, mask, verbosity, exclude=()):
continue continue
try: try:
mod = __import__(modname, globals(), locals(), ['*']) mod = __import__(modname, globals(), locals(), ['*'])
except ResourceDenied, detail: except (ResourceDenied, unittest.SkipTest) as detail:
skipped.append(modname) skipped.append(modname)
if verbosity > 1: if verbosity > 1:
print >> sys.stderr, "Skipped %s: %s" % (modname, detail) print >> sys.stderr, "Skipped %s: %s" % (modname, detail)
......
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()
...@@ -442,6 +442,11 @@ class Win64WinregTests(BaseWinregTests): ...@@ -442,6 +442,11 @@ class Win64WinregTests(BaseWinregTests):
DeleteKeyEx(HKEY_CURRENT_USER, test_reflect_key_name, DeleteKeyEx(HKEY_CURRENT_USER, test_reflect_key_name,
KEY_WOW64_32KEY, 0) KEY_WOW64_32KEY, 0)
def test_exception_numbers(self):
with self.assertRaises(WindowsError) as ctx:
QueryValue(HKEY_CLASSES_ROOT, 'some_value_that_does_not_exist')
self.assertEqual(ctx.exception.errno, 2)
def test_main(): def test_main():
test_support.run_unittest(LocalWinregTests, RemoteWinregTests, test_support.run_unittest(LocalWinregTests, RemoteWinregTests,
......
...@@ -1050,6 +1050,7 @@ Jaap Vermeulen ...@@ -1050,6 +1050,7 @@ Jaap Vermeulen
Al Vezza Al Vezza
Jacques A. Vidrine Jacques A. Vidrine
John Viega John Viega
Dino Viehland
Kannan Vijayan Kannan Vijayan
Kurt Vile Kurt Vile
Norman Vine Norman Vine
......
...@@ -81,6 +81,9 @@ Library ...@@ -81,6 +81,9 @@ Library
Tests 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 #17712: Fix test_gdb failures on Ubuntu 13.04.
- Issue #17065: Use process-unique key for winreg tests to avoid failures if - Issue #17065: Use process-unique key for winreg tests to avoid failures if
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment