Orb/python/orb/mapcreators/toplevel.py
author Jonathan Harrington <jonathan.harrington@nokia.com>
Wed, 11 Aug 2010 14:49:30 +0100
changeset 4 468f4c8d3d5b
permissions -rw-r--r--
Orb version 0.2.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
     1
# Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
     2
# All rights reserved.
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
     3
# This component and the accompanying materials are made available
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
     4
# under the terms of the License "Eclipse Public License v1.0"
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
     5
# which accompanies this distribution, and is available
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
     6
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
     7
#
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
     8
# Initial Contributors:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
     9
# Nokia Corporation - initial contribution.
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    10
#
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    11
# Contributors:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    12
#
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    13
from __future__ import with_statement
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    14
try:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    15
    from xml.etree import cElementTree as etree
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    16
except ImportError:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    17
    from xml.etree import ElementTree as etree
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    18
from orb.lib import xml_decl
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    19
import logging
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    20
import os
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    21
import copy
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    22
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    23
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    24
logger = logging.getLogger('orb.mapcreators.toplevel')
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    25
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    26
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    27
def component_map_lookup(rel_dir, mapname):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    28
    "Checks the file system to see if a component level map exists"
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    29
    exists = os.path.exists(os.path.join(rel_dir, mapname))
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    30
    if not exists:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    31
        logger.debug("Asked for a component map for '%s' but it does not exist" % mapname)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    32
    return exists
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    33
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    34
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    35
class TopLevelMapCreator(object):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    36
    """
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    37
    Uses the information in a SystemDefinition object to create a top level map that
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    38
    links to all the component level maps together.
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    39
    """
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    40
    def __init__(self, sysdef, rel_dir, lookupmethod=component_map_lookup):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    41
        self.sysdef = sysdef
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    42
        self._rel_dir = rel_dir
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    43
        self._lookup = lookupmethod
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    44
        self._root = etree.Element("map", title=sysdef.name, id=sysdef.name)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    45
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    46
    def _add_subelems(self, parent, item):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    47
        return etree.SubElement(parent, "topichead", navtitle=item.name, id=item.id)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    48
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    49
    def getmap(self):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    50
        def sort(item):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    51
            return item.name
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    52
        layers = self.sysdef.layers
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    53
        layers.sort(key=sort)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    54
        for layer in layers:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    55
            layer_elem = self._add_subelems(self._root, layer)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    56
            packages = layer.packages
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    57
            packages.sort(key=sort)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    58
            for package in packages:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    59
                pkg_elem = self._add_subelems(layer_elem, package)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    60
                collections = package.collections
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    61
                collections.sort(key=sort)                
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    62
                for collection in collections:                    
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    63
                    col_elem = self._add_subelems(pkg_elem, collection)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    64
                    components = collection.components
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    65
                    components.sort(key=sort)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    66
                    for item in components:                        
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    67
                        if self._lookup(self._rel_dir, "cmp_%s.ditamap" % item.id):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    68
                            col_header = self._add_subelems(col_elem, item) 
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    69
                            etree.SubElement(col_header, "topicref", navtitle=item.name, href="cmp_%s.ditamap" % item.id, format="ditamap")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    70
        self._remove_empty_headings()
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    71
        return self._root
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    72
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    73
    def write(self, path):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    74
        with open(path, "w") as f:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    75
            f.write(xml_decl()+"\n")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    76
            f.write(etree.tostring(self.getmap()))
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    77
            
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    78
    def _remove_empty_headings(self):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    79
        new_root = copy.deepcopy(self._root)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    80
        empty_nodes = True
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    81
        nodes_removed = 0
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    82
        while empty_nodes:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    83
            nodes_removed = 0
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    84
            for parent, newparent in zip(self._root.getiterator(), new_root.getiterator()):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    85
                for child, newchild in zip(parent, newparent):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    86
                    if len(list(child)) == 0 and not 'href' in child.attrib:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    87
                        newparent.remove(newchild)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    88
                        nodes_removed += 1
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    89
            self._root = copy.deepcopy(new_root)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    90
            if nodes_removed == 0:
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    91
                empty_nodes = False
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    92
        self._root = new_root  
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    93
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    94
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    95
################################################################
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    96
# Unit test code
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    97
################################################################
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    98
import unittest
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
    99
from _shared import StubSysdef
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   100
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   101
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   102
def mock_component_map_lookup(mapname, rel_dir):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   103
    return True
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   104
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   105
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   106
class TestTopLevelMapCreator(unittest.TestCase):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   107
    def setUp(self):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   108
        self.mc = TopLevelMapCreator(StubSysdef(), ".", mock_component_map_lookup)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   109
        
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   110
    def test_i_create_a_map_root_from_a_system_definition(self):                
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   111
        root = self.mc.getmap()
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   112
        self.assertTrue(root.tag == "map")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   113
        self.assertTrue(root.attrib['title'] == "Symbian^3")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   114
        self.assertTrue(root.attrib['id'] == "Symbian^3")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   115
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   116
    def test_i_create_correct_topicheads_from_layers(self):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   117
        root = self.mc.getmap()
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   118
        self.assertEquals(len(root.findall("topichead")), 1)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   119
        os_elem = root.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   120
        self.assertEqual(os_elem.attrib["navtitle"], "OS")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   121
        self.assertEqual(os_elem.attrib["id"], "os")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   122
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   123
    def test_i_create_correct_topicheads_from_packages(self):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   124
        root = self.mc.getmap()
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   125
        os_elem = root.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   126
        self.assertEquals(len(os_elem.findall("topichead")), 1)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   127
        pkg_elem = os_elem.findall("topichead")[0]        
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   128
        self.assertEqual(pkg_elem.attrib["navtitle"], "Kernel and Hardware Services")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   129
        self.assertEqual(pkg_elem.attrib["id"], "kernelhwsrv")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   130
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   131
    def test_i_create_correct_topicheads_from_collections(self):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   132
        root = self.mc.getmap()
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   133
        os_elem = root.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   134
        pkg_elem = os_elem.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   135
        self.assertEquals(len(pkg_elem.findall("topichead")), 1)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   136
        bootldr_elem = pkg_elem.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   137
        self.assertEqual(bootldr_elem.attrib["navtitle"], "Board Boot Loader")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   138
        self.assertEqual(bootldr_elem.attrib["id"], "brdbootldr")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   139
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   140
    def test_i_create_correct_topicheads_for_components(self):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   141
        root = self.mc.getmap()
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   142
        os_elem = root.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   143
        pkg_elem = os_elem.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   144
        com_elem = pkg_elem.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   145
        comp_elem_header = com_elem.findall("topichead")[0]        
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   146
        self.assertEqual(comp_elem_header.attrib["navtitle"], "Boot Loader")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   147
        self.assertEqual(comp_elem_header.attrib["id"], "ubootldr")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   148
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   149
    def test_i_create_correct_topicrefs_from_components(self):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   150
        root = self.mc.getmap()
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   151
        os_elem = root.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   152
        pkg_elem = os_elem.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   153
        comp_elem = pkg_elem.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   154
        comp_elem_header = comp_elem.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   155
        self.assertEquals(len(comp_elem_header.findall("topicref")), 1)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   156
        ubootldr_elem = comp_elem_header.findall("topicref")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   157
        self.assertEqual(ubootldr_elem.attrib["navtitle"], "Boot Loader")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   158
        self.assertEqual(ubootldr_elem.attrib["href"], "cmp_ubootldr.ditamap")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   159
        self.assertEqual(ubootldr_elem.attrib["format"], "ditamap")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   160
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   161
    def test_i_can_remove_empty_headings_from_a_top_level_map(self):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   162
        self.mc._root = etree.fromstring(empty_headings_toc)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   163
        self.mc._remove_empty_headings()
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   164
        self.assertEquals(etree.tostring(self.mc._root), removed_empty_headings_toc)
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   165
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   166
    def test_i_sort_the_map(self):
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   167
        root = self.mc.getmap()
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   168
        os_elem = root.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   169
        pkg_elem = os_elem.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   170
        com_elem = pkg_elem.findall("topichead")[0]
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   171
        comp_elem_header = com_elem.findall("topichead")[0]        
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   172
        self.assertEqual(comp_elem_header.attrib["navtitle"], "Boot Loader")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   173
        comp_elem_header = com_elem.findall("topichead")[1]        
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   174
        self.assertEqual(comp_elem_header.attrib["navtitle"], "Kernel Architecture")
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   175
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   176
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   177
empty_headings_toc = """\
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   178
<map id="Symbian^3" title="Symbian^3">
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   179
  <topichead id="os" navtitle="OS" >
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   180
    <topichead id="kernelhwsrv" navtitle="Kernel and Hardware Services">
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   181
      <topichead id="brdbootldr" navtitle="Board Boot Loader">
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   182
        <topichead id="ubootldr" navtitle="Boot Loader"/>
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   183
      </topichead>
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   184
      <topichead id="bsptemplate" navtitle="Board Support Package Template">
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   185
        <topichead id="asspandvariant" navtitle="Template ASSP and Variant">
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   186
          <topicref format="ditamap" href="cmp_template_variant.ditamap" navtitle="template_variant" />
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   187
        </topichead>
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   188
      </topichead>      
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   189
    </topichead>
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   190
  </topichead>
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   191
</map>"""
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   192
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   193
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   194
removed_empty_headings_toc = """\
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   195
<map id="Symbian^3" title="Symbian^3">
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   196
  <topichead id="os" navtitle="OS">
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   197
    <topichead id="kernelhwsrv" navtitle="Kernel and Hardware Services">
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   198
      <topichead id="bsptemplate" navtitle="Board Support Package Template">
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   199
        <topichead id="asspandvariant" navtitle="Template ASSP and Variant">
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   200
          <topicref format="ditamap" href="cmp_template_variant.ditamap" navtitle="template_variant" />
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   201
        </topichead>
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   202
      </topichead>      
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   203
    </topichead>
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   204
  </topichead>
468f4c8d3d5b Orb version 0.2.0
Jonathan Harrington <jonathan.harrington@nokia.com>
parents:
diff changeset
   205
</map>"""