-
-
Notifications
You must be signed in to change notification settings - Fork 34.8k
bpo-42111: Make the xxlimited module an example of best extension module practices #23226
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
cc8fbd9
500ccc6
5fd5f45
d6c748c
3475b25
28802b7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| import unittest | ||
| from test.support import import_helper | ||
| import types | ||
|
|
||
| xxlimited = import_helper.import_module('xxlimited') | ||
| xxlimited_35 = import_helper.import_module('xxlimited_35') | ||
|
|
||
|
|
||
| class CommonTests: | ||
| module: types.ModuleType | ||
|
|
||
| def test_xxo_new(self): | ||
| xxo = self.module.Xxo() | ||
|
|
||
| def test_xxo_attributes(self): | ||
| xxo = self.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 | ||
|
|
||
| def test_foo(self): | ||
| # the foo function adds 2 numbers | ||
| self.assertEqual(self.module.foo(1, 2), 3) | ||
|
|
||
| def test_str(self): | ||
| self.assertTrue(issubclass(self.module.Str, str)) | ||
| self.assertIsNot(self.module.Str, str) | ||
|
|
||
| custom_string = self.module.Str("abcd") | ||
| self.assertEqual(custom_string, "abcd") | ||
| self.assertEqual(custom_string.upper(), "ABCD") | ||
|
|
||
| def test_new(self): | ||
| xxo = self.module.new() | ||
| self.assertEqual(xxo.demo("abc"), "abc") | ||
|
|
||
|
|
||
| class TestXXLimited(CommonTests, unittest.TestCase): | ||
| module = xxlimited | ||
|
|
||
| def test_xxo_demo(self): | ||
| xxo = self.module.Xxo() | ||
| other = self.module.Xxo() | ||
| self.assertEqual(xxo.demo("abc"), "abc") | ||
| self.assertEqual(xxo.demo(xxo), xxo) | ||
| self.assertEqual(xxo.demo(other), other) | ||
| self.assertEqual(xxo.demo(0), None) | ||
|
|
||
| def test_error(self): | ||
| with self.assertRaises(self.module.Error): | ||
| raise self.module.Error | ||
|
|
||
|
|
||
| class TestXXLimited35(CommonTests, unittest.TestCase): | ||
| module = xxlimited_35 | ||
|
|
||
| def test_xxo_demo(self): | ||
| xxo = self.module.Xxo() | ||
| other = self.module.Xxo() | ||
| self.assertEqual(xxo.demo("abc"), "abc") | ||
| self.assertEqual(xxo.demo(0), None) | ||
|
|
||
| def test_roj(self): | ||
| # the roj function always fails | ||
| with self.assertRaises(SystemError): | ||
| self.module.roj(0) | ||
|
|
||
| def test_null(self): | ||
| null1 = self.module.Null() | ||
| null2 = self.module.Null() | ||
| self.assertNotEqual(null1, null2) | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe add:
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think that is unnecessary;
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. No, it's not a requirement. It's just that other test_xxx.py files have it. You can leave this file as it is. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| Update the ``xxlimited`` module to be a better example of how to use the | ||
| limited C API. |
Uh oh!
There was an error while loading. Please reload this page.