From e51b5d09965b7ae8ea67a0fe280fe4db48ca832d Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 22 Mar 2018 19:53:01 +0800 Subject: [PATCH] Add tests for environment marker precedence logic Close #1757. --- tests/test_pipenv.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/tests/test_pipenv.py b/tests/test_pipenv.py index 3d463bd0..3a80e30e 100644 --- a/tests/test_pipenv.py +++ b/tests/test_pipenv.py @@ -602,6 +602,49 @@ requests = {version = "*", os_name = "== 'splashwear'"} c = p.pipenv('run python -c "import requests;"') assert c.return_code == 1 + @pytest.mark.markers + @pytest.mark.install + def test_top_level_overrides_environment_markers(self): + """Top-level environment markers should take precedence. + """ + with PipenvInstance() as p: + with open(p.pipfile_path, 'w') as f: + contents = """ +[packages] +apscheduler = "*" +funcsigs = {version = "*", os_name = "== 'splashwear'"} + """.strip() + f.write(contents) + + c = p.pipenv('install') + assert c.return_code == 0 + + assert p.lockfile['default']['funcsigs']['markers'] == "os_name == 'splashwear'" + + @pytest.mark.markers + @pytest.mark.install + def test_global_overrides_environment_markers(self): + """Empty (unconditional) dependency should take precedence. + + If a dependency is specified without environment markers, it should + override dependencies with environment markers. In this example, + APScheduler requires funcsigs only on Python 2, but since funcsigs is + also specified as an unconditional dep, its markers should be empty. + """ + with PipenvInstance() as p: + with open(p.pipfile_path, 'w') as f: + contents = """ +[packages] +apscheduler = "*" +funcsigs = "*" + """.strip() + f.write(contents) + + c = p.pipenv('install') + assert c.return_code == 0 + + assert p.lockfile['default']['funcsigs'].get('markers', '') == '' + @pytest.mark.install @pytest.mark.vcs @pytest.mark.tablib