//===- implTest.cpp -------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "mcld/Support/FileHandle.h" #include "mcld/Support/Path.h" #include <fcntl.h> #include <errno.h> #include "FileHandleTest.h" using namespace mcld; using namespace mcldtest; // Constructor can do set-up work for all test here. FileHandleTest::FileHandleTest() { // create testee. modify it if need m_pTestee = new FileHandle(); } // Destructor can do clean-up work that doesn't throw exceptions here. FileHandleTest::~FileHandleTest() { delete m_pTestee; } // SetUp() will be called immediately before each test. void FileHandleTest::SetUp() { } // TearDown() will be called immediately after each test. void FileHandleTest::TearDown() { } //===----------------------------------------------------------------------===// // Testcases //===----------------------------------------------------------------------===// TEST_F(FileHandleTest, open_close) { mcld::sys::fs::Path path(TOPDIR); path.append("unittests/test.txt"); ASSERT_TRUE(m_pTestee->open(path, FileHandle::OpenMode(FileHandle::ReadOnly), FileHandle::Permission(FileHandle::System))); ASSERT_TRUE(m_pTestee->isOpened()); ASSERT_TRUE(m_pTestee->isGood()); ASSERT_TRUE(m_pTestee->isOwned()); ASSERT_TRUE(27 == m_pTestee->size()); ASSERT_TRUE(m_pTestee->close()); ASSERT_FALSE(m_pTestee->isOpened()); ASSERT_TRUE(m_pTestee->isGood()); ASSERT_TRUE(0 == m_pTestee->size()); } TEST_F(FileHandleTest, delegate_close) { mcld::sys::fs::Path path(TOPDIR); path.append("unittests/test.txt"); int fd = ::open(path.native().c_str(), O_RDONLY); ASSERT_TRUE(m_pTestee->delegate(fd, FileHandle::ReadOnly)); ASSERT_TRUE(m_pTestee->isOpened()); ASSERT_TRUE(m_pTestee->isGood()); ASSERT_FALSE(m_pTestee->isOwned()); ASSERT_TRUE(27 == m_pTestee->size()); ASSERT_TRUE(m_pTestee->close()); ASSERT_FALSE(m_pTestee->isOpened()); ASSERT_TRUE(m_pTestee->isGood()); ASSERT_TRUE(m_pTestee->isOwned()); ASSERT_TRUE(0 == m_pTestee->size()); int close_result = ::close(fd); ASSERT_EQ(0, close_result); } TEST_F(FileHandleTest, fail_close) { mcld::sys::fs::Path path(TOPDIR); path.append("unittests/test.txt"); ASSERT_TRUE(m_pTestee->open(path, FileHandle::OpenMode(FileHandle::ReadOnly), FileHandle::Permission(FileHandle::System))); ASSERT_TRUE(m_pTestee->isOpened()); ASSERT_TRUE(m_pTestee->isGood()); ASSERT_TRUE(27 == m_pTestee->size()); int close_result = ::close(m_pTestee->handler()); ASSERT_EQ(0, close_result); ASSERT_FALSE(m_pTestee->close()); ASSERT_FALSE(m_pTestee->isOpened()); ASSERT_FALSE(m_pTestee->isGood()); }