'''Test .NET autoapi domain''' import unittest from mock import patch from autoapi.mappers import dotnet class DotNetSphinxMapperTests(unittest.TestCase): def setUp(self): '''Test setup''' class _config(object): def __getattr__(self, key): attrs = { 'autoapi_dirs': ['/tmp/autoapi/tmp'], 'autoapi_root': '/tmp/autoapi/root', } return attrs.get(key, None) class _application(object): config = _config() def warn(self, *args, **kwargs): pass self.application = _application() def test_create_class(self): '''Test .NET class instance creation helper''' dom = dotnet.DotNetSphinxMapper(self.application) def _create_class(data): return list(dom.create_class(data))[0] cls = _create_class({'id': 'Foo.Bar', 'type': 'Namespace'}) self.assertIsInstance(cls, dotnet.DotNetNamespace) cls = _create_class({'id': 'Foo.Bar', 'type': 'Class'}) self.assertIsInstance(cls, dotnet.DotNetClass) cls = _create_class({'id': 'Foo.Bar', 'type': 'Property'}) self.assertIsInstance(cls, dotnet.DotNetProperty) cls = _create_class({'id': 'Foo.Bar', 'type': 'Method'}) self.assertIsInstance(cls, dotnet.DotNetMethod) cls = _create_class({'id': 'Foo.Bar', 'type': 'Enum'}) self.assertIsInstance(cls, dotnet.DotNetEnum) cls = _create_class({'id': 'Foo.Bar', 'type': 'Constructor'}) self.assertIsInstance(cls, dotnet.DotNetConstructor) cls = _create_class({'id': 'Foo.Bar', 'type': 'Struct'}) self.assertIsInstance(cls, dotnet.DotNetStruct) cls = _create_class({'id': 'Foo.Bar', 'type': 'Interface'}) self.assertIsInstance(cls, dotnet.DotNetInterface) cls = _create_class({'id': 'Foo.Bar', 'type': 'Delegate'}) self.assertIsInstance(cls, dotnet.DotNetDelegate) cls = _create_class({'id': 'Foo.Bar', 'type': 'Field'}) self.assertIsInstance(cls, dotnet.DotNetField) cls = _create_class({'id': 'Foo.Bar', 'type': 'Event'}) self.assertIsInstance(cls, dotnet.DotNetEvent) def test_create_class_with_children(self): dom = dotnet.DotNetSphinxMapper(self.application) def _create_class(data): return list(dom.create_class(data))[0] cls = _create_class({'id': 'Foo.Bar', 'type': 'Class', 'items': [ {'id': 'Foo.Bar.Baz', 'type': 'Method'} ]}) self.assertIsInstance(cls, dotnet.DotNetClass) self.assertDictEqual(cls.item_map, {}) @patch('subprocess.check_output', lambda foo: foo) def test_get_objects(self): '''Test basic get objects''' objs = [] def _mock_find(self, patterns, **kwargs): return {'items': ['foo', 'bar']} def _mock_read(self, path): return {'items': [{'id': 'Foo.Bar', 'name': 'Foo', 'type': 'property'}, {'id': 'Foo.Bar2', 'name': 'Bar', 'type': 'property'}], 'id': 'Foo.Bar', 'type': 'Class', 'summary': path} with patch('autoapi.mappers.dotnet.DotNetSphinxMapper.find_files', _mock_find): with patch('autoapi.mappers.dotnet.DotNetSphinxMapper.read_file', _mock_read): dom = dotnet.DotNetSphinxMapper(self.application) dom.load('', '', '', raise_error=False) dom.map() objs = dom.objects self.assertEqual(len(objs), 2) self.assertEqual(objs['Foo.Bar'].id, 'Foo.Bar') self.assertEqual(objs['Foo.Bar'].name, 'Foo.Bar') self.assertEqual(objs['Foo.Bar2'].id, 'Foo.Bar2') self.assertEqual(objs['Foo.Bar2'].name, 'Foo.Bar2') class DotNetPythonMapperTests(unittest.TestCase): def test_xml_parse(self): """XML doc comment parsing""" ret = dotnet.DotNetPythonMapper.transform_doc_comments( 'This is an example comment ') self.assertEqual(ret, 'This is an example comment :any:`FOO`') ret = dotnet.DotNetPythonMapper.transform_doc_comments( 'This is an example comment ') self.assertEqual(ret, 'This is an example comment FOO') ret = dotnet.DotNetPythonMapper.transform_doc_comments( 'This is an example comment inner foo') self.assertEqual(ret, 'This is an example comment :dn:ns:`FOO`') ret = dotnet.DotNetPythonMapper.transform_doc_comments( 'Test and Blah') self.assertEqual(ret, 'Test :dn:prop:`FOO` and :dn:event:`BAR`') ret = dotnet.DotNetPythonMapper.transform_doc_comments( 'This is an example comment ') self.assertEqual(ret, 'This is an example comment ``FOO``') ret = dotnet.DotNetPythonMapper.transform_doc_comments( 'This is an example comment ') self.assertEqual(ret, 'This is an example comment ``FOO``') ret = dotnet.DotNetPythonMapper.transform_doc_comments( 'With surrounding characters ss') self.assertEqual(ret, 'With surrounding characters s :any:`FOO`\s') ret = dotnet.DotNetPythonMapper.transform_doc_comments( 'With surrounding characters ss') self.assertEqual(ret, 'With surrounding characters s ``FOO``\s') def test_xml_transform_escape(self): """XML transform escaping""" ret = dotnet.DotNetPythonMapper.transform_doc_comments( 'Foo Bar') self.assertEqual(ret, 'Foo :any:`Foo\\`1` Bar') ret = dotnet.DotNetPythonMapper.transform_doc_comments( 'No space beforeor after') self.assertEqual(ret, 'No space before :dn:meth:`Foo\\`1`\\or after') def test_parsing_obj(self): """Parse out object, test for transforms, etc""" obj = { 'uid': 'Foo`1', 'name': 'Foo', 'summary': 'Test parsing ', 'syntax': { 'parameters': [ {'id': 'a', 'type': '{TUser}', 'description': 'Test '} ], 'return': { 'type': 'Bar', 'description': ('Test references ' 'and paramrefs '), } } } mapped = dotnet.DotNetPythonMapper(obj) self.assertEqual( mapped.parameters[0], {'name': 'a', 'type': '{TUser}', 'desc': 'Test :any:`TUser`'} ) self.assertEqual( mapped.returns['description'], 'Test references :any:`Bar` and paramrefs ``a``' )