def test_merge_packages_override_default() -> None: pkg = install_pinned.merge_packages(Package('foo == 2.0', weak=True), Package('foo[test] == 2.1')) assert pkg == Package('foo[test] == 2.1') # Only exact versions override defaults pkg = install_pinned.merge_packages(Package('foo == 2.0', weak=True), Package('foo[test] >= 1.0')) assert pkg == Package('foo[test] >=1.0, ==2.0')
def test_merge_packages_url_and_specifier() -> None: pkg = install_pinned.merge_packages(Package('foo[bar] >= 2.0, < 3'), Package('foo @ https://invalid.com')) assert pkg == Package('foo[bar] @ https://invalid.com') with pytest.raises( ValueError, match='Cannot combine URL .* with exact specifier ==2.0'): install_pinned.merge_packages(Package('foo[bar] == 2.0'), Package('foo @ https://invalid.com'))
def test_merge_packages_constraint() -> None: req1 = Requirement('foo >= 2.8') req2 = Requirement('foo [test] < 3.0') pkg = install_pinned.merge_packages(Package(req1, constraint=True), Package(req2, constraint=True)) assert pkg == Package('foo [test] >=2.8, <3.0', constraint=True) pkg = install_pinned.merge_packages(Package(req1, constraint=False), Package(req2, constraint=True)) assert pkg == Package('foo [test] >=2.8, <3.0', constraint=False)
def test_merge_packages_markers() -> None: pkg = install_pinned.merge_packages( Package('foo >= 1.0 ; python_version >= "2.7"'), Package('foo < 1.0 ; python_version < "2.7"')) assert pkg == Package('foo >= 1.0 ; python_version >= "2.7"') # Check symmetry pkg = install_pinned.merge_packages( Package('foo < 1.0 ; python_version < "2.7"'), Package('foo >= 1.0 ; python_version >= "2.7"')) assert pkg == Package('foo >= 1.0 ; python_version >= "2.7"')
def test_merge_packages_simple() -> None: pkg = install_pinned.merge_packages( Package( 'requests [security,tests] >= 2.8.1, == 2.8.* ; python_version >= "2.7"' ), Package('requests [security,foo] >= 2.7')) assert pkg == Package( 'requests [security,foo,tests]>=2.7,>=2.8.1,==2.8.*; python_version >= "2.7"' )
def test_merge_packages_mixed_urls() -> None: with pytest.raises(ValueError, match='inconsistent URLs'): install_pinned.merge_packages(Package('foo @ http://url1'), Package('foo @ http://url2'))
def test_merge_packages_mixed_names() -> None: with pytest.raises(ValueError, match='different names'): install_pinned.merge_packages(Package('foo==0.1'), Package('bar==0.2'))