blob: b22788ec9ccf1042a97090c4e6efa8ec236974fc [file] [log] [blame]
Shih-wei Liao5460a1f2012-03-16 22:41:16 -07001//===- 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"
Stephen Hines37b74a32014-11-26 18:48:20 -080010#include "mcld/Support/FileSystem.h"
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070011#include <string>
12
13//
14using namespace mcld;
15using namespace mcld::sys::fs;
16using namespace mcldtest;
17
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070018// Constructor can do set-up work for all test here.
Stephen Hines37b74a32014-11-26 18:48:20 -080019PathTest::PathTest() {
20 // create testee. modify it if need
21 m_pTestee = new Path();
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070022}
23
24// Destructor can do clean-up work that doesn't throw exceptions here.
Stephen Hines37b74a32014-11-26 18:48:20 -080025PathTest::~PathTest() {
26 delete m_pTestee;
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070027}
28
29// SetUp() will be called immediately before each test.
Stephen Hines37b74a32014-11-26 18:48:20 -080030void PathTest::SetUp() {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070031}
32
33// TearDown() will be called immediately after each test.
Stephen Hines37b74a32014-11-26 18:48:20 -080034void PathTest::TearDown() {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070035}
36
37//==========================================================================//
38// Testcases
39//
Stephen Hines37b74a32014-11-26 18:48:20 -080040TEST_F(PathTest, should_exist) {
Stephen Hinesf7ac0f12013-05-03 19:09:24 -070041 std::string root(TOPDIR);
42 root += "/test/lit.cfg";
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070043 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
Stephen Hines37b74a32014-11-26 18:48:20 -080051TEST_F(PathTest, should_not_exist) {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070052 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
Stephen Hines37b74a32014-11-26 18:48:20 -080061TEST_F(PathTest, should_is_directory) {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070062 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
Stephen Hines37b74a32014-11-26 18:48:20 -080072TEST_F(PathTest, should_not_is_directory) {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070073 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
Stephen Hines37b74a32014-11-26 18:48:20 -080083TEST_F(PathTest, should_equal) {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070084 const std::string root = "aaa/bbb/../../ccc/";
85 m_pTestee->assign(root);
86
87 Path* p2 = new Path("ccc///////");
88
Stephen Hines37b74a32014-11-26 18:48:20 -080089 EXPECT_TRUE(*m_pTestee == *p2);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070090
91 delete m_pTestee;
92 m_pTestee = new Path(root);
Stephen Hines37b74a32014-11-26 18:48:20 -080093 EXPECT_TRUE(*m_pTestee == *m_pTestee);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070094 delete p2;
95}
96
Stephen Hines37b74a32014-11-26 18:48:20 -080097TEST_F(PathTest, should_not_equal) {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070098 const std::string root = "aa/";
Stephen Hines37b74a32014-11-26 18:48:20 -080099 Path* p2 = new Path("aaa//");
100 // p2->assign(root);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700101 m_pTestee->assign(root);
Stephen Hines37b74a32014-11-26 18:48:20 -0800102 EXPECT_TRUE(*m_pTestee != *p2);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700103
104 delete m_pTestee;
105 m_pTestee = new Path(root);
Stephen Hines37b74a32014-11-26 18:48:20 -0800106 EXPECT_TRUE(*m_pTestee != *p2);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700107 delete p2;
108}
109
Stephen Hines37b74a32014-11-26 18:48:20 -0800110TEST_F(PathTest, append_success) {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700111 const std::string root = "aa/";
112 m_pTestee->assign(root);
113 m_pTestee->append("aaa");
114 std::string a("aa/aaa");
Stephen Hines37b74a32014-11-26 18:48:20 -0800115 EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700116 delete m_pTestee;
117 m_pTestee = new Path("aa/");
118 m_pTestee->append("/aaa");
Stephen Hines37b74a32014-11-26 18:48:20 -0800119 EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700120 delete m_pTestee;
121 m_pTestee = new Path("aa");
122 m_pTestee->append("/aaa");
Stephen Hines37b74a32014-11-26 18:48:20 -0800123 EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700124 delete m_pTestee;
125 m_pTestee = new Path("aa");
126 m_pTestee->append("aaa");
Stephen Hines37b74a32014-11-26 18:48:20 -0800127 EXPECT_TRUE(m_pTestee->native() == "aa/aaa");
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700128}
129
Stephen Hines37b74a32014-11-26 18:48:20 -0800130TEST_F(PathTest, should_become_generic_string) {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700131 m_pTestee->assign("/etc/../dev/../usr//lib//");
132 EXPECT_STREQ("/usr/lib/", m_pTestee->generic_string().c_str());
133}
134
Stephen Hines37b74a32014-11-26 18:48:20 -0800135TEST_F(PathTest, parent_path) {
Shih-wei Liaocedee4b2012-08-02 23:13:03 -0700136 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
Shih-wei Liao22add6f2012-12-15 17:21:00 -0800152TEST_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}