Merge pull request #2374 from Kodiologist/getmodpath-file-ext
Try not to assume a module's file extension is .py
This commit is contained in:
		
						commit
						80225ce72c
					
				
							
								
								
									
										1
									
								
								AUTHORS
								
								
								
								
							
							
						
						
									
										1
									
								
								AUTHORS
								
								
								
								
							|  | @ -85,6 +85,7 @@ Justyna Janczyszyn | ||||||
| Kale Kundert | Kale Kundert | ||||||
| Katarzyna Jachim | Katarzyna Jachim | ||||||
| Kevin Cox | Kevin Cox | ||||||
|  | Kodi B. Arfer | ||||||
| Lee Kamentsky | Lee Kamentsky | ||||||
| Lev Maximov | Lev Maximov | ||||||
| Loic Esteve | Loic Esteve | ||||||
|  |  | ||||||
|  | @ -12,6 +12,9 @@ | ||||||
| * Added documentation related to issue (`#1937`_) | * Added documentation related to issue (`#1937`_) | ||||||
|   Thanks `@skylarjhdownes`_ for the PR. |   Thanks `@skylarjhdownes`_ for the PR. | ||||||
| 
 | 
 | ||||||
|  | * Allow collecting files with any file extension as Python modules (`#2369`_). | ||||||
|  |   Thanks `@Kodiologist`_ for the PR. | ||||||
|  | 
 | ||||||
| * | * | ||||||
| 
 | 
 | ||||||
| * | * | ||||||
|  | @ -23,11 +26,13 @@ | ||||||
| .. _@skylarjhdownes: https://github.com/skylarjhdownes | .. _@skylarjhdownes: https://github.com/skylarjhdownes | ||||||
| .. _@fabioz: https://github.com/fabioz | .. _@fabioz: https://github.com/fabioz | ||||||
| .. _@metasyn: https://github.com/metasyn | .. _@metasyn: https://github.com/metasyn | ||||||
|  | .. _@Kodiologist: https://github.com/Kodiologist | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| .. _#1937: https://github.com/pytest-dev/pytest/issues/1937 | .. _#1937: https://github.com/pytest-dev/pytest/issues/1937 | ||||||
| .. _#2276: https://github.com/pytest-dev/pytest/issues/2276 | .. _#2276: https://github.com/pytest-dev/pytest/issues/2276 | ||||||
| .. _#2336: https://github.com/pytest-dev/pytest/issues/2336 | .. _#2336: https://github.com/pytest-dev/pytest/issues/2336 | ||||||
|  | .. _#2369: https://github.com/pytest-dev/pytest/issues/2369 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 3.0.7 (2017-03-14) | 3.0.7 (2017-03-14) | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| import fnmatch | import fnmatch | ||||||
| import inspect | import inspect | ||||||
| import sys | import sys | ||||||
|  | import os | ||||||
| import collections | import collections | ||||||
| import math | import math | ||||||
| from itertools import count | from itertools import count | ||||||
|  | @ -235,8 +236,7 @@ class PyobjMixin(PyobjContext): | ||||||
|                 continue |                 continue | ||||||
|             name = node.name |             name = node.name | ||||||
|             if isinstance(node, Module): |             if isinstance(node, Module): | ||||||
|                 assert name.endswith(".py") |                 name = os.path.splitext(name)[0] | ||||||
|                 name = name[:-3] |  | ||||||
|                 if stopatmodule: |                 if stopatmodule: | ||||||
|                     if includemodule: |                     if includemodule: | ||||||
|                         parts.append(name) |                         parts.append(name) | ||||||
|  |  | ||||||
|  | @ -841,6 +841,34 @@ class TestConftestCustomization: | ||||||
|         l = modcol.collect() |         l = modcol.collect() | ||||||
|         assert '_hello' not in l |         assert '_hello' not in l | ||||||
| 
 | 
 | ||||||
|  |     def test_issue2369_collect_module_fileext(self, testdir): | ||||||
|  |         """Ensure we can collect files with weird file extensions as Python | ||||||
|  |         modules (#2369)""" | ||||||
|  |         # We'll implement a little finder and loader to import files containing | ||||||
|  |         # Python source code whose file extension is ".narf". | ||||||
|  |         testdir.makeconftest(""" | ||||||
|  |             import sys, os, imp | ||||||
|  |             from _pytest.python import Module | ||||||
|  | 
 | ||||||
|  |             class Loader: | ||||||
|  |                 def load_module(self, name): | ||||||
|  |                     return imp.load_source(name, name + ".narf") | ||||||
|  |             class Finder: | ||||||
|  |                 def find_module(self, name, path=None): | ||||||
|  |                     if os.path.exists(name + ".narf"): | ||||||
|  |                         return Loader() | ||||||
|  |             sys.meta_path.append(Finder()) | ||||||
|  | 
 | ||||||
|  |             def pytest_collect_file(path, parent): | ||||||
|  |                 if path.ext == ".narf": | ||||||
|  |                     return Module(path, parent)""") | ||||||
|  |         testdir.makefile(".narf", """ | ||||||
|  |             def test_something(): | ||||||
|  |                 assert 1 + 1 == 2""") | ||||||
|  |         # Use runpytest_subprocess, since we're futzing with sys.meta_path. | ||||||
|  |         result = testdir.runpytest_subprocess() | ||||||
|  |         result.stdout.fnmatch_lines('*1 passed*') | ||||||
|  | 
 | ||||||
| def test_setup_only_available_in_subdir(testdir): | def test_setup_only_available_in_subdir(testdir): | ||||||
|     sub1 = testdir.mkpydir("sub1") |     sub1 = testdir.mkpydir("sub1") | ||||||
|     sub2 = testdir.mkpydir("sub2") |     sub2 = testdir.mkpydir("sub2") | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue