Avi Drissman | dfd88085 | 2022-09-15 20:11:09 | [diff] [blame] | 1 | // Copyright 2022 The Chromium Authors |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | use rust_gtest_interop::prelude::*; |
| 6 | |
| 7 | use gnrt_lib::manifest::*; |
| 8 | |
| 9 | #[gtest(ManifestTest, ParseSingleFullDependency)] |
| 10 | fn test() { |
| 11 | expect_eq!( |
| 12 | toml::de::from_str(concat!( |
| 13 | "version = \"1.0.0\"\n", |
| 14 | "features = [\"foo\", \"bar\"]\n", |
| 15 | "allow-first-party-usage = false\n", |
| 16 | "build-script-outputs = [\"stuff.rs\"]\n", |
danakj | 79e3602 | 2022-11-25 17:21:56 | [diff] [blame] | 17 | "gn-variables-lib = \"\"\" |
| 18 | deps = [] |
| 19 | configs = [] |
| 20 | \"\"\"" |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 21 | )), |
| 22 | Ok(FullDependency { |
Collin Baker | 5e2e202 | 2022-06-30 21:34:43 | [diff] [blame] | 23 | version: Some(VersionConstraint("1.0.0".to_string())), |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 24 | features: vec!["foo".to_string(), "bar".to_string()], |
| 25 | allow_first_party_usage: false, |
| 26 | build_script_outputs: vec!["stuff.rs".to_string()], |
danakj | 79e3602 | 2022-11-25 17:21:56 | [diff] [blame] | 27 | gn_variables_lib: Some( |
| 28 | " deps = []\n configs = []\n ".to_string() |
| 29 | ) |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 30 | }) |
| 31 | ); |
| 32 | |
| 33 | expect_eq!( |
| 34 | toml::de::from_str(concat!( |
| 35 | "version = \"3.14.159\"\n", |
| 36 | "build-script-outputs = [\"generated.rs\"]\n", |
| 37 | )), |
| 38 | Ok(FullDependency { |
Collin Baker | 5e2e202 | 2022-06-30 21:34:43 | [diff] [blame] | 39 | version: Some(VersionConstraint("3.14.159".to_string())), |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 40 | features: vec![], |
| 41 | allow_first_party_usage: true, |
| 42 | build_script_outputs: vec!["generated.rs".to_string()], |
danakj | 79e3602 | 2022-11-25 17:21:56 | [diff] [blame] | 43 | gn_variables_lib: None, |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 44 | }) |
| 45 | ); |
| 46 | } |
| 47 | |
| 48 | #[gtest(ManifestTest, ParseManifest)] |
| 49 | fn test() { |
| 50 | let manifest: ThirdPartyManifest = toml::de::from_str(concat!( |
| 51 | "[dependencies]\n", |
| 52 | "cxx = \"1\"\n", |
| 53 | "serde = \"1\"\n", |
| 54 | "rustversion = {version = \"1\", build-script-outputs = [\"version.rs\"]}", |
| 55 | "\n", |
| 56 | "[dependencies.unicode-linebreak]\n", |
| 57 | "version = \"0.1\"\n", |
| 58 | "allow-first-party-usage = false\n", |
| 59 | "build-script-outputs = [ \"table.rs\" ]\n", |
| 60 | "\n", |
danakj | 79e3602 | 2022-11-25 17:21:56 | [diff] [blame] | 61 | "[dependencies.special-stuff]\n", |
| 62 | "version = \"0.1\"\n", |
| 63 | "gn-variables-lib = \"hello = \\\"world\\\"\"\n", |
| 64 | "\n", |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 65 | "[dev-dependencies]\n", |
| 66 | "syn = {version = \"1\", features = [\"full\"]}\n", |
| 67 | )) |
| 68 | .unwrap(); |
| 69 | |
| 70 | expect_eq!( |
| 71 | manifest.dependency_spec.dependencies.get("cxx"), |
Collin Baker | 5e2e202 | 2022-06-30 21:34:43 | [diff] [blame] | 72 | Some(&Dependency::Short(VersionConstraint("1".to_string()))) |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 73 | ); |
| 74 | expect_eq!( |
| 75 | manifest.dependency_spec.dependencies.get("serde"), |
Collin Baker | 5e2e202 | 2022-06-30 21:34:43 | [diff] [blame] | 76 | Some(&Dependency::Short(VersionConstraint("1".to_string()))) |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 77 | ); |
| 78 | |
| 79 | expect_eq!( |
| 80 | manifest.dependency_spec.dependencies.get("rustversion"), |
| 81 | Some(&Dependency::Full(FullDependency { |
Collin Baker | 5e2e202 | 2022-06-30 21:34:43 | [diff] [blame] | 82 | version: Some(VersionConstraint("1".to_string())), |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 83 | features: vec![], |
| 84 | allow_first_party_usage: true, |
| 85 | build_script_outputs: vec!["version.rs".to_string()], |
danakj | 79e3602 | 2022-11-25 17:21:56 | [diff] [blame] | 86 | gn_variables_lib: None, |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 87 | })) |
| 88 | ); |
| 89 | |
| 90 | expect_eq!( |
| 91 | manifest.dependency_spec.dependencies.get("unicode-linebreak"), |
| 92 | Some(&Dependency::Full(FullDependency { |
Collin Baker | 5e2e202 | 2022-06-30 21:34:43 | [diff] [blame] | 93 | version: Some(VersionConstraint("0.1".to_string())), |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 94 | features: vec![], |
| 95 | allow_first_party_usage: false, |
| 96 | build_script_outputs: vec!["table.rs".to_string()], |
danakj | 79e3602 | 2022-11-25 17:21:56 | [diff] [blame] | 97 | gn_variables_lib: None, |
| 98 | })) |
| 99 | ); |
| 100 | |
| 101 | expect_eq!( |
| 102 | manifest.dependency_spec.dependencies.get("special-stuff"), |
| 103 | Some(&Dependency::Full(FullDependency { |
| 104 | version: Some(VersionConstraint("0.1".to_string())), |
| 105 | features: vec![], |
| 106 | allow_first_party_usage: true, |
| 107 | build_script_outputs: vec![], |
| 108 | gn_variables_lib: Some("hello = \"world\"".to_string()), |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 109 | })) |
| 110 | ); |
| 111 | |
| 112 | expect_eq!( |
| 113 | manifest.dependency_spec.dev_dependencies.get("syn"), |
| 114 | Some(&Dependency::Full(FullDependency { |
Collin Baker | 5e2e202 | 2022-06-30 21:34:43 | [diff] [blame] | 115 | version: Some(VersionConstraint("1".to_string())), |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 116 | features: vec!["full".to_string()], |
| 117 | allow_first_party_usage: true, |
| 118 | build_script_outputs: vec![], |
danakj | 79e3602 | 2022-11-25 17:21:56 | [diff] [blame] | 119 | gn_variables_lib: None, |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 120 | })) |
| 121 | ); |
| 122 | } |
| 123 | |
| 124 | #[gtest(ManifestTest, SerializeManifestWithPatches)] |
| 125 | fn test() { |
| 126 | let manifest = CargoManifest { |
| 127 | package: CargoPackage { |
| 128 | name: "chromium".to_string(), |
Collin Baker | 5e2e202 | 2022-06-30 21:34:43 | [diff] [blame] | 129 | version: Version::new(0, 1, 0), |
Collin Baker | 8801618f | 2022-07-01 14:57:00 | [diff] [blame] | 130 | authors: Vec::new(), |
Collin Baker | 8a5b6872 | 2022-07-27 02:18:33 | [diff] [blame] | 131 | edition: Edition("2021".to_string()), |
Collin Baker | 8801618f | 2022-07-01 14:57:00 | [diff] [blame] | 132 | description: None, |
danakj | 171b539 | 2022-09-29 21:26:54 | [diff] [blame] | 133 | license: "funtimes".to_string(), |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 134 | }, |
| 135 | workspace: None, |
| 136 | dependency_spec: DependencySpec { |
| 137 | dependencies: DependencySet::new(), |
| 138 | dev_dependencies: DependencySet::new(), |
| 139 | build_dependencies: DependencySet::new(), |
| 140 | }, |
| 141 | patches: vec![( |
| 142 | "crates-io".to_string(), |
| 143 | vec![( |
| 144 | "foo_v1".to_string(), |
| 145 | CargoPatch { |
| 146 | path: "third_party/rust/foo/v1/crate".to_string(), |
| 147 | package: "foo".to_string(), |
| 148 | }, |
| 149 | )] |
| 150 | .into_iter() |
| 151 | .collect(), |
| 152 | )] |
| 153 | .into_iter() |
| 154 | .collect(), |
| 155 | }; |
| 156 | |
| 157 | expect_eq!( |
| 158 | toml::to_string(&manifest).unwrap(), |
| 159 | "[package] |
| 160 | name = \"chromium\" |
| 161 | version = \"0.1.0\" |
| 162 | edition = \"2021\" |
danakj | 171b539 | 2022-09-29 21:26:54 | [diff] [blame] | 163 | license = \"funtimes\" |
Collin Baker | 829a7125 | 2022-06-24 19:08:23 | [diff] [blame] | 164 | [patch.crates-io.foo_v1] |
| 165 | path = \"third_party/rust/foo/v1/crate\" |
| 166 | package = \"foo\" |
| 167 | " |
| 168 | ) |
| 169 | } |
Collin Baker | 8801618f | 2022-07-01 14:57:00 | [diff] [blame] | 170 | |
| 171 | #[gtest(ManifestTest, PackageManifest)] |
| 172 | fn test() { |
| 173 | let manifest: CargoManifest = toml::de::from_str(concat!( |
| 174 | "[package] |
| 175 | name = \"foo\" |
| 176 | version = \"1.2.3\" |
| 177 | authors = [\"alice@foo.com\", \"bob@foo.com\"] |
| 178 | edition = \"2021\" |
| 179 | description = \"A library to foo the bars\" |
danakj | 171b539 | 2022-09-29 21:26:54 | [diff] [blame] | 180 | license = \"funtimes\" |
Collin Baker | 8801618f | 2022-07-01 14:57:00 | [diff] [blame] | 181 | " |
| 182 | )) |
| 183 | .unwrap(); |
| 184 | |
| 185 | expect_eq!( |
| 186 | manifest.package, |
| 187 | CargoPackage { |
| 188 | name: "foo".to_string(), |
| 189 | version: Version::new(1, 2, 3), |
| 190 | authors: vec!["[email protected]".to_string(), "[email protected]".to_string()], |
| 191 | edition: Edition("2021".to_string()), |
| 192 | description: Some("A library to foo the bars".to_string()), |
danakj | 171b539 | 2022-09-29 21:26:54 | [diff] [blame] | 193 | license: "funtimes".to_string(), |
Collin Baker | 8801618f | 2022-07-01 14:57:00 | [diff] [blame] | 194 | } |
| 195 | ) |
| 196 | } |