1//===- 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// Constructor can do set-up work for all test here. 19FileHandleTest::FileHandleTest() { 20 // 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. 25FileHandleTest::~FileHandleTest() { 26 delete m_pTestee; 27} 28 29// SetUp() will be called immediately before each test. 30void FileHandleTest::SetUp() { 31} 32 33// TearDown() will be called immediately after each test. 34void FileHandleTest::TearDown() { 35} 36 37//===----------------------------------------------------------------------===// 38// Testcases 39//===----------------------------------------------------------------------===// 40TEST_F(FileHandleTest, open_close) { 41 mcld::sys::fs::Path path(TOPDIR); 42 path.append("unittests/test.txt"); 43 ASSERT_TRUE(m_pTestee->open(path, FileHandle::OpenMode(FileHandle::ReadOnly), 44 FileHandle::Permission(FileHandle::System))); 45 ASSERT_TRUE(m_pTestee->isOpened()); 46 ASSERT_TRUE(m_pTestee->isGood()); 47 ASSERT_TRUE(m_pTestee->isOwned()); 48 49 ASSERT_TRUE(27 == m_pTestee->size()); 50 51 ASSERT_TRUE(m_pTestee->close()); 52 ASSERT_FALSE(m_pTestee->isOpened()); 53 ASSERT_TRUE(m_pTestee->isGood()); 54 55 ASSERT_TRUE(0 == m_pTestee->size()); 56} 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()); 67 ASSERT_FALSE(m_pTestee->isOwned()); 68 69 ASSERT_TRUE(27 == m_pTestee->size()); 70 71 ASSERT_TRUE(m_pTestee->close()); 72 ASSERT_FALSE(m_pTestee->isOpened()); 73 ASSERT_TRUE(m_pTestee->isGood()); 74 ASSERT_TRUE(m_pTestee->isOwned()); 75 76 ASSERT_TRUE(0 == m_pTestee->size()); 77 78 int close_result = ::close(fd); 79 ASSERT_EQ(0, close_result); 80} 81 82TEST_F(FileHandleTest, fail_close) { 83 mcld::sys::fs::Path path(TOPDIR); 84 path.append("unittests/test.txt"); 85 ASSERT_TRUE(m_pTestee->open(path, FileHandle::OpenMode(FileHandle::ReadOnly), 86 FileHandle::Permission(FileHandle::System))); 87 ASSERT_TRUE(m_pTestee->isOpened()); 88 ASSERT_TRUE(m_pTestee->isGood()); 89 90 ASSERT_TRUE(27 == m_pTestee->size()); 91 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} 99