Beispiel #1
0
 def istestfunction(self, obj, name):
     if self.funcnamefilter(name) or self.isnosetest(obj):
         if isinstance(obj, staticmethod):
             # static methods need to be unwrapped
             obj = safe_getattr(obj, "__func__", False)
         return (
             safe_getattr(obj, "__call__", False)
             and fixtures.getfixturemarker(obj) is None
         )
     else:
         return False
Beispiel #2
0
 def istestfunction(self, obj, name):
     if self.funcnamefilter(name) or self.isnosetest(obj):
         if isinstance(obj, staticmethod):
             # static methods need to be unwrapped
             obj = safe_getattr(obj, "__func__", False)
         return (
             safe_getattr(obj, "__call__", False)
             and fixtures.getfixturemarker(obj) is None
         )
     else:
         return False
Beispiel #3
0
 def istestfunction(self, obj, name):
     if self.funcnamefilter(name) or self.isnosetest(obj):
         if isinstance(obj, staticmethod):
             # static methods need to be unwrapped
             obj = safe_getattr(obj, "__func__", False)
             if obj is False:
                 # Python 2.6 wraps in a different way that we won't try to handle
                 msg = "cannot collect static method %r because it is not a function"
                 self.warn(code="C2", message=msg % name)
                 return False
         return (safe_getattr(obj, "__call__", False)
                 and fixtures.getfixturemarker(obj) is None)
     else:
         return False
Beispiel #4
0
def _is_mocked(obj: object) -> bool:
    """Return if an object is possibly a mock object by checking the
    existence of a highly improbable attribute."""
    return (
        safe_getattr(obj, "pytest_mock_example_attribute_that_shouldnt_exist", None)
        is not None
    )
Beispiel #5
0
 def istestfunction(self, obj, name):
     if self.funcnamefilter(name) or self.isnosetest(obj):
         if isinstance(obj, staticmethod):
             # static methods need to be unwrapped
             obj = safe_getattr(obj, "__func__", False)
             if obj is False:
                 # Python 2.6 wraps in a different way that we won't try to handle
                 msg = "cannot collect static method %r because it is not a function"
                 self.warn(code="C2", message=msg % name)
                 return False
         return (
             safe_getattr(obj, "__call__", False)
             and fixtures.getfixturemarker(obj) is None
         )
     else:
         return False
Beispiel #6
0
    def parsefactories(self, node_or_obj, nodeid=NOTSET, unittest=False):
        if nodeid is not NOTSET:
            holderobj = node_or_obj
        else:
            holderobj = node_or_obj.obj
            nodeid = node_or_obj.nodeid
        if holderobj in self._holderobjseen:
            return

        self._holderobjseen.add(holderobj)
        autousenames = []
        for name in dir(holderobj):
            # The attribute can be an arbitrary descriptor, so the attribute
            # access below can raise. safe_getatt() ignores such exceptions.
            obj = safe_getattr(holderobj, name, None)
            marker = getfixturemarker(obj)
            if not isinstance(marker, FixtureFunctionMarker):
                # magic globals  with __getattr__ might have got us a wrong
                # fixture attribute
                continue

            if marker.name:
                name = marker.name

            # during fixture definition we wrap the original fixture function
            # to issue a warning if called directly, so here we unwrap it in order to not emit the warning
            # when pytest itself calls the fixture function
            if six.PY2 and unittest:
                # hack on Python 2 because of the unbound methods
                obj = get_real_func(obj)
            else:
                obj = get_real_method(obj, holderobj)

            fixture_def = FixtureDef(
                self,
                nodeid,
                name,
                obj,
                marker.scope,
                marker.params,
                unittest=unittest,
                ids=marker.ids,
            )

            faclist = self._arg2fixturedefs.setdefault(name, [])
            if fixture_def.has_location:
                faclist.append(fixture_def)
            else:
                # fixturedefs with no location are at the front
                # so this inserts the current fixturedef after the
                # existing fixturedefs from external plugins but
                # before the fixturedefs provided in conftests.
                i = len([f for f in faclist if not f.has_location])
                faclist.insert(i, fixture_def)
            if marker.autouse:
                autousenames.append(name)

        if autousenames:
            self._nodeid_and_autousenames.append((nodeid or "", autousenames))
Beispiel #7
0
    def parsefactories(self, node_or_obj, nodeid=NOTSET, unittest=False):
        if nodeid is not NOTSET:
            holderobj = node_or_obj
        else:
            holderobj = node_or_obj.obj
            nodeid = node_or_obj.nodeid
        if holderobj in self._holderobjseen:
            return

        self._holderobjseen.add(holderobj)
        autousenames = []
        for name in dir(holderobj):
            # The attribute can be an arbitrary descriptor, so the attribute
            # access below can raise. safe_getatt() ignores such exceptions.
            obj = safe_getattr(holderobj, name, None)
            marker = getfixturemarker(obj)
            if not isinstance(marker, FixtureFunctionMarker):
                # magic globals  with __getattr__ might have got us a wrong
                # fixture attribute
                continue

            if marker.name:
                name = marker.name

            # during fixture definition we wrap the original fixture function
            # to issue a warning if called directly, so here we unwrap it in order to not emit the warning
            # when pytest itself calls the fixture function
            if six.PY2 and unittest:
                # hack on Python 2 because of the unbound methods
                obj = get_real_func(obj)
            else:
                obj = get_real_method(obj, holderobj)

            fixture_def = FixtureDef(
                self,
                nodeid,
                name,
                obj,
                marker.scope,
                marker.params,
                unittest=unittest,
                ids=marker.ids,
            )

            faclist = self._arg2fixturedefs.setdefault(name, [])
            if fixture_def.has_location:
                faclist.append(fixture_def)
            else:
                # fixturedefs with no location are at the front
                # so this inserts the current fixturedef after the
                # existing fixturedefs from external plugins but
                # before the fixturedefs provided in conftests.
                i = len([f for f in faclist if not f.has_location])
                faclist.insert(i, fixture_def)
            if marker.autouse:
                autousenames.append(name)

        if autousenames:
            self._nodeid_and_autousenames.append((nodeid or "", autousenames))
Beispiel #8
0
def _is_mocked(obj):
    """
    returns if a object is possibly a mock object by checking the existence of a highly improbable attribute
    """
    return (
        safe_getattr(obj, "pytest_mock_example_attribute_that_shouldnt_exist", None)
        is not None
    )
Beispiel #9
0
 def isnosetest(self, obj):
     """ Look for the __test__ attribute, which is applied by the
     @nose.tools.istest decorator
     """
     # We explicitly check for "is True" here to not mistakenly treat
     # classes with a custom __getattr__ returning something truthy (like a
     # function) as test classes.
     return safe_getattr(obj, "__test__", False) is True
Beispiel #10
0
 def isnosetest(self, obj):
     """ Look for the __test__ attribute, which is applied by the
     @nose.tools.istest decorator
     """
     # We explicitly check for "is True" here to not mistakenly treat
     # classes with a custom __getattr__ returning something truthy (like a
     # function) as test classes.
     return safe_getattr(obj, '__test__', False) is True
    def parsefactories(self, node_or_obj, nodeid=NOTSET, unittest=False):
        if nodeid is not NOTSET:
            holderobj = node_or_obj
        else:
            holderobj = node_or_obj.obj
            nodeid = node_or_obj.nodeid
        if holderobj in self._holderobjseen:
            return
        self._holderobjseen.add(holderobj)
        autousenames = []
        for name in dir(holderobj):
            # The attribute can be an arbitrary descriptor, so the attribute
            # access below can raise. safe_getatt() ignores such exceptions.
            obj = safe_getattr(holderobj, name, None)
            # fixture functions have a pytest_funcarg__ prefix (pre-2.3 style)
            # or are "@pytest.fixture" marked
            marker = getfixturemarker(obj)
            if marker is None:
                if not name.startswith(self._argprefix):
                    continue
                if not callable(obj):
                    continue
                marker = defaultfuncargprefixmarker
                from _pytest import deprecated
                self.config.warn('C1', deprecated.FUNCARG_PREFIX.format(name=name), nodeid=nodeid)
                name = name[len(self._argprefix):]
            elif not isinstance(marker, FixtureFunctionMarker):
                # magic globals  with __getattr__ might have got us a wrong
                # fixture attribute
                continue
            else:
                if marker.name:
                    name = marker.name
                msg = 'fixtures cannot have "pytest_funcarg__" prefix ' \
                      'and be decorated with @pytest.fixture:\n%s' % name
                assert not name.startswith(self._argprefix), msg

            fixture_def = FixtureDef(self, nodeid, name, obj,
                                     marker.scope, marker.params,
                                     unittest=unittest, ids=marker.ids)

            faclist = self._arg2fixturedefs.setdefault(name, [])
            if fixture_def.has_location:
                faclist.append(fixture_def)
            else:
                # fixturedefs with no location are at the front
                # so this inserts the current fixturedef after the
                # existing fixturedefs from external plugins but
                # before the fixturedefs provided in conftests.
                i = len([f for f in faclist if not f.has_location])
                faclist.insert(i, fixture_def)
            if marker.autouse:
                autousenames.append(name)

        if autousenames:
            self._nodeid_and_autousenames.append((nodeid or '', autousenames))
Beispiel #12
0
 def collect(self):
     if not safe_getattr(self.obj, "__test__", True):
         return []
     if hasinit(self.obj):
         self.warn("C1", "cannot collect test class %r because it has a "
                   "__init__ constructor" % self.obj.__name__)
         return []
     elif hasnew(self.obj):
         self.warn("C1", "cannot collect test class %r because it has a "
                         "__new__ constructor" % self.obj.__name__)
         return []
     return [self._getcustomclass("Instance")(name="()", parent=self)]
Beispiel #13
0
 def collect(self):
     if not safe_getattr(self.obj, "__test__", True):
         return []
     if hasinit(self.obj):
         self.warn("C1", "cannot collect test class %r because it has a "
                   "__init__ constructor" % self.obj.__name__)
         return []
     elif hasnew(self.obj):
         self.warn("C1", "cannot collect test class %r because it has a "
                         "__new__ constructor" % self.obj.__name__)
         return []
     return [self._getcustomclass("Instance")(name="()", parent=self)]
Beispiel #14
0
 def collect(self):
     if not safe_getattr(self.obj, "__test__", True):
         return []
     if hasinit(self.obj):
         self.warn(
             PytestWarning(
                 "cannot collect test class %r because it has a "
                 "__init__ constructor" % self.obj.__name__
             )
         )
         return []
     elif hasnew(self.obj):
         self.warn(
             PytestWarning(
                 "cannot collect test class %r because it has a "
                 "__new__ constructor" % self.obj.__name__
             )
         )
         return []
     return [Instance(name="()", parent=self)]
Beispiel #15
0
 def collect(self):
     if not safe_getattr(self.obj, "__test__", True):
         return []
     if hasinit(self.obj):
         self.warn(
             PytestWarning(
                 "cannot collect test class %r because it has a "
                 "__init__ constructor" % self.obj.__name__
             )
         )
         return []
     elif hasnew(self.obj):
         self.warn(
             PytestWarning(
                 "cannot collect test class %r because it has a "
                 "__new__ constructor" % self.obj.__name__
             )
         )
         return []
     return [Instance(name="()", parent=self)]
Beispiel #16
0
def test_safe_getattr():
    helper = ErrorsHelper()
    assert safe_getattr(helper, 'raise_exception', 'default') == 'default'
    assert safe_getattr(helper, 'raise_fail', 'default') == 'default'
Beispiel #17
0
def test_safe_getattr():
    helper = ErrorsHelper()
    assert safe_getattr(helper, "raise_exception", "default") == "default"
    assert safe_getattr(helper, "raise_fail", "default") == "default"
Beispiel #18
0
def test_safe_getattr():
    helper = ErrorsHelper()
    assert safe_getattr(helper, "raise_exception", "default") == "default"
    assert safe_getattr(helper, "raise_fail", "default") == "default"
Beispiel #19
0
def test_safe_getattr():
    helper = ErrorsHelper()
    assert safe_getattr(helper, "raise_exception", "default") == "default"
    assert safe_getattr(helper, "raise_fail_outcome", "default") == "default"
    with pytest.raises(BaseException):
        assert safe_getattr(helper, "raise_baseexception", "default")
Beispiel #20
0
def test_safe_getattr():
    helper = ErrorsHelper()
    assert safe_getattr(helper, 'raise_exception', 'default') == 'default'
    assert safe_getattr(helper, 'raise_fail', 'default') == 'default'