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