|
10 | 10 |
|
11 | 11 | from mesonbuild.cargo import cfg, load_wraps
|
12 | 12 | from mesonbuild.cargo.cfg import TokenType
|
13 |
| -from mesonbuild.cargo.manifest import Manifest |
| 13 | +from mesonbuild.cargo.manifest import Dependency, Manifest, Package, Workspace |
14 | 14 | from mesonbuild.cargo.toml import load_toml
|
15 | 15 | from mesonbuild.cargo.version import convert
|
16 | 16 |
|
@@ -272,6 +272,75 @@ class CargoTomlTest(unittest.TestCase):
|
272 | 272 | ]
|
273 | 273 | ''')
|
274 | 274 |
|
| 275 | + CARGO_TOML_WS = textwrap.dedent('''\ |
| 276 | + [workspace] |
| 277 | + resolver = "2" |
| 278 | + members = ["tutorial"] |
| 279 | +
|
| 280 | + [workspace.package] |
| 281 | + version = "0.14.0-alpha.1" |
| 282 | + repository = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs" |
| 283 | + edition = "2021" |
| 284 | + rust-version = "1.83" |
| 285 | +
|
| 286 | + [workspace.dependencies] |
| 287 | + glib = { path = "glib" } |
| 288 | + gtk = { package = "gtk4", version = "0.9" } |
| 289 | + once_cell = "1.0" |
| 290 | + syn = { version = "2", features = ["parse"] } |
| 291 | + ''') |
| 292 | + |
| 293 | + def test_cargo_toml_ws_package(self) -> None: |
| 294 | + with tempfile.TemporaryDirectory() as tmpdir: |
| 295 | + fname = os.path.join(tmpdir, 'Cargo.toml') |
| 296 | + with open(fname, 'w', encoding='utf-8') as f: |
| 297 | + f.write(self.CARGO_TOML_WS) |
| 298 | + workspace_toml = load_toml(fname) |
| 299 | + |
| 300 | + workspace = Workspace.from_raw(workspace_toml) |
| 301 | + pkg = Package.from_raw({'name': 'foo', 'version': {'workspace': True}}, workspace) |
| 302 | + self.assertEqual(pkg.name, 'foo') |
| 303 | + self.assertEqual(pkg.version, '0.14.0-alpha.1') |
| 304 | + self.assertEqual(pkg.edition, '2015') |
| 305 | + self.assertEqual(pkg.repository, None) |
| 306 | + |
| 307 | + def test_cargo_toml_ws_dependency(self) -> None: |
| 308 | + with tempfile.TemporaryDirectory() as tmpdir: |
| 309 | + fname = os.path.join(tmpdir, 'Cargo.toml') |
| 310 | + with open(fname, 'w', encoding='utf-8') as f: |
| 311 | + f.write(self.CARGO_TOML_WS) |
| 312 | + workspace_toml = load_toml(fname) |
| 313 | + |
| 314 | + workspace = Workspace.from_raw(workspace_toml) |
| 315 | + dep = Dependency.from_raw('glib', {'workspace': True}, 'member', workspace) |
| 316 | + self.assertEqual(dep.package, 'glib') |
| 317 | + self.assertEqual(dep.version, '') |
| 318 | + self.assertEqual(dep.meson_version, []) |
| 319 | + self.assertEqual(dep.path, os.path.join('..', 'glib')) |
| 320 | + self.assertEqual(dep.features, []) |
| 321 | + |
| 322 | + dep = Dependency.from_raw('gtk', {'workspace': True}, 'member', workspace) |
| 323 | + self.assertEqual(dep.package, 'gtk4') |
| 324 | + self.assertEqual(dep.version, '0.9') |
| 325 | + self.assertEqual(dep.meson_version, ['>= 0.9', '< 0.10']) |
| 326 | + self.assertEqual(dep.api, '0.9') |
| 327 | + self.assertEqual(dep.features, []) |
| 328 | + |
| 329 | + dep = Dependency.from_raw('once_cell', {'workspace': True, 'optional': True}, 'member', workspace) |
| 330 | + self.assertEqual(dep.package, 'once_cell') |
| 331 | + self.assertEqual(dep.version, '1.0') |
| 332 | + self.assertEqual(dep.meson_version, ['>= 1.0', '< 2']) |
| 333 | + self.assertEqual(dep.api, '1') |
| 334 | + self.assertEqual(dep.features, []) |
| 335 | + self.assertTrue(dep.optional) |
| 336 | + |
| 337 | + dep = Dependency.from_raw('syn', {'workspace': True, 'features': ['full']}, 'member', workspace) |
| 338 | + self.assertEqual(dep.package, 'syn') |
| 339 | + self.assertEqual(dep.version, '2') |
| 340 | + self.assertEqual(dep.meson_version, ['>= 2', '< 3']) |
| 341 | + self.assertEqual(dep.api, '2') |
| 342 | + self.assertEqual(sorted(set(dep.features)), ['full', 'parse']) |
| 343 | + |
275 | 344 | def test_cargo_toml_package(self) -> None:
|
276 | 345 | with tempfile.TemporaryDirectory() as tmpdir:
|
277 | 346 | fname = os.path.join(tmpdir, 'Cargo.toml')
|
|
0 commit comments