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") additions = [ SchemaAddition( path="MenuBar", factory=lambda: extra_menu, id="DummyActionsSMenu", ) ] # Build the final menu. builder = ActionManagerBuilder(additions=additions) actual = builder.create_action_manager(schema) desired = MenuBarManager( MenuManager(Group(self.action1, id="FileGroup"), id="FileMenu"), MenuManager(Group(self.action2, id="BarGroup"), id="DummyActionsMenu"), 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 = ActionManagerBuilder() actual = builder.create_action_manager(schema) 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)
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") additions = [ SchemaAddition( path="MenuBar", factory=lambda: extra_menu, id="DummyActionsSMenu", ) ] # Build the final menu. builder = ActionManagerBuilder(additions=additions) actual = builder.create_action_manager(schema) desired = MenuBarManager( MenuManager(Group(self.action1, id="FileGroup"), id="FileMenu"), MenuManager(Group(self.action2, id="FileGroup"), id="FileMenu"), id="MenuBar", ) self.assertActionElementsEqual(actual, desired)
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") additions = [ SchemaAddition( path="MenuBar", factory=(lambda: extra_group), id="DummyActionsSMenu", ) ] # Build the final menu. builder = ActionManagerBuilder(additions=additions) actual = builder.create_action_manager(schema) desired = MenuBarManager( MenuManager(Group(self.action1, id="FileGroup"), id="FileSchema"), Group(self.action2, id="FileSchema"), id="MenuBar", ) self.assertActionElementsEqual(actual, desired)
def test_unwanted_merge(self): """ Test that we don't have automatic merges due to forgetting to set a schema ID. """ with self.unique_id_context_manager(): # 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") additions = [ SchemaAddition( path="MenuBar", factory=lambda: extra_menu, id="DummyActionsSMenu", ) ] # Build the final menu. builder = ActionManagerBuilder(additions=additions) actual = builder.create_action_manager(schema) # 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)
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)
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_absolute_ordering(self): """ Does specifying absolute_position work? """ schema = MenuBarSchema( MenuSchema( GroupSchema(self.action1, self.action2, id="FileGroup"), id="File", )) additions = [ 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 = ActionManagerBuilder(additions=additions) actual = builder.create_action_manager(schema) desired = MenuBarManager( MenuManager( Group( self.action4, self.action5, self.action1, self.action2, self.action3, id="FileGroup", ), id="File", ), id="MenuBar", ) self.assertActionElementsEqual(actual, desired)
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)