Home | History | Annotate | Download | only in unittests
      1 //===- InputTreeTest.cpp --------------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 #include "mcld/MC/MCLDInputTree.h"
     10 #include "mcld/MC/MCLDInfo.h"
     11 #include <InputTreeTest.h>
     12 
     13 using namespace mcld;
     14 using namespace mcldtest;
     15 
     16 
     17 // Constructor can do set-up work for all test here.
     18 InputTreeTest::InputTreeTest()
     19 {
     20 	// create testee. modify it if need
     21 	m_pAttr = new mcld::AttributeFactory(2);
     22         m_pAlloc = new mcld::InputFactory(10, *m_pAttr);
     23 	m_pTestee = new InputTree(*m_pAlloc);
     24 }
     25 
     26 // Destructor can do clean-up work that doesn't throw exceptions here.
     27 InputTreeTest::~InputTreeTest()
     28 {
     29 	delete m_pTestee;
     30 	delete m_pAlloc;
     31 	delete m_pAttr;
     32 }
     33 
     34 // SetUp() will be called immediately before each test.
     35 void InputTreeTest::SetUp()
     36 {
     37 }
     38 
     39 // TearDown() will be called immediately after each test.
     40 void InputTreeTest::TearDown()
     41 {
     42 }
     43 
     44 //==========================================================================//
     45 // Testcases
     46 //
     47 TEST_F( InputTreeTest, Basic_operation ) {
     48   InputTree::iterator node = m_pTestee->root();
     49   m_pTestee->insert<InputTree::Inclusive>(node, "FileSpec", "path1");
     50 
     51   InputTree::const_iterator const_node = node;
     52 
     53   ASSERT_TRUE(isGroup(node));
     54   ASSERT_TRUE(isGroup(const_node));
     55   ASSERT_TRUE(m_pTestee->hasInput());
     56   ASSERT_EQ(1, m_pTestee->numOfInputs());
     57 
     58   --node;
     59 
     60   m_pTestee->enterGroup(node, InputTree::Downward);
     61 
     62   InputTree::const_iterator const_node2 = node;
     63 
     64   ASSERT_FALSE(node.isRoot());
     65 
     66   ASSERT_FALSE(isGroup(node));
     67   ASSERT_FALSE(isGroup(const_node2));
     68   ASSERT_TRUE(m_pTestee->hasInput());
     69   ASSERT_FALSE(m_pTestee->numOfInputs()==0);
     70 
     71   ASSERT_TRUE(m_pTestee->size()==2);
     72 }
     73 
     74 TEST_F( InputTreeTest, forLoop_TEST ) {
     75   InputTree::iterator node = m_pTestee->root();
     76 
     77 
     78   m_pTestee->insert<InputTree::Inclusive>(node, "FileSpec", "path1");
     79   InputTree::const_iterator const_node = node;
     80   --node;
     81 
     82   for(int i=0 ; i<100 ; ++i)
     83   {
     84     m_pTestee->insert<InputTree::Inclusive>(node,"FileSpec", "path1");
     85     ++node;
     86   }
     87 
     88   m_pTestee->enterGroup(node, InputTree::Downward);
     89   --node;
     90 
     91   ASSERT_FALSE(node.isRoot());
     92   ASSERT_TRUE(isGroup(node));
     93   ASSERT_TRUE(m_pTestee->hasInput());
     94   ASSERT_FALSE(m_pTestee->numOfInputs()==100);
     95 
     96   ASSERT_TRUE(m_pTestee->size()==102);
     97 }
     98 
     99 TEST_F( InputTreeTest, Nesting_Case ) {
    100   InputTree::iterator node = m_pTestee->root();
    101 
    102   for(int i=0 ; i<50 ; ++i)
    103   {
    104     m_pTestee->enterGroup(node, InputTree::Downward);
    105     --node;
    106 
    107     m_pTestee->insert(node, InputTree::Afterward, "FileSpec", "path1");
    108     ++node;
    109   }
    110 
    111   ASSERT_FALSE(node.isRoot());
    112   ASSERT_FALSE(isGroup(node));
    113   ASSERT_TRUE(m_pTestee->hasInput());
    114   ASSERT_TRUE(m_pTestee->numOfInputs()==50);
    115   ASSERT_TRUE(m_pTestee->size()==100);
    116 }
    117 
    118 TEST_F( InputTreeTest, DFSIterator_BasicTraversal)
    119 {
    120 
    121   InputTree::iterator node = m_pTestee->root();
    122   m_pTestee->insert<InputTree::Inclusive>(node, "111", "/");
    123   node.move<InputTree::Inclusive>();
    124 
    125   m_pTestee->insert<InputTree::Positional>(node, "10", "/");
    126   m_pTestee->enterGroup<InputTree::Inclusive>(node);
    127   node.move<InputTree::Inclusive>();
    128   m_pTestee->insert<InputTree::Inclusive>(node, "7", "/");
    129   m_pTestee->insert<InputTree::Positional>(node, "8", "/");
    130 
    131   InputTree::dfs_iterator dfs_it = m_pTestee->dfs_begin();
    132   InputTree::dfs_iterator dfs_end = m_pTestee->dfs_end();
    133   ASSERT_STREQ("111", (*dfs_it)->name().c_str());
    134   ++dfs_it;
    135   ASSERT_STREQ("7", (**dfs_it).name().c_str());
    136   ++dfs_it;
    137   ASSERT_STREQ("8", (**dfs_it).name().c_str());
    138   ++dfs_it;
    139   ASSERT_STREQ("10", (**dfs_it).name().c_str());
    140   ++dfs_it;
    141   ASSERT_TRUE(dfs_it ==  dfs_end);
    142 }
    143 
    144