Home | History | Annotate | Download | only in unittests
      1 //===- PathTest.cpp -------------------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 #include "PathTest.h"
     10 #include "mcld/Support/FileSystem.h"
     11 #include <string>
     12 
     13 //
     14 using namespace mcld;
     15 using namespace mcld::sys::fs;
     16 using namespace mcldtest;
     17 
     18 // Constructor can do set-up work for all test here.
     19 PathTest::PathTest() {
     20   // create testee. modify it if need
     21   m_pTestee = new Path();
     22 }
     23 
     24 // Destructor can do clean-up work that doesn't throw exceptions here.
     25 PathTest::~PathTest() {
     26   delete m_pTestee;
     27 }
     28 
     29 // SetUp() will be called immediately before each test.
     30 void PathTest::SetUp() {
     31 }
     32 
     33 // TearDown() will be called immediately after each test.
     34 void PathTest::TearDown() {
     35 }
     36 
     37 //==========================================================================//
     38 // Testcases
     39 //
     40 TEST_F(PathTest, should_exist) {
     41   std::string root(TOPDIR);
     42   root += "/test/lit.cfg";
     43   m_pTestee->assign(root);
     44   EXPECT_TRUE(exists(*m_pTestee));
     45 
     46   delete m_pTestee;
     47   m_pTestee = new Path(root);
     48   EXPECT_TRUE(exists(*m_pTestee));
     49 }
     50 
     51 TEST_F(PathTest, should_not_exist) {
     52   const std::string root = "/luck";
     53   m_pTestee->assign(root);
     54   EXPECT_FALSE(exists(*m_pTestee));
     55 
     56   delete m_pTestee;
     57   m_pTestee = new Path(root);
     58   EXPECT_FALSE(exists(*m_pTestee));
     59 }
     60 
     61 TEST_F(PathTest, should_is_directory) {
     62   const std::string root = "../././..";
     63   m_pTestee->assign(root);
     64   EXPECT_TRUE(exists(*m_pTestee));
     65   EXPECT_TRUE(is_directory(*m_pTestee));
     66   delete m_pTestee;
     67   m_pTestee = new Path(root);
     68   EXPECT_TRUE(exists(*m_pTestee));
     69   EXPECT_TRUE(is_directory(*m_pTestee));
     70 }
     71 
     72 TEST_F(PathTest, should_not_is_directory) {
     73   const std::string root = "/luck";
     74   m_pTestee->assign(root);
     75   EXPECT_FALSE(exists(*m_pTestee));
     76   EXPECT_FALSE(is_directory(*m_pTestee));
     77   delete m_pTestee;
     78   m_pTestee = new Path(root);
     79   EXPECT_FALSE(exists(*m_pTestee));
     80   EXPECT_FALSE(is_directory(*m_pTestee));
     81 }
     82 
     83 TEST_F(PathTest, should_equal) {
     84   const std::string root = "aaa/bbb/../../ccc/";
     85   m_pTestee->assign(root);
     86 
     87   Path* p2 = new Path("ccc///////");
     88 
     89   EXPECT_TRUE(*m_pTestee == *p2);
     90 
     91   delete m_pTestee;
     92   m_pTestee = new Path(root);
     93   EXPECT_TRUE(*m_pTestee == *m_pTestee);
     94   delete p2;
     95 }
     96 
     97 TEST_F(PathTest, should_not_equal) {
     98   const std::string root = "aa/";
     99   Path* p2 = new Path("aaa//");
    100   //  p2->assign(root);
    101   m_pTestee->assign(root);
    102   EXPECT_TRUE(*m_pTestee != *p2);
    103 
    104   delete m_pTestee;
    105   m_pTestee = new Path(root);
    106   EXPECT_TRUE(*m_pTestee != *p2);
    107   delete p2;
    108 }
    109 
    110 TEST_F(PathTest, append_success) {
    111   const std::string root = "aa/";
    112   m_pTestee->assign(root);
    113   m_pTestee->append("aaa");
    114   std::string a("aa/aaa");
    115   EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
    116   delete m_pTestee;
    117   m_pTestee = new Path("aa/");
    118   m_pTestee->append("/aaa");
    119   EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
    120   delete m_pTestee;
    121   m_pTestee = new Path("aa");
    122   m_pTestee->append("/aaa");
    123   EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
    124   delete m_pTestee;
    125   m_pTestee = new Path("aa");
    126   m_pTestee->append("aaa");
    127   EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
    128 }
    129 
    130 TEST_F(PathTest, should_become_generic_string) {
    131   m_pTestee->assign("/etc/../dev/../usr//lib//");
    132   EXPECT_STREQ("/usr/lib/", m_pTestee->generic_string().c_str());
    133 }
    134 
    135 TEST_F(PathTest, parent_path) {
    136   m_pTestee->assign("aa/bb/cc/dd");
    137   EXPECT_STREQ("aa/bb/cc", m_pTestee->parent_path().c_str());
    138   delete m_pTestee;
    139   m_pTestee = new Path("/aa/bb/");
    140   EXPECT_STREQ("/aa/bb", m_pTestee->parent_path().c_str());
    141   delete m_pTestee;
    142   m_pTestee = new Path("/aa/bb");
    143   EXPECT_STREQ("/aa", m_pTestee->parent_path().c_str());
    144   delete m_pTestee;
    145   m_pTestee = new Path("aa/");
    146   EXPECT_STREQ("aa", m_pTestee->parent_path().c_str());
    147   delete m_pTestee;
    148   m_pTestee = new Path("aa");
    149   EXPECT_TRUE(m_pTestee->parent_path().empty());
    150 }
    151 
    152 TEST_F(PathTest, filename) {
    153   m_pTestee->assign("aa/bb/cc");
    154   EXPECT_STREQ("cc", m_pTestee->filename().c_str());
    155 
    156   m_pTestee->assign("aa/bb/");
    157   EXPECT_STREQ("", m_pTestee->filename().c_str());
    158 
    159   m_pTestee->assign("aa");
    160   EXPECT_STREQ("aa", m_pTestee->filename().c_str());
    161 }
    162