From 61cbdfbe1e8f176a1e68be4b911d1b04115ac044 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 15 Jun 2023 11:01:57 +0200 Subject: [PATCH] gh-105751: Reenable disable test_ctypes tests Reenable 3 tests: * test_overflow() * test_basic_wstrings() * test_toolong() --- Lib/test/test_ctypes/test_memfunctions.py | 7 ++-- Lib/test/test_ctypes/test_strings.py | 49 ++++++++++------------- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/Lib/test/test_ctypes/test_memfunctions.py b/Lib/test/test_ctypes/test_memfunctions.py index 2ff95f619e0895..112b27ba48e07e 100644 --- a/Lib/test/test_ctypes/test_memfunctions.py +++ b/Lib/test/test_ctypes/test_memfunctions.py @@ -9,16 +9,15 @@ class MemFunctionsTest(unittest.TestCase): - @unittest.skip('test disabled') def test_overflow(self): # string_at and wstring_at must use the Python calling # convention (which acquires the GIL and checks the Python # error flag). Provoke an error and catch it; see also issue - # #3554: + # gh-47804. self.assertRaises((OverflowError, MemoryError, SystemError), - lambda: wstring_at(u"foo", sys.maxint - 1)) + lambda: wstring_at(u"foo", sys.maxsize - 1)) self.assertRaises((OverflowError, MemoryError, SystemError), - lambda: string_at("foo", sys.maxint - 1)) + lambda: string_at("foo", sys.maxsize - 1)) def test_memmove(self): # large buffers apparently increase the chance that the memory diff --git a/Lib/test/test_ctypes/test_strings.py b/Lib/test/test_ctypes/test_strings.py index 26f036adfb7585..d1e595a436872e 100644 --- a/Lib/test/test_ctypes/test_strings.py +++ b/Lib/test/test_ctypes/test_strings.py @@ -1,5 +1,6 @@ import unittest -from ctypes import create_string_buffer, sizeof, byref, c_char, c_wchar +from ctypes import (create_string_buffer, create_unicode_buffer, + sizeof, byref, c_char, c_wchar) class StringArrayTestCase(unittest.TestCase): @@ -91,41 +92,35 @@ def test_wchar(self): repr(byref(c_wchar("x"))) c_wchar("x") - @unittest.skip('test disabled') def test_basic_wstrings(self): - cs = c_wstring("abcdef") - - # XXX This behaviour is about to change: - # len returns the size of the internal buffer in bytes. - # This includes the terminating NUL character. - self.assertEqual(sizeof(cs), 14) - - # The value property is the string up to the first terminating NUL. + cs = create_unicode_buffer("abcdef") self.assertEqual(cs.value, "abcdef") - self.assertEqual(c_wstring("abc\000def").value, "abc") - self.assertEqual(c_wstring("abc\000def").value, "abc") + # value can be changed + cs.value = "abc" + self.assertEqual(cs.value, "abc") + + # string is truncated at NUL character + cs.value = "def\0z" + self.assertEqual(cs.value, "def") - # The raw property is the total buffer contents: - self.assertEqual(cs.raw, "abcdef\000") - self.assertEqual(c_wstring("abc\000def").raw, "abc\000def\000") + self.assertEqual(create_unicode_buffer("abc\0def").value, "abc") - # We can change the value: - cs.value = "ab" - self.assertEqual(cs.value, "ab") - self.assertEqual(cs.raw, "ab\000\000\000\000\000") + # created with an empty string + cs = create_unicode_buffer(3) + self.assertEqual(cs.value, "") - self.assertRaises(TypeError, c_wstring, "123") - self.assertRaises(ValueError, c_wstring, 0) + cs.value = "abc" + self.assertEqual(cs.value, "abc") - @unittest.skip('test disabled') def test_toolong(self): - cs = c_wstring("abcdef") - # Much too long string: - self.assertRaises(ValueError, setattr, cs, "value", "123456789012345") + cs = create_unicode_buffer("abc") + with self.assertRaises(ValueError): + cs.value = "abcdef" - # One char too long values: - self.assertRaises(ValueError, setattr, cs, "value", "1234567") + cs = create_unicode_buffer(4) + with self.assertRaises(ValueError): + cs.value = "abcdef" def run_test(rep, msg, func, arg):