PathTest.cpp revision 37b74a387bb3993387029859c2d9d051c41c724e
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//
14using namespace mcld;
15using namespace mcld::sys::fs;
16using namespace mcldtest;
17
18// Constructor can do set-up work for all test here.
19PathTest::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.
25PathTest::~PathTest() {
26  delete m_pTestee;
27}
28
29// SetUp() will be called immediately before each test.
30void PathTest::SetUp() {
31}
32
33// TearDown() will be called immediately after each test.
34void PathTest::TearDown() {
35}
36
37//==========================================================================//
38// Testcases
39//
40TEST_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
51TEST_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
61TEST_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
72TEST_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
83TEST_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
97TEST_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
110TEST_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
130TEST_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
135TEST_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
152TEST_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