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 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 45affc150dc44fab1911775a49636d0ce85333b634Zonr ChangTEST_F(FileHandleTest, open_close) { 46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::sys::fs::Path path(TOPDIR); 47affc150dc44fab1911775a49636d0ce85333b634Zonr Chang path.append("unittests/test.txt"); 48affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->open(path, FileHandle::ReadOnly)); 49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isOpened()); 50affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_TRUE(m_pTestee->isOwned()); 52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(27 == m_pTestee->size()); 54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 55affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->close()); 56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isOpened()); 57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(0 == m_pTestee->size()); 60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 62affc150dc44fab1911775a49636d0ce85333b634Zonr ChangTEST_F(FileHandleTest, delegate_close) { 63affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::sys::fs::Path path(TOPDIR); 64affc150dc44fab1911775a49636d0ce85333b634Zonr Chang path.append("unittests/test.txt"); 65affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang int fd = ::open(path.native().c_str(), O_RDONLY); 67affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->delegate(fd, FileHandle::ReadOnly)); 69affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isOpened()); 70affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 716f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_FALSE(m_pTestee->isOwned()); 72affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(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()); 786f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_TRUE(m_pTestee->isOwned()); 79affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 8022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(0 == m_pTestee->size()); 81affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang int close_result = ::close(fd); 836f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_EQ(0, close_result); 84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 85affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 86affc150dc44fab1911775a49636d0ce85333b634Zonr ChangTEST_F(FileHandleTest, fail_close) { 87affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::sys::fs::Path path(TOPDIR); 88affc150dc44fab1911775a49636d0ce85333b634Zonr Chang path.append("unittests/test.txt"); 89affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->open(path, FileHandle::ReadOnly)); 90affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isOpened()); 91affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 92affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 9322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(27 == m_pTestee->size()); 94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 95affc150dc44fab1911775a49636d0ce85333b634Zonr Chang int close_result = ::close(m_pTestee->handler()); 96affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_EQ(0, close_result); 97affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->close()); 99affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isOpened()); 100affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isGood()); 101affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 102