// // PathTest.cpp // // $Id: //poco/1.3/Foundation/testsuite/src/PathTest.cpp#2 $ // // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. // and Contributors. // // Permission is hereby granted, free of charge, to any person or organization // obtaining a copy of the software and accompanying documentation covered by // this license (the "Software") to use, reproduce, display, distribute, // execute, and transmit the Software, and to prepare derivative works of the // Software, and to permit third-parties to whom the Software is furnished to // do so, all subject to the following: // // The copyright notices in the Software and this entire statement, including // the above license grant, this restriction and the following disclaimer, // must be included in all copies of the Software, in whole or in part, and // all derivative works of the Software, unless such copies or derivative // works are solely in the form of machine-executable object code generated by // a source language processor. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. // #include "PathTest.h" #include "CppUnit/TestCaller.h" #include "CppUnit/TestSuite.h" #include "Poco/Path.h" #include "Poco/Exception.h" #include "Poco/Random.h" #include "Poco/Environment.h" #include <iostream> using Poco::Path; using Poco::PathSyntaxException; using Poco::Random; using Poco::Environment; PathTest::PathTest(const std::string& name): CppUnit::TestCase(name) { } PathTest::~PathTest() { } void PathTest::testParseUnix1() { Path p; p.parse("", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 0); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == ""); p.parse("/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/"); p.parse("/usr", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr"); p.parse("/usr/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/"); p.parse("usr/", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "usr/"); p.parse("usr", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 0); assert (p[0] == "usr"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_UNIX) == "usr"); p.parse("/usr/local", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p[1] == "local"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local"); } void PathTest::testParseUnix2() { Path p; p.parse("/usr/local/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/"); p.parse("usr/local/", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "usr/local/"); p.parse("usr/local", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p[1] == "local"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_UNIX) == "usr/local"); p.parse("/usr/local/bin", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/bin"); p.parse("/usr/local/bin/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/bin/"); } void PathTest::testParseUnix3() { Path p; p.parse("//usr/local/bin/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/bin/"); p.parse("/usr//local/bin/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/bin/"); p.parse("/usr/local//bin/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/bin/"); p.parse("/usr/local/bin//", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/bin/"); p.parse("/usr/local/./bin/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/bin/"); p.parse("./usr/local/bin/", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "usr/local/bin/"); p.parse("./usr/local/bin/./", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "usr/local/bin/"); p.parse("./usr/local/bin/.", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_UNIX) == "usr/local/bin/."); } void PathTest::testParseUnix4() { Path p; p.parse("/usr/local/lib/../bin/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/bin/"); p.parse("/usr/local/lib/../bin/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/bin/"); p.parse("/usr/local/lib/../../", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/"); p.parse("/usr/local/lib/..", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "lib"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/lib/.."); p.parse("../usr/local/lib/", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 4); assert (p[0] == ".."); assert (p[1] == "usr"); assert (p[2] == "local"); assert (p[3] == "lib"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "../usr/local/lib/"); p.parse("/usr/../lib/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "lib"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/lib/"); p.parse("/usr/../../lib/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "lib"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/lib/"); p.parse("local/../../lib/", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == ".."); assert (p[1] == "lib"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "../lib/"); p.parse("a/b/c/d", Path::PATH_UNIX); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "a"); assert (p[1] == "b"); assert (p[2] == "c"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_UNIX) == "a/b/c/d"); } void PathTest::testParseUnix5() { Path p; p.parse("/c:/windows/system32/", Path::PATH_UNIX); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.getDevice() == "c"); assert (p.depth() == 2); assert (p[0] == "windows"); assert (p[1] == "system32"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/c:/windows/system32/"); } void PathTest::testParseWindows1() { Path p; p.parse("", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 0); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == ""); p.parse("/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//"); p.parse("//", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//"); p.parse("/usr", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr"); p.parse("//usr", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr"); p.parse("/usr/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//"); p.parse("//usr//", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//"); } void PathTest::testParseWindows2() { Path p; p.parse("usr/", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "usr//"); p.parse("usr", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 0); assert (p[0] == "usr"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "usr"); p.parse("usr//", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "usr//"); p.parse("/usr/local", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p[1] == "local"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local"); p.parse("//usr//local", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p[1] == "local"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local"); p.parse("/usr/local/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//"); p.parse("usr/local/", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "usr//local//"); p.parse("usr/local", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p[1] == "local"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "usr//local"); p.parse("/usr/local/bin", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//bin"); p.parse("/usr/local/bin/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//bin//"); p.parse("/usr//local/bin/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//bin//"); p.parse("/usr/local//bin/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//bin//"); p.parse("/usr/local/bin//", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//bin//"); } void PathTest::testParseWindows3() { Path p; p.parse("/usr/local/./bin/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//bin//"); p.parse("./usr/local/bin/", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "usr//local//bin//"); p.parse("./usr/local/bin/./", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "usr//local//bin//"); p.parse("./usr/local/bin/.", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "usr//local//bin//."); p.parse("/usr/local/lib/../bin/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//bin//"); p.parse("/usr/local/lib/../bin/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//bin//"); p.parse("//usr//local//lib//..//bin//", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//bin//"); p.parse("/usr/local/lib/../../", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "usr"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//"); p.parse("/usr/local/lib/..", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "lib"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//usr//local//lib//.."); p.parse("../usr/local/lib/", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 4); assert (p[0] == ".."); assert (p[1] == "usr"); assert (p[2] == "local"); assert (p[3] == "lib"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "..//usr//local//lib//"); p.parse("/usr/../lib/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "lib"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//lib//"); p.parse("/usr/../../lib/", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "lib"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "//lib//"); p.parse("local/../../lib/", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == ".."); assert (p[1] == "lib"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "..//lib//"); } void PathTest::testParseWindows4() { Path p; p.parse("server//files", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "files"); assert (p.getNode() == "server"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "server//files//"); p.parse("server//files//", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "files"); assert (p.getNode() == "server"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "server//files//"); p.parse("server//files//file", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "files"); assert (p.getNode() == "server"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "server//files//file"); p.parse("server//files//dir//file", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "files"); assert (p[1] == "dir"); assert (p.getNode() == "server"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "server//files//dir//file"); p.parse("server//files//dir//file", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "files"); assert (p[1] == "dir"); assert (p.getNode() == "server"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "server//files//dir//file"); p.parse("server", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.getNode() == "server"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "server//"); p.parse("c://", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.getDevice() == "c"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "c://"); p.parse("c://WinNT", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.getDevice() == "c"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "c://WinNT"); p.parse("c://WinNT//", Path::PATH_WINDOWS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "WinNT"); assert (p.getDevice() == "c"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "c://WinNT//"); try { p.parse("~://", Path::PATH_WINDOWS); fail("bad path - must throw exception"); } catch (PathSyntaxException&) { } try { p.parse("c:file.txt", Path::PATH_WINDOWS); fail("bad path - must throw exception"); } catch (PathSyntaxException&) { } p.parse("a//b//c//d", Path::PATH_WINDOWS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "a"); assert (p[1] == "b"); assert (p[2] == "c"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "a//b//c//d"); } void PathTest::testParseVMS1() { Path p; p.parse("", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 0); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == ""); p.parse("[]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 0); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == ""); p.parse("[foo]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]"); p.parse("[.foo]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[.foo]"); p.parse("[foo.bar]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "foo"); assert (p[1] == "bar"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo.bar]"); p.parse("[.foo.bar]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "foo"); assert (p[1] == "bar"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[.foo.bar]"); p.parse("[foo.bar.foobar]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "foo"); assert (p[1] == "bar"); assert (p[2] == "foobar"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo.bar.foobar]"); p.parse("[.foo.bar.foobar]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "foo"); assert (p[1] == "bar"); assert (p[2] == "foobar"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[.foo.bar.foobar]"); } void PathTest::testParseVMS2() { Path p; p.parse("[foo][bar]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "foo"); assert (p[1] == "bar"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo.bar]"); p.parse("[foo.][bar]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "foo"); assert (p[1] == "bar"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo.bar]"); p.parse("[foo.bar][foo]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "foo"); assert (p[1] == "bar"); assert (p[2] == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo.bar.foo]"); try { p.parse("[foo.bar][.foo]", Path::PATH_VMS); failmsg("bad path - must throw exception"); } catch (PathSyntaxException&) { } try { p.parse("[.foo.bar][foo]", Path::PATH_VMS); failmsg("bad path - must throw exception"); } catch (PathSyntaxException&) { } p.parse("[-]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == ".."); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[-]"); p.parse("[--]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == ".."); assert (p[1] == ".."); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[--]"); p.parse("[---]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == ".."); assert (p[1] == ".."); assert (p[2] == ".."); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[---]"); p.parse("[-.-]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == ".."); assert (p[1] == ".."); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[--]"); p.parse("[.-.-]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == ".."); assert (p[1] == ".."); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[--]"); p.parse("[-.-.-]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == ".."); assert (p[1] == ".."); assert (p[2] == ".."); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[---]"); p.parse("[.-.-.-]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == ".."); assert (p[1] == ".."); assert (p[2] == ".."); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[---]"); p.parse("[.--.-]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == ".."); assert (p[1] == ".."); assert (p[2] == ".."); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[---]"); p.parse("[--.-]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == ".."); assert (p[1] == ".."); assert (p[2] == ".."); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[---]"); } void PathTest::testParseVMS3() { Path p; p.parse("[foo][-]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]"); p.parse("[foo][--]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]"); p.parse("[foo][-.-]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]"); p.parse("[foo][bar.-]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]"); p.parse("[foo][bar.foo.-]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "foo"); assert (p[1] == "bar"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo.bar]"); p.parse("[foo][bar.foo.--]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]"); p.parse("[foo][bar.foo.---]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]"); p.parse("[foo][bar.foo.-.-.-]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]"); } void PathTest::testParseVMS4() { Path p; p.parse("device:[foo]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.getDevice() == "device"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "device:[foo]"); p.parse("device:[.foo]", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.getDevice() == "device"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "device:[.foo]"); p.parse("node::device:[foo]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (p.getNode() == "node"); assert (p.getDevice() == "device"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "node::device:[foo]"); p.parse("node::device:[foo.bar]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "foo"); assert (p[1] == "bar"); assert (p.getNode() == "node"); assert (p.getDevice() == "device"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "node::device:[foo.bar]"); p.parse("node::device:[foo.bar.][goo]", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 3); assert (p[0] == "foo"); assert (p[1] == "bar"); assert (p[2] == "goo"); assert (p.getNode() == "node"); assert (p.getDevice() == "device"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "node::device:[foo.bar.goo]"); p.parse("[]foo.txt", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 0); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "foo.txt"); p.parse("[foo]bar.txt", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]bar.txt"); p.parse("[foo]bar.txt;", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]bar.txt"); p.parse("[foo]bar.txt;5", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]bar.txt;5"); assert (p.version() == "5"); p.parse("foo:bar.txt", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.getDevice() == "foo"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "foo:bar.txt"); p.parse("foo:bar.txt;5", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.getDevice() == "foo"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "foo:bar.txt;5"); assert (p.version() == "5"); p.parse("foo:", Path::PATH_VMS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.getDevice() == "foo"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_VMS) == "foo:"); p.parse("bar.txt", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 0); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "bar.txt"); p.parse("bar.txt;5", Path::PATH_VMS); assert (p.isRelative()); assert (!p.isAbsolute()); assert (p.depth() == 0); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "bar.txt;5"); assert (p.version() == "5"); } void PathTest::testParseGuess() { Path p; p.parse("foo:bar.txt;5", Path::PATH_GUESS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.getDevice() == "foo"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "foo:bar.txt;5"); assert (p.version() == "5"); p.parse("/usr/local/bin", Path::PATH_GUESS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 2); assert (p[0] == "usr"); assert (p[1] == "local"); assert (p[2] == "bin"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_UNIX) == "/usr/local/bin"); p.parse("server//files", Path::PATH_GUESS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "files"); assert (p.getNode() == "server"); assert (p.isDirectory()); assert (!p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "server//files//"); p.parse("c://WinNT", Path::PATH_GUESS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.getDevice() == "c"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_WINDOWS) == "c://WinNT"); p.parse("foo:bar.txt;5", Path::PATH_GUESS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 0); assert (p.getDevice() == "foo"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "foo:bar.txt;5"); assert (p.version() == "5"); p.parse("[foo]bar.txt", Path::PATH_GUESS); assert (!p.isRelative()); assert (p.isAbsolute()); assert (p.depth() == 1); assert (p[0] == "foo"); assert (!p.isDirectory()); assert (p.isFile()); assert (p.toString(Path::PATH_VMS) == "[foo]bar.txt"); } void PathTest::testTryParse() { Path p; #if defined(POCO_OS_FAMILY_UNIX) assert (p.tryParse("/etc/passwd")); assert (p.toString() == "/etc/passwd"); #elif defined(POCO_OS_FAMILY_WINDOWS) assert (p.tryParse("c://windows//system32")); assert (p.toString() == "c://windows//system32"); assert (!p.tryParse("c:foo.bar")); assert (p.toString() == "c://windows//system32"); #endif assert (p.tryParse("c://windows//system", Path::PATH_WINDOWS)); assert (p.toString(Path::PATH_WINDOWS) == "c://windows//system"); assert (!p.tryParse("c:foo.bar", Path::PATH_WINDOWS)); assert (p.toString(Path::PATH_WINDOWS) == "c://windows//system"); } void PathTest::testStatics() { std::string s = Path::current(); assert (!s.empty()); Path p(s); assert (p.isDirectory() && p.isAbsolute()); s = Path::home(); assert (!s.empty()); p = s; assert (p.isDirectory() && p.isAbsolute()); s = Path::temp(); assert (!s.empty()); p = s; assert (p.isDirectory() && p.isAbsolute()); s = Path::null(); assert (!s.empty()); p = s; } void PathTest::testBaseNameExt() { Path p("foo.bar"); assert (p.getFileName() == "foo.bar"); assert (p.getBaseName() == "foo"); assert (p.getExtension() == "bar"); p.setBaseName("readme"); assert (p.getFileName() == "readme.bar"); assert (p.getBaseName() == "readme"); assert (p.getExtension() == "bar"); p.setExtension("txt"); assert (p.getFileName() == "readme.txt"); assert (p.getBaseName() == "readme"); assert (p.getExtension() == "txt"); p.setExtension("html"); assert (p.getFileName() == "readme.html"); assert (p.getBaseName() == "readme"); assert (p.getExtension() == "html"); p.setBaseName("index"); assert (p.getFileName() == "index.html"); assert (p.getBaseName() == "index"); assert (p.getExtension() == "html"); } void PathTest::testAbsolute() { Path base("C://Program Files//", Path::PATH_WINDOWS); Path rel("Poco"); Path abs = rel.absolute(base); assert (abs.toString(Path::PATH_WINDOWS) == "C://Program Files//Poco"); base.parse("/usr/local", Path::PATH_UNIX); rel.parse("Poco/include", Path::PATH_UNIX); abs = rel.absolute(base); assert (abs.toString(Path::PATH_UNIX) == "/usr/local/Poco/include"); base.parse("/usr/local/bin", Path::PATH_UNIX); rel.parse("../Poco/include", Path::PATH_UNIX); abs = rel.absolute(base); assert (abs.toString(Path::PATH_UNIX) == "/usr/local/Poco/include"); } void PathTest::testRobustness() { Random r; for (int i = 0; i < 256; ++i) { int len = r.next(1024); std::string s; for (int i = 0; i < len; ++i) s += r.nextChar(); try { Path p(s, Path::PATH_WINDOWS); } catch (PathSyntaxException&) { } try { Path p(s, Path::PATH_UNIX); } catch (PathSyntaxException&) { } try { Path p(s, Path::PATH_VMS); } catch (PathSyntaxException&) { } try { Path p(s, Path::PATH_GUESS); } catch (PathSyntaxException&) { } } } void PathTest::testParent() { Path p("/usr/local/include", Path::PATH_UNIX); p.makeParent(); assert (p.toString(Path::PATH_UNIX) == "/usr/local/"); p.makeParent(); assert (p.toString(Path::PATH_UNIX) == "/usr/"); p.makeParent(); assert (p.toString(Path::PATH_UNIX) == "/"); p.makeParent(); assert (p.toString(Path::PATH_UNIX) == "/"); } void PathTest::testForDirectory() { Path p = Path::forDirectory("/usr/local/include", Path::PATH_UNIX); assert (p.toString(Path::PATH_UNIX) == "/usr/local/include/"); p = Path::forDirectory("/usr/local/include/", Path::PATH_UNIX); assert (p.toString(Path::PATH_UNIX) == "/usr/local/include/"); } void PathTest::testExpand() { #if defined(POCO_OS_FAMILY_UNIX) std::string s = Path::expand("~/.bashrc"); assert (s == Path::expand("$HOME/.bashrc")); assert (s == Environment::get("HOME") + "/.bashrc" || s == Environment::get("HOME") + "//.bashrc"); Path p(s); s = Path::expand("$HOME/.bashrc"); assert (s == Path::expand("~/.bashrc")); s = Path::expand("${HOME}/.bashrc"); assert (s == Path::expand("~/.bashrc")); #elif defined(POCO_OS_FAMILY_WINDOWS) std::string s = Path::expand("%TMP%//foo"); assert (s == Environment::get("TMP") + "//foo"); Path p(s); #else std::string s = Path::expand("SYS$LOGIN:[projects]"); assert (s.find(":[projects]") != std::string::npos); Path p(s); #endif } void PathTest::testListRoots() { std::vector<std::string> devs; Path::listRoots(devs); assert (devs.size() > 0); for (std::vector<std::string>::iterator it = devs.begin(); it != devs.end(); ++it) { std::cout << *it << std::endl; } } void PathTest::testFind() { Path p; #if defined(POCO_OS_FAMILY_UNIX) bool found = Path::find(Environment::get("PATH"), "ls", p); bool notfound = Path::find(Environment::get("PATH"), "xxxyyy123", p); #elif defined(POCO_OS_FAMILY_WINDOWS) bool found = Path::find(Environment::get("PATH"), "cmd.exe", p); bool notfound = Path::find(Environment::get("PATH"), "xxxyyy123.zzz", p); #else bool found = true; bool notfound = false; #endif assert (found); assert (!notfound); std::string fn = p.toString(); assert (fn.size() > 0); } void PathTest::testSwap() { Path p1("c://temp//foo.bar"); Path p2("server//files//foo.bar"); p1.swap(p2); assert (p1.toString() == "server//files//foo.bar"); assert (p2.toString() == "c://temp//foo.bar"); } void PathTest::testResolve() { Path p("c://foo//", Path::PATH_WINDOWS); p.resolve("test.dat"); assert (p.toString(Path::PATH_WINDOWS) == "c://foo//test.dat"); p.assign("c://foo//", Path::PATH_WINDOWS); p.resolve(Path("d://bar.txt", Path::PATH_WINDOWS)); assert (p.toString(Path::PATH_WINDOWS) == "d://bar.txt"); p.assign("c://foo//bar.txt", Path::PATH_WINDOWS); p.resolve("foo.txt"); assert (p.toString(Path::PATH_WINDOWS) == "c://foo//foo.txt"); p.assign("c://foo//bar//", Path::PATH_WINDOWS); p.resolve(Path("..//baz//test.dat", Path::PATH_WINDOWS)); assert (p.toString(Path::PATH_WINDOWS) == "c://foo//baz//test.dat"); } void PathTest::setUp() { } void PathTest::tearDown() { } CppUnit::Test* PathTest::suite() { CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("PathTest"); CppUnit_addTest(pSuite, PathTest, testParseUnix1); CppUnit_addTest(pSuite, PathTest, testParseUnix2); CppUnit_addTest(pSuite, PathTest, testParseUnix3); CppUnit_addTest(pSuite, PathTest, testParseUnix4); CppUnit_addTest(pSuite, PathTest, testParseUnix5); CppUnit_addTest(pSuite, PathTest, testParseWindows1); CppUnit_addTest(pSuite, PathTest, testParseWindows2); CppUnit_addTest(pSuite, PathTest, testParseWindows3); CppUnit_addTest(pSuite, PathTest, testParseWindows4); CppUnit_addTest(pSuite, PathTest, testParseVMS1); CppUnit_addTest(pSuite, PathTest, testParseVMS2); CppUnit_addTest(pSuite, PathTest, testParseVMS3); CppUnit_addTest(pSuite, PathTest, testParseVMS4); CppUnit_addTest(pSuite, PathTest, testParseGuess); CppUnit_addTest(pSuite, PathTest, testTryParse); CppUnit_addTest(pSuite, PathTest, testStatics); CppUnit_addTest(pSuite, PathTest, testBaseNameExt); CppUnit_addTest(pSuite, PathTest, testAbsolute); CppUnit_addTest(pSuite, PathTest, testRobustness); CppUnit_addTest(pSuite, PathTest, testParent); CppUnit_addTest(pSuite, PathTest, testForDirectory); CppUnit_addTest(pSuite, PathTest, testExpand); CppUnit_addTest(pSuite, PathTest, testListRoots); CppUnit_addTest(pSuite, PathTest, testFind); CppUnit_addTest(pSuite, PathTest, testSwap); CppUnit_addTest(pSuite, PathTest, testResolve); return pSuite; } // // FileTest.cpp // // $Id: //poco/1.3/Foundation/testsuite/src/FileTest.cpp#6 $ // // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. // and Contributors. // // Permission is hereby granted, free of charge, to any person or organization // obtaining a copy of the software and accompanying documentation covered by // this license (the "Software") to use, reproduce, display, distribute, // execute, and transmit the Software, and to prepare derivative works of the // Software, and to permit third-parties to whom the Software is furnished to // do so, all subject to the following: // // The copyright notices in the Software and this entire statement, including // the above license grant, this restriction and the following disclaimer, // must be included in all copies of the Software, in whole or in part, and // all derivative works of the Software, unless such copies or derivative // works are solely in the form of machine-executable object code generated by // a source language processor. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. // #include "FileTest.h" #include "CppUnit/TestCaller.h" #include "CppUnit/TestSuite.h" #include "Poco/File.h" #include "Poco/TemporaryFile.h" #include "Poco/Path.h" #include "Poco/Exception.h" #include "Poco/Thread.h" #include <fstream> #include <set> using Poco::File; using Poco::TemporaryFile; using Poco::Path; using Poco::Exception; using Poco::Timestamp; using Poco::Thread; FileTest::FileTest(const std::string& name): CppUnit::TestCase(name) { } FileTest::~FileTest() { } void FileTest::testFileAttributes1() { File f("testfile.dat"); assert (!f.exists()); try { bool flag = f.canRead(); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { bool flag = f.canWrite(); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { bool flag = f.isFile(); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { bool flag = f.isDirectory(); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { Timestamp ts = f.created(); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { Timestamp ts = f.getLastModified(); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { Timestamp ts; f.setLastModified(ts); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { File::FileSize fs = f.getSize(); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { f.setSize(0); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { f.setWriteable(); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { f.setReadOnly(); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { f.copyTo("copy.dat"); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { f.moveTo("copy.dat"); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { f.renameTo("copy.dat"); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } try { f.remove(); failmsg("file does not exist - must throw exception"); } catch (Exception&) { } } void FileTest::testCreateFile() { File f("testfile.dat"); bool created = f.createFile(); assert (created); assert (!f.isHidden()); created = f.createFile(); assert (!created); } void FileTest::testFileAttributes2() { TemporaryFile f; bool created = f.createFile(); Timestamp ts; assert (created); assert (f.exists()); assert (f.canRead()); assert (f.canWrite()); assert (f.isFile()); assert (!f.isDirectory()); Timestamp tsc = f.created(); Timestamp tsm = f.getLastModified(); assert (tsc - ts >= -2000000 && tsc - ts <= 2000000); assert (tsm - ts >= -2000000 && tsm - ts <= 2000000); f.setWriteable(false); assert (!f.canWrite()); assert (f.canRead()); f.setReadOnly(false); assert (f.canWrite()); assert (f.canRead()); ts = Timestamp::fromEpochTime(1000000); f.setLastModified(ts); assert (f.getLastModified() == ts); } void FileTest::testFileAttributes3() { #if defined(POCO_OS_FAMILY_UNIX) File f("/dev/console"); #elif defined(POCO_OS_FAMILY_WINDOWS) File f("CON"); #endif assert (f.isDevice()); assert (!f.isFile()); assert (!f.isDirectory()); } void FileTest::testCompare() { File f1("abc.txt"); File f2("def.txt"); File f3("abc.txt"); assert (f1 == f3); assert (!(f1 == f2)); assert (f1 != f2); assert (!(f1 != f3)); assert (!(f1 == f2)); assert (f1 < f2); assert (f1 <= f2); assert (!(f2 < f1)); assert (!(f2 <= f1)); assert (f2 > f1); assert (f2 >= f1); assert (!(f1 > f2)); assert (!(f1 >= f2)); assert (f1 <= f3); assert (f1 >= f3); } void FileTest::testRootDir() { #if defined(POCO_OS_FAMILY_WINDOWS) File f1("/"); File f2("c:/"); File f3("c://"); File f4("//"); assert (f1.exists()); assert (f2.exists()); assert (f3.exists()); assert (f4.exists()); #else File f1("/"); assert (f1.exists()); #endif } void FileTest::testSwap() { File f1("abc.txt"); File f2("def.txt"); f1.swap(f2); assert (f1.path() == "def.txt"); assert (f2.path() == "abc.txt"); } void FileTest::testSize() { std::ofstream ostr("testfile.dat"); ostr << "Hello, world!" << std::endl; ostr.close(); File f("testfile.dat"); assert (f.getSize() > 0); f.setSize(0); assert (f.getSize() == 0); } void FileTest::testDirectory() { File d("testdir"); try { d.remove(true); } catch (...) { } TemporaryFile::registerForDeletion("testdir"); bool created = d.createDirectory(); assert (created); assert (d.isDirectory()); assert (!d.isFile()); std::vector<std::string> files; d.list(files); assert (files.empty()); File f = Path("testdir/file1", Path::PATH_UNIX); f.createFile(); f = Path("testdir/file2", Path::PATH_UNIX); f.createFile(); f = Path("testdir/file3", Path::PATH_UNIX); f.createFile(); d.list(files); assert (files.size() == 3); std::set<std::string> fs; fs.insert(files.begin(), files.end()); assert (fs.find("file1") != fs.end()); assert (fs.find("file2") != fs.end()); assert (fs.find("file3") != fs.end()); File dd(Path("testdir/testdir2/testdir3", Path::PATH_UNIX)); dd.createDirectories(); assert (dd.exists()); assert (dd.isDirectory()); File ddd(Path("testdir/testdirB/testdirC/testdirD", Path::PATH_UNIX)); ddd.createDirectories(); assert (ddd.exists()); assert (ddd.isDirectory()); d.remove(true); } void FileTest::testCopy() { std::ofstream ostr("testfile.dat"); ostr << "Hello, world!" << std::endl; ostr.close(); File f1("testfile.dat"); TemporaryFile f2; f1.copyTo(f2.path()); assert (f2.exists()); assert (f1.getSize() == f2.getSize()); } void FileTest::testMove() { std::ofstream ostr("testfile.dat"); ostr << "Hello, world!" << std::endl; ostr.close(); File f1("testfile.dat"); File::FileSize sz = f1.getSize(); TemporaryFile f2; f1.moveTo(f2.path()); assert (f2.exists()); assert (f2.getSize() == sz); assert (f1.exists()); assert (f1 == f2); } void FileTest::testCopyDirectory() { Path pd1("testdir"); File fd1(pd1); try { fd1.remove(true); } catch (...) { } fd1.createDirectories(); Path pd2(pd1, "subdir"); File fd2(pd2); fd2.createDirectories(); Path pf1(pd1, "testfile1.dat"); std::ofstream ostr1(pf1.toString().c_str()); ostr1 << "Hello, world!" << std::endl; ostr1.close(); Path pf2(pd1, "testfile2.dat"); std::ofstream ostr2(pf2.toString().c_str()); ostr2 << "Hello, world!" << std::endl; ostr2.close(); Path pf3(pd2, "testfile3.dat"); std::ofstream ostr3(pf3.toString().c_str()); ostr3 << "Hello, world!" << std::endl; ostr3.close(); File fd3("testdir2"); try { fd3.remove(true); } catch (...) { } fd1.copyTo("testdir2"); Path pd1t("testdir2"); File fd1t(pd1t); assert (fd1t.exists()); assert (fd1t.isDirectory()); Path pd2t(pd1t, "subdir"); File fd2t(pd2t); assert (fd2t.exists()); assert (fd2t.isDirectory()); Path pf1t(pd1t, "testfile1.dat"); File ff1t(pf1t); assert (ff1t.exists()); assert (ff1t.isFile()); Path pf2t(pd1t, "testfile2.dat"); File ff2t(pf2t); assert (ff2t.exists()); assert (ff2t.isFile()); Path pf3t(pd2t, "testfile3.dat"); File ff3t(pf3t); assert (ff3t.exists()); assert (ff3t.isFile()); fd1.remove(true); fd3.remove(true); } void FileTest::testRename() { std::ofstream ostr("testfile.dat"); ostr << "Hello, world!" << std::endl; ostr.close(); File f1("testfile.dat"); File f2("testfile2.dat"); f1.renameTo(f2.path()); assert (f2.exists()); assert (f1.exists()); assert (f1 == f2); f2.remove(); } void FileTest::setUp() { File f("testfile.dat"); try { f.remove(); } catch (...) { } } void FileTest::tearDown() { File f("testfile.dat"); try { f.remove(); } catch (...) { } } CppUnit::Test* FileTest::suite() { CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("FileTest"); CppUnit_addTest(pSuite, FileTest, testCreateFile); CppUnit_addTest(pSuite, FileTest, testFileAttributes1); CppUnit_addTest(pSuite, FileTest, testFileAttributes2); CppUnit_addTest(pSuite, FileTest, testFileAttributes3); CppUnit_addTest(pSuite, FileTest, testCompare); CppUnit_addTest(pSuite, FileTest, testSwap); CppUnit_addTest(pSuite, FileTest, testSize); CppUnit_addTest(pSuite, FileTest, testDirectory); CppUnit_addTest(pSuite, FileTest, testCopy); CppUnit_addTest(pSuite, FileTest, testMove); CppUnit_addTest(pSuite, FileTest, testCopyDirectory); CppUnit_addTest(pSuite, FileTest, testRename); CppUnit_addTest(pSuite, FileTest, testRootDir); return pSuite; }