#------------------------------------------------------------------------------
# elftools tests
#
# Anders Dellien (anders@andersdellien.se)
# This code is in the public domain
#------------------------------------------------------------------------------
import unittest
import os

from elftools.elf.elffile import ELFFile

class TestDieSize(unittest.TestCase):
    """ This test verifies that null DIEs are treated correctly - i.e.
        removed when we 'unflatten' the linear list and build a tree.
        The test file contains a CU with two non-null DIEs (both three bytes big),
        where the second one is followed by three null DIEs.
        We verify that the null DIEs are discarded and that the length of the second DIE
        does not include the null entries that follow it.
    """
    def test_die_size(self):
        with open(os.path.join('test',
                               'testfiles_for_unittests', 'trailing_null_dies.elf'),
                  'rb') as f:
            elffile = ELFFile(f)
            self.assertTrue(elffile.has_dwarf_info())
            dwarfinfo = elffile.get_dwarf_info()
            for CU in dwarfinfo.iter_CUs():
                 for child in CU.get_top_DIE().iter_children():
                     self.assertEqual(child.size, 3)

if __name__ == '__main__':
    unittest.main()
