]> git.proxmox.com Git - rustc.git/blame - vendor/cargo_metadata/tests/selftest.rs
New upstream version 1.48.0+dfsg1
[rustc.git] / vendor / cargo_metadata / tests / selftest.rs
CommitLineData
ba9703b0 1use std::env::current_dir;
3dfed10e 2use std::path::PathBuf;
ba9703b0
XL
3
4use semver::Version;
5
6use cargo_metadata::{CargoOpt, Error, MetadataCommand};
3dfed10e 7use serde::{Deserialize};
ba9703b0
XL
8
9#[derive(Debug, PartialEq, Eq, Deserialize)]
10struct TestPackageMetadata {
11 some_field: bool,
12 other_field: String,
13}
14
15#[test]
16fn metadata() {
17 let metadata = MetadataCommand::new().no_deps().exec().unwrap();
18
ba9703b0
XL
19 let this = &metadata.packages[0];
20 assert_eq!(this.name, "cargo_metadata");
21 assert_eq!(this.targets.len(), 3);
22
23 let lib = this
24 .targets
25 .iter()
26 .find(|t| t.name == "cargo_metadata")
27 .unwrap();
28 assert_eq!(lib.kind[0], "lib");
29 assert_eq!(lib.crate_types[0], "lib");
30
31 let selftest = this.targets.iter().find(|t| t.name == "selftest").unwrap();
32 assert_eq!(selftest.name, "selftest");
33 assert_eq!(selftest.kind[0], "test");
34 assert_eq!(selftest.crate_types[0], "bin");
35
36 let package_metadata = &metadata.packages[0]
37 .metadata
38 .as_object()
39 .expect("package.metadata must be a table.");
40 assert_eq!(package_metadata.len(), 1);
41
42 let value = package_metadata.get("cargo_metadata_test").unwrap();
43 let test_package_metadata: TestPackageMetadata = serde_json::from_value(value.clone()).unwrap();
44 assert_eq!(
45 test_package_metadata,
46 TestPackageMetadata {
47 some_field: true,
48 other_field: "foo".into(),
49 }
50 );
51}
52
53#[test]
54fn builder_interface() {
55 let _ = MetadataCommand::new()
56 .manifest_path("Cargo.toml")
57 .exec()
58 .unwrap();
59 let _ = MetadataCommand::new()
60 .manifest_path(String::from("Cargo.toml"))
61 .exec()
62 .unwrap();
63 let _ = MetadataCommand::new()
64 .manifest_path(PathBuf::from("Cargo.toml"))
65 .exec()
66 .unwrap();
67 let _ = MetadataCommand::new()
68 .manifest_path("Cargo.toml")
69 .no_deps()
70 .exec()
71 .unwrap();
72 let _ = MetadataCommand::new()
73 .manifest_path("Cargo.toml")
74 .features(CargoOpt::AllFeatures)
75 .exec()
76 .unwrap();
77 let _ = MetadataCommand::new()
78 .manifest_path("Cargo.toml")
79 .current_dir(current_dir().unwrap())
80 .exec()
81 .unwrap();
82}
83
84#[test]
85fn error1() {
86 match MetadataCommand::new().manifest_path("foo").exec() {
87 Err(Error::CargoMetadata { stderr }) => assert_eq!(
88 stderr.trim(),
89 "error: the manifest-path must be a path to a Cargo.toml file"
90 ),
91 _ => unreachable!(),
92 }
93}
94
95#[test]
96fn error2() {
97 match MetadataCommand::new()
98 .manifest_path("foo/Cargo.toml")
99 .exec()
100 {
101 Err(Error::CargoMetadata { stderr }) => assert_eq!(
102 stderr.trim(),
103 "error: manifest path `foo/Cargo.toml` does not exist"
104 ),
105 _ => unreachable!(),
106 }
107}
108
109#[test]
110fn cargo_path() {
111 match MetadataCommand::new()
112 .cargo_path("this does not exist")
113 .exec()
114 {
115 Err(Error::Io(e)) => assert_eq!(e.kind(), std::io::ErrorKind::NotFound),
116 _ => unreachable!(),
117 }
118}
119
120#[test]
121fn metadata_deps() {
122 std::env::set_var("CARGO_PROFILE", "3");
123 let metadata = MetadataCommand::new()
124 .manifest_path("Cargo.toml")
125 .exec()
126 .unwrap();
127 let this_id = metadata
128 .workspace_members
129 .first()
130 .expect("Did not find ourselves");
131 let this = &metadata[this_id];
132
133 assert_eq!(this.name, "cargo_metadata");
134
135 let lib = this
136 .targets
137 .iter()
138 .find(|t| t.name == "cargo_metadata")
139 .unwrap();
140 assert_eq!(lib.kind[0], "lib");
141 assert_eq!(lib.crate_types[0], "lib");
142
143 let selftest = this.targets.iter().find(|t| t.name == "selftest").unwrap();
144 assert_eq!(selftest.name, "selftest");
145 assert_eq!(selftest.kind[0], "test");
146 assert_eq!(selftest.crate_types[0], "bin");
147
148 let dependencies = &this.dependencies;
149
150 let serde = dependencies
151 .iter()
152 .find(|dep| dep.name == "serde")
153 .expect("Did not find serde dependency");
154
155 assert_eq!(serde.kind, cargo_metadata::DependencyKind::Normal);
156 assert!(!serde.req.matches(&Version::parse("1.0.0").unwrap()));
157 assert!(serde.req.matches(&Version::parse("1.99.99").unwrap()));
158 assert!(!serde.req.matches(&Version::parse("2.0.0").unwrap()));
159}