You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.2 KiB
80 lines
2.2 KiB
7 years ago
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||
|
file Copyright.txt or https://cmake.org/licensing#kwsys for details. */
|
||
|
#include "kwsysPrivate.h"
|
||
|
#include KWSYS_HEADER(Directory.hxx)
|
||
|
#include KWSYS_HEADER(Encoding.hxx)
|
||
|
#include KWSYS_HEADER(SystemTools.hxx)
|
||
|
|
||
|
// Work-around CMake dependency scanning limitation. This must
|
||
|
// duplicate the above list of headers.
|
||
|
#if 0
|
||
|
#include "Directory.hxx.in"
|
||
|
#include "Encoding.hxx.in"
|
||
|
#include "SystemTools.hxx.in"
|
||
|
#endif
|
||
|
|
||
|
#include <fstream>
|
||
|
#include <iostream>
|
||
|
#include <sstream>
|
||
|
|
||
|
#include <testSystemTools.h>
|
||
|
|
||
|
int _doLongPathTest()
|
||
|
{
|
||
|
using namespace kwsys;
|
||
|
static const int LONG_PATH_THRESHOLD = 512;
|
||
|
int res = 0;
|
||
|
std::string topdir(TEST_SYSTEMTOOLS_BINARY_DIR "/directory_testing/");
|
||
|
std::stringstream testpathstrm;
|
||
|
std::string testdirpath;
|
||
|
std::string extendedtestdirpath;
|
||
|
|
||
|
testpathstrm << topdir;
|
||
|
size_t pathlen = testpathstrm.str().length();
|
||
|
testpathstrm.seekp(0, std::ios_base::end);
|
||
|
while (pathlen < LONG_PATH_THRESHOLD) {
|
||
|
testpathstrm << "0123456789/";
|
||
|
pathlen = testpathstrm.str().length();
|
||
|
}
|
||
|
|
||
|
testdirpath = testpathstrm.str();
|
||
|
#ifdef _WIN32
|
||
|
extendedtestdirpath =
|
||
|
Encoding::ToNarrow(SystemTools::ConvertToWindowsExtendedPath(testdirpath));
|
||
|
#else
|
||
|
extendedtestdirpath = testdirpath;
|
||
|
#endif
|
||
|
|
||
|
if (SystemTools::MakeDirectory(extendedtestdirpath)) {
|
||
|
std::ofstream testfile1(
|
||
|
(extendedtestdirpath + "longfilepathtest1.txt").c_str());
|
||
|
std::ofstream testfile2(
|
||
|
(extendedtestdirpath + "longfilepathtest2.txt").c_str());
|
||
|
testfile1 << "foo";
|
||
|
testfile2 << "bar";
|
||
|
testfile1.close();
|
||
|
testfile2.close();
|
||
|
|
||
|
Directory testdir;
|
||
|
// Set res to failure if the directory doesn't load
|
||
|
res += !testdir.Load(testdirpath);
|
||
|
// Increment res failure if the directory appears empty
|
||
|
res += testdir.GetNumberOfFiles() == 0;
|
||
|
// Increment res failures if the path has changed from
|
||
|
// what was provided.
|
||
|
res += testdirpath != testdir.GetPath();
|
||
|
|
||
|
SystemTools::RemoveADirectory(topdir);
|
||
|
} else {
|
||
|
std::cerr << "Failed to create directory with long path: "
|
||
|
<< extendedtestdirpath << std::endl;
|
||
|
res += 1;
|
||
|
}
|
||
|
return res;
|
||
|
}
|
||
|
|
||
|
int testDirectory(int, char* [])
|
||
|
{
|
||
|
return _doLongPathTest();
|
||
|
}
|