# DEALINGS IN THE SOFTWARE.
#
+import copy
import sys
import unittest
-from python import State, parse_pybind_signature
+from python import State, parse_pybind_signature, default_config
from . import BaseInspectTestCase
class Signature(unittest.TestCase):
+ # make_type_link() needs state.config['INPUT_MODULES'], simply supply
+ # everything there
+ state = State(copy.deepcopy(default_config))
+
def test(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: int, a2: module.Thing) -> module.Thing3'),
('foo', '', [
('a', 'int', 'int', None),
], 'module.Thing3'))
def test_newline(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: int, a2: module.Thing) -> module.Thing3\n'),
('foo', '', [
('a', 'int', 'int', None),
], 'module.Thing3'))
def test_docs(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: int, a2: module.Thing) -> module.Thing3\n\nDocs here!!'),
('foo', 'Docs here!!', [
('a', 'int', 'int', None),
], 'module.Thing3'))
def test_no_args(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'thingy() -> str'),
('thingy', '', [], 'str'))
def test_no_return(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'__init__(self: module.Thing)'),
('__init__', '', [
('self', 'module.Thing', 'module.Thing', None),
], None))
def test_no_arg_types(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'thingy(self, the_other_thing)'),
('thingy', '', [
('self', None, None, None),
], None))
def test_square_brackets(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: Tuple[int, str], no_really: str) -> List[str]'),
('foo', '', [
('a', 'Tuple[int, str]', 'Tuple[int, str]', None),
], 'List[str]'))
def test_nested_square_brackets(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: Tuple[int, List[Tuple[int, int]]], another: float) -> Union[str, Any]'),
('foo', '', [
('a', 'Tuple[int, List[Tuple[int, int]]]', 'Tuple[int, List[Tuple[int, int]]]', None),
], 'Union[str, Any]'))
def test_callable(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: Callable[[int, Tuple[int, int]], float], another: float)'),
('foo', '', [
('a', 'Callable[[int, Tuple[int, int]], float]', 'Callable[[int, Tuple[int, int]], float]', None),
], None))
def test_kwargs(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(*args, **kwargs)'),
('foo', '', [
('*args', None, None, None),
# https://github.com/pybind/pybind11/commit/0826b3c10607c8d96e1d89dc819c33af3799a7b8,
# released in 2.3.0. We want to support both, so test both.
def test_default_values_pybind22(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: float=1.0, b: str=\'hello\')'),
('foo', '', [
('a', 'float', 'float', '1.0'),
], None))
def test_default_values_pybind23(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: float = 1.0, b: str = \'hello\')'),
('foo', '', [
('a', 'float', 'float', '1.0'),
], None))
def test_crazy_stuff(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: int, b: Math::Vector<4, UnsignedInt>)'),
('foo', '', [('…', None, None, None)], None))
def test_crazy_stuff_nested(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: int, b: List[Math::Vector<4, UnsignedInt>])'),
('foo', '', [('…', None, None, None)], None))
def test_crazy_stuff_docs(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: int, b: Math::Vector<4, UnsignedInt>)\n\nThis is text!!'),
('foo', 'This is text!!', [('…', None, None, None)], None))
def test_crazy_return(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: int) -> Math::Vector<4, UnsignedInt>'),
('foo', '', [('…', None, None, None)], None))
def test_crazy_return_nested(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: int) -> List[Math::Vector<4, UnsignedInt>]'),
('foo', '', [('…', None, None, None)], None))
def test_crazy_return_docs(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'foo(a: int) -> Math::Vector<4, UnsignedInt>\n\nThis returns!'),
('foo', 'This returns!', [('…', None, None, None)], None))
def test_no_name(self):
- self.assertEqual(parse_pybind_signature(State({}), [],
+ self.assertEqual(parse_pybind_signature(self.state, [],
'(arg0: MyClass) -> float'),
('', '', [('arg0', 'MyClass', 'MyClass', None)], 'float'))
def test_module_mapping(self):
- state = State({})
+ state = self.state
state.module_mapping['module._module'] = 'module'
self.assertEqual(parse_pybind_signature(state, [],