import tempfile
import unittest
from pathlib import Path
from scripts import publish_crates
class PublishCratesTests(unittest.TestCase):
def test_package_versions_keep_host_macro_on_compatible_line(self) -> None:
self.assertEqual(
publish_crates.package_versions("0.23.1", "0.22.7"),
{
"pd-host-function": "0.22.7",
"pd-vm": "0.23.1",
"pd-vm-nostd": "0.23.1",
"rustscript": "0.23.1",
},
)
def test_rewrite_manifests_applies_release_and_dependency_versions(self) -> None:
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)
(root / "pd-host-function").mkdir()
(root / "pd-vm-nostd").mkdir()
(root / "crates" / "rustscript").mkdir(parents=True)
(root / "Cargo.toml").write_text(
"""[workspace]\nmembers = [\".\", \"pd-host-function\", \"pd-vm-nostd\", \"crates/rustscript\"]\n\n[workspace.package]\nversion = \"0.1.0\"\n\n[package]\nname = \"pd-vm\"\nversion.workspace = true\n\n[dependencies]\npd-host-function = { path = \"./pd-host-function\", version = \"0.1.0\" }\n"""
)
(root / "pd-host-function" / "Cargo.toml").write_text(
"""[package]\nname = \"pd-host-function\"\nversion.workspace = true\n"""
)
(root / "pd-vm-nostd" / "Cargo.toml").write_text(
"""[package]\nname = \"pd-vm-nostd\"\nversion.workspace = true\n\n[dev-dependencies]\nvm = { package = \"pd-vm\", path = \"..\" }\n"""
)
(root / "crates" / "rustscript" / "Cargo.toml").write_text(
"""[package]\nname = \"rustscript\"\nversion.workspace = true\n\n[dependencies]\npd_vm_crate = { package = \"pd-vm\", path = \"../..\", version = \">=0.1.0, <1.0.0\" }\n"""
)
publish_crates.rewrite_manifests(root, "0.23.1", "0.22.7")
root_manifest = (root / "Cargo.toml").read_text()
host_manifest = (root / "pd-host-function" / "Cargo.toml").read_text()
nostd_manifest = (root / "pd-vm-nostd" / "Cargo.toml").read_text()
alias_manifest = (root / "crates" / "rustscript" / "Cargo.toml").read_text()
self.assertIn('version = "0.23.1"', root_manifest)
self.assertIn('version = "0.22.7"', host_manifest)
self.assertNotIn("version.workspace = true", host_manifest)
self.assertIn('pd-host-function = { path = "./pd-host-function", version = "0.22.7" }', root_manifest)
self.assertIn('vm = { package = "pd-vm", path = "..", version = "0.23.1" }', nostd_manifest)
self.assertIn('version = "0.23.1"', alias_manifest)
def test_publish_plan_uses_dependency_order_and_per_package_versions(self) -> None:
self.assertEqual(
publish_crates.publish_plan("0.23.1", "0.22.7"),
[
("pd-host-function", "0.22.7"),
("pd-vm", "0.23.1"),
("pd-vm-nostd", "0.23.1"),
("rustscript", "0.23.1"),
],
)
if __name__ == "__main__":
unittest.main()