--- a/CustomMenuBuilder.st Sun Jan 04 15:29:46 2015 +0100
+++ b/CustomMenuBuilder.st Sun Jan 04 16:00:31 2015 +0100
@@ -198,6 +198,10 @@
buildMenu
| item context submenuChannel |
+ (menu isNil or: [ perspective isNil ]) ifTrue: [
+ self error: 'Attributes named menu and perspective are required.'
+ ].
+
item := MenuItem label: (resources string: submenuLabel).
context := CustomBrowserContext
perspective: perspective
@@ -214,7 +218,7 @@
]
"Created: / 27-12-2014 / 17:20:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 28-12-2014 / 10:06:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 04-01-2015 / 15:57:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
buildMenuForContext: context filter: filter
--- a/CustomMenuBuilderTests.st Sun Jan 04 15:29:46 2015 +0100
+++ b/CustomMenuBuilderTests.st Sun Jan 04 16:00:31 2015 +0100
@@ -204,6 +204,63 @@
"Modified: / 04-01-2015 / 15:08:14 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
+test_build_menu_two_generators_empty_builder
+
+ self
+ addGenerator: 'Generator_01' group: #();
+ addGenerator: 'Generator_02' group: #();
+ addGenerator: 'Generator_03' group: #().
+
+ "Create some methods which actually uses context and perspective to be sure that they are correctly created"
+ provider last
+ compileMockMethod: 'availableInPerspective: perspective ^ perspective isClassPerspective';
+ compileMockMethod: 'availableInContext: context ^ context selectedClasses first name == #CustomMenuBuilderTests'.
+
+ self should: [
+ builder buildMenu
+ ] raise: Error suchThat: [ :error |
+ (error description) = 'Attributes named menu and perspective are required.'
+ ].
+
+ "Created: / 04-01-2015 / 15:31:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_build_menu_two_generators_empty_label
+ | expectedMenu actualMenu navigationState |
+
+ expectedMenu := {
+ 'Label_01'.
+ 'Label_02'.
+ 'Label_03'.
+ 'Unknown menu label'.
+ {'Generator_01'. 'Generator_02'. 'Generator_03'}
+ }.
+
+ self
+ addGenerator: 'Generator_01' group: #();
+ addGenerator: 'Generator_02' group: #();
+ addGenerator: 'Generator_03' group: #().
+
+ "Create some methods which actually uses context and perspective to be sure that they are correctly created"
+ provider last
+ compileMockMethod: 'availableInPerspective: perspective ^ perspective isClassPerspective';
+ compileMockMethod: 'availableInContext: context ^ context selectedClasses first name == #CustomMenuBuilderTests'.
+
+ navigationState := Tools::NavigationState new.
+ navigationState selectedClasses value: {CustomMenuBuilderTests}.
+
+ builder
+ perspective: CustomPerspective classPerspective;
+ menu: menu;
+ buildMenu.
+
+ actualMenu := self menuItemLabels.
+
+ self assert: expectedMenu = actualMenu
+
+ "Created: / 04-01-2015 / 15:44:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
test_build_menu_two_generators_without_filter
| expectedMenu actualMenu navigationState |
@@ -306,6 +363,22 @@
"Modified (format): / 28-12-2014 / 21:54:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
+test_place_menu_item_after_menu_item_labeled_for_menu_item_empty
+ | menuItem expectedMenuItemLabels actualMenuItemLabels |
+
+ menuItem := MenuItem label: 'SomeLabel'.
+
+ expectedMenuItemLabels := {'Label_01'. 'Label_02'. 'Label_03'. 'SomeLabel'}.
+
+ builder placeMenuItem: menuItem afterMenuItemLabeled: nil forMenu: menu.
+
+ actualMenuItemLabels := self menuItemLabels.
+
+ self assert: expectedMenuItemLabels = actualMenuItemLabels
+
+ "Created: / 04-01-2015 / 15:41:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
test_place_menu_item_after_menu_item_labeled_for_menu_item_found
| menuItem expectedMenuItemLabels actualMenuItemLabels |