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" 10f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen 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 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here. 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoPathTest::PathTest() 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // create testee. modify it if need 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(); 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoPathTest::~PathTest() 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid PathTest::SetUp() 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid PathTest::TearDown() 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================// 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( PathTest, should_exist ) { 46f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines std::string root(TOPDIR); 47f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines root += "/test/lit.cfg"; 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(exists(*m_pTestee)); 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(exists(*m_pTestee)); 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( PathTest, should_not_exist ) { 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "/luck"; 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(exists(*m_pTestee)); 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(exists(*m_pTestee)); 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( PathTest, should_is_directory ) { 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "../././.."; 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(exists(*m_pTestee)); 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(is_directory(*m_pTestee)); 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(exists(*m_pTestee)); 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(is_directory(*m_pTestee)); 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( PathTest, should_not_is_directory ) { 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "/luck"; 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(exists(*m_pTestee)); 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(is_directory(*m_pTestee)); 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(exists(*m_pTestee)); 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_FALSE(is_directory(*m_pTestee)); 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( PathTest, should_equal ) { 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "aaa/bbb/../../ccc/"; 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Path* p2 = new Path("ccc///////"); 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(*m_pTestee==*p2); 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(*m_pTestee==*m_pTestee); 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete p2; 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( PathTest, should_not_equal ) { 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "aa/"; 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Path* p2=new Path("aaa//"); 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// p2->assign(root); 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(*m_pTestee!=*p2); 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path(root); 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(*m_pTestee!=*p2); 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete p2; 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( PathTest, append_success ) { 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string root = "aa/"; 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign(root); 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->append("aaa"); 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::string a("aa/aaa"); 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_TRUE(m_pTestee->native()=="aa/aaa"); 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path("aa/"); 1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->append("/aaa"); 125f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines EXPECT_TRUE(m_pTestee->native()=="aa/aaa"); 1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path("aa"); 1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->append("/aaa"); 129f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines EXPECT_TRUE(m_pTestee->native()=="aa/aaa"); 1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new Path("aa"); 1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->append("aaa"); 133f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines EXPECT_TRUE(m_pTestee->native()=="aa/aaa"); 1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( PathTest, should_become_generic_string ) { 1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->assign("/etc/../dev/../usr//lib//"); 1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EXPECT_STREQ("/usr/lib/", m_pTestee->generic_string().c_str()); 1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 141cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei LiaoTEST_F( PathTest, parent_path ) { 142cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao m_pTestee->assign("aa/bb/cc/dd"); 143cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EXPECT_STREQ("aa/bb/cc", m_pTestee->parent_path().c_str()); 144cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao delete m_pTestee; 145cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao m_pTestee = new Path("/aa/bb/"); 146cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EXPECT_STREQ("/aa/bb", m_pTestee->parent_path().c_str()); 147cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao delete m_pTestee; 148cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao m_pTestee = new Path("/aa/bb"); 149cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EXPECT_STREQ("/aa", m_pTestee->parent_path().c_str()); 150cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao delete m_pTestee; 151cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao m_pTestee = new Path("aa/"); 152cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EXPECT_STREQ("aa", m_pTestee->parent_path().c_str()); 153cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao delete m_pTestee; 154cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao m_pTestee = new Path("aa"); 155cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EXPECT_TRUE(m_pTestee->parent_path().empty()); 156cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao} 157cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 15822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoTEST_F(PathTest, filename) { 15922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->assign("aa/bb/cc"); 16022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao EXPECT_STREQ("cc", m_pTestee->filename().c_str()); 16122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 16222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->assign("aa/bb/"); 16322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao EXPECT_STREQ("", m_pTestee->filename().c_str()); 16422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 16522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->assign("aa"); 16622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao EXPECT_STREQ("aa", m_pTestee->filename().c_str()); 16722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 168