| """ |
| Test lldb 'commands regex' command which allows the user to create a regular expression command. |
| """ |
| |
| from __future__ import print_function |
| |
| |
| |
| import os |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| class TestHomeDirectory(TestBase): |
| |
| mydir = TestBase.compute_mydir(__file__) |
| |
| @expectedFailureAll(hostoslist=["windows"], bugnumber="llvm.org/pr22274: need a pexpect replacement for windows") |
| @no_debug_info_test |
| def test_tilde_home_directory(self): |
| """Test that we can resolve "~/" in paths correctly. |
| When a path starts with "~/", we use llvm::sys::path::home_directory() to |
| resolve the home directory. This currently relies on "HOME" being set in the |
| environment. While this is usually set, we can't rely upon that. We might |
| eventually get a fix into llvm::sys::path::home_directory() so it doesn't rely |
| on having to have an environment variable set, but until then we have work around |
| code in FileSpec::ResolveUsername (llvm::SmallVectorImpl<char> &path) to ensure |
| this always works. This test tests that we get the correct answer for with and |
| without "HOME" being set in the environment.""" |
| import pexpect |
| prompt = "(lldb) " |
| |
| child = pexpect.spawn('%s --no-use-colors %s' % (lldbtest_config.lldbExec, self.lldbOption)) |
| # Turn on logging for what the child sends back. |
| if self.TraceOn(): |
| child.logfile_read = sys.stdout |
| # So that the spawned lldb session gets shutdown durng teardown. |
| self.child = child |
| |
| # Resolve "~/." to the full path of our home directory + "/." |
| if 'HOME' in os.environ: |
| home_dir = os.environ['HOME'] |
| if self.TraceOn(): |
| print("home directory is: '%s'" % (home_dir)) |
| if os.path.exists(home_dir): |
| home_dir_slash_dot = home_dir + '/.' |
| child.expect_exact(prompt) |
| child.sendline('''script str(lldb.SBFileSpec("~/.", True))''') |
| child.expect_exact(home_dir) |
| child.expect_exact(prompt) |
| child.sendline('''script import os; os.unsetenv('HOME'); str(lldb.SBFileSpec("~/", True))'''); |
| child.expect_exact(home_dir) |
| child.expect_exact(prompt) |
| elif self.TraceOn(): |
| print('''home directory "%s" doesn't exist, skipping home directory test''' % (home_dir)) |
| elif self.TraceOn(): |
| print('"HOME" not in environment, skipping home directory test') |
| |
| child.sendline('quit') |