def test_duplicates_module_depth(self): class Parent(object): pass tf = types.ModuleType('tf') tf.__file__ = '/tmp/tf/__init__.py' tf.submodule = types.ModuleType('submodule') tf.submodule.submodule2 = types.ModuleType('submodule2') tf.Parent = Parent tf.submodule.submodule2.Parent = Parent visitor = generate_lib.extract([('tf', tf)], base_dir=os.path.dirname(tf.__file__), private_map={}, do_not_descend_map={}, visitor_cls=NoDunderVisitor) self.assertEqual( { 'tf.Parent': sorted(['tf.Parent', 'tf.submodule.submodule2.Parent']), }, visitor.duplicates) self.assertEqual({'tf.submodule.submodule2.Parent': 'tf.Parent'}, visitor.duplicate_of) self.assertEqual( { id(tf): 'tf', id(tf.submodule): 'tf.submodule', id(tf.submodule.submodule2): 'tf.submodule.submodule2', id(Parent): 'tf.Parent', }, visitor.reverse_index)
def test_duplicates_name(self): class Parent(object): obj1 = object() Parent.obj2 = Parent.obj1 tf = types.ModuleType('tf') tf.__file__ = '/tmp/tf/__init__.py' tf.submodule = types.ModuleType('submodule') tf.submodule.Parent = Parent visitor = generate_lib.extract([('tf', tf)], base_dir=os.path.dirname(tf.__file__), private_map={}, visitor_cls=NoDunderVisitor) self.assertEqual( sorted([ 'tf.submodule.Parent.obj1', 'tf.submodule.Parent.obj2', ]), visitor.duplicates['tf.submodule.Parent.obj1']) self.assertEqual( { 'tf.submodule.Parent.obj2': 'tf.submodule.Parent.obj1', }, visitor.duplicate_of) self.assertEqual( { id(tf): 'tf', id(tf.submodule): 'tf.submodule', id(Parent): 'tf.submodule.Parent', id(Parent.obj1): 'tf.submodule.Parent.obj1', }, visitor.reverse_index)
def test_duplicates_defining_class(self): class Parent(object): obj1 = object() class Child(Parent): pass tf = types.ModuleType('tf') tf.__file__ = '/tmp/tf/__init__.py' tf.Parent = Parent tf.Child = Child visitor = generate_lib.extract([('tf', tf)], base_dir=os.path.dirname(tf.__file__), private_map={}, do_not_descend_map={}, visitor_cls=NoDunderVisitor) self.assertEqual(sorted([ 'tf.Parent.obj1', 'tf.Child.obj1', ]), visitor.duplicates['tf.Parent.obj1']) self.assertEqual({ 'tf.Child.obj1': 'tf.Parent.obj1', }, visitor.duplicate_of) self.assertEqual( { id(tf): 'tf', id(Parent): 'tf.Parent', id(Child): 'tf.Child', id(Parent.obj1): 'tf.Parent.obj1', }, visitor.reverse_index)
def test_duplicates_contrib(self): class Parent(object): pass tf = types.ModuleType('tf') tf.__file__ = '/tmp/tf/__init__.py' tf.contrib = types.ModuleType('contrib') tf.submodule = types.ModuleType('submodule') tf.contrib.Parent = Parent tf.submodule.Parent = Parent visitor = generate_lib.extract([('tf', tf)], base_dir=os.path.dirname(tf.__file__), private_map={}, visitor_cls=NoDunderVisitor) self.assertCountEqual(['tf.contrib.Parent', 'tf.submodule.Parent'], visitor.duplicates['tf.submodule.Parent']) self.assertEqual({ 'tf.contrib.Parent': 'tf.submodule.Parent', }, visitor.duplicate_of) self.assertEqual( { id(tf): 'tf', id(tf.submodule): 'tf.submodule', id(Parent): 'tf.submodule.Parent', id(tf.contrib): 'tf.contrib', }, visitor.reverse_index)
def test_duplicates_module_depth(self): class Parent(object): pass tf = types.ModuleType('tf') tf.__file__ = '/tmp/tf/__init__.py' tf.submodule = types.ModuleType('submodule') tf.submodule.submodule2 = types.ModuleType('submodule2') tf.Parent = Parent tf.submodule.submodule2.Parent = Parent visitor = generate_lib.extract( [('tf', tf)], base_dir=os.path.dirname(tf.__file__), private_map={}, do_not_descend_map={}, visitor_cls=NoDunderVisitor) self.assertEqual({ 'tf.Parent': sorted(['tf.Parent', 'tf.submodule.submodule2.Parent']), }, visitor.duplicates) self.assertEqual({ 'tf.submodule.submodule2.Parent': 'tf.Parent' }, visitor.duplicate_of) self.assertEqual({ id(tf): 'tf', id(tf.submodule): 'tf.submodule', id(tf.submodule.submodule2): 'tf.submodule.submodule2', id(Parent): 'tf.Parent', }, visitor.reverse_index)
def test_duplicates_defining_class(self): class Parent(object): obj1 = object() class Child(Parent): pass tf = types.ModuleType('tf') tf.Parent = Parent tf.Child = Child visitor = generate_lib.extract([('tf', tf)], private_map={}, do_not_descend_map={}, visitor_cls=NoDunderVisitor) self.assertEqual( { 'tf.Parent.obj1': sorted([ 'tf.Parent.obj1', 'tf.Child.obj1', ]), }, visitor.duplicates) self.assertEqual({ 'tf.Child.obj1': 'tf.Parent.obj1', }, visitor.duplicate_of) self.assertEqual( { id(tf): 'tf', id(Parent): 'tf.Parent', id(Child): 'tf.Child', id(Parent.obj1): 'tf.Parent.obj1', }, visitor.reverse_index)
def test_duplicates_contrib(self): class Parent(object): pass tf = types.ModuleType('tf') tf.contrib = types.ModuleType('contrib') tf.submodule = types.ModuleType('submodule') tf.contrib.Parent = Parent tf.submodule.Parent = Parent visitor = generate_lib.extract([('tf', tf)], private_map={}, do_not_descend_map={}, visitor_cls=NoDunderVisitor) self.assertEqual( { 'tf.submodule.Parent': sorted(['tf.contrib.Parent', 'tf.submodule.Parent']), }, visitor.duplicates) self.assertEqual({ 'tf.contrib.Parent': 'tf.submodule.Parent', }, visitor.duplicate_of) self.assertEqual( { id(tf): 'tf', id(tf.submodule): 'tf.submodule', id(Parent): 'tf.submodule.Parent', id(tf.contrib): 'tf.contrib', }, visitor.reverse_index)
def test_api_tree_toc_integration(self): tf = self._make_fake_module() visitor = generate_lib.extract([('tf', tf)], base_dir=os.path.dirname(tf.__file__), private_map={}, visitor_cls=NoDunderVisitor) api_tree = doc_generator_visitor.ApiTree.from_path_tree( visitor.path_tree, visitor._score_name) toc = toc_lib.TocBuilder(site_path='/').build(api_tree) stream = io.StringIO() toc.write(stream) expected = textwrap.dedent("""\ toc: - title: tf section: - title: Overview path: /tf - title: Outer path: /tf/Outer - title: Outer.Nested path: /tf/Outer/Nested - title: fun1 path: /tf/fun1 - title: sub1 section: - title: Overview path: /tf/sub1 - title: Parent path: /tf/sub1/Parent - title: sub2 section: - title: Overview path: /tf/sub2 - title: Child path: /tf/sub2/Child - title: fun2 path: /tf/sub2/fun2 """) self.assertEqual(expected, stream.getvalue())
def test_handles_duplicate_singleton_attributes(self): class MyClass: simple = 1 tf = types.ModuleType('fake_tf') tf.__file__ = '/tmp/tf/__init__.py' tf.MyClass = MyClass tf.sub = types.ModuleType('sub') tf.sub.MyClass = MyClass visitor = generate_lib.extract([('tf', tf)], base_dir=os.path.dirname(tf.__file__), private_map={}, visitor_cls=NoDunderVisitor) paths = ['.'.join(p) for p in visitor.path_tree.keys()] expected = [ '', 'tf', 'tf.MyClass', 'tf.MyClass.simple', 'tf.sub', 'tf.sub.MyClass', 'tf.sub.MyClass.simple', ] self.assertCountEqual(expected, paths) apis = ['.'.join(p) for p in visitor.api_tree.keys()] expected = [ '', 'tf', 'tf.MyClass', 'tf.MyClass.simple', 'tf.sub', 'tf.sub.MyClass', 'tf.sub.MyClass.simple', ] self.assertCountEqual(expected, apis) self.assertIs(visitor.api_tree[('tf', 'MyClass')], visitor.api_tree[('tf', 'sub', 'MyClass')]) self.assertIs(visitor.api_tree[('tf', 'MyClass', 'simple')], visitor.api_tree[('tf', 'sub', 'MyClass', 'simple')])
def test_handles_duplicate_classmethods(self): class MyClass: @classmethod def from_value(cls, value): pass tf = types.ModuleType('fake_tf') tf.__file__ = '/tmp/tf/__init__.py' tf.MyClass = MyClass tf.sub = types.ModuleType('sub') tf.sub.MyClass = MyClass visitor = generate_lib.extract([('tf', tf)], base_dir=os.path.dirname(tf.__file__), private_map={}, visitor_cls=NoDunderVisitor) paths = ['.'.join(p) for p in visitor.path_tree.keys()] expected = [ '', 'tf', 'tf.MyClass', 'tf.MyClass.from_value', 'tf.sub', 'tf.sub.MyClass', 'tf.sub.MyClass.from_value', ] self.assertCountEqual(expected, paths) apis = [node.full_name for node in visitor.api_tree.iter_nodes()] expected = [ 'tf', 'tf.sub', 'tf.sub.MyClass', 'tf.sub.MyClass.from_value', ] self.assertCountEqual(expected, apis) self.assertIs(visitor.api_tree[('tf', 'MyClass')], visitor.api_tree[('tf', 'sub', 'MyClass')]) self.assertIs(visitor.api_tree[('tf', 'MyClass', 'from_value')], visitor.api_tree[('tf', 'sub', 'MyClass', 'from_value')])
def test_duplicates_defining_class(self): class Parent(object): obj1 = object() class Child(Parent): pass tf = types.ModuleType('tf') tf.__file__ = '/tmp/tf/__init__.py' tf.Parent = Parent tf.Child = Child visitor = generate_lib.extract( [('tf', tf)], base_dir=os.path.dirname(tf.__file__), private_map={}, do_not_descend_map={}, visitor_cls=NoDunderVisitor) self.assertEqual({ 'tf.Parent.obj1': sorted([ 'tf.Parent.obj1', 'tf.Child.obj1', ]), }, visitor.duplicates) self.assertEqual({ 'tf.Child.obj1': 'tf.Parent.obj1', }, visitor.duplicate_of) self.assertEqual({ id(tf): 'tf', id(Parent): 'tf.Parent', id(Child): 'tf.Child', id(Parent.obj1): 'tf.Parent.obj1', }, visitor.reverse_index)
def test_duplicates_name(self): class Parent(object): obj1 = object() Parent.obj2 = Parent.obj1 tf = types.ModuleType('tf') tf.submodule = types.ModuleType('submodule') tf.submodule.Parent = Parent visitor = generate_lib.extract([('tf', tf)], private_map={}, do_not_descend_map={}, visitor_cls=NoDunderVisitor) self.assertEqual( { 'tf.submodule.Parent.obj1': sorted([ 'tf.submodule.Parent.obj1', 'tf.submodule.Parent.obj2', ]), }, visitor.duplicates) self.assertEqual( { 'tf.submodule.Parent.obj2': 'tf.submodule.Parent.obj1', }, visitor.duplicate_of) self.assertEqual( { id(tf): 'tf', id(tf.submodule): 'tf.submodule', id(Parent): 'tf.submodule.Parent', id(Parent.obj1): 'tf.submodule.Parent.obj1', }, visitor.reverse_index)