Fix determining rootdir from common_ancestor
This commit is contained in:
		
							parent
							
								
									ffb583ae91
								
							
						
					
					
						commit
						a2891420de
					
				|  | @ -1095,6 +1095,8 @@ def get_common_ancestor(args): | |||
|         if str(arg)[0] == "-": | ||||
|             continue | ||||
|         p = py.path.local(arg) | ||||
|         if not p.exists(): | ||||
|             continue | ||||
|         if common_ancestor is None: | ||||
|             common_ancestor = p | ||||
|         else: | ||||
|  | @ -1108,21 +1110,28 @@ def get_common_ancestor(args): | |||
|                     common_ancestor = shared | ||||
|     if common_ancestor is None: | ||||
|         common_ancestor = py.path.local() | ||||
|     elif not common_ancestor.isdir(): | ||||
|     elif common_ancestor.isfile(): | ||||
|         common_ancestor = common_ancestor.dirpath() | ||||
|     return common_ancestor | ||||
| 
 | ||||
| 
 | ||||
| def get_dirs_from_args(args): | ||||
|     return [d for d in (py.path.local(x) for x in args | ||||
|                         if not str(x).startswith("-")) | ||||
|             if d.exists()] | ||||
| 
 | ||||
| 
 | ||||
| def determine_setup(inifile, args): | ||||
|     dirs = get_dirs_from_args(args) | ||||
|     if inifile: | ||||
|         iniconfig = py.iniconfig.IniConfig(inifile) | ||||
|         try: | ||||
|             inicfg = iniconfig["pytest"] | ||||
|         except KeyError: | ||||
|             inicfg = None | ||||
|         rootdir = get_common_ancestor(args) | ||||
|         rootdir = get_common_ancestor(dirs) | ||||
|     else: | ||||
|         ancestor = get_common_ancestor(args) | ||||
|         ancestor = get_common_ancestor(dirs) | ||||
|         rootdir, inifile, inicfg = getcfg( | ||||
|             [ancestor], ["pytest.ini", "tox.ini", "setup.cfg"]) | ||||
|         if rootdir is None: | ||||
|  | @ -1130,7 +1139,13 @@ def determine_setup(inifile, args): | |||
|                 if rootdir.join("setup.py").exists(): | ||||
|                     break | ||||
|             else: | ||||
|                 rootdir = ancestor | ||||
|                 rootdir, inifile, inicfg = getcfg( | ||||
|                     dirs, ["pytest.ini", "tox.ini", "setup.cfg"]) | ||||
|                 if rootdir is None: | ||||
|                     rootdir = get_common_ancestor([py.path.local(), ancestor]) | ||||
|                     is_fs_root = os.path.splitdrive(str(rootdir))[1] == os.sep | ||||
|                     if is_fs_root: | ||||
|                         rootdir = ancestor | ||||
|     return rootdir, inifile, inicfg or {} | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -490,7 +490,8 @@ class TestSession: | |||
| class Test_getinitialnodes: | ||||
|     def test_global_file(self, testdir, tmpdir): | ||||
|         x = tmpdir.ensure("x.py") | ||||
|         config = testdir.parseconfigure(x) | ||||
|         with tmpdir.as_cwd(): | ||||
|             config = testdir.parseconfigure(x) | ||||
|         col = testdir.getnode(config, x) | ||||
|         assert isinstance(col, pytest.Module) | ||||
|         assert col.name == 'x.py' | ||||
|  | @ -504,7 +505,8 @@ class Test_getinitialnodes: | |||
|         subdir = tmpdir.join("subdir") | ||||
|         x = subdir.ensure("x.py") | ||||
|         subdir.ensure("__init__.py") | ||||
|         config = testdir.parseconfigure(x) | ||||
|         with subdir.as_cwd(): | ||||
|             config = testdir.parseconfigure(x) | ||||
|         col = testdir.getnode(config, x) | ||||
|         assert isinstance(col, pytest.Module) | ||||
|         assert col.name == 'x.py' | ||||
|  |  | |||
|  | @ -468,7 +468,8 @@ def test_consider_args_after_options_for_rootdir_and_inifile(testdir, args): | |||
|             args[i] = d1 | ||||
|         elif arg == 'dir2': | ||||
|             args[i] = d2 | ||||
|     result = testdir.runpytest(*args) | ||||
|     with root.as_cwd(): | ||||
|         result = testdir.runpytest(*args) | ||||
|     result.stdout.fnmatch_lines(['*rootdir: *myroot, inifile: ']) | ||||
| 
 | ||||
| 
 | ||||
|  | @ -547,10 +548,14 @@ class TestWarning: | |||
| class TestRootdir: | ||||
|     def test_simple_noini(self, tmpdir): | ||||
|         assert get_common_ancestor([tmpdir]) == tmpdir | ||||
|         assert get_common_ancestor([tmpdir.mkdir("a"), tmpdir]) == tmpdir | ||||
|         assert get_common_ancestor([tmpdir, tmpdir.join("a")]) == tmpdir | ||||
|         a = tmpdir.mkdir("a") | ||||
|         assert get_common_ancestor([a, tmpdir]) == tmpdir | ||||
|         assert get_common_ancestor([tmpdir, a]) == tmpdir | ||||
|         with tmpdir.as_cwd(): | ||||
|             assert get_common_ancestor([]) == tmpdir | ||||
|             no_path = tmpdir.join('does-not-exist') | ||||
|             assert get_common_ancestor([no_path]) == tmpdir | ||||
|             assert get_common_ancestor([no_path.join('a')]) == tmpdir | ||||
| 
 | ||||
|     @pytest.mark.parametrize("name", "setup.cfg tox.ini pytest.ini".split()) | ||||
|     def test_with_ini(self, tmpdir, name): | ||||
|  | @ -595,3 +600,34 @@ class TestRootdir: | |||
|         inifile = tmpdir.ensure("pytest.ini") | ||||
|         rootdir, inifile, inicfg = determine_setup(inifile, [tmpdir]) | ||||
|         assert rootdir == tmpdir | ||||
| 
 | ||||
|     def test_with_arg_outside_cwd_without_inifile(self, tmpdir): | ||||
|         a = tmpdir.mkdir("a") | ||||
|         b = tmpdir.mkdir("b") | ||||
|         rootdir, inifile, inicfg = determine_setup(None, [a, b]) | ||||
|         assert rootdir == tmpdir | ||||
|         assert inifile is None | ||||
| 
 | ||||
|     def test_with_arg_outside_cwd_with_inifile(self, tmpdir): | ||||
|         a = tmpdir.mkdir("a") | ||||
|         b = tmpdir.mkdir("b") | ||||
|         inifile = a.ensure("pytest.ini") | ||||
|         rootdir, parsed_inifile, inicfg = determine_setup(None, [a, b]) | ||||
|         assert rootdir == a | ||||
|         assert inifile == parsed_inifile | ||||
| 
 | ||||
|     @pytest.mark.parametrize('dirs', ([], ['does-not-exist'], | ||||
|                                       ['a/does-not-exist'])) | ||||
|     def test_with_non_dir_arg(self, dirs, tmpdir): | ||||
|         with tmpdir.ensure(dir=True).as_cwd(): | ||||
|             rootdir, inifile, inicfg = determine_setup(None, dirs) | ||||
|             assert rootdir == tmpdir | ||||
|             assert inifile is None | ||||
| 
 | ||||
|     def test_with_existing_file_in_subdir(self, tmpdir): | ||||
|         a = tmpdir.mkdir("a") | ||||
|         a.ensure("exist") | ||||
|         with tmpdir.as_cwd(): | ||||
|             rootdir, inifile, inicfg = determine_setup(None, ['a/exist']) | ||||
|             assert rootdir == tmpdir | ||||
|             assert inifile is None | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue