|
21 | 21 | from clinic import DSLParser
|
22 | 22 |
|
23 | 23 |
|
24 |
| -def _make_clinic(*, filename='clinic_tests'): |
| 24 | +def _make_clinic(*, filename='clinic_tests', limited_capi=False): |
25 | 25 | clang = clinic.CLanguage(filename)
|
26 |
| - c = clinic.Clinic(clang, filename=filename, limited_capi=False) |
| 26 | + c = clinic.Clinic(clang, filename=filename, limited_capi=limited_capi) |
27 | 27 | c.block_parser = clinic.BlockParser('', clang)
|
28 | 28 | return c
|
29 | 29 |
|
@@ -3614,6 +3614,46 @@ def test_depr_multi(self):
|
3614 | 3614 | self.assertRaises(TypeError, fn, a="a", b="b", c="c", d="d", e="e", f="f", g="g")
|
3615 | 3615 |
|
3616 | 3616 |
|
| 3617 | +class LimitedCAPIOutputTests(unittest.TestCase): |
| 3618 | + |
| 3619 | + def setUp(self): |
| 3620 | + self.clinic = _make_clinic(limited_capi=True) |
| 3621 | + |
| 3622 | + @staticmethod |
| 3623 | + def wrap_clinic_input(block): |
| 3624 | + return dedent(f""" |
| 3625 | + /*[clinic input] |
| 3626 | + output everything buffer |
| 3627 | + {block} |
| 3628 | + [clinic start generated code]*/ |
| 3629 | + /*[clinic input] |
| 3630 | + dump buffer |
| 3631 | + [clinic start generated code]*/ |
| 3632 | + """) |
| 3633 | + |
| 3634 | + def test_limited_capi_float(self): |
| 3635 | + block = self.wrap_clinic_input(""" |
| 3636 | + func |
| 3637 | + f: float |
| 3638 | + / |
| 3639 | + """) |
| 3640 | + generated = self.clinic.parse(block) |
| 3641 | + self.assertNotIn("PyFloat_AS_DOUBLE", generated) |
| 3642 | + self.assertIn("float f;", generated) |
| 3643 | + self.assertIn("f = (float) PyFloat_AsDouble", generated) |
| 3644 | + |
| 3645 | + def test_limited_capi_double(self): |
| 3646 | + block = self.wrap_clinic_input(""" |
| 3647 | + func |
| 3648 | + f: double |
| 3649 | + / |
| 3650 | + """) |
| 3651 | + generated = self.clinic.parse(block) |
| 3652 | + self.assertNotIn("PyFloat_AS_DOUBLE", generated) |
| 3653 | + self.assertIn("double f;", generated) |
| 3654 | + self.assertIn("f = PyFloat_AsDouble", generated) |
| 3655 | + |
| 3656 | + |
3617 | 3657 | try:
|
3618 | 3658 | import _testclinic_limited
|
3619 | 3659 | except ImportError:
|
@@ -3644,6 +3684,20 @@ def test_my_int_sum(self):
|
3644 | 3684 | with self.assertRaises(TypeError):
|
3645 | 3685 | _testclinic_limited.my_int_sum(1, "str")
|
3646 | 3686 |
|
| 3687 | + def test_my_double_sum(self): |
| 3688 | + for func in ( |
| 3689 | + _testclinic_limited.my_float_sum, |
| 3690 | + _testclinic_limited.my_double_sum, |
| 3691 | + ): |
| 3692 | + with self.subTest(func=func.__name__): |
| 3693 | + self.assertEqual(func(1.0, 2.5), 3.5) |
| 3694 | + with self.assertRaises(TypeError): |
| 3695 | + func() |
| 3696 | + with self.assertRaises(TypeError): |
| 3697 | + func(1) |
| 3698 | + with self.assertRaises(TypeError): |
| 3699 | + func(1., "2") |
| 3700 | + |
3647 | 3701 |
|
3648 | 3702 |
|
3649 | 3703 | class PermutationTests(unittest.TestCase):
|
|
0 commit comments