Index: ctypes/test/test_wintypes.py =================================================================== --- ctypes/test/test_wintypes.py (revision 0) +++ ctypes/test/test_wintypes.py (revision 0) @@ -0,0 +1,38 @@ +import unittest +from ctypes import * +from ctypes import wintypes + +class TestCase(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.assertEqual(vb.value, False) + vb.value = True + self.assertEqual(vb.value, True) + vb.value = true_value + self.assertEqual(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.assertEqual(vb.value, True) + + vb = wintypes.VARIANT_BOOL() + vb.value = [2,3] + self.assertEqual(vb.value, True) + vb.value = [] + self.assertEqual(vb.value, False) + +if __name__ == "__main__": + unittest.main() Index: test/test_winreg.py =================================================================== --- test/test_winreg.py (revision 77967) +++ test/test_winreg.py (working copy) @@ -185,6 +185,13 @@ self.assertEqual(type(r), str) self.assertEqual(r, os.environ["windir"] + "\\test") + def testExceptionNumbers(self): + try: + QueryValue(HKEY_CLASSES_ROOT, 'some_value_that_does_not_exist') + self.fail('should throw') + except WindowsError as err: + self.assertEqual(err.errno, 2) + def test_main(): support.run_unittest(WinregTests)