| """Command line interface tests for llvm.py configure. |
| |
| Note that although this uses the unittest framework, it does *not* contain unit |
| tests. |
| |
| """ |
| from os import path |
| from subprocess import CalledProcessError |
| from tempfile import mkdtemp |
| from uuid import uuid4 |
| |
| from llvmtestcase import LLVMTestCase, require_command_arg, debug |
| |
| |
| class Testllvmconfigure(LLVMTestCase): |
| |
| @classmethod |
| def llvm_configure(cls, *args, **kwargs): |
| return cls.command_with_defaults("configure", *args, **kwargs) |
| |
| @classmethod |
| def setUpClass(cls): |
| cls.env = mkdtemp() |
| |
| cls.llvm_repo = path.join(cls.env, "llvm-repo") |
| cls.create_dummy_repo(cls.llvm_repo) |
| |
| cls.llvm_worktree = path.join(cls.env, "llvm") |
| cls.add_worktree(cls.llvm_repo, cls.llvm_worktree, "br") |
| |
| @require_command_arg("--source-dir") |
| def test_source_dir_is_compulsory(self): |
| """Test that we get an error if we don't pass the source dir.""" |
| self.run_with_output(self.llvm_configure("--build-dir", "anywhere")) |
| |
| @require_command_arg("--build-dir") |
| def test_build_dir_is_compulsory(self): |
| """Test that we get an error if we don't pass the build dir.""" |
| self.run_with_output( |
| self.llvm_configure("--source-dir", self.llvm_worktree)) |
| |
| def test_default_args(self): |
| """Test that we can get a simple configure command.""" |
| output = self.run_with_output(self.llvm_configure("--dry-run", |
| "--source-dir", |
| self.llvm_worktree, |
| "--build-dir", |
| "anywhere")) |
| self.assertRegex(output, |
| "anywhere\$ cmake -G Ninja .* {}".format(self.llvm_worktree)) |
| |
| def test_generator(self): |
| """Test that we can specify a custom generator.""" |
| output = self.run_with_output(self.llvm_configure("--dry-run", |
| "--source-dir", |
| self.llvm_worktree, |
| "--build-dir", |
| "anywhere", |
| "--cmake-generator", |
| "\"Unix Makefiles\"")) |
| self.assertRegex(output, |
| "anywhere\$ cmake -G \"Unix Makefiles\" .* {}".format(self.llvm_worktree)) |
| |
| def test_cmake_vars(self): |
| """Test that we can specify custom cmake variables.""" |
| output = self.run_with_output(self.llvm_configure( |
| "--dry-run", |
| "--source-dir", self.llvm_worktree, |
| "--build-dir", "anywhere", |
| "--cmake-def", "VAR1=VAL1", |
| "--cmake-def", "VAR2=\"-not --so simple\"")) |
| |
| self.assertRegex(output, |
| "anywhere\$ cmake -G Ninja .* -DVAR1=VAL1 -DVAR2=\"-not --so simple\" {}".format(self.llvm_worktree)) |
| |
| def test_create_build_dir(self): |
| """ |
| Test that we create the build directory if it doesn't already exist (but |
| not in dry-run). |
| """ |
| buildDir = path.join(self.env, "brand-new-build-dir") |
| self.assertFalse(path.isdir(buildDir)) |
| |
| self.run_with_output(self.llvm_configure("--dry-run", |
| "--source-dir", self.llvm_worktree, |
| "--build-dir", buildDir)) |
| self.assertFalse(path.isdir(buildDir)) |
| |
| # When not running in dry run mode, we're going to try to execute a |
| # CMake command that's going to fail because we don't have a valid LLVM |
| # source directory. This is fine, since the purpose of this test isn't |
| # to check the integration with CMake. |
| with self.assertRaises(Exception) as context: |
| print(self.run_with_output(self.llvm_configure( |
| "--source-dir", self.llvm_worktree, |
| "--build-dir", buildDir))) |
| |
| self.assertTrue(path.isdir(buildDir)) |