def test_get_origin(self):
        class FooBar:
            @property
            def test(self):
                return

        self.assertEqual("test", ObjInfo(FooBar.test).name)
        self.assertEqual("test", ObjInfo.get_origin(FooBar.test).__name__)
    def test_doc(self):
        def foo():
            """ bar
                hello """
        self.assertEqual("bar\nhello", ObjInfo(foo).doc(only_first_line=False))
        self.assertEqual("bar", ObjInfo(foo).doc(only_first_line=True))
        self.assertRaises(AttributeError, ObjInfo(foo).doc, require_sentence=True)

        def empty():
            pass

        self.assertEqual("", ObjInfo(empty).doc(only_first_line=False))
        self.assertEqual("", ObjInfo(empty).doc(only_first_line=True))
        self.assertRaises(AttributeError, ObjInfo(empty).doc, require_sentence=True)

        def proper():
            """ Proper. """

        self.assertEqual("Proper.", ObjInfo(proper).doc(only_first_line=False))
        self.assertEqual("Proper.", ObjInfo(proper).doc(only_first_line=True))
        self.assertEqual("Proper.", ObjInfo(proper).doc(require_sentence=True))
 def test_repr(self):
     objInfo = ObjInfo(_Foo)
     self.assertEqual(True, "_Foo" in repr(objInfo))
     self.assertEqual(True, "Class" in repr(objInfo))
 def test_identifier(self):
     self.assertEqual(ObjInfo(_Foo).identifier(), ObjInfo(_Foo).identifier())
 def test_get_definition_line(self):
     self.assertEqual(9, ObjInfo(ObjectTest).get_definition_line())
    def test_origins(self):
        self.assertEqual(True, ObjInfo(_Foo.self).from_class())
        self.assertEqual(True, ObjInfo(_Bar.self).from_class())

        self.assertEqual(False, ObjInfo(_Bar.uhm).from_base())

        self.assertEqual(False, ObjInfo(_Bar.uhm).from_builtin())
        self.assertEqual(True, ObjInfo("".startswith).from_builtin())

        self.assertEqual(False, ObjInfo(_Bar.attr).from_instance())

        self.assertEqual(True, ObjInfo(_Bar).from_module())
        self.assertEqual(False, ObjInfo(_Bar.self).from_module())

        objInfo = ObjInfo(_Bar())
        self.assertEqual(True, objInfo.get_child(filt=lambda node: node.name == "instance_var", traverse_excluded=True).from_instance())
        self.assertEqual(True, objInfo.get_child(filt=lambda node: node.name == "self", traverse_excluded=True).from_base())
 def test_file(self):
     self.assertEqual("test_object.py", ObjInfo(_Foo).file(relative=True))
     self.assertEqual("test_object.py", ObjInfo(_Foo.self).file(relative=True))
 def test_check_if_parent_eligible(self):
     self.assertEqual(True, ObjInfo.check_if_parent_eligible(sys.modules["test_object"], _Foo, "_Foo"))
     self.assertEqual(False, ObjInfo.check_if_parent_eligible(sys.modules["test_object"], _Foo, "Foo"))
     self.assertEqual(False, ObjInfo.check_if_parent_eligible(sys.modules["test_object"], _Foo.self, "self"))
     self.assertEqual(True, ObjInfo.check_if_parent_eligible(_Foo, _Foo.self, "self"))
    def test_ObjInfo_protected(self):
        objInfo = ObjInfo(_Foo)
        objInfo.children_states = {}

        self.assertEqual(True, objInfo.get_child(filt=lambda node: node.name == "_self", traverse_excluded=True).protected())
        self.assertEqual(False, objInfo.get_child(filt=lambda node: node.name == "self", traverse_excluded=True).protected())

        self.assertEqual(True, objInfo.get_child(filt=lambda node: node.name == "_attr", traverse_excluded=True).protected())
        self.assertEqual(False, objInfo.get_child(filt=lambda node: node.name == "attr", traverse_excluded=True).protected())

        self.assertEqual(False, objInfo.get_child(filt=lambda node: node.name == "_Foo__private", traverse_excluded=True).protected())
        self.assertEqual(True, objInfo.get_child(filt=lambda node: node.name == "_Foo__private", traverse_excluded=True).private())
        self.assertEqual(True, objInfo.get_child(filt=lambda node: node.name == "_Foo__private", traverse_excluded=True).internal())
        self.assertEqual(False, objInfo.get_child(filt=lambda node: node.name == "_Foo__private", traverse_excluded=True).public())

        self.assertEqual(False, ObjInfo(a).protected())
        self.assertEqual(False, ObjInfo(a()).protected())
 def test_ObjInfo_parents(self):
     objInfo = ObjInfo(ObjInfo)
     self.assertEqual("generallibrary", objInfo.get_parent(depth=-1, index=-1).obj.__name__)
    def test_ObjInfo(self):
        def check(bound_method):
            """ Check that the correct method is True and all other are False. """
            objInfo = getattr(bound_method, "__self__")
            for name, method in objInfo.type_methods.items():
                method_is_bound_method = bound_method == getattr(objInfo, name)
                result = method(self=objInfo)
                if result is not method_is_bound_method:
                    raise AssertionError(f"{objInfo.obj} returns {result} for {name}.")

        check(ObjInfo(unittest).is_module)
        check(ObjInfo(a).is_function)
        check(ObjInfo(a()).is_function)
        check(ObjInfo(_Foo).is_class)
        check(ObjInfo(_Foo()).is_instance)

        check(ObjInfo(_Foo._self).is_method)
        check(ObjInfo(_Foo()._self).is_method)

        check(ObjInfo(_Foo._cls).is_method)
        check(ObjInfo(_Foo()._cls).is_method)

        check(ObjInfo(_Foo._static).is_method)
        check(ObjInfo(_Foo()._static).is_method)

        check(ObjInfo(_Foo._property).is_property)