| 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) |