Editor
publish / publish (push) Successful in 11m35s

This commit is contained in:
khodowany
2026-09-10 18:53:56 -05:00
parent 48db1a287f
commit 940fead905
17 changed files with 225 additions and 149 deletions
+47 -1
View File
@@ -1,3 +1,4 @@
import json
import os
import pathlib
import subprocess
@@ -69,6 +70,49 @@ class upload_packages_test(unittest.TestCase):
completed = subprocess.run(command, cwd=repo, check=False)
self.assertEqual(completed.returncode, 0)
def test_project_root_build_is_rejected(self):
with tempfile.TemporaryDirectory() as directory:
root = pathlib.Path(directory)
context = self.context(root)
context.config["tooling"]["targets"]["native"]["build_dir"] = "."
with self.assertRaisesRegex(modulus.config.config_error, "project and source roots"):
modulus.cli.build_context(root, context.config)
def test_configure_and_lsp_refresh_project_editor_settings(self):
with tempfile.TemporaryDirectory() as directory:
root = pathlib.Path(directory)
fragments = [
{"CompileFlags": {"CompilationDatabase": "build/native"}},
{"If": {"PathMatch": "src/pico/.*"}, "CompileFlags": {"CompilationDatabase": "build/pico"}},
]
config = {"package": {"name": "sample"}, "tooling": {"editor": {"clangd": fragments}}}
(root / "modulus.json").write_text(json.dumps(config), encoding="utf-8")
with unittest.mock.patch.object(modulus.cli, "find_repo_root", return_value=root):
for command in ("configure", "lsp"):
with self.subTest(command=command), unittest.mock.patch.object(modulus.cli, command, return_value=0):
(root / ".clangd").write_text("stale", encoding="utf-8")
self.assertEqual(modulus.cli.main(command), 0)
content = (root / ".clangd").read_text(encoding="utf-8").split("\n", 1)[1]
self.assertEqual([json.loads(part) for part in content.split("\n---\n")], fragments)
before = {name: (root / name).stat().st_mtime_ns for name in modulus.export.editor_files.values()}
self.assertEqual(modulus.cli.main(command), 0)
self.assertEqual(before, {name: (root / name).stat().st_mtime_ns for name in before})
def test_lsp_rejects_source_root_before_cache_cleanup(self):
with tempfile.TemporaryDirectory() as directory:
root = pathlib.Path(directory)
context = self.context(root)
cache = root / "CMakeCache.txt"
cache.write_text("keep", encoding="utf-8")
with unittest.mock.patch.object(modulus.cli, "clear_lsp_cmake_cache") as clear:
for build_dir in (".", "alias", "subproject"):
if build_dir == "alias":
(root / "alias").symlink_to(root, target_is_directory=True)
with self.subTest(build_dir=build_dir), self.assertRaises(modulus.config.config_error):
modulus.cli.configure_lsp_database(context, {"source_dir": "subproject", "build_dir": build_dir})
clear.assert_not_called()
self.assertEqual(cache.read_text(encoding="utf-8"), "keep")
@unittest.mock.patch.object(modulus.cli, "upload_all_packages", return_value=37)
@unittest.mock.patch.object(modulus.cli, "configure_conan_remote", return_value=0)
def test_failed_upload_does_not_force_by_default(self, configure, upload):
@@ -511,7 +555,9 @@ class upload_packages_test(unittest.TestCase):
@unittest.mock.patch.object(modulus.cli, "run", return_value=0)
@unittest.mock.patch.object(modulus.cli, "in_docker", return_value=True)
def test_build_can_target_one_cmake_target(self, docker, run):
context = self.context()
directory = tempfile.TemporaryDirectory()
self.addCleanup(directory.cleanup)
context = self.context(pathlib.Path(directory.name))
context.default_target.build_dir.mkdir(parents=True, exist_ok=True)
(context.default_target.build_dir / "CMakeCache.txt").write_text("", encoding="utf-8")
(context.default_target.build_dir / "build.ninja").write_text("", encoding="utf-8")