Enhancement

- Directory handling enhancements with Directory::cwd and Directory::up
  methods, with unit tests.
This commit is contained in:
Paul Beckingham 2012-05-25 18:03:06 -04:00
parent a9058612a7
commit ddd7bc3f0a
3 changed files with 49 additions and 1 deletions

View file

@ -142,6 +142,35 @@ std::vector <std::string> Directory::listRecursive ()
return files; return files;
} }
////////////////////////////////////////////////////////////////////////////////
std::string Directory::cwd ()
{
char buf[PATH_MAX];
getcwd (buf, PATH_MAX - 1);
return std::string (buf);
}
////////////////////////////////////////////////////////////////////////////////
bool Directory::up ()
{
if (_data == "/")
return false;
std::string::size_type slash = _data.rfind ('/');
if (slash == 0)
{
_data = "/"; // Root dir should retain the slash.
return true;
}
else if (slash != std::string::npos)
{
_data = _data.substr (0, slash);
return true;
}
return false;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void Directory::list ( void Directory::list (
const std::string& base, const std::string& base,

View file

@ -49,6 +49,9 @@ public:
std::vector <std::string> list (); std::vector <std::string> list ();
std::vector <std::string> listRecursive (); std::vector <std::string> listRecursive ();
static std::string cwd ();
bool up ();
private: private:
void list (const std::string&, std::vector <std::string>&, bool); void list (const std::string&, std::vector <std::string>&, bool);
bool remove_directory (const std::string&); bool remove_directory (const std::string&);

View file

@ -35,7 +35,7 @@ Context context;
int main (int argc, char** argv) int main (int argc, char** argv)
{ {
UnitTest t (25); UnitTest t (35);
// Directory (const File&); // Directory (const File&);
// Directory (const Path&); // Directory (const Path&);
@ -104,6 +104,22 @@ int main (int argc, char** argv)
t.ok (d7.remove (), "Directory::remove /tmp/to_be_removed"); t.ok (d7.remove (), "Directory::remove /tmp/to_be_removed");
t.notok (d7.exists (), "Directory /tmp/to_be_removed gone"); t.notok (d7.exists (), "Directory /tmp/to_be_removed gone");
// static std::string cwd ();
std::string cwd = Directory::cwd ();
t.ok (cwd.length () > 0, "Directory::cwd returned a value");
// bool parent (std::string&) const;
Directory d9 ("/one/two/three/four.txt");
t.ok (d9.up (), "parent /one/two/three/four.txt --> true");
t.is (d9._data, "/one/two/three", "parent /one/two/three/four.txt --> /one/two/three");
t.ok (d9.up (), "parent /one/two/three --> true");
t.is (d9._data, "/one/two", "parent /one/two/three --> /one/two");
t.ok (d9.up (), "parent /one/two --> true");
t.is (d9._data, "/one", "parent /one/two --> /one");
t.ok (d9.up (), "parent /one --> true");
t.is (d9._data, "/", "parent /one --> /");
t.notok (d9.up (), "parent / --> false");
return 0; return 0;
} }