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#include <iostream> 45using namespace std; 46 47TEST_F(FileHandleTest, open_close) { 48 mcld::sys::fs::Path path(TOPDIR); 49 path.append("unittests/test.txt"); 50 ASSERT_TRUE(m_pTestee->open(path, FileHandle::ReadOnly)); 51 ASSERT_TRUE(m_pTestee->isOpened()); 52 ASSERT_TRUE(m_pTestee->isGood()); 53 54 ASSERT_EQ(27, m_pTestee->size()); 55 56 ASSERT_TRUE(m_pTestee->close()); 57 ASSERT_FALSE(m_pTestee->isOpened()); 58 ASSERT_TRUE(m_pTestee->isGood()); 59 60 ASSERT_EQ(0, m_pTestee->size()); 61} 62 63TEST_F(FileHandleTest, delegate_close) { 64 mcld::sys::fs::Path path(TOPDIR); 65 path.append("unittests/test.txt"); 66 67 int fd = ::open(path.native().c_str(), O_RDONLY); 68 69 ASSERT_TRUE(m_pTestee->delegate(fd, FileHandle::ReadOnly)); 70 ASSERT_TRUE(m_pTestee->isOpened()); 71 ASSERT_TRUE(m_pTestee->isGood()); 72 73 ASSERT_EQ(27, m_pTestee->size()); 74 75 ASSERT_TRUE(m_pTestee->close()); 76 ASSERT_FALSE(m_pTestee->isOpened()); 77 ASSERT_TRUE(m_pTestee->isGood()); 78 79 ASSERT_EQ(0, m_pTestee->size()); 80 81 int close_result = ::close(fd); 82 int close_err = errno; 83 ASSERT_EQ(-1, close_result); 84 ASSERT_EQ(EBADF, close_err); 85} 86 87TEST_F(FileHandleTest, fail_close) { 88 mcld::sys::fs::Path path(TOPDIR); 89 path.append("unittests/test.txt"); 90 ASSERT_TRUE(m_pTestee->open(path, FileHandle::ReadOnly)); 91 ASSERT_TRUE(m_pTestee->isOpened()); 92 ASSERT_TRUE(m_pTestee->isGood()); 93 94 ASSERT_EQ(27, m_pTestee->size()); 95 96 int close_result = ::close(m_pTestee->handler()); 97 ASSERT_EQ(0, close_result); 98 99 ASSERT_FALSE(m_pTestee->close()); 100 ASSERT_FALSE(m_pTestee->isOpened()); 101 ASSERT_FALSE(m_pTestee->isGood()); 102} 103