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