1affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===- implTest.cpp -------------------------------------------------------===// 2affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 3affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// The MCLinker Project 4affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 5affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// This file is distributed under the University of Illinois Open Source 6affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// License. See LICENSE.TXT for details. 7affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 8affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===// 9affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Support/FileHandle.h> 10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Support/Path.h> 11affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <fcntl.h> 12affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <errno.h> 13affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include "FileHandleTest.h" 14affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 15affc150dc44fab1911775a49636d0ce85333b634Zonr Changusing namespace mcld; 16affc150dc44fab1911775a49636d0ce85333b634Zonr Changusing namespace mcldtest; 17affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 18affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 19affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// Constructor can do set-up work for all test here. 20affc150dc44fab1911775a49636d0ce85333b634Zonr ChangFileHandleTest::FileHandleTest() 21affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{ 22affc150dc44fab1911775a49636d0ce85333b634Zonr Chang // create testee. modify it if need 23affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_pTestee = new FileHandle(); 24affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 25affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 26affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// Destructor can do clean-up work that doesn't throw exceptions here. 27affc150dc44fab1911775a49636d0ce85333b634Zonr ChangFileHandleTest::~FileHandleTest() 28affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{ 29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang delete m_pTestee; 30affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 32affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// SetUp() will be called immediately before each test. 33affc150dc44fab1911775a49636d0ce85333b634Zonr Changvoid FileHandleTest::SetUp() 34affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{ 35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// TearDown() will be called immediately after each test. 38affc150dc44fab1911775a49636d0ce85333b634Zonr Changvoid FileHandleTest::TearDown() 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{ 40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===// 43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// Testcases 44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <iostream> 45affc150dc44fab1911775a49636d0ce85333b634Zonr Changusing namespace std; 46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 47affc150dc44fab1911775a49636d0ce85333b634Zonr ChangTEST_F(FileHandleTest, open_close) { 48affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::sys::fs::Path path(TOPDIR); 49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang path.append("unittests/test.txt"); 50affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->open(path, FileHandle::ReadOnly)); 51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isOpened()); 52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_EQ(27, m_pTestee->size()); 55affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->close()); 57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isOpened()); 58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 59affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_EQ(0, m_pTestee->size()); 61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 63affc150dc44fab1911775a49636d0ce85333b634Zonr ChangTEST_F(FileHandleTest, delegate_close) { 64affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::sys::fs::Path path(TOPDIR); 65affc150dc44fab1911775a49636d0ce85333b634Zonr Chang path.append("unittests/test.txt"); 66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 67affc150dc44fab1911775a49636d0ce85333b634Zonr Chang int fd = ::open(path.native().c_str(), O_RDONLY); 68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 69affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->delegate(fd, FileHandle::ReadOnly)); 70affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isOpened()); 71affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 72affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 73affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_EQ(27, m_pTestee->size()); 74affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 75affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->close()); 76affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isOpened()); 77affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 78affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 79affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_EQ(0, m_pTestee->size()); 80affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 81affc150dc44fab1911775a49636d0ce85333b634Zonr Chang int close_result = ::close(fd); 82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang int close_err = errno; 83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_EQ(-1, close_result); 84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_EQ(EBADF, close_err); 85affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 86affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 87affc150dc44fab1911775a49636d0ce85333b634Zonr ChangTEST_F(FileHandleTest, fail_close) { 88affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::sys::fs::Path path(TOPDIR); 89affc150dc44fab1911775a49636d0ce85333b634Zonr Chang path.append("unittests/test.txt"); 90affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->open(path, FileHandle::ReadOnly)); 91affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isOpened()); 92affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 93affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_EQ(27, m_pTestee->size()); 95affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 96affc150dc44fab1911775a49636d0ce85333b634Zonr Chang int close_result = ::close(m_pTestee->handler()); 97affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_EQ(0, close_result); 98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 99affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->close()); 100affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isOpened()); 101affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isGood()); 102affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 103