1import unittest 2 3# also work on POSIX 4 5from ctypes import * 6from ctypes import wintypes 7 8 9class WinTypesTest(unittest.TestCase): 10 def test_variant_bool(self): 11 # reads 16-bits from memory, anything non-zero is True 12 for true_value in (1, 32767, 32768, 65535, 65537): 13 true = POINTER(c_int16)(c_int16(true_value)) 14 value = cast(true, POINTER(wintypes.VARIANT_BOOL)) 15 self.assertEqual(repr(value.contents), 'VARIANT_BOOL(True)') 16 17 vb = wintypes.VARIANT_BOOL() 18 self.assertIs(vb.value, False) 19 vb.value = True 20 self.assertIs(vb.value, True) 21 vb.value = true_value 22 self.assertIs(vb.value, True) 23 24 for false_value in (0, 65536, 262144, 2**33): 25 false = POINTER(c_int16)(c_int16(false_value)) 26 value = cast(false, POINTER(wintypes.VARIANT_BOOL)) 27 self.assertEqual(repr(value.contents), 'VARIANT_BOOL(False)') 28 29 # allow any bool conversion on assignment to value 30 for set_value in (65536, 262144, 2**33): 31 vb = wintypes.VARIANT_BOOL() 32 vb.value = set_value 33 self.assertIs(vb.value, True) 34 35 vb = wintypes.VARIANT_BOOL() 36 vb.value = [2, 3] 37 self.assertIs(vb.value, True) 38 vb.value = [] 39 self.assertIs(vb.value, False) 40 41 42if __name__ == "__main__": 43 unittest.main() 44