//===- PathTest.cpp -------------------------------------------------------===//
//
// The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "PathTest.h"
#include "mcld/Support/FileSystem.h"
#include <string>
//
using namespace mcld;
using namespace mcld::sys::fs;
using namespace mcldtest;
// Constructor can do set-up work for all test here.
PathTest::PathTest() {
// create testee. modify it if need
m_pTestee = new Path();
}
// Destructor can do clean-up work that doesn't throw exceptions here.
PathTest::~PathTest() {
delete m_pTestee;
}
// SetUp() will be called immediately before each test.
void PathTest::SetUp() {
}
// TearDown() will be called immediately after each test.
void PathTest::TearDown() {
}
//==========================================================================//
// Testcases
//
TEST_F(PathTest, should_exist) {
std::string root(TOPDIR);
root += "/test/lit.cfg";
m_pTestee->assign(root);
EXPECT_TRUE(exists(*m_pTestee));
delete m_pTestee;
m_pTestee = new Path(root);
EXPECT_TRUE(exists(*m_pTestee));
}
TEST_F(PathTest, should_not_exist) {
const std::string root = "/luck";
m_pTestee->assign(root);
EXPECT_FALSE(exists(*m_pTestee));
delete m_pTestee;
m_pTestee = new Path(root);
EXPECT_FALSE(exists(*m_pTestee));
}
TEST_F(PathTest, should_is_directory) {
const std::string root = "../././..";
m_pTestee->assign(root);
EXPECT_TRUE(exists(*m_pTestee));
EXPECT_TRUE(is_directory(*m_pTestee));
delete m_pTestee;
m_pTestee = new Path(root);
EXPECT_TRUE(exists(*m_pTestee));
EXPECT_TRUE(is_directory(*m_pTestee));
}
TEST_F(PathTest, should_not_is_directory) {
const std::string root = "/luck";
m_pTestee->assign(root);
EXPECT_FALSE(exists(*m_pTestee));
EXPECT_FALSE(is_directory(*m_pTestee));
delete m_pTestee;
m_pTestee = new Path(root);
EXPECT_FALSE(exists(*m_pTestee));
EXPECT_FALSE(is_directory(*m_pTestee));
}
TEST_F(PathTest, should_equal) {
const std::string root = "aaa/bbb/../../ccc/";
m_pTestee->assign(root);
Path* p2 = new Path("ccc///////");
EXPECT_TRUE(*m_pTestee == *p2);
delete m_pTestee;
m_pTestee = new Path(root);
EXPECT_TRUE(*m_pTestee == *m_pTestee);
delete p2;
}
TEST_F(PathTest, should_not_equal) {
const std::string root = "aa/";
Path* p2 = new Path("aaa//");
// p2->assign(root);
m_pTestee->assign(root);
EXPECT_TRUE(*m_pTestee != *p2);
delete m_pTestee;
m_pTestee = new Path(root);
EXPECT_TRUE(*m_pTestee != *p2);
delete p2;
}
TEST_F(PathTest, append_success) {
const std::string root = "aa/";
m_pTestee->assign(root);
m_pTestee->append("aaa");
std::string a("aa/aaa");
EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
delete m_pTestee;
m_pTestee = new Path("aa/");
m_pTestee->append("/aaa");
EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
delete m_pTestee;
m_pTestee = new Path("aa");
m_pTestee->append("/aaa");
EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
delete m_pTestee;
m_pTestee = new Path("aa");
m_pTestee->append("aaa");
EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
}
TEST_F(PathTest, should_become_generic_string) {
m_pTestee->assign("/etc/../dev/../usr//lib//");
EXPECT_STREQ("/usr/lib/", m_pTestee->generic_string().c_str());
}
TEST_F(PathTest, parent_path) {
m_pTestee->assign("aa/bb/cc/dd");
EXPECT_STREQ("aa/bb/cc", m_pTestee->parent_path().c_str());
delete m_pTestee;
m_pTestee = new Path("/aa/bb/");
EXPECT_STREQ("/aa/bb", m_pTestee->parent_path().c_str());
delete m_pTestee;
m_pTestee = new Path("/aa/bb");
EXPECT_STREQ("/aa", m_pTestee->parent_path().c_str());
delete m_pTestee;
m_pTestee = new Path("aa/");
EXPECT_STREQ("aa", m_pTestee->parent_path().c_str());
delete m_pTestee;
m_pTestee = new Path("aa");
EXPECT_TRUE(m_pTestee->parent_path().empty());
}
TEST_F(PathTest, filename) {
m_pTestee->assign("aa/bb/cc");
EXPECT_STREQ("cc", m_pTestee->filename().c_str());
m_pTestee->assign("aa/bb/");
EXPECT_STREQ("", m_pTestee->filename().c_str());
m_pTestee->assign("aa");
EXPECT_STREQ("aa", m_pTestee->filename().c_str());
}