More error prone CustomMenuBuilder
authorJakub Nesveda <jakubnesveda@seznam.cz>
Sun, 04 Jan 2015 16:00:31 +0100
changeset 796 1e98cf455d2d
parent 795 944c5812e702
child 797 7a2ee5cc3212
More error prone CustomMenuBuilder
CustomMenuBuilder.st
CustomMenuBuilderTests.st
--- 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 |