blob: e8104309698a5d92b9154b505c7e2a5d6c001f7d [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//===----------------------------------------------------------------------===//
Stephen Hines37b74a32014-11-26 18:48:20 -08009#include "mcld/Support/FileHandle.h"
10#include "mcld/Support/Path.h"
Zonr Changaffc1502012-07-16 14:28:23 +080011#include <fcntl.h>
12#include <errno.h>
13#include "FileHandleTest.h"
14
15using namespace mcld;
16using namespace mcldtest;
17
Zonr Changaffc1502012-07-16 14:28:23 +080018// Constructor can do set-up work for all test here.
Stephen Hines37b74a32014-11-26 18:48:20 -080019FileHandleTest::FileHandleTest() {
Zonr Changaffc1502012-07-16 14:28:23 +080020 // create testee. modify it if need
21 m_pTestee = new FileHandle();
22}
23
24// Destructor can do clean-up work that doesn't throw exceptions here.
Stephen Hines37b74a32014-11-26 18:48:20 -080025FileHandleTest::~FileHandleTest() {
Zonr Changaffc1502012-07-16 14:28:23 +080026 delete m_pTestee;
27}
28
29// SetUp() will be called immediately before each test.
Stephen Hines37b74a32014-11-26 18:48:20 -080030void FileHandleTest::SetUp() {
Zonr Changaffc1502012-07-16 14:28:23 +080031}
32
33// TearDown() will be called immediately after each test.
Stephen Hines37b74a32014-11-26 18:48:20 -080034void FileHandleTest::TearDown() {
Zonr Changaffc1502012-07-16 14:28:23 +080035}
36
37//===----------------------------------------------------------------------===//
38// Testcases
Shih-wei Liao22add6f2012-12-15 17:21:00 -080039//===----------------------------------------------------------------------===//
Zonr Changaffc1502012-07-16 14:28:23 +080040TEST_F(FileHandleTest, open_close) {
41 mcld::sys::fs::Path path(TOPDIR);
42 path.append("unittests/test.txt");
Stephen Hines37b74a32014-11-26 18:48:20 -080043 ASSERT_TRUE(m_pTestee->open(path, FileHandle::OpenMode(FileHandle::ReadOnly),
44 FileHandle::Permission(FileHandle::System)));
Zonr Changaffc1502012-07-16 14:28:23 +080045 ASSERT_TRUE(m_pTestee->isOpened());
46 ASSERT_TRUE(m_pTestee->isGood());
Stephen Hines6f757552013-03-04 19:51:03 -080047 ASSERT_TRUE(m_pTestee->isOwned());
Zonr Changaffc1502012-07-16 14:28:23 +080048
Shih-wei Liao22add6f2012-12-15 17:21:00 -080049 ASSERT_TRUE(27 == m_pTestee->size());
Zonr Changaffc1502012-07-16 14:28:23 +080050
51 ASSERT_TRUE(m_pTestee->close());
52 ASSERT_FALSE(m_pTestee->isOpened());
53 ASSERT_TRUE(m_pTestee->isGood());
54
Shih-wei Liao22add6f2012-12-15 17:21:00 -080055 ASSERT_TRUE(0 == m_pTestee->size());
Zonr Changaffc1502012-07-16 14:28:23 +080056}
57
58TEST_F(FileHandleTest, delegate_close) {
59 mcld::sys::fs::Path path(TOPDIR);
60 path.append("unittests/test.txt");
61
62 int fd = ::open(path.native().c_str(), O_RDONLY);
63
64 ASSERT_TRUE(m_pTestee->delegate(fd, FileHandle::ReadOnly));
65 ASSERT_TRUE(m_pTestee->isOpened());
66 ASSERT_TRUE(m_pTestee->isGood());
Stephen Hines6f757552013-03-04 19:51:03 -080067 ASSERT_FALSE(m_pTestee->isOwned());
Zonr Changaffc1502012-07-16 14:28:23 +080068
Shih-wei Liao22add6f2012-12-15 17:21:00 -080069 ASSERT_TRUE(27 == m_pTestee->size());
Zonr Changaffc1502012-07-16 14:28:23 +080070
71 ASSERT_TRUE(m_pTestee->close());
72 ASSERT_FALSE(m_pTestee->isOpened());
73 ASSERT_TRUE(m_pTestee->isGood());
Stephen Hines6f757552013-03-04 19:51:03 -080074 ASSERT_TRUE(m_pTestee->isOwned());
Zonr Changaffc1502012-07-16 14:28:23 +080075
Shih-wei Liao22add6f2012-12-15 17:21:00 -080076 ASSERT_TRUE(0 == m_pTestee->size());
Zonr Changaffc1502012-07-16 14:28:23 +080077
78 int close_result = ::close(fd);
Stephen Hines6f757552013-03-04 19:51:03 -080079 ASSERT_EQ(0, close_result);
Zonr Changaffc1502012-07-16 14:28:23 +080080}
81
82TEST_F(FileHandleTest, fail_close) {
83 mcld::sys::fs::Path path(TOPDIR);
84 path.append("unittests/test.txt");
Stephen Hines37b74a32014-11-26 18:48:20 -080085 ASSERT_TRUE(m_pTestee->open(path, FileHandle::OpenMode(FileHandle::ReadOnly),
86 FileHandle::Permission(FileHandle::System)));
Zonr Changaffc1502012-07-16 14:28:23 +080087 ASSERT_TRUE(m_pTestee->isOpened());
88 ASSERT_TRUE(m_pTestee->isGood());
89
Shih-wei Liao22add6f2012-12-15 17:21:00 -080090 ASSERT_TRUE(27 == m_pTestee->size());
Zonr Changaffc1502012-07-16 14:28:23 +080091
92 int close_result = ::close(m_pTestee->handler());
93 ASSERT_EQ(0, close_result);
94
95 ASSERT_FALSE(m_pTestee->close());
96 ASSERT_FALSE(m_pTestee->isOpened());
97 ASSERT_FALSE(m_pTestee->isGood());
98}