@@ -764,6 +764,20 @@ def test_specifiers_prereleases(
764764 ["invalid" , "foobar" ],
765765 ),
766766 ("!=2.0.*" , None , None , ["1.0" , "invalid" , "2.0.0" ], ["1.0" , "invalid" ]),
767+ # Test that !== ignores prereleases parameter for non-PEP 440 versions
768+ ("!=1.0" , None , True , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
769+ ("!=1.0" , None , False , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
770+ ("!=1.0" , True , None , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
771+ ("!=1.0" , False , None , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
772+ ("!=1.0" , True , True , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
773+ ("!=1.0" , False , False , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
774+ # Test that === ignores prereleases parameter for non-PEP 440 versions
775+ ("===foobar" , None , True , ["foobar" , "foo" ], ["foobar" ]),
776+ ("===foobar" , None , False , ["foobar" , "foo" ], ["foobar" ]),
777+ ("===foobar" , True , None , ["foobar" , "foo" ], ["foobar" ]),
778+ ("===foobar" , False , None , ["foobar" , "foo" ], ["foobar" ]),
779+ ("===foobar" , True , True , ["foobar" , "foo" ], ["foobar" ]),
780+ ("===foobar" , False , False , ["foobar" , "foo" ], ["foobar" ]),
767781 ],
768782 )
769783 def test_specifier_filter (
@@ -861,6 +875,16 @@ def test_empty_specifier(self, version: str) -> None:
861875 assert parse (version ) in spec
862876 assert spec .contains (parse (version ))
863877
878+ @pytest .mark .parametrize (
879+ "prereleases" ,
880+ [None , False , True ],
881+ )
882+ def test_empty_specifier_arbitrary_string (self , prereleases ):
883+ """Test empty SpecifierSet accepts arbitrary strings."""
884+
885+ spec = SpecifierSet ("" , prereleases = prereleases )
886+ assert spec .contains ("foobar" )
887+
864888 def test_create_from_specifiers (self ) -> None :
865889 spec_strs = [">=1.0" , "!=1.1" , "!=1.2" , "<2.0" ]
866890 specs = [Specifier (s ) for s in spec_strs ]
@@ -1078,13 +1102,13 @@ def test_specifier_contains_installed_prereleases(
10781102 (">=1.0,<=2.0" , False , True , ["1.0" , "1.5a1" ], ["1.0" , "1.5a1" ]),
10791103 (">=1.0,<=2.0dev" , True , False , ["1.0" , "1.5a1" ], ["1.0" ]),
10801104 (">=1.0,<=2.0dev" , False , True , ["1.0" , "1.5a1" ], ["1.0" , "1.5a1" ]),
1081- # Test that invalid versions are discarded
1105+ # Test that invalid versions are accepted by empty SpecifierSet
10821106 ("" , None , None , ["invalid version" ], ["invalid version" ]),
1083- ("" , None , False , ["invalid version" ], []),
1084- ("" , False , None , ["invalid version" ], []),
1107+ ("" , None , False , ["invalid version" ], ["invalid version" ]),
1108+ ("" , False , None , ["invalid version" ], ["invalid version" ]),
10851109 ("" , None , None , ["1.0" , "invalid version" ], ["1.0" , "invalid version" ]),
1086- ("" , None , False , ["1.0" , "invalid version" ], ["1.0" ]),
1087- ("" , False , None , ["1.0" , "invalid version" ], ["1.0" ]),
1110+ ("" , None , False , ["1.0" , "invalid version" ], ["1.0" , "invalid version" ]),
1111+ ("" , False , None , ["1.0" , "invalid version" ], ["1.0" , "invalid version" ]),
10881112 # Test arbitrary equality (===)
10891113 ("===foobar" , None , None , ["foobar" , "foo" , "bar" ], ["foobar" ]),
10901114 ("===foobar" , None , None , ["foo" , "bar" ], []),
@@ -1134,6 +1158,20 @@ def test_specifier_contains_installed_prereleases(
11341158 ["invalid" , "1.0" , "2.0" , "3.0" ],
11351159 ["1.0" , "3.0" ],
11361160 ),
1161+ # Test that != ignores prereleases parameter for non-PEP 440 versions
1162+ ("!=1.0" , None , True , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1163+ ("!=1.0" , None , False , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1164+ ("!=1.0" , True , None , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1165+ ("!=1.0" , False , None , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1166+ ("!=1.0" , True , True , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1167+ ("!=1.0" , False , False , ["invalid" , "foobar" ], ["invalid" , "foobar" ]),
1168+ # Test that === ignores prereleases parameter for non-PEP 440 versions
1169+ ("===foobar" , None , True , ["foobar" , "foo" ], ["foobar" ]),
1170+ ("===foobar" , None , False , ["foobar" , "foo" ], ["foobar" ]),
1171+ ("===foobar" , True , None , ["foobar" , "foo" ], ["foobar" ]),
1172+ ("===foobar" , False , None , ["foobar" , "foo" ], ["foobar" ]),
1173+ ("===foobar" , True , True , ["foobar" , "foo" ], ["foobar" ]),
1174+ ("===foobar" , False , False , ["foobar" , "foo" ], ["foobar" ]),
11371175 ],
11381176 )
11391177 def test_specifier_filter (
0 commit comments