فهرست منبع

added check for relative pathes in class FileName

Johannes Ruehle 11 سال پیش
والد
کامیت
6bb7e00fa3
4فایلهای تغییر یافته به همراه55 افزوده شده و 1 حذف شده
  1. 8 1
      core/basics/FileName.cpp
  2. 4 0
      core/basics/FileName.h
  3. 37 0
      core/basics/tests/FileNameTest.cpp
  4. 6 0
      core/basics/tests/FileNameTest.h

+ 8 - 1
core/basics/FileName.cpp

@@ -133,7 +133,14 @@ void FileName::createDirectory() const {
 }
 
 void FileName::deleteFile() const {
-  remove(fileName.c_str());
+    remove(fileName.c_str());
+}
+
+bool FileName::isRelative() const {
+    if(fileName.empty())
+        return false;
+
+    return  fileName.substr(0,1) != "/";
 }
 
 } // namespace

+ 4 - 0
core/basics/FileName.h

@@ -146,6 +146,10 @@ public:
    */
   void deleteFile() const;
    
+  /** returns true if the filename's path is relative which means beginning with (at least) a dot (.)
+      @return true if the filename is realtive
+  */
+  bool isRelative() const;
 private:
   //! stores the file name
   std::string fileName;

+ 37 - 0
core/basics/tests/FileNameTest.cpp

@@ -23,6 +23,10 @@ void FileNameTest::testFileName() {
   CPPUNIT_ASSERT_EQUAL(path, fileName.extractPath().str());
   CPPUNIT_ASSERT_EQUAL(name, fileName.extractFileName().str());
   CPPUNIT_ASSERT_EQUAL(ext, fileName.extractExtension().str());
+
+  CPPUNIT_ASSERT_EQUAL(false, fileName.isRelative() );
+  FileName fileNameRelative(name);
+  CPPUNIT_ASSERT_EQUAL(true, fileNameRelative.isRelative() );
 }
 
 void FileNameTest::testFileNameSlash() {
@@ -34,4 +38,37 @@ void FileNameTest::testFileNameSlash() {
   fileNameSlash.removeSlash();
   CPPUNIT_ASSERT_EQUAL(path, fileNameSlash.str());
   CPPUNIT_ASSERT_EQUAL(pathSlash, fileName.str());
+
+  CPPUNIT_ASSERT_EQUAL(false, fileName.isRelative() );
+  CPPUNIT_ASSERT_EQUAL(false, fileNameSlash.isRelative() );
+}
+
+void FileNameTest::testPathRelative() {
+  FileName fileName;
+
+  // absolute pathes
+  fileName.set("");
+  CPPUNIT_ASSERT_EQUAL(false, fileName.isRelative() );
+  fileName.set("/home/user/temporary.ext");
+  CPPUNIT_ASSERT_EQUAL(false, fileName.isRelative() );
+  fileName.set("/home/user/");
+  CPPUNIT_ASSERT_EQUAL(false, fileName.isRelative() );
+  fileName.set("/tmp/tmp.ect");
+  CPPUNIT_ASSERT_EQUAL(false, fileName.isRelative() );
+
+  // relative pathes and files
+  fileName.set("temporary.ext");
+  CPPUNIT_ASSERT_EQUAL(true, fileName.isRelative() );
+  fileName.set("./");
+  CPPUNIT_ASSERT_EQUAL(true, fileName.isRelative() );
+  fileName.set("./temporary.ext");
+  CPPUNIT_ASSERT_EQUAL(true, fileName.isRelative() );
+  fileName.set("../temporary.ext");
+  CPPUNIT_ASSERT_EQUAL(true, fileName.isRelative() );
+  fileName.set("../../temporary.ext");
+  CPPUNIT_ASSERT_EQUAL(true, fileName.isRelative() );
+  fileName.set("../../temporary.ext");
+  CPPUNIT_ASSERT_EQUAL(true, fileName.isRelative() );
+
+
 }

+ 6 - 0
core/basics/tests/FileNameTest.h

@@ -12,6 +12,7 @@ class FileNameTest : public CppUnit::TestFixture {
   CPPUNIT_TEST_SUITE( FileNameTest );
   CPPUNIT_TEST( testFileName );
   CPPUNIT_TEST( testFileNameSlash );
+  CPPUNIT_TEST( testPathRelative );
   CPPUNIT_TEST_SUITE_END();
   
  private:
@@ -30,6 +31,11 @@ class FileNameTest : public CppUnit::TestFixture {
    */
   void testFileNameSlash();
 
+  /**
+   * Test FileName for relative and absolute path recognition
+   */
+  void testPathRelative();
+
 };
 
 #endif // FILENAMETEST_H