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 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 44//===----------------------------------------------------------------------===// 45TEST_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()); 51 ASSERT_TRUE(m_pTestee->isOwned()); 52 53 ASSERT_TRUE(27 == m_pTestee->size()); 54 55 ASSERT_TRUE(m_pTestee->close()); 56 ASSERT_FALSE(m_pTestee->isOpened()); 57 ASSERT_TRUE(m_pTestee->isGood()); 58 59 ASSERT_TRUE(0 == m_pTestee->size()); 60} 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()); 71 ASSERT_FALSE(m_pTestee->isOwned()); 72 73 ASSERT_TRUE(27 == m_pTestee->size()); 74 75 ASSERT_TRUE(m_pTestee->close()); 76 ASSERT_FALSE(m_pTestee->isOpened()); 77 ASSERT_TRUE(m_pTestee->isGood()); 78 ASSERT_TRUE(m_pTestee->isOwned()); 79 80 ASSERT_TRUE(0 == m_pTestee->size()); 81 82 int close_result = ::close(fd); 83 ASSERT_EQ(0, close_result); 84} 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 93 ASSERT_TRUE(27 == m_pTestee->size()); 94 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} 102