@@ -697,6 +697,20 @@ def test_specifiers_prereleases(
697697 ["invalid" , "foobar" ],
698698 ),
699699 ("!=2.0.*" , None , None , ["1.0" , "invalid" , "2.0.0" ], ["1.0" , "invalid" ]),
700+ # Test that !== ignores prereleases parameter for non-PEP 440 versions
701+ ("!=1.0" , None , True , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
702+ ("!=1.0" , None , False , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
703+ ("!=1.0" , True , None , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
704+ ("!=1.0" , False , None , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
705+ ("!=1.0" , True , True , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
706+ ("!=1.0" , False , False , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
707+ # Test that === ignores prereleases parameter for non-PEP 440 versions
708+ ("===foobar" , None , True , ["foobar" , "foo" ], ["foobar" ]),
709+ ("===foobar" , None , False , ["foobar" , "foo" ], ["foobar" ]),
710+ ("===foobar" , True , None , ["foobar" , "foo" ], ["foobar" ]),
711+ ("===foobar" , False , None , ["foobar" , "foo" ], ["foobar" ]),
712+ ("===foobar" , True , True , ["foobar" , "foo" ], ["foobar" ]),
713+ ("===foobar" , False , False , ["foobar" , "foo" ], ["foobar" ]),
700714 ],
701715 )
702716 def test_specifier_filter (
@@ -789,6 +803,16 @@ def test_empty_specifier(self, version):
789803 assert parse (version ) in spec
790804 assert spec .contains (parse (version ))
791805
806+ @pytest .mark .parametrize (
807+ "prereleases" ,
808+ [None , False , True ],
809+ )
810+ def test_empty_specifier_arbitrary_string (self , prereleases ):
811+ """Test empty SpecifierSet accepts arbitrary strings."""
812+
813+ spec = SpecifierSet ("" , prereleases = prereleases )
814+ assert spec .contains ("foobar" )
815+
792816 def test_create_from_specifiers (self ):
793817 spec_strs = [">=1.0" , "!=1.1" , "!=1.2" , "<2.0" ]
794818 specs = [Specifier (s ) for s in spec_strs ]
@@ -1012,13 +1036,13 @@ def test_specifier_contains_installed_prereleases(
10121036 (">=1.0,<=2.0" , False , True , ["1.0" , "1.5a1" ], ["1.0" , "1.5a1" ]),
10131037 (">=1.0,<=2.0dev" , True , False , ["1.0" , "1.5a1" ], ["1.0" ]),
10141038 (">=1.0,<=2.0dev" , False , True , ["1.0" , "1.5a1" ], ["1.0" , "1.5a1" ]),
1015- # Test that invalid versions are discarded
1039+ # Test that invalid versions are accepted by empty SpecifierSet
10161040 ("" , None , None , ["invalid version" ], ["invalid version" ]),
1017- ("" , None , False , ["invalid version" ], []),
1018- ("" , False , None , ["invalid version" ], []),
1041+ ("" , None , False , ["invalid version" ], ["invalid version" ]),
1042+ ("" , False , None , ["invalid version" ], ["invalid version" ]),
10191043 ("" , None , None , ["1.0" , "invalid version" ], ["1.0" , "invalid version" ]),
1020- ("" , None , False , ["1.0" , "invalid version" ], ["1.0" ]),
1021- ("" , False , None , ["1.0" , "invalid version" ], ["1.0" ]),
1044+ ("" , None , False , ["1.0" , "invalid version" ], ["1.0" , "invalid version" ]),
1045+ ("" , False , None , ["1.0" , "invalid version" ], ["1.0" , "invalid version" ]),
10221046 # Test arbitrary equality (===)
10231047 ("===foobar" , None , None , ["foobar" , "foo" , "bar" ], ["foobar" ]),
10241048 ("===foobar" , None , None , ["foo" , "bar" ], []),
@@ -1068,6 +1092,20 @@ def test_specifier_contains_installed_prereleases(
10681092 ["invalid" , "1.0" , "2.0" , "3.0" ],
10691093 ["1.0" , "3.0" ],
10701094 ),
1095+ # Test that != ignores prereleases parameter for non-PEP 440 versions
1096+ ("!=1.0" , None , True , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1097+ ("!=1.0" , None , False , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1098+ ("!=1.0" , True , None , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1099+ ("!=1.0" , False , None , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1100+ ("!=1.0" , True , True , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1101+ ("!=1.0" , False , False , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1102+ # Test that === ignores prereleases parameter for non-PEP 440 versions
1103+ ("===foobar" , None , True , ["foobar" , "foo" ], ["foobar" ]),
1104+ ("===foobar" , None , False , ["foobar" , "foo" ], ["foobar" ]),
1105+ ("===foobar" , True , None , ["foobar" , "foo" ], ["foobar" ]),
1106+ ("===foobar" , False , None , ["foobar" , "foo" ], ["foobar" ]),
1107+ ("===foobar" , True , True , ["foobar" , "foo" ], ["foobar" ]),
1108+ ("===foobar" , False , False , ["foobar" , "foo" ], ["foobar" ]),
10711109 ],
10721110 )
10731111 def test_specifier_filter (
0 commit comments