blob: dc9ecdda9e9bc79065bc28f623413217b758de0c [file] [log] [blame]
Zonr Changaffc1502012-07-16 14:28:23 +08001//===- implTest.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 <mcld/Support/FileHandle.h>
10#include <mcld/Support/Path.h>
11#include <fcntl.h>
12#include <errno.h>
13#include "FileHandleTest.h"
14
15using namespace mcld;
16using namespace mcldtest;
17
18
19// Constructor can do set-up work for all test here.
20FileHandleTest::FileHandleTest()
21{
22 // create testee. modify it if need
23 m_pTestee = new FileHandle();
24}
25
26// Destructor can do clean-up work that doesn't throw exceptions here.
27FileHandleTest::~FileHandleTest()
28{
29 delete m_pTestee;
30}
31
32// SetUp() will be called immediately before each test.
33void FileHandleTest::SetUp()
34{
35}
36
37// TearDown() will be called immediately after each test.
38void FileHandleTest::TearDown()
39{
40}
41
42//===----------------------------------------------------------------------===//
43// Testcases
Shih-wei Liao22add6f2012-12-15 17:21:00 -080044//===----------------------------------------------------------------------===//
Zonr Changaffc1502012-07-16 14:28:23 +080045TEST_F(FileHandleTest, open_close) {
46 mcld::sys::fs::Path path(TOPDIR);
47 path.append("unittests/test.txt");
48 ASSERT_TRUE(m_pTestee->open(path, FileHandle::ReadOnly));
49 ASSERT_TRUE(m_pTestee->isOpened());
50 ASSERT_TRUE(m_pTestee->isGood());
Stephen Hines6f757552013-03-04 19:51:03 -080051 ASSERT_TRUE(m_pTestee->isOwned());
Zonr Changaffc1502012-07-16 14:28:23 +080052
Shih-wei Liao22add6f2012-12-15 17:21:00 -080053 ASSERT_TRUE(27 == m_pTestee->size());
Zonr Changaffc1502012-07-16 14:28:23 +080054
55 ASSERT_TRUE(m_pTestee->close());
56 ASSERT_FALSE(m_pTestee->isOpened());
57 ASSERT_TRUE(m_pTestee->isGood());
58
Shih-wei Liao22add6f2012-12-15 17:21:00 -080059 ASSERT_TRUE(0 == m_pTestee->size());
Zonr Changaffc1502012-07-16 14:28:23 +080060}
61
62TEST_F(FileHandleTest, delegate_close) {
63 mcld::sys::fs::Path path(TOPDIR);
64 path.append("unittests/test.txt");
65
66 int fd = ::open(path.native().c_str(), O_RDONLY);
67
68 ASSERT_TRUE(m_pTestee->delegate(fd, FileHandle::ReadOnly));
69 ASSERT_TRUE(m_pTestee->isOpened());
70 ASSERT_TRUE(m_pTestee->isGood());
Stephen Hines6f757552013-03-04 19:51:03 -080071 ASSERT_FALSE(m_pTestee->isOwned());
Zonr Changaffc1502012-07-16 14:28:23 +080072
Shih-wei Liao22add6f2012-12-15 17:21:00 -080073 ASSERT_TRUE(27 == m_pTestee->size());
Zonr Changaffc1502012-07-16 14:28:23 +080074
75 ASSERT_TRUE(m_pTestee->close());
76 ASSERT_FALSE(m_pTestee->isOpened());
77 ASSERT_TRUE(m_pTestee->isGood());
Stephen Hines6f757552013-03-04 19:51:03 -080078 ASSERT_TRUE(m_pTestee->isOwned());
Zonr Changaffc1502012-07-16 14:28:23 +080079
Shih-wei Liao22add6f2012-12-15 17:21:00 -080080 ASSERT_TRUE(0 == m_pTestee->size());
Zonr Changaffc1502012-07-16 14:28:23 +080081
82 int close_result = ::close(fd);
Stephen Hines6f757552013-03-04 19:51:03 -080083 ASSERT_EQ(0, close_result);
Zonr Changaffc1502012-07-16 14:28:23 +080084}
85
86TEST_F(FileHandleTest, fail_close) {
87 mcld::sys::fs::Path path(TOPDIR);
88 path.append("unittests/test.txt");
89 ASSERT_TRUE(m_pTestee->open(path, FileHandle::ReadOnly));
90 ASSERT_TRUE(m_pTestee->isOpened());
91 ASSERT_TRUE(m_pTestee->isGood());
92
Shih-wei Liao22add6f2012-12-15 17:21:00 -080093 ASSERT_TRUE(27 == m_pTestee->size());
Zonr Changaffc1502012-07-16 14:28:23 +080094
95 int close_result = ::close(m_pTestee->handler());
96 ASSERT_EQ(0, close_result);
97
98 ASSERT_FALSE(m_pTestee->close());
99 ASSERT_FALSE(m_pTestee->isOpened());
100 ASSERT_FALSE(m_pTestee->isGood());
101}