gh-105751: Reenable disable test_ctypes tests (#105818)

Reenable 3 tests:

* test_overflow()
* test_basic_wstrings()
* test_toolong()
This commit is contained in:
Victor Stinner 2023-06-15 11:36:41 +02:00 committed by GitHub
parent 0841ca7932
commit b496ff3109
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 31 deletions

View file

@ -9,16 +9,15 @@ from ctypes import (POINTER, sizeof, cast,
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: <http://bugs.python.org/issue3554>
# 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

View file

@ -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):
@ -88,41 +89,35 @@ class WStringTestCase(unittest.TestCase):
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")
# The raw property is the total buffer contents:
self.assertEqual(cs.raw, "abcdef\000")
self.assertEqual(c_wstring("abc\000def").raw, "abc\000def\000")
# string is truncated at NUL character
cs.value = "def\0z"
self.assertEqual(cs.value, "def")
# We can change the value:
cs.value = "ab"
self.assertEqual(cs.value, "ab")
self.assertEqual(cs.raw, "ab\000\000\000\000\000")
self.assertEqual(create_unicode_buffer("abc\0def").value, "abc")
self.assertRaises(TypeError, c_wstring, "123")
self.assertRaises(ValueError, c_wstring, 0)
# created with an empty string
cs = create_unicode_buffer(3)
self.assertEqual(cs.value, "")
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):