mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +00:00
Fixes a bug when iterating on paths
This fixes the incorrect implementation of iterating on file/directory paths. Differential Review: http://llvm-reviews.chandlerc.com/D1277 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188183 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
809313970f
commit
225396c2b5
@ -77,7 +77,7 @@ namespace {
|
||||
return path.substr(0, 1);
|
||||
|
||||
// * {file,directory}name
|
||||
size_t end = path.find_first_of(separators, 2);
|
||||
size_t end = path.find_first_of(separators);
|
||||
return path.substr(0, end);
|
||||
}
|
||||
|
||||
|
@ -141,6 +141,75 @@ TEST(Support, Path) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(Support, RelativePathIterator) {
|
||||
SmallString<64> Path(StringRef("c/d/e/foo.txt"));
|
||||
typedef SmallVector<StringRef, 4> PathComponents;
|
||||
PathComponents ExpectedPathComponents;
|
||||
PathComponents ActualPathComponents;
|
||||
|
||||
StringRef(Path).split(ExpectedPathComponents, "/");
|
||||
|
||||
for (path::const_iterator I = path::begin(Path), E = path::end(Path); I != E;
|
||||
++I) {
|
||||
ActualPathComponents.push_back(*I);
|
||||
}
|
||||
|
||||
ASSERT_EQ(ExpectedPathComponents.size(), ActualPathComponents.size());
|
||||
|
||||
for (size_t i = 0; i <ExpectedPathComponents.size(); ++i) {
|
||||
EXPECT_EQ(ExpectedPathComponents[i].str(), ActualPathComponents[i].str());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(Support, AbsolutePathIterator) {
|
||||
SmallString<64> Path(StringRef("/c/d/e/foo.txt"));
|
||||
typedef SmallVector<StringRef, 4> PathComponents;
|
||||
PathComponents ExpectedPathComponents;
|
||||
PathComponents ActualPathComponents;
|
||||
|
||||
StringRef(Path).split(ExpectedPathComponents, "/");
|
||||
|
||||
// The root path will also be a component when iterating
|
||||
ExpectedPathComponents[0] = "/";
|
||||
|
||||
for (path::const_iterator I = path::begin(Path), E = path::end(Path); I != E;
|
||||
++I) {
|
||||
ActualPathComponents.push_back(*I);
|
||||
}
|
||||
|
||||
ASSERT_EQ(ExpectedPathComponents.size(), ActualPathComponents.size());
|
||||
|
||||
for (size_t i = 0; i <ExpectedPathComponents.size(); ++i) {
|
||||
EXPECT_EQ(ExpectedPathComponents[i].str(), ActualPathComponents[i].str());
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef LLVM_ON_WIN32
|
||||
TEST(Support, AbsolutePathIteratorWin32) {
|
||||
SmallString<64> Path(StringRef("c:\\c\\e\\foo.txt"));
|
||||
typedef SmallVector<StringRef, 4> PathComponents;
|
||||
PathComponents ExpectedPathComponents;
|
||||
PathComponents ActualPathComponents;
|
||||
|
||||
StringRef(Path).split(ExpectedPathComponents, "\\");
|
||||
|
||||
// The root path (which comes after the drive name) will also be a component
|
||||
// when iterating.
|
||||
ExpectedPathComponents.insert(ExpectedPathComponents.begin()+1, "\\");
|
||||
|
||||
for (path::const_iterator I = path::begin(Path), E = path::end(Path); I != E;
|
||||
++I) {
|
||||
ActualPathComponents.push_back(*I);
|
||||
}
|
||||
|
||||
ASSERT_EQ(ExpectedPathComponents.size(), ActualPathComponents.size());
|
||||
|
||||
for (size_t i = 0; i <ExpectedPathComponents.size(); ++i) {
|
||||
EXPECT_EQ(ExpectedPathComponents[i].str(), ActualPathComponents[i].str());
|
||||
}
|
||||
}
|
||||
#endif // LLVM_ON_WIN32
|
||||
|
||||
class FileSystemTest : public testing::Test {
|
||||
protected:
|
||||
/// Unique temporary directory in which all created filesystem entities must
|
||||
|
Loading…
Reference in New Issue
Block a user