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//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/FileHandle.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#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// Constructor can do set-up work for all test here. 1937b74a387bb3993387029859c2d9d051c41c724eStephen HinesFileHandleTest::FileHandleTest() { 20affc150dc44fab1911775a49636d0ce85333b634Zonr Chang // create testee. modify it if need 21affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_pTestee = new FileHandle(); 22affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 23affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 24affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// Destructor can do clean-up work that doesn't throw exceptions here. 2537b74a387bb3993387029859c2d9d051c41c724eStephen HinesFileHandleTest::~FileHandleTest() { 26affc150dc44fab1911775a49636d0ce85333b634Zonr Chang delete m_pTestee; 27affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 28affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// SetUp() will be called immediately before each test. 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid FileHandleTest::SetUp() { 31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 32affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// TearDown() will be called immediately after each test. 3437b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid FileHandleTest::TearDown() { 35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===// 38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// Testcases 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 40affc150dc44fab1911775a49636d0ce85333b634Zonr ChangTEST_F(FileHandleTest, open_close) { 41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::sys::fs::Path path(TOPDIR); 42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang path.append("unittests/test.txt"); 4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(m_pTestee->open(path, FileHandle::OpenMode(FileHandle::ReadOnly), 4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines FileHandle::Permission(FileHandle::System))); 45affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isOpened()); 46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_TRUE(m_pTestee->isOwned()); 48affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(27 == m_pTestee->size()); 50affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->close()); 52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isOpened()); 53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(0 == m_pTestee->size()); 56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 58affc150dc44fab1911775a49636d0ce85333b634Zonr ChangTEST_F(FileHandleTest, delegate_close) { 59affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::sys::fs::Path path(TOPDIR); 60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang path.append("unittests/test.txt"); 61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang int fd = ::open(path.native().c_str(), O_RDONLY); 63affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 64affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->delegate(fd, FileHandle::ReadOnly)); 65affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isOpened()); 66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 676f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_FALSE(m_pTestee->isOwned()); 68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(27 == m_pTestee->size()); 70affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 71affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->close()); 72affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isOpened()); 73affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 746f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_TRUE(m_pTestee->isOwned()); 75affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(0 == m_pTestee->size()); 77affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 78affc150dc44fab1911775a49636d0ce85333b634Zonr Chang int close_result = ::close(fd); 796f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_EQ(0, close_result); 80affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 81affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 82affc150dc44fab1911775a49636d0ce85333b634Zonr ChangTEST_F(FileHandleTest, fail_close) { 83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::sys::fs::Path path(TOPDIR); 84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang path.append("unittests/test.txt"); 8537b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(m_pTestee->open(path, FileHandle::OpenMode(FileHandle::ReadOnly), 8637b74a387bb3993387029859c2d9d051c41c724eStephen Hines FileHandle::Permission(FileHandle::System))); 87affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isOpened()); 88affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_TRUE(m_pTestee->isGood()); 89affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 9022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(27 == m_pTestee->size()); 91affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 92affc150dc44fab1911775a49636d0ce85333b634Zonr Chang int close_result = ::close(m_pTestee->handler()); 93affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_EQ(0, close_result); 94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 95affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->close()); 96affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isOpened()); 97affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ASSERT_FALSE(m_pTestee->isGood()); 98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 99