@@ -420,6 +420,66 @@ def all_errors(request: pytest.FixtureRequest, monkeypatch: pytest.MonkeyPatch)
420420 ),
421421 id = "Invalid optional-dependencies item" ,
422422 ),
423+ pytest .param (
424+ """
425+ [project]
426+ name = "test"
427+ version = "0.1.0"
428+ default-optional-dependency-keys = ["none"]
429+ [project.optional-dependencies]
430+ test = [
431+ "a",
432+ ]
433+ """ ,
434+ (
435+ 'Field "project.default-optional-dependency-keys" contains keys '
436+ "not in \" project.optional-dependencies\" : {'none'}"
437+ ),
438+ id = "Invalid default-optional-dependency-keys item" ,
439+ ),
440+ pytest .param (
441+ """
442+ [project]
443+ name = "test"
444+ version = "0.1.0"
445+ default-optional-dependency-keys = ["none"]
446+ """ ,
447+ (
448+ 'Field "project.default-optional-dependency-keys" contains keys '
449+ "not in \" project.optional-dependencies\" : {'none'}"
450+ ),
451+ id = "Invalid default-optional-dependency-keys item without optional-dependencies" ,
452+ ),
453+ pytest .param (
454+ """
455+ [project]
456+ name = "test"
457+ version = "0.1.0"
458+ default-optional-dependency-keys = [1]
459+ """ ,
460+ (
461+ 'Field "project.default-optional-dependency-keys" contains item with invalid '
462+ "type, expecting a string (got int)"
463+ ),
464+ id = "Invalid default-optional-dependency-keys item type" ,
465+ ),
466+ pytest .param (
467+ """
468+ [project]
469+ name = "test"
470+ version = "0.1.0"
471+ default-optional-dependency-keys = "test"
472+ [project.optional-dependencies]
473+ test = [
474+ "a",
475+ ]
476+ """ ,
477+ (
478+ 'Field "project.default-optional-dependency-keys" has an invalid type, '
479+ "expecting a list of strings (got str)"
480+ ),
481+ id = "Invalid default-optional-dependency-keys not list" ,
482+ ),
423483 pytest .param (
424484 """
425485 [project]
@@ -943,6 +1003,17 @@ def test_load_multierror(
9431003 "2.3" ,
9441004 id = "license-files with metadata_version 2.3" ,
9451005 ),
1006+ pytest .param (
1007+ """
1008+ [project]
1009+ name = "test"
1010+ version = "0.1.0"
1011+ default-optional-dependency-keys = []
1012+ """ ,
1013+ '"project.default-optional-dependency-keys" is supported only when emitting metadata version >= 2.6' ,
1014+ "2.5" ,
1015+ id = " with metadata_version 2.5" ,
1016+ ),
9461017 ],
9471018)
9481019def test_load_with_metadata_version (
@@ -1183,6 +1254,53 @@ def test_as_rfc822(monkeypatch: pytest.MonkeyPatch) -> None:
11831254 assert core_metadata .get_payload () == "some readme 👋\n "
11841255
11851256
1257+ def test_as_json_default_extra (monkeypatch : pytest .MonkeyPatch ) -> None :
1258+ monkeypatch .chdir (DIR / "packages/default_extra" )
1259+
1260+ with open ("pyproject.toml" , "rb" ) as f :
1261+ metadata = pyproject_metadata .StandardMetadata .from_pyproject (tomllib .load (f ))
1262+ core_metadata = metadata .as_json ()
1263+ assert core_metadata == {
1264+ "metadata_version" : "2.6" ,
1265+ "name" : "default_extras" ,
1266+ "version" : "0.1.2" ,
1267+ "default_extra" : ["backend1" , "backend2" , "backend3" ],
1268+ "provides_extra" : ["backend1" , "backend2" , "backend3" , "backend4" ],
1269+ "requires_dist" : [
1270+ 'a; extra == "backend1"' ,
1271+ 'b; extra == "backend2"' ,
1272+ 'c; extra == "backend3"' ,
1273+ 'd; extra == "backend4"' ,
1274+ ],
1275+ }
1276+
1277+
1278+ def test_as_rfc822_default_extra (monkeypatch : pytest .MonkeyPatch ) -> None :
1279+ monkeypatch .chdir (DIR / "packages/default_extra" )
1280+
1281+ with open ("pyproject.toml" , "rb" ) as f :
1282+ metadata = pyproject_metadata .StandardMetadata .from_pyproject (tomllib .load (f ))
1283+ core_metadata = metadata .as_rfc822 ()
1284+ assert core_metadata .items () == [
1285+ ("Metadata-Version" , "2.6" ),
1286+ ("Name" , "default_extras" ),
1287+ ("Version" , "0.1.2" ),
1288+ ("Provides-Extra" , "backend1" ),
1289+ ("Requires-Dist" , 'a; extra == "backend1"' ),
1290+ ("Provides-Extra" , "backend2" ),
1291+ ("Requires-Dist" , 'b; extra == "backend2"' ),
1292+ ("Provides-Extra" , "backend3" ),
1293+ ("Requires-Dist" , 'c; extra == "backend3"' ),
1294+ ("Provides-Extra" , "backend4" ),
1295+ ("Requires-Dist" , 'd; extra == "backend4"' ),
1296+ ("Default-Extra" , "backend1" ),
1297+ ("Default-Extra" , "backend2" ),
1298+ ("Default-Extra" , "backend3" ),
1299+ ]
1300+
1301+ assert core_metadata .get_payload () is None
1302+
1303+
11861304def test_as_json_spdx (monkeypatch : pytest .MonkeyPatch ) -> None :
11871305 monkeypatch .chdir (DIR / "packages/spdx" )
11881306
0 commit comments