Esempio n. 1
0
 def test_absolute_ordering(self):
     """ Does specifying absolute_position work?
     """
     schema = MenuBarSchema(
         MenuSchema(
             GroupSchema(
                 self.action1, self.action2, id='FileGroup'),
             id='File'))
     extras = [
         SchemaAddition(
             factory=lambda: self.action3,
             absolute_position='last',
             path='MenuBar/File/FileGroup'), SchemaAddition(
                 factory=lambda: self.action4,
                 absolute_position='first',
                 path='MenuBar/File/FileGroup'), SchemaAddition(
                     factory=lambda: self.action5,
                     absolute_position='first',
                     path='MenuBar/File/FileGroup')
     ]
     builder = TaskActionManagerBuilder(task=Task(
         menu_bar=schema, extra_actions=extras))
     actual = builder.create_menu_bar_manager()
     desired = MenuBarManager(
         MenuManager(
             Group(
                 self.action4,
                 self.action5,
                 self.action1,
                 self.action2,
                 self.action3,
                 id='FileGroup'),
             id='File'),
         id='MenuBar')
     self.assertActionElementsEqual(actual, desired)
Esempio n. 2
0
 def test_additions_menu_bar(self):
     """ Does constructing a menu with a few additions work?
     """
     schema = MenuBarSchema(
         MenuSchema(
             GroupSchema(
                 self.action1, self.action2, id='FileGroup'),
             id='File'))
     extras = [
         SchemaAddition(
             factory=lambda: self.action3,
             before='action1',
             path='MenuBar/File/FileGroup'), SchemaAddition(
                 factory=lambda: self.action4,
                 before='action1',
                 path='MenuBar/File/FileGroup'), SchemaAddition(
                     factory=lambda: self.action5,
                     path='MenuBar/File/FileGroup')
     ]
     builder = TaskActionManagerBuilder(task=Task(
         menu_bar=schema, extra_actions=extras))
     actual = builder.create_menu_bar_manager()
     desired = MenuBarManager(
         MenuManager(
             Group(
                 self.action3,
                 self.action4,
                 self.action1,
                 self.action2,
                 self.action5,
                 id='FileGroup'),
             id='File'),
         id='MenuBar')
     self.assertActionElementsEqual(actual, desired)
Esempio n. 3
0
    def test_merging_redundant_items_that_are_not_schemas(self):
        """ Items that are not schemas cannot be merged, but we should
        not crash, either. """

        # Initial menu.
        schema = MenuBarSchema(
            # This menu is not a schema...
            MenuManager(Group(self.action1, id='FileGroup'), id='FileMenu'))

        # Contributed menus.
        extra_menu = MenuSchema(
            GroupSchema(self.action2, id='FileGroup'),
            id='FileMenu',
        )

        extra_actions = [
            SchemaAddition(path='MenuBar',
                           factory=lambda: extra_menu,
                           id='DummyActionsSMenu'),
        ]

        # Build the final menu.
        builder = TaskActionManagerBuilder(
            task=Task(menu_bar=schema, extra_actions=extra_actions))
        actual = builder.create_menu_bar_manager()

        desired = MenuBarManager(MenuManager(Group(self.action1,
                                                   id='FileGroup'),
                                             id='FileMenu'),
                                 MenuManager(Group(self.action2,
                                                   id='FileGroup'),
                                             id='FileMenu'),
                                 id='MenuBar')
        self.assertActionElementsEqual(actual, desired)
Esempio n. 4
0
    def test_merging_items_with_same_id_but_different_class(self):
        """ Schemas with the same path but different types (menus, groups)
        are not merged together.

        Having a group and a menu with the same path is of course bad practice,
        but we need a predictable outcome.

        """

        # Initial menu.
        schema = MenuBarSchema(
            MenuSchema(GroupSchema(self.action1, id='FileGroup'),
                       id='FileSchema'))

        # Contributed menus.
        extra_group = GroupSchema(self.action2, id='FileSchema')

        extra_actions = [
            SchemaAddition(path='MenuBar',
                           factory=(lambda: extra_group),
                           id='DummyActionsSMenu'),
        ]

        # Build the final menu.
        builder = TaskActionManagerBuilder(
            task=Task(menu_bar=schema, extra_actions=extra_actions))
        actual = builder.create_menu_bar_manager()

        desired = MenuBarManager(MenuManager(Group(self.action1,
                                                   id='FileGroup'),
                                             id='FileSchema'),
                                 Group(self.action2, id='FileSchema'),
                                 id='MenuBar')
        self.assertActionElementsEqual(actual, desired)
Esempio n. 5
0
    def test_extra_menu(self):
        """ Test contributing a whole new menu to the menu bar. """

        # Initial menu.
        schema = MenuBarSchema(
            MenuSchema(GroupSchema(self.action1, id='FileGroup'),
                       id='FileMenu'))

        # Contributed menu.
        extra_menu = MenuSchema(
            GroupSchema(self.action2, id='BarGroup'),
            id='DummyActionsMenu',
        )

        extra_actions = [
            SchemaAddition(path='MenuBar',
                           factory=lambda: extra_menu,
                           id='DummyActionsSMenu'),
        ]

        # Build the final menu.
        builder = TaskActionManagerBuilder(
            task=Task(menu_bar=schema, extra_actions=extra_actions))
        actual = builder.create_menu_bar_manager()

        desired = MenuBarManager(MenuManager(Group(self.action1,
                                                   id='FileGroup'),
                                             id='FileMenu'),
                                 MenuManager(Group(self.action2,
                                                   id='BarGroup'),
                                             id='DummyActionsMenu'),
                                 id='MenuBar')

        self.assertActionElementsEqual(actual, desired)
Esempio n. 6
0
 def test_absolute_and_before_after(self):
     """ Does specifying absolute_position along with before, after work?
     """
     schema = MenuBarSchema(
         MenuSchema(
             GroupSchema(self.action1, self.action2, id="FileGroup"),
             id="File",
         ))
     extras = [
         SchemaAddition(
             factory=lambda: self.action3,
             id="action3",
             after="action2",
             path="MenuBar/File/FileGroup",
         ),
         SchemaAddition(
             factory=lambda: self.action4,
             after="action3",
             path="MenuBar/File/FileGroup",
         ),
         SchemaAddition(
             factory=lambda: self.action5,
             id="action5",
             absolute_position="last",
             path="MenuBar/File/FileGroup",
         ),
         SchemaAddition(
             factory=lambda: self.action6,
             absolute_position="last",
             before="action5",
             path="MenuBar/File/FileGroup",
         ),
     ]
     builder = TaskActionManagerBuilder(
         task=Task(menu_bar=schema, extra_actions=extras))
     actual = builder.create_menu_bar_manager()
     desired = MenuBarManager(
         MenuManager(
             Group(
                 self.action1,
                 self.action2,
                 self.action3,
                 self.action4,
                 self.action6,
                 self.action5,
                 id="FileGroup",
             ),
             id="File",
         ),
         id="MenuBar",
     )
     self.assertActionElementsEqual(actual, desired)
 def test_simple_menu_bar(self):
     """ Does constructing a simple menu with no additions work?
     """
     schema = MenuBarSchema(
         MenuSchema(self.action1, self.action2, id='File', name='&File'),
         MenuSchema(self.action3, self.action4, id='Edit', name='&Edit'))
     builder = TaskActionManagerBuilder(task=Task(menu_bar=schema))
     actual = builder.create_menu_bar_manager()
     desired = MenuBarManager(MenuManager(self.action1, self.action2,
                                          id='File', name='&File'),
                              MenuManager(self.action3, self.action4,
                                          id='Edit', name='&Edit'),
                              id='MenuBar')
     self.assertActionElementsEqual(actual, desired)
Esempio n. 8
0
    def test_unwanted_merge(self):
        """ Test that we don't have automatic merges due to forgetting to set
        a schema ID. """

        # Initial menu.
        schema = MenuBarSchema(
            MenuSchema(
                GroupSchema(
                    self.action1, id='FileGroup'), name='File 1'))

        # Contributed menus.
        extra_menu = MenuSchema(
            GroupSchema(
                self.action2, id='FileGroup'), name='File 2')

        extra_actions = [
            SchemaAddition(
                path='MenuBar',
                factory=lambda: extra_menu,
                id='DummyActionsSMenu'),
        ]

        # Build the final menu.
        builder = TaskActionManagerBuilder(task=Task(
            menu_bar=schema, extra_actions=extra_actions))
        actual = builder.create_menu_bar_manager()

        # Note that we expect the name of the menu to be inherited from
        # the menu in the menu bar schema that is defined first.
        desired = MenuBarManager(
            MenuManager(
                Group(
                    self.action1, id='FileGroup'),
                name='File 1',
                id='MenuSchema_1'),
            MenuManager(
                Group(
                    self.action2, id='FileGroup'),
                name='File 2',
                id='MenuSchema_2'),
            id='MenuBar')
        self.assertActionElementsEqual(actual, desired)
Esempio n. 9
0
    def test_merging_redundant_items(self):
        """ Menus and groups with matching path are merged together. """

        # Initial menu.
        schema = MenuBarSchema(
            MenuSchema(
                GroupSchema(self.action1, id="FileGroup"),
                name="File menu number one",
                id="FileMenu",
            ))

        # Contributed menus.
        extra_menu = MenuSchema(
            GroupSchema(self.action2, id="FileGroup"),
            name="File menu number two",
            id="FileMenu",
        )

        extra_actions = [
            SchemaAddition(
                path="MenuBar",
                factory=lambda: extra_menu,
                id="DummyActionsSMenu",
            )
        ]

        # Build the final menu.
        builder = TaskActionManagerBuilder(
            task=Task(menu_bar=schema, extra_actions=extra_actions))
        actual = builder.create_menu_bar_manager()

        # Note that we expect the name of the menu to be inherited from
        # the menu in the menu bar schema that is defined first.
        desired = MenuBarManager(
            MenuManager(
                Group(self.action1, self.action2, id="FileGroup"),
                name="File menu number one",
                id="FileMenu",
            ),
            id="MenuBar",
        )
        self.assertActionElementsEqual(actual, desired)