15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- PathTest.cpp -------------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "PathTest.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/FileSystem.h" 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <string> 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld::sys::fs; 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcldtest; 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here. 1937b74a387bb3993387029859c2d9d051c41c724eStephen HinesPathTest::PathTest() { 2037b74a387bb3993387029859c2d9d051c41c724eStephen Hines // create testee. modify it if need 2137b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pTestee = new Path(); 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 2537b74a387bb3993387029859c2d9d051c41c724eStephen HinesPathTest::~PathTest() { 2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines delete m_pTestee; 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid PathTest::SetUp() { 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 3437b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid PathTest::TearDown() { 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================// 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 4037b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(PathTest, should_exist) { 41f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines std::string root(TOPDIR); 42f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines root += "/test/lit.cfg"; 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(exists(*m_pTestee)); 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(exists(*m_pTestee)); 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5137b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(PathTest, should_not_exist) { 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "/luck"; 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(exists(*m_pTestee)); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(exists(*m_pTestee)); 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6137b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(PathTest, should_is_directory) { 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "../././.."; 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(exists(*m_pTestee)); 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(is_directory(*m_pTestee)); 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(exists(*m_pTestee)); 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(is_directory(*m_pTestee)); 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 7237b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(PathTest, should_not_is_directory) { 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "/luck"; 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(exists(*m_pTestee)); 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(is_directory(*m_pTestee)); 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(exists(*m_pTestee)); 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(is_directory(*m_pTestee)); 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8337b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(PathTest, should_equal) { 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "aaa/bbb/../../ccc/"; 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Path* p2 = new Path("ccc///////"); 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8937b74a387bb3993387029859c2d9d051c41c724eStephen Hines EXPECT_TRUE(*m_pTestee == *p2); 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 9337b74a387bb3993387029859c2d9d051c41c724eStephen Hines EXPECT_TRUE(*m_pTestee == *m_pTestee); 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete p2; 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 9737b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(PathTest, should_not_equal) { 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "aa/"; 9937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Path* p2 = new Path("aaa//"); 10037b74a387bb3993387029859c2d9d051c41c724eStephen Hines // p2->assign(root); 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 10237b74a387bb3993387029859c2d9d051c41c724eStephen Hines EXPECT_TRUE(*m_pTestee != *p2); 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 10637b74a387bb3993387029859c2d9d051c41c724eStephen Hines EXPECT_TRUE(*m_pTestee != *p2); 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete p2; 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 11037b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(PathTest, append_success) { 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "aa/"; 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->append("aaa"); 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::string a("aa/aaa"); 11537b74a387bb3993387029859c2d9d051c41c724eStephen Hines EXPECT_TRUE(m_pTestee->native() == "aa/aaa"); 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path("aa/"); 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->append("/aaa"); 11937b74a387bb3993387029859c2d9d051c41c724eStephen Hines EXPECT_TRUE(m_pTestee->native() == "aa/aaa"); 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path("aa"); 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->append("/aaa"); 12337b74a387bb3993387029859c2d9d051c41c724eStephen Hines EXPECT_TRUE(m_pTestee->native() == "aa/aaa"); 1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path("aa"); 1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->append("aaa"); 12737b74a387bb3993387029859c2d9d051c41c724eStephen Hines EXPECT_TRUE(m_pTestee->native() == "aa/aaa"); 1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 13037b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(PathTest, should_become_generic_string) { 1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign("/etc/../dev/../usr//lib//"); 1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_STREQ("/usr/lib/", m_pTestee->generic_string().c_str()); 1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 13537b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(PathTest, parent_path) { 136cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao m_pTestee->assign("aa/bb/cc/dd"); 137cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EXPECT_STREQ("aa/bb/cc", m_pTestee->parent_path().c_str()); 138cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao delete m_pTestee; 139cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao m_pTestee = new Path("/aa/bb/"); 140cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EXPECT_STREQ("/aa/bb", m_pTestee->parent_path().c_str()); 141cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao delete m_pTestee; 142cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao m_pTestee = new Path("/aa/bb"); 143cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EXPECT_STREQ("/aa", m_pTestee->parent_path().c_str()); 144cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao delete m_pTestee; 145cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao m_pTestee = new Path("aa/"); 146cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EXPECT_STREQ("aa", m_pTestee->parent_path().c_str()); 147cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao delete m_pTestee; 148cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao m_pTestee = new Path("aa"); 149cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EXPECT_TRUE(m_pTestee->parent_path().empty()); 150cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao} 151cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 15222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoTEST_F(PathTest, filename) { 15322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->assign("aa/bb/cc"); 15422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao EXPECT_STREQ("cc", m_pTestee->filename().c_str()); 15522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 15622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->assign("aa/bb/"); 15722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao EXPECT_STREQ("", m_pTestee->filename().c_str()); 15822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 15922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->assign("aa"); 16022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao EXPECT_STREQ("aa", m_pTestee->filename().c_str()); 16122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 162