+17
-13
@@ -1,3 +1,7 @@
|
||||
import modulus.process
|
||||
import modulus.build_context
|
||||
import modulus.container
|
||||
import modulus.lsp
|
||||
import contextlib
|
||||
import io
|
||||
import json
|
||||
@@ -19,7 +23,7 @@ class clangd_test(unittest.TestCase):
|
||||
temporary = tempfile.TemporaryDirectory()
|
||||
self.addCleanup(temporary.cleanup)
|
||||
self.root = pathlib.Path(temporary.name)
|
||||
self.context = modulus.cli.build_context(self.root, modulus.config.normalize({"package": {"name": "sample"}}))
|
||||
self.context = modulus.build_context.build_context(self.root, modulus.config.normalize({"package": {"name": "sample"}}))
|
||||
self.context.docker_marker = self.root / "not-in-container"
|
||||
self.context.dockerfile.parent.mkdir(parents=True)
|
||||
self.context.dockerfile.write_text("FROM sample\n")
|
||||
@@ -39,15 +43,15 @@ class clangd_test(unittest.TestCase):
|
||||
with self.subTest(invalid=invalid), self.assertRaises(modulus.config.config_error):
|
||||
modulus.config.normalize({"package": {"name": "sample"}, "tooling": {"lsp": {"clangd": invalid}}})
|
||||
def test_image_fingerprint_and_architecture(self):
|
||||
image = {"Id": self.image, "Architecture": "amd64", "Config": {"Labels": {modulus.clangd.image_label: modulus.clangd.recipe_digest(self.context)}}}
|
||||
image = {"Id": self.image, "Architecture": "amd64", "Config": {"Labels": {modulus.container.image_label: modulus.container.recipe_digest(self.context)}}}
|
||||
with patch.object(subprocess, "run", return_value=subprocess.CompletedProcess([], 0, json.dumps([image]))):
|
||||
self.assertEqual(modulus.clangd.current_image(self.context), self.image)
|
||||
self.assertIsNone(modulus.clangd.current_image(self.context, "arm64"))
|
||||
self.assertEqual(modulus.container.current_image(self.context), self.image)
|
||||
self.assertIsNone(modulus.container.current_image(self.context, "arm64"))
|
||||
self.context.dockerfile.write_text("FROM changed\n")
|
||||
self.assertIsNone(modulus.clangd.current_image(self.context))
|
||||
self.assertIsNone(modulus.container.current_image(self.context))
|
||||
def test_cache_is_shared_by_image_and_header_settings_not_repo(self):
|
||||
cache = modulus.clangd.cache_directory(self.context, self.image)
|
||||
other = modulus.cli.build_context(self.root / "other", self.context.config)
|
||||
other = modulus.build_context.build_context(self.root / "other", self.context.config)
|
||||
self.assertEqual(cache, modulus.clangd.cache_directory(other, self.image))
|
||||
self.context.lsp_settings["clangd"]["arguments"].append("--log=error")
|
||||
self.assertEqual(cache, modulus.clangd.cache_directory(self.context, self.image))
|
||||
@@ -69,8 +73,8 @@ class clangd_test(unittest.TestCase):
|
||||
self.assertIn("--query-driver=/usr/bin/gcc-12,/usr/bin/g++-12,/usr/bin/aarch64-linux-gnu-gcc-12,/usr/bin/aarch64-linux-gnu-g++-12", command)
|
||||
def test_startup_failure_does_not_prepare_and_keeps_stdout_clean(self):
|
||||
output, errors = io.StringIO(), io.StringIO()
|
||||
with patch.object(modulus.clangd, "current_image", return_value=None), patch.object(modulus.clangd, "prepare") as prepare, \
|
||||
patch.object(modulus.cli, "ensure_build_image") as build, contextlib.redirect_stdout(output), contextlib.redirect_stderr(errors):
|
||||
with patch.object(modulus.container, "current_image", return_value=None), patch.object(modulus.clangd, "prepare") as prepare, \
|
||||
patch.object(modulus.container, "ensure_build_image") as build, contextlib.redirect_stdout(output), contextlib.redirect_stderr(errors):
|
||||
self.assertEqual(modulus.clangd.launch(self.context, []), 1)
|
||||
prepare.assert_not_called()
|
||||
build.assert_not_called()
|
||||
@@ -100,7 +104,7 @@ class clangd_test(unittest.TestCase):
|
||||
cache = self.root / "cache"
|
||||
(cache / "rootfs/usr/include").mkdir(parents=True)
|
||||
(cache / "manifest.json").write_text(json.dumps({"version": modulus.clangd.cache_version, "roots": ["/usr/include"]}))
|
||||
with patch.object(modulus.clangd, "cache_directory", return_value=cache), patch.object(modulus.clangd, "current_image", return_value=self.image), \
|
||||
with patch.object(modulus.clangd, "cache_directory", return_value=cache), patch.object(modulus.container, "current_image", return_value=self.image), \
|
||||
patch.object(subprocess, "run") as run:
|
||||
self.assertEqual(modulus.clangd.prepare(self.context), 0)
|
||||
run.assert_not_called()
|
||||
@@ -109,7 +113,7 @@ class clangd_test(unittest.TestCase):
|
||||
process = MagicMock()
|
||||
process.__enter__.return_value = process
|
||||
process.stdout = self.archive("../escape")
|
||||
with patch.object(modulus.clangd, "cache_directory", return_value=cache), patch.object(modulus.clangd, "current_image", return_value=self.image), \
|
||||
with patch.object(modulus.clangd, "cache_directory", return_value=cache), patch.object(modulus.container, "current_image", return_value=self.image), \
|
||||
patch.object(subprocess, "run", return_value=subprocess.CompletedProcess([], 0, '["/usr/include"]')), \
|
||||
patch.object(subprocess, "Popen", return_value=process), contextlib.redirect_stderr(io.StringIO()):
|
||||
self.assertEqual(modulus.clangd.prepare(self.context), 1)
|
||||
@@ -138,13 +142,13 @@ class clangd_test(unittest.TestCase):
|
||||
modulus.export.sync_nvim_file(self.root, {"enabled": False})
|
||||
self.assertEqual(path.read_text(), "-- user settings\n")
|
||||
def test_lsp_prepares_after_successful_database_refresh_only(self):
|
||||
with patch.object(modulus.cli, "in_docker", return_value=False), patch.object(modulus.cli, "docker_run", return_value=0) as run, \
|
||||
with patch.object(modulus.process, "in_docker", return_value=False), patch.object(modulus.container, "docker_run", return_value=0) as run, \
|
||||
patch.object(modulus.clangd, "prepare", return_value=0) as prepare:
|
||||
self.assertEqual(modulus.cli.lsp(self.context, []), 0)
|
||||
self.assertEqual(modulus.lsp.lsp(self.context, []), 0)
|
||||
prepare.assert_called_once_with(self.context)
|
||||
prepare.reset_mock()
|
||||
run.return_value = 1
|
||||
self.assertEqual(modulus.cli.lsp(self.context, []), 1)
|
||||
self.assertEqual(modulus.lsp.lsp(self.context, []), 1)
|
||||
prepare.assert_not_called()
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user