mirror of
https://github.com/python/cpython.git
synced 2026-06-23 09:31:13 +00:00
123 lines
3.7 KiB
Python
123 lines
3.7 KiB
Python
import unittest
|
|
from test.support import import_helper
|
|
|
|
xxlimited = import_helper.import_module('xxlimited')
|
|
|
|
# if import of xxlimited succeeded, the other ones should be importable.
|
|
import xxlimited_3_13
|
|
import xxlimited_35
|
|
|
|
MODULES = {
|
|
(3, 15): xxlimited,
|
|
(3, 13): xxlimited_3_13,
|
|
(3, 5): xxlimited_35,
|
|
}
|
|
|
|
def test_with_xxlimited_modules(since=None, until=None):
|
|
def _decorator(func):
|
|
def _wrapper(self, *args, **kwargs):
|
|
for version, module in MODULES.items():
|
|
if since and version < since:
|
|
continue
|
|
if until and version >= until:
|
|
continue
|
|
with self.subTest(version=version):
|
|
func(self, module, *args, **kwargs)
|
|
return _wrapper
|
|
return _decorator
|
|
|
|
class XXLimitedTests(unittest.TestCase):
|
|
@test_with_xxlimited_modules()
|
|
def test_xxo_new(self, module):
|
|
xxo = module.Xxo()
|
|
|
|
@test_with_xxlimited_modules()
|
|
def test_xxo_attributes(self, module):
|
|
xxo = module.Xxo()
|
|
with self.assertRaises(AttributeError):
|
|
xxo.foo
|
|
with self.assertRaises(AttributeError):
|
|
del xxo.foo
|
|
|
|
xxo.foo = 1234
|
|
self.assertEqual(xxo.foo, 1234)
|
|
|
|
del xxo.foo
|
|
with self.assertRaises(AttributeError):
|
|
xxo.foo
|
|
|
|
@test_with_xxlimited_modules()
|
|
def test_foo(self, module):
|
|
# the foo function adds 2 numbers
|
|
self.assertEqual(module.foo(1, 2), 3)
|
|
|
|
@test_with_xxlimited_modules()
|
|
def test_str(self, module):
|
|
self.assertIsSubclass(module.Str, str)
|
|
self.assertIsNot(module.Str, str)
|
|
|
|
custom_string = module.Str("abcd")
|
|
self.assertEqual(custom_string, "abcd")
|
|
self.assertEqual(custom_string.upper(), "ABCD")
|
|
|
|
@test_with_xxlimited_modules()
|
|
def test_new(self, module):
|
|
xxo = module.new()
|
|
self.assertEqual(xxo.demo("abc"), "abc")
|
|
|
|
@test_with_xxlimited_modules()
|
|
def test_xxo_demo(self, module):
|
|
xxo = module.Xxo()
|
|
self.assertEqual(xxo.demo("abc"), "abc")
|
|
self.assertEqual(xxo.demo(0), None)
|
|
self.assertEqual(xxo.__module__, module.__name__)
|
|
with self.assertRaises(TypeError):
|
|
module.Xxo('arg')
|
|
with self.assertRaises(TypeError):
|
|
module.Xxo(kwarg='arg')
|
|
|
|
@test_with_xxlimited_modules(since=(3, 13))
|
|
def test_xxo_demo_extra(self, module):
|
|
xxo = module.Xxo()
|
|
other = module.Xxo()
|
|
self.assertEqual(xxo.demo(xxo), xxo)
|
|
self.assertEqual(xxo.demo(other), other)
|
|
|
|
@test_with_xxlimited_modules(since=(3, 15))
|
|
def test_xxo_subclass(self, module):
|
|
class Sub(module.Xxo):
|
|
pass
|
|
sub = Sub()
|
|
sub.a = 123
|
|
self.assertEqual(sub.a, 123)
|
|
with self.assertRaisesRegex(AttributeError, "cannot set 'reserved'"):
|
|
sub.reserved = 123
|
|
|
|
@test_with_xxlimited_modules(since=(3, 13))
|
|
def test_error(self, module):
|
|
with self.assertRaises(module.Error):
|
|
raise module.Error
|
|
|
|
@test_with_xxlimited_modules(since=(3, 13))
|
|
def test_buffer(self, module):
|
|
xxo = module.Xxo()
|
|
self.assertEqual(xxo.x_exports, 0)
|
|
b1 = memoryview(xxo)
|
|
self.assertEqual(xxo.x_exports, 1)
|
|
b2 = memoryview(xxo)
|
|
self.assertEqual(xxo.x_exports, 2)
|
|
b1[0] = 1
|
|
self.assertEqual(b1[0], 1)
|
|
self.assertEqual(b2[0], 1)
|
|
|
|
@test_with_xxlimited_modules(until=(3, 5))
|
|
def test_roj(self):
|
|
# the roj function always fails
|
|
with self.assertRaises(SystemError):
|
|
self.module.roj(0)
|
|
|
|
@test_with_xxlimited_modules(until=(3, 5))
|
|
def test_null(self):
|
|
null1 = self.module.Null()
|
|
null2 = self.module.Null()
|
|
self.assertNotEqual(null1, null2)
|