diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:06:29 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:06:29 +0000 |
| commit | 94994d372d014ce4c8758b9605d63fae651bd8aa (patch) | |
| tree | 51c0b708bd59f205d6b35cb2a8c24d62f0c33d77 /unittests/Interpreter/TestCompletion.cpp | |
| parent | 39be7ce23363d12ae3e49aeb1fdb2bfeb892e836 (diff) | |
Diffstat (limited to 'unittests/Interpreter/TestCompletion.cpp')
| -rw-r--r-- | unittests/Interpreter/TestCompletion.cpp | 95 |
1 files changed, 51 insertions, 44 deletions
diff --git a/unittests/Interpreter/TestCompletion.cpp b/unittests/Interpreter/TestCompletion.cpp index 196cca8ce7bd..6cd4f682455d 100644 --- a/unittests/Interpreter/TestCompletion.cpp +++ b/unittests/Interpreter/TestCompletion.cpp @@ -7,9 +7,11 @@ // //===----------------------------------------------------------------------===// +#include "lldb/Host/FileSystem.h" #include "lldb/Interpreter/CommandCompletions.h" #include "lldb/Utility/StringList.h" #include "lldb/Utility/TildeExpressionResolver.h" + #include "gmock/gmock.h" #include "gtest/gtest.h" @@ -41,32 +43,43 @@ class CompletionTest : public testing::Test { protected: /// Unique temporary directory in which all created filesystem entities must /// be placed. It is removed at the end of the test suite. - static SmallString<128> BaseDir; + SmallString<128> BaseDir; + /// The working directory that we got when starting the test. Every test + /// should chdir into this directory first because some tests maybe chdir + /// into another one during their run. static SmallString<128> OriginalWorkingDir; - static SmallString<128> DirFoo; - static SmallString<128> DirFooA; - static SmallString<128> DirFooB; - static SmallString<128> DirFooC; - static SmallString<128> DirBar; - static SmallString<128> DirBaz; - static SmallString<128> DirTestFolder; - static SmallString<128> DirNested; - - static SmallString<128> FileAA; - static SmallString<128> FileAB; - static SmallString<128> FileAC; - static SmallString<128> FileFoo; - static SmallString<128> FileBar; - static SmallString<128> FileBaz; + SmallString<128> DirFoo; + SmallString<128> DirFooA; + SmallString<128> DirFooB; + SmallString<128> DirFooC; + SmallString<128> DirBar; + SmallString<128> DirBaz; + SmallString<128> DirTestFolder; + SmallString<128> DirNested; + + SmallString<128> FileAA; + SmallString<128> FileAB; + SmallString<128> FileAC; + SmallString<128> FileFoo; + SmallString<128> FileBar; + SmallString<128> FileBaz; + + void SetUp() override { + FileSystem::Initialize(); + + // chdir back into the original working dir this test binary started with. + // A previous test may have have changed the working dir. + ASSERT_NO_ERROR(fs::set_current_path(OriginalWorkingDir)); + + // Get the name of the current test. To prevent that by chance two tests + // get the same temporary directory if createUniqueDirectory fails. + auto test_info = ::testing::UnitTest::GetInstance()->current_test_info(); + ASSERT_TRUE(test_info != nullptr); + std::string name = test_info->name(); + ASSERT_NO_ERROR(fs::createUniqueDirectory("FsCompletion-" + name, BaseDir)); - void SetUp() override { llvm::sys::fs::set_current_path(OriginalWorkingDir); } - - static void SetUpTestCase() { - llvm::sys::fs::current_path(OriginalWorkingDir); - - ASSERT_NO_ERROR(fs::createUniqueDirectory("FsCompletion", BaseDir)); const char *DirNames[] = {"foo", "fooa", "foob", "fooc", "bar", "baz", "test_folder", "foo/nested"}; const char *FileNames[] = {"aa1234.tmp", "ab1234.tmp", "ac1234.tmp", @@ -92,8 +105,13 @@ protected: } } - static void TearDownTestCase() { + static void SetUpTestCase() { + ASSERT_NO_ERROR(fs::current_path(OriginalWorkingDir)); + } + + void TearDown() override { ASSERT_NO_ERROR(fs::remove_directories(BaseDir)); + FileSystem::Terminate(); } static bool HasEquivalentFile(const Twine &Path, const StringList &Paths) { @@ -128,25 +146,8 @@ protected: } }; -SmallString<128> CompletionTest::BaseDir; SmallString<128> CompletionTest::OriginalWorkingDir; - -SmallString<128> CompletionTest::DirFoo; -SmallString<128> CompletionTest::DirFooA; -SmallString<128> CompletionTest::DirFooB; -SmallString<128> CompletionTest::DirFooC; -SmallString<128> CompletionTest::DirBar; -SmallString<128> CompletionTest::DirBaz; -SmallString<128> CompletionTest::DirTestFolder; -SmallString<128> CompletionTest::DirNested; - -SmallString<128> CompletionTest::FileAA; -SmallString<128> CompletionTest::FileAB; -SmallString<128> CompletionTest::FileAC; -SmallString<128> CompletionTest::FileFoo; -SmallString<128> CompletionTest::FileBar; -SmallString<128> CompletionTest::FileBaz; -} +} // namespace static std::vector<std::string> toVector(const StringList &SL) { std::vector<std::string> Result; @@ -169,11 +170,17 @@ TEST_F(CompletionTest, DirCompletionAbsolute) { // When a directory is specified that doesn't end in a slash, it searches // for that directory, not items under it. - size_t Count = - CommandCompletions::DiskDirectories(BaseDir, Results, Resolver); + // Sanity check that the path we complete on exists and isn't too long. + size_t Count = CommandCompletions::DiskDirectories(Twine(BaseDir) + "/fooa", + Results, Resolver); ASSERT_EQ(1u, Count); ASSERT_EQ(Count, Results.GetSize()); - EXPECT_TRUE(HasEquivalentFile(BaseDir, Results)); + EXPECT_TRUE(HasEquivalentFile(DirFooA, Results)); + + Count = CommandCompletions::DiskDirectories(Twine(BaseDir) + "/.", Results, + Resolver); + ASSERT_EQ(0u, Count); + ASSERT_EQ(Count, Results.GetSize()); // When the same directory ends with a slash, it finds all children. Count = CommandCompletions::DiskDirectories(Prefixes[0], Results, Resolver); |
