'Assert that a directory is equivalent to one described by a dict.
@param root: The filesystem directory to compare.
@type root: L{FilePath}
@param dirDict: The dict that should describe the contents of the
directory. It should be the same structure as the C{dirDict}
parameter to L{createStructure}.
@type dirDict: C{dict}'

def assertStructure(self, root, dirDict):

    children = [each.basename() for each in root.children()]
    for (pathSegment, expectation) in dirDict.items():
        child = root.child(pathSegment)
        if callable(expectation):
            self.assertTrue(expectation(child))
        elif isinstance(expectation, dict):
            self.assertTrue(child.isdir(), '{}    is    not    a    dir!'.format(child.path))
            self.assertStructure(child, expectation)
        else:
            actual = child.getContent().decode('utf-8').replace(os.linesep, u'\n')
            self.assertEqual(actual, expectation)
        children.remove(pathSegment)
    if children:
        self.fail(('There    were    extra    children    in    %s:    %s' % (root.path, children)))
