Merge pull request #1205 from The-Compiler/reportinfo-getattr
Fix getting line number with nasty __getattr__. fixes #1204
This commit is contained in:
		
						commit
						3a3f0f5c56
					
				| 
						 | 
					@ -6,6 +6,9 @@
 | 
				
			||||||
  module. Thanks Mikhail Chernykh for the report and Bruno Oliveira for the
 | 
					  module. Thanks Mikhail Chernykh for the report and Bruno Oliveira for the
 | 
				
			||||||
  PR.
 | 
					  PR.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- fix #1204: another error when collecting with a nasty __getattr__().
 | 
				
			||||||
 | 
					  Thanks Florian Bruhin for the PR.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2.8.3
 | 
					2.8.3
 | 
				
			||||||
-----
 | 
					-----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -384,12 +384,13 @@ class PyobjMixin(PyobjContext):
 | 
				
			||||||
    def reportinfo(self):
 | 
					    def reportinfo(self):
 | 
				
			||||||
        # XXX caching?
 | 
					        # XXX caching?
 | 
				
			||||||
        obj = self.obj
 | 
					        obj = self.obj
 | 
				
			||||||
        if hasattr(obj, 'compat_co_firstlineno'):
 | 
					        compat_co_firstlineno = getattr(obj, 'compat_co_firstlineno', None)
 | 
				
			||||||
 | 
					        if isinstance(compat_co_firstlineno, int):
 | 
				
			||||||
            # nose compatibility
 | 
					            # nose compatibility
 | 
				
			||||||
            fspath = sys.modules[obj.__module__].__file__
 | 
					            fspath = sys.modules[obj.__module__].__file__
 | 
				
			||||||
            if fspath.endswith(".pyc"):
 | 
					            if fspath.endswith(".pyc"):
 | 
				
			||||||
                fspath = fspath[:-1]
 | 
					                fspath = fspath[:-1]
 | 
				
			||||||
            lineno = obj.compat_co_firstlineno
 | 
					            lineno = compat_co_firstlineno
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            fspath, lineno = getfslineno(obj)
 | 
					            fspath, lineno = getfslineno(obj)
 | 
				
			||||||
        modpath = self.getmodpath()
 | 
					        modpath = self.getmodpath()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -880,6 +880,21 @@ class TestReportInfo:
 | 
				
			||||||
                    pass
 | 
					                    pass
 | 
				
			||||||
       """
 | 
					       """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_reportinfo_with_nasty_getattr(self, testdir):
 | 
				
			||||||
 | 
					        # https://github.com/pytest-dev/pytest/issues/1204
 | 
				
			||||||
 | 
					        modcol = testdir.getmodulecol("""
 | 
				
			||||||
 | 
					            # lineno 0
 | 
				
			||||||
 | 
					            class TestClass:
 | 
				
			||||||
 | 
					                def __getattr__(self, name):
 | 
				
			||||||
 | 
					                    return "this is not an int"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                def test_foo(self):
 | 
				
			||||||
 | 
					                    pass
 | 
				
			||||||
 | 
					        """)
 | 
				
			||||||
 | 
					        classcol = testdir.collect_by_name(modcol, "TestClass")
 | 
				
			||||||
 | 
					        instance = classcol.collect()[0]
 | 
				
			||||||
 | 
					        fspath, lineno, msg = instance.reportinfo()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_customized_python_discovery(testdir):
 | 
					def test_customized_python_discovery(testdir):
 | 
				
			||||||
    testdir.makeini("""
 | 
					    testdir.makeini("""
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue