Skip to content

Commit f044b77

Browse files
SrGaabrielLukeMathWalker
authored andcommitted
feat: toml v1.1 support
1 parent 8432876 commit f044b77

3 files changed

Lines changed: 95 additions & 66 deletions

File tree

Cargo.lock

Lines changed: 26 additions & 64 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ env_logger = "0.11"
2828
globwalk = "0.9.1"
2929
anyhow = "1.0.102"
3030
pathdiff = "0.2.3"
31-
cargo-manifest = "0.20.0"
31+
cargo-manifest = "0.21.0"
3232
fs-err = "3.3.0"
33-
toml = { version = "1.0", features = ["preserve_order"] }
33+
toml = { version = "1.1", features = ["preserve_order"] }
3434
expect-test = "1.5.1"
3535
guppy = "0.17"
3636

tests/skeletons/tests/core.rs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,3 +461,70 @@ workspace = true
461461
}
462462
}
463463
}
464+
465+
#[test]
466+
pub fn test_toml_v1_1() {
467+
// Arrange
468+
let project = CargoWorkspace::new()
469+
.manifest(
470+
".",
471+
r#"
472+
[package]
473+
name = "test-dummy"
474+
version = "0.1.0"
475+
edition = "2018"
476+
477+
[dependencies]
478+
reqwest = {
479+
version = "0.13",
480+
default-features = false,
481+
features = [
482+
"json",
483+
]
484+
}
485+
486+
"#,
487+
)
488+
.touch("src/main.rs")
489+
.build();
490+
491+
// Act
492+
let skeleton = Skeleton::derive(project.path(), None).unwrap();
493+
494+
// Assert
495+
assert_eq!(1, skeleton.manifests.len());
496+
497+
let manifest = &skeleton.manifests[0];
498+
let parsed: toml::Value = toml::from_str(&manifest.contents).unwrap();
499+
500+
let reqwest = parsed
501+
.get("dependencies")
502+
.and_then(|deps| deps.get("reqwest"))
503+
.expect("Expected to find reqwest dependency in manifest")
504+
.as_table()
505+
.expect("Expected reqwest dependency to be a table");
506+
assert_eq!(
507+
reqwest.get("version").and_then(|v| v.as_str()),
508+
Some("0.13"),
509+
"Expected reqwest version to be '0.13' (TOML 1.1 multiline inline table)"
510+
);
511+
512+
assert_eq!(
513+
reqwest.get("default-features").and_then(|v| v.as_bool()),
514+
Some(false),
515+
"Expected reqwest default-features to be false"
516+
);
517+
518+
let features = reqwest
519+
.get("features")
520+
.expect("Expected to find features in reqwest dependency")
521+
.as_array()
522+
.expect("Expected features to be an array");
523+
524+
let feature_names: Vec<&str> = features.iter().filter_map(|f| f.as_str()).collect();
525+
assert_eq!(
526+
feature_names,
527+
vec!["json"],
528+
"Expected features to contain exactly 'json' from TOML 1.1 multiline inline table"
529+
);
530+
}

0 commit comments

Comments
 (0)